태그: UE5

33건의 항목

  • 문서

    FMeshBoolean

    개요 주어진 2개의 메쉬를 통해 연산을 하는 클래스이다.

  • 문서

    FMeshBoolean.Compute()

    전처리 메시 복사 및 변환 FDynamicMesh3 CutMeshB( *Meshes[ 1 ] ); if (Result != Meshes[ 0 ] ) { *Result = *Meshes[ 0 ]; } FDynamicMesh3* CutMesh[ 2 ]{ Result, &CutMeshB }; 연산을 수행할 두 메쉬를 FDynamicMesh3로 변환한다.

  • 문서

    FMeshNormals

    class FMeshNormals { protected: const FDynamicMesh3* Mesh; TArray< FVector3d > Normals; }; 메쉬의 법선 벡터를 계산하여 캐슁하는 구조체.

  • 문서

    FMeshTriInfoCache

    struct FMeshTriInfoCache { TDynamicVector< FVector3d > Centroids; TDynamicVector< FVector3d > Normals; TDynamicVector< double > Areas; } 메쉬의 삼각형별 기본 정보 캐쉬 삼각형의 면적인 Areas는 삼각형의 면적 계산을 통해 계산된다.

  • 문서

    TFastWindingTree

    FWN을 빠르게 계산하기 위해 사용하는 클래스. 테일러 전개를 통한 근사값을 이용해 삼각형들을 그룹으로 처리하여 빠르게 FWN을 계산한다.

  • 문서

    TPointHashGrid3

    3D 공간에서 점들을 효율적으로 관리하기 위한 해시 기반 그리드 자료구조이다. 공간 분할 ( Spatial Partitioning ) 3D 공간을 균일한 크기의 셀로 나누고 각 셀은 해시값으로 인덱싱된다.

  • 문서

    FMeshBoolean.Compute().후처리

    새로운 엣지 단순화 엣지 단순화 옵션 if ( bSimplifyAlongNewEdges ) { SimplifyAlongNewEdges( NumMeshesToProcess, CutMesh, CutBoundaryEdges, AllVIDMatches ); } 부울 연산으로 생성된 새로운 엣지를 따라 불필요한 정점들을 제거하여 메시를 단순화한다.

  • 문서

    FMeshBoolean.Compute().Operation 적용

    전처리 Operation을 적용, 즉 메쉬를 구성하는 삼각형들의 정보를 변경하기 위해 CutBoundaryEdiges, PossUnmatchedBdryVerts, KeepTri를 준비한다.

  • 문서

    FMeshBoolean.Compute().퇴화 엣지 제거

    허용 오차 계산 double DegenerateEdgeTolSq = DegenerateEdgeTolFactor * DegenerateEdgeTolFactor * SnapTolerance * SnapTolerance; 최적화를 위해 squared 기준으로 연산한다.

  • 문서

    FMeshSurfacePath.EmbedSimplePath()

    FMeshSurfacePath에서 메쉬 표면 경로를 실제 메시에 반영하는 함수이다. AddViaPlanarWalk로 찾은 경로의 각 점을 실제 메시 정점으로 변환하여 메시 토폴로지를 수정한다.

  • 문서

    FMeshSurfacePath.AddViaPlanarWalk()

    FMeshSurfacePath에서 평면을 따라 메시 표면에 경로를 생성하는 함수이다. Planar Walk 알고리즘을 구현하여 시작점에서 끝점까지 메시 표면을 따라 최단 경로를 찾는다.

  • 문서

    ESurfacePointType

    enum class ESurfacePointType { Vertex = 0, // 정확히 정점에 존재하는 타입 Edge = 1, // 엣지 상에 존재하는 타입 Triangle = 2 // 삼각형 표면상에 존재하는 타입 };.

  • 문서

    FMeshSurfacePoint

    struct FMeshSurfacePoint { int ElementID; // 정점 / 엣지 / 삼각형 ID FVector3d BaryCoord; // 무게중심 좌표 ESurfacePointType PointType; // 점의 타입 }; 메시 표면의 한 점을 표현하는 구조체이다.

  • 문서

    FMeshSurfacePath

    3D 메시 표면 위에 경로를 삽입하고 관리하는 클래스이다.

  • 문서

    FCutWorkingInfo.ConnectEdges()

    교차 세그먼트의 양 끝점을 연결하는 경로를 생성한다.

  • 문서

    FCutWorkingInfo.InsertEdgeVertices()

    FCutWorkingInfo.AddSegments()를 통해 분류된 교체 세그먼트들 중에서 엣지 위에 있는 교차 세그먼트를 처리한다. AB엣지상에 있는 교차 세그먼트 P를 기준으로 AP, PB 2개의 엣지로 분할한다.

  • 문서

    FCutWorkingInfo.InsertFaceVertices()

    FCutWorkingInfo.AddSegments()를 통해 분류된 교체 세그먼트들 중에서 삼각형 내부에 있는 교차 세그먼트를 처리한다. 처리는 삼각형 내부의 점 P를 기준으로 하나의 삼각형을 3개의 삼각형으로 분할한다.

  • 문서

    EVertexType

    enum class EVertexType { Unknown = -1, Vertex = 0, Edge = 1, Face = 2 }; 각 타입에 대한 설명은 다음과 같다.

  • 문서

    FCutWorkingInfo.AddSegments()

    교차 세그먼트의 각 끝점을 분석하여 EVertexType으로 분류한다.

  • 문서

    FCutWorkingInfo

    개요 struct FCutWorkingInfo { FDynamicMesh3* Mesh; // 작업할 메시 double SnapToleranceSq; // 스냅 허용 오차 (제곱값) TMultiMap< int, int > FaceVertices; // 삼각형 내부에 삽입할 점들 TMultiMap< int, int > EdgeVertices; // 엣지 위에 삽입할 점들 TArray< FVector3d > BaseFaceNormals; // 원본 삼각형의 법선들 TArray< FPtOnMesh &g...

  • 문서

    FMeshMeshCut.Cut()

    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...

  • 문서

    FMeshMeshCut

    개요 두 메시가 교차하는 부분을 따라 메시를 자르는 클래스이다. 이 때 자른 부분에 새로운 정점과 엣지가 추가된다.

  • 문서

    FIntersectionsQueryResult

    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...

  • 문서

    TMeshAABBTree3

    개요 classDiagram ISpatial--|>IMeshSpatial IMeshSpatial--|>TMeshAABBTree3 TMeshAABBTree3는 메쉬를 구성하는 삼각형들을 공간으로 분할하여 트리로 담아두기 위한 자료구조이다.

  • 문서

    TAxisAlignedBox3

    개요 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를 표현하기 위한 언리얼 ...

  • 문서

    FEdgeSplitInfo

    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...

  • 문서

    FDynamicMesh3.SplitEdge()

    개요 엣지를 분할하여 새로운 정점을 추가하고 새로 추가된 정점에 대해 토폴로지를 재구성한다. Input 타입매개변수설명inteab분할할 엣지 IDdoubleSplitT분할 위치 (0.0=정점A, 0.5=중간, 1.0=정점B) 엣지 ID와 분할 위치를 입력받는다.

  • 문서

    FDynamicMesh3.GetTriBaryPoint()

    개요 무게중심 좌표를 이용하여 삼각형 내의 한 점에 대한 정점 정보를 계산한다. 무게중심 좌표에는 각 삼각형의 정점과 비중값이 있기 때문에 각 정점 정보를 비중값으로 보간하여 계산할 수 있다.

  • 문서

    FPokeTriangleInfo

    struct FPokeTriangleInfo { // 입력 정보 int OriginalTriangle; // 분할된 삼각형 ID FIndex3i TriVertices; // 원본 삼각형 정점 [A, B, C] // 생성된 요소 int NewVertex; // 새로 삽입된 정점 ID FIndex2i NewTriangles; // 새로 생성된 2개 삼각형 ID FIndex3i NewEdges; // 새로 생성된 3개 엣지 ID // 추가 정보 FVector3d BaryCoords; // 새 정점의 무게중심 좌표 }; 삼각형의 분할정보 ...

  • 문서

    FDynamicMesh3.PokeTriangle()

    개요 삼각형 내부에 새로운 정점을 삽입하여 1개의 삼각형을 3개로 분할한다.

  • 문서

    FDynamicMesh3

    // 메시 데이터 구조 struct FDynamicMesh3 { // 기하학적 요소 TDynamicVector< FVector3d > Vertices; // 정점 위치 TDynamicVector< FIndex3i > Triangles; // 삼각형 (V0, V1, V2) TDynamicVector< FEdge > Edges; // 엣지 정보 // 토폴로지 정보 FRefCountVector TriangleRefCounts; // 삼각형 참조 카운트 FRefCountVector VertexRefCount...

  • 문서

    FMeshBoolean.EBooleanOp

    개요 enum class EBooleanOp { Union, Difference, Intersect, TrimInside, TrimOutside, NewGroupInside, NewGroupOutside }; FMeshBoolean에서 사용하는 불린 연산 타입을 정의한다.