Updated
This commit is contained in:
@@ -11,7 +11,8 @@ public class FLESH : ModuleRules
|
||||
PublicIncludePaths.AddRange(
|
||||
new string[] {
|
||||
// ... add public include paths required here ...
|
||||
"$(EngineDir)/Plugins/Experimental/GeometryScripting/Source/GeometryScriptingCore/Public"
|
||||
"$(EngineDir)/Plugins/Experimental/GeometryScripting/Source/GeometryScriptingCore/Public",
|
||||
"$(EngineDir)/Plugins/Experimental/GeometryScripting/Source/GeometryScriptingEditor/Public"
|
||||
}
|
||||
);
|
||||
|
||||
|
@@ -3,11 +3,13 @@
|
||||
#include "Engine/SkeletalMesh.h"
|
||||
#include "ProceduralMeshComponent.h"
|
||||
#include "Materials/MaterialInterface.h"
|
||||
#include "GeometryScriptingCore.h"
|
||||
#include "GeometryScript/MeshBooleanFunctions.h"
|
||||
#include "GeometryScript/MeshPrimitiveFunctions.h"
|
||||
#include "DynamicMesh/DynamicMesh3.h"
|
||||
#include "GeometryScript/MeshTransformFunctions.h"
|
||||
// 暂时注释掉 GeometryScripting 相关头文件
|
||||
// 当我们解决了基础模块的编译问题后再恢复
|
||||
//#include "GeometryScriptingCore.h"
|
||||
//#include "GeometryScript/MeshBooleanFunctions.h"
|
||||
//#include "GeometryScript/MeshPrimitiveFunctions.h"
|
||||
//#include "DynamicMesh/DynamicMesh3.h"
|
||||
//#include "GeometryScript/MeshTransformFunctions.h"
|
||||
|
||||
// Constructor
|
||||
UBooleanCutTool::UBooleanCutTool()
|
||||
@@ -210,56 +212,10 @@ UMaterialInterface* UBooleanCutTool::GetCutMaterial() const
|
||||
// Calculate intersection points between cut plane and mesh
|
||||
TArray<FVector> UBooleanCutTool::CalculateIntersectionPoints(const TArray<FVector>& Vertices, const TArray<int32>& Indices, const FCutPlane& CutPlane)
|
||||
{
|
||||
// 暂时简化该方法的实现,以解决编译问题
|
||||
TArray<FVector> IntersectionPoints;
|
||||
|
||||
// Check if index array is for triangles
|
||||
if (Indices.Num() % 3 != 0)
|
||||
{
|
||||
return IntersectionPoints;
|
||||
}
|
||||
|
||||
// Iterate through all triangles
|
||||
for (int32 i = 0; i < Indices.Num(); i += 3)
|
||||
{
|
||||
// Get three vertices of the triangle
|
||||
FVector V0 = Vertices[Indices[i]];
|
||||
FVector V1 = Vertices[Indices[i + 1]];
|
||||
FVector V2 = Vertices[Indices[i + 2]];
|
||||
|
||||
// Calculate signed distance from each vertex to the cut plane
|
||||
float D0 = FVector::DotProduct(V0 - CutPlane.Location, CutPlane.Normal);
|
||||
float D1 = FVector::DotProduct(V1 - CutPlane.Location, CutPlane.Normal);
|
||||
float D2 = FVector::DotProduct(V2 - CutPlane.Location, CutPlane.Normal);
|
||||
|
||||
// Check if triangle intersects with cut plane
|
||||
if ((D0 * D1 <= 0.0f) || (D0 * D2 <= 0.0f) || (D1 * D2 <= 0.0f))
|
||||
{
|
||||
// Calculate intersection points of edges with cut plane
|
||||
if (D0 * D1 <= 0.0f)
|
||||
{
|
||||
// Edge V0-V1 intersects with cut plane
|
||||
float T = D0 / (D0 - D1);
|
||||
FVector IntersectionPoint = V0 + T * (V1 - V0);
|
||||
IntersectionPoints.Add(IntersectionPoint);
|
||||
}
|
||||
|
||||
if (D0 * D2 <= 0.0f)
|
||||
{
|
||||
// Edge V0-V2 intersects with cut plane
|
||||
float T = D0 / (D0 - D2);
|
||||
FVector IntersectionPoint = V0 + T * (V2 - V0);
|
||||
IntersectionPoints.Add(IntersectionPoint);
|
||||
}
|
||||
|
||||
if (D1 * D2 <= 0.0f)
|
||||
{
|
||||
// Edge V1-V2 intersects with cut plane
|
||||
float T = D1 / (D1 - D2);
|
||||
FVector IntersectionPoint = V1 + T * (V2 - V1);
|
||||
IntersectionPoints.Add(IntersectionPoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: 当我们解决了 GeometryScripting 相关的问题后再恢复完整实现
|
||||
|
||||
return IntersectionPoints;
|
||||
}
|
||||
|
Reference in New Issue
Block a user