반응형 OpenMesh28 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. Halfedge Data Structure(반모서리 자료구조) OpenMesh는 Halfedge Data Structure를 사용하고 있습니다. 우리말로 반모서리 자료구조라고 부릅니다. Edge를 절반으로 자른 형태라고 해서 반모서리라고 합니다. 이 반모서리 구조는 3D 모델링 및 Mesh 데이터 구조에서 많이 사용하고 있습니다. 많이들 사용하시는 CGAL(The Computational Geometry Algorithms Library)도 반모서리 구조를 사용하고 있습니다. Halfedge 자료 구조는 메쉬의 각 모서리(Edge)를 나타내는데 사용되며, 이를 통해 메쉬의 구조를 효율적으로 저장하고 다양한 연산을 수행할 수 있습니다. 이 자료 구조는 메쉬의 표현을 간소화하고 메쉬 조작 작업을 더 효율적으로 만드는 데 도움이 됩니다. Halfedge 자료 구조의 기본.. 2023. 11. 29. Cube Creation OpenMesh를 이용해서 Cube를 생성하는 코드예제를 보여드리겠습니다.Cube는 점이 8개, 면이 6개가 있습니다. 그래서 OpenMesh 구조체에 점과 면의 정보를 저장하면 Cube Mesh를 생성할 수 있습니다.Cube의 점 8개를 저장하는 코드는 아래와 같습니다.MyMesh mesh; // generate vertices MyMesh::VertexHandle vhandle[8]; vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1, 1)); vhandle[1] = mesh.add_vertex(MyMesh::Point(1, -1, 1)); vhandle[2] = mesh.add_vertex(MyMesh::Point(1, 1, 1)); vhandle[3] = m.. 2023. 9. 18. Mesh Subdivision Subdivision 기능은 Mesh의 Polygon들을 더 작게 세분화하여 표현하는 기법이라고 보면 됩니다. 아래 그림을 보면 Subdivision을 통해 왼쪽 Sphere가 오른쪽 형상으로 변형되었습니다.Subdivision을 수행하면 vertex, edge, triangle이 증가하기 때문에 형상 파일 용량이 결과적으로 늘어나게 됩니다. OpenMesh에서 Subdivision을 수행하기 위해서는 아래 header를 include 한 후#include 아래와 같이 코드를 작성해 주면 간단히 Subdivision을 할 수 있습니다.아래코드는 sphere.stl을 읽어 Subdivision 진행 후 output.stl로 저장하는 코드 입니다.typedef OpenMesh::PolyMesh_ArrayK.. 2023. 9. 18. Mesh Smooth Mesh Smooth는 Mesh의 형상을 부드럽게 바꿔주는 기능을 합니다.아래 그림을 보면 왼쪽에 보이는 울퉁불퉁한 Sphere를 오른쪽 형상같이 좀 더 부드럽게 형상을 변형시켜 준다고 보면 됩니다. 이 기능도 OpenMesh를 이용하면 간단히 구현이 가능합니다.먼저 Smooth 함수를 call 할 수 있는 헤더를 include 해주고#include 아래와 같이 코드를 작성하면 된다. 아래코드는 sphere.stl 파일을 읽어서 smooth를 처리한 후 sphere_smooth_output.stl로 저장하는 코드입니다.typedef OpenMesh::PolyMesh_ArrayKernelT MyMesh;using namespace std;#include void testSmooth(){ MyMesh .. 2023. 9. 14. Mesh Decimation(Simplification) Mesh Decimation은 3D 데이터의 점이나 면의 갯수를 줄여주는 기능입니다.아래 그림은 Decimation을 통해 왼쪽 sphere가 오른쪽 sphere 형태로 변형된 이미지이다. 삼각형 갯수가 많이 줄어든 것을 볼 수 있습니다. Decimation 기능을 하나하나 구현하는 것은 쉽지 않지만, OpenMesh를 이용하면 쉽게 Decimation기능을 이용할 수 있습니다.Decimation과 관련된 header 3개를 써주고,#include #include #include 아래와 같이 코드를 입력해주면 된다. 아래 코드는 sphere.stl 파일을 읽어 들여 OpenMesh를 이용해 Decimation 진행한 후 mesh_out.stl 파일로 저장하는 코드입니다. #include #incl.. 2023. 8. 18. 이전 1 2 3 4 다음 반응형