33건의 항목
개요 주어진 2개의 메쉬를 통해 연산을 하는 클래스이다.
전처리 메시 복사 및 변환 FDynamicMesh3 CutMeshB( *Meshes[ 1 ] ); if (Result != Meshes[ 0 ] ) { *Result = *Meshes[ 0 ]; } FDynamicMesh3* CutMesh[ 2 ]{ Result, &CutMeshB }; 연산을 수행할 두 메쉬를 FDynamicMesh3로 변환한다.
class FMeshNormals { protected: const FDynamicMesh3* Mesh; TArray< FVector3d > Normals; }; 메쉬의 법선 벡터를 계산하여 캐슁하는 구조체.
struct FMeshTriInfoCache { TDynamicVector< FVector3d > Centroids; TDynamicVector< FVector3d > Normals; TDynamicVector< double > Areas; } 메쉬의 삼각형별 기본 정보 캐쉬 삼각형의 면적인 Areas는 삼각형의 면적 계산을 통해 계산된다.
FWN을 빠르게 계산하기 위해 사용하는 클래스. 테일러 전개를 통한 근사값을 이용해 삼각형들을 그룹으로 처리하여 빠르게 FWN을 계산한다.
3D 공간에서 점들을 효율적으로 관리하기 위한 해시 기반 그리드 자료구조이다. 공간 분할 ( Spatial Partitioning ) 3D 공간을 균일한 크기의 셀로 나누고 각 셀은 해시값으로 인덱싱된다.
새로운 엣지 단순화 엣지 단순화 옵션 if ( bSimplifyAlongNewEdges ) { SimplifyAlongNewEdges( NumMeshesToProcess, CutMesh, CutBoundaryEdges, AllVIDMatches ); } 부울 연산으로 생성된 새로운 엣지를 따라 불필요한 정점들을 제거하여 메시를 단순화한다.
전처리 Operation을 적용, 즉 메쉬를 구성하는 삼각형들의 정보를 변경하기 위해 CutBoundaryEdiges, PossUnmatchedBdryVerts, KeepTri를 준비한다.
허용 오차 계산 double DegenerateEdgeTolSq = DegenerateEdgeTolFactor * DegenerateEdgeTolFactor * SnapTolerance * SnapTolerance; 최적화를 위해 squared 기준으로 연산한다.
FMeshSurfacePath에서 메쉬 표면 경로를 실제 메시에 반영하는 함수이다. AddViaPlanarWalk로 찾은 경로의 각 점을 실제 메시 정점으로 변환하여 메시 토폴로지를 수정한다.
FMeshSurfacePath에서 평면을 따라 메시 표면에 경로를 생성하는 함수이다. Planar Walk 알고리즘을 구현하여 시작점에서 끝점까지 메시 표면을 따라 최단 경로를 찾는다.
enum class ESurfacePointType { Vertex = 0, // 정확히 정점에 존재하는 타입 Edge = 1, // 엣지 상에 존재하는 타입 Triangle = 2 // 삼각형 표면상에 존재하는 타입 };.
struct FMeshSurfacePoint { int ElementID; // 정점 / 엣지 / 삼각형 ID FVector3d BaryCoord; // 무게중심 좌표 ESurfacePointType PointType; // 점의 타입 }; 메시 표면의 한 점을 표현하는 구조체이다.
3D 메시 표면 위에 경로를 삽입하고 관리하는 클래스이다.
교차 세그먼트의 양 끝점을 연결하는 경로를 생성한다.
FCutWorkingInfo.AddSegments()를 통해 분류된 교체 세그먼트들 중에서 엣지 위에 있는 교차 세그먼트를 처리한다. AB엣지상에 있는 교차 세그먼트 P를 기준으로 AP, PB 2개의 엣지로 분할한다.
FCutWorkingInfo.AddSegments()를 통해 분류된 교체 세그먼트들 중에서 삼각형 내부에 있는 교차 세그먼트를 처리한다. 처리는 삼각형 내부의 점 P를 기준으로 하나의 삼각형을 3개의 삼각형으로 분할한다.
enum class EVertexType { Unknown = -1, Vertex = 0, Edge = 1, Face = 2 }; 각 타입에 대한 설명은 다음과 같다.
교차 세그먼트의 각 끝점을 분석하여 EVertexType으로 분류한다.
개요 struct FCutWorkingInfo { FDynamicMesh3* Mesh; // 작업할 메시 double SnapToleranceSq; // 스냅 허용 오차 (제곱값) TMultiMap< int, int > FaceVertices; // 삼각형 내부에 삽입할 점들 TMultiMap< int, int > EdgeVertices; // 엣지 위에 삽입할 점들 TArray< FVector3d > BaseFaceNormals; // 원본 삼각형의 법선들 TArray< FPtOnMesh &g...
bool FMeshMeshCut::Cut( const MeshIntersection::FIntersectionsQueryResult& Intersections ) { check( !bCutCoplanar ); ResetOutputs(); bool bSuccess = true; int MeshesToProcess = bMutuallyCut ? 2 : 1; for ( int MeshIdx = 0; MeshIdx < MeshesToProcess; MeshIdx++ ) { MeshCut::FCutWorkingInfo Worki...
개요 두 메시가 교차하는 부분을 따라 메시를 자르는 클래스이다. 이 때 자른 부분에 새로운 정점과 엣지가 추가된다.
namespace MeshIntersection { struct FPointIntersection { int TriangleID[ 2 ]; FVector3d Point; }; struct FSegmentIntersection { int TriangleID[ 2 ]; FVector3d Point[ 2 ]; }; struct FPolygonIntersection { int TriangleID[ 2 ]; FVector3d Point[ 6 ]; int Quantity; }; struct FIntersectionsQueryResult { T...
개요 classDiagram ISpatial--|>IMeshSpatial IMeshSpatial--|>TMeshAABBTree3 TMeshAABBTree3는 메쉬를 구성하는 삼각형들을 공간으로 분할하여 트리로 담아두기 위한 자료구조이다.
개요 template< typename T > class TAxisAlignedBox3 { TVector< T > Min; // 최소 모서리 (x₀, y₀, z₀) TVector< T > Max; // 최대 모서리 (x₁, y₁, z₁) }; // 타입 별칭 using FAxisAlignedBox3d = TAxisAlignedBox3< double >; using FAxisAlignedBox3f = TAxisAlignedBox3< float >; AABB를 표현하기 위한 언리얼 ...
struct FEdgeSplitInfo { int OriginalEdge; // the edge that was split FIndex2i OriginalVertices; // original edge vertices [a,b] FIndex2i OtherVertices; // original opposing vertices [c,d] - d is InvalidID for boundary edges FIndex2i OriginalTriangles; // original edge triangles [t0,t1] bool bIsBound...
개요 엣지를 분할하여 새로운 정점을 추가하고 새로 추가된 정점에 대해 토폴로지를 재구성한다. Input 타입매개변수설명inteab분할할 엣지 IDdoubleSplitT분할 위치 (0.0=정점A, 0.5=중간, 1.0=정점B) 엣지 ID와 분할 위치를 입력받는다.
개요 무게중심 좌표를 이용하여 삼각형 내의 한 점에 대한 정점 정보를 계산한다. 무게중심 좌표에는 각 삼각형의 정점과 비중값이 있기 때문에 각 정점 정보를 비중값으로 보간하여 계산할 수 있다.
struct FPokeTriangleInfo { // 입력 정보 int OriginalTriangle; // 분할된 삼각형 ID FIndex3i TriVertices; // 원본 삼각형 정점 [A, B, C] // 생성된 요소 int NewVertex; // 새로 삽입된 정점 ID FIndex2i NewTriangles; // 새로 생성된 2개 삼각형 ID FIndex3i NewEdges; // 새로 생성된 3개 엣지 ID // 추가 정보 FVector3d BaryCoords; // 새 정점의 무게중심 좌표 }; 삼각형의 분할정보 ...
개요 삼각형 내부에 새로운 정점을 삽입하여 1개의 삼각형을 3개로 분할한다.
// 메시 데이터 구조 struct FDynamicMesh3 { // 기하학적 요소 TDynamicVector< FVector3d > Vertices; // 정점 위치 TDynamicVector< FIndex3i > Triangles; // 삼각형 (V0, V1, V2) TDynamicVector< FEdge > Edges; // 엣지 정보 // 토폴로지 정보 FRefCountVector TriangleRefCounts; // 삼각형 참조 카운트 FRefCountVector VertexRefCount...
개요 enum class EBooleanOp { Union, Difference, Intersect, TrimInside, TrimOutside, NewGroupInside, NewGroupOutside }; FMeshBoolean에서 사용하는 불린 연산 타입을 정의한다.