반응형 OpenMesh15 HalfedgeIterator HalfedgeIterator 사용법HalfedgeIterator는 OpenMesh에서 메쉬의 모든 Halfedge를 순회하는 데 사용됩니다. Halfedge는 OpenMesh의 가장 기본적인 요소 중 하나로, 각 Edge를 두 개의 방향성 있는 Halfedge로 나누어 메쉬를 관리합니다. Halfedge는 메쉬의 Topology와 관련된 많은 정보를 담고 있기 때문에, 메쉬의 구조를 분석하거나 변형하는 데 매우 유용합니다. Halfedge 개념은 아래글을 참고하세요.2023.11.29 - [OpenMesh] - Halfedge Data Structure(반모서리 자료구조) Halfedge Data Structure(반모서리 자료구조)OpenMesh는 Halfedge Data Structure를 사용하.. 2024. 11. 14. FaceIterator FaceIterator 사용법FaceIterator는 OpenMesh에서 메쉬의 모든 Face(면)를 순회하는 데 사용됩니다. 이 이터레이터를 사용하면 메쉬의 모든 Face에 접근할 수 있으며, 각 Face의 정보를 읽거나 수정할 수 있습니다. 이를 통해 메쉬의 표면에 대해 특정 작업을 수행하거나, 각 Face의 속성을 수집하는 작업을 효율적으로 처리할 수 있습니다. C++ 예제 코드다음은 OpenMesh에서 FaceIterator를 사용해 메쉬의 모든 Face를 순회하면서 각 Face의 Vertex 정보를 출력하는 간단한 예제입니다. MyMesh mesh; if (!OpenMesh::IO::read_mesh(mesh, "example.obj")) { std::cerr idx() 코드 설명.. 2024. 11. 13. Edge Flip Flipping EdgesOpenMesh의 Edge Flip은 아래 그림과 같이 edge를 뒤집는 기능을 합니다. 이 기능은 메쉬의 구조를 변경하는데 유용하면 특히 메쉬를 remeshing 하거나 최적화할 때 자주 사용됩니다. 예제코드 TriMesh mesh; TriMesh::VertexHandle vhandle[4]; vhandle[0] = mesh.add_vertex(TriMesh::Point(0, 0, 0)); vhandle[1] = mesh.add_vertex(TriMesh::Point(0, 1, 0)); vhandle[2] = mesh.add_vertex(TriMesh::Point(1, 1, 0)); vhandle[3] = mesh.add_vertex(TriMesh::Point(1, 0.. 2024. 11. 12. Collapsing Edges Edge CollapseEdge Collapse는 메쉬 단순화(simplification)를 위한 기법 중 하나로, 선택한 Edge를 제거하고 그 두 끝점(Vertex)을 하나로 병합하는 과정입니다. 이 작업을 통해 메쉬의 복잡성을 줄이고, 메쉬의 데이터 크기나 연산 부하를 줄일 수 있습니다. 코드 예제아래 그림과 같이 빨간색 edge를 collapse 하는 예제 코드입니다. collapse 할 edge 길이는 0.233이며, 이 edge를 찾기 위해 if 문을 사용했습니다. cout 하는 부분은 collapse 할 edge 두 점이 한 개의 점으로 합쳐지는 것을 확인하기 위한 코드입니다. MyMesh mesh; if (!OpenMesh::IO::read_mesh(mesh, "Mesh.st.. 2024. 11. 11. EdgeIterator EdgeIterator 사용법EdgeIterator는 OpenMesh에서 메쉬의 모든 Edge(변)를 순회하는 데 사용됩니다. 이를 통해 메쉬에 포함된 모든 Edge를 처음부터 끝까지 방문하면서 특정 작업을 수행하거나, 필요한 정보를 수집할 수 있습니다. OpenMesh에서는 MyMesh::EdgeIter를 사용해 EdgeIterator를 사용할 수 있습니다. EdgeIterator를 통해 메쉬에 포함된 각 Edge를 하나씩 방문하면서, Edge의 정보를 읽거나 수정할 수 있습니다. 예를 들어, 메쉬의 모든 Edge 길이를 출력하거나 특정 속성을 수정할 때 유용하게 활용됩니다. C++ 예제 코드다음은 OpenMesh에서 EdgeIterator를 사용해 메쉬의 모든 Edge를 순회하며 각 Edge의 길이.. 2024. 11. 10. VertexIterator VertexIterator 사용법 VertexIterator는 OpenMesh에서 메쉬의 모든 Vertex(정점)를 순회하는 데 사용됩니다. VertexIterator는 메쉬에 포함된 각 Vertex를 하나씩 방문하며, 정점의 정보를 읽거나 수정할 수 있게 해 줍니다. 이를 통해 메쉬의 모든 Vertex에 대해 특정 작업을 수행하거나, 필요한 정보를 수집할 수 있습니다. OpenMesh에서는 MyMesh::VertexIter를 통해 VertexIterator를 사용할 수 있습니다. 이 Iterator를 사용하면 메쉬에 포함된 모든 Vertex를 처음부터 끝까지 순회하면서 접근할 수 있습니다. 예를 들어, 메쉬의 모든 Vertex 위치를 출력하거나 특정 속성을 수정할 때 유용하게 활용됩니다. C++ 예.. 2024. 11. 9. Triangle Mesh 기본 구조 Triangle MeshTriangle Mesh(삼각형 메쉬)는 컴퓨터 그래픽스와 3D 모델링에서 가장 기본적인 메쉬 구조 중 하나로, 각 면이 삼각형으로 구성된 메쉬입니다. 이 구조는 복잡한 3D 형상을 간단한 삼각형 면들의 집합으로 나타낼 수 있게 해 주며, 그래픽 엔진에서의 효율적인 렌더링이 가능합니다. OpenMesh는 이러한 삼각형 메쉬의 데이터를 쉽게 다룰 수 있도록 설계된 C++ 라이브러리입니다. OpenMesh에서는 메쉬의 각 요소를 Vertex(정점), Edge(변), Face(면)이라는 기본 단위로 정의하여 관리합니다. Vertex (정점): Vertex는 메쉬의 꼭짓점을 나타내며, 3D 공간 상의 위치 좌표를 가지고 있습니다. 각 Vertex는 삼각형의 모서리를 연결하는 중요한 역할.. 2024. 11. 8. OpenMesh Split Triangle Mesh SplitOpenMesh에서 Subdivision 기능을 제공하고 있습니다. 이 기능은 Mesh의 전체 영역을 Subdivision 하는 기능입니다. 코드는 아래글을 참고하세요.2023.09.18 - [OpenMesh] - Mesh Subdivision Mesh SubdivisionSubdivision 기능은 Mesh의 Polygon들을 더 작게 세분화하여 표현하는 기법이라고 보면 됩니다. 아래 그림을 보면 Subdivision을 통해 왼쪽 Sphere가 오른쪽 형상으로 변형되었습니다.Subdivision을 수darkrock.tistory.com 지역(Local) Subdivision은 OpenMesh에서 지원은 하지 않고 Mesh를 split 하는 기능은 지원을 하고 있습니다... 2024. 10. 24. Openmesh Iterators(Mesh Navigation) Openmesh 라이브러리를 이용하면 mesh에 관련된 기능을 상당히 많이 활용할 수 있는데, 그중에 가장 간단한 mesh의 모든 점들을 navigation 하는 방법을 소개해드리겠습니다. Openmesh에 점(vertex), 선(edge), 면(face)을 navigation 하기 위해서는 iterator을 사용합니다. MyMesh::VertexIter : vertex MyMesh::FaceIter : face MyMesh::EdgeIter : edge 이 iterator을 이용해서 mesh의 필요한 정보를 접근할 수 있습니다. 아래 코드는 sphere.stl 파일을 읽어 들여서 vertex iterator을 선언 후 mesh의 점 정보를 콘솔 창에 print 하는 코드입니다.t.. 2023. 12. 11. 이전 1 2 다음 반응형