컴퓨터 공학/Graphics
Polygon Mesh Processing Library
코딩하는 Español되기
2024. 6. 12. 12:35
PMP-library : 다각형 표면 메시를 처리하고 시각화하기 위한 C++ 오픈 소스 라이브러리 입니다
예시)
#include <pmp/surface_mesh.h>
int main() {
pmp::SurfaceMesh mesh;
pmp::read(mesh,"input.obj");
// .. do awesome things with your mesh
pmp::write(mesh,"output.obj");
}
다각형 메쉬는 그래픽스와 3D 모델링에서 3D 표면을 표현하기 위한 기본 데이터 구조입니다.
Mesh = Vertexes + Edges + Faces
점, 선분, 면으로 구성되어 있습니다.
pmp::SurfaceMesh; ==> 모든 3D 데이터를 저장하고 조작하기 위한 핵심 클래스 입니다.
Halfedge 구조를 기반으로 연결 정보를 저장합니다.
- 각 vertex는 out-going halfedge를 가지고 있습니다.
- 각 face는 인접한 halfedge를 가지고 있습니다.
- 각 halfedge는 인접한 면, target vertex, 이전 halfedge와 다음 halfedge를 가지고 있습니다.
구성요소 추가 코드
// add 4 vertices
const auto v0 = mesh.add_vertex(pmp::Point(0, 0, 0));
const auto v1 = mesh.add_vertex(pmp::Point(1, 0, 0));
const auto v2 = mesh.add_vertex(pmp::Point(0, 1, 0));
const auto v3 = mesh.add_vertex(pmp::Point(0, 0, 1));
// add 4 triangular faces
mesh.add_triangle(v0, v1, v3);
mesh.add_triangle(v1, v2, v3);
mesh.add_triangle(v2, v0, v3);
mesh.add_triangle(v0, v2, v1);
std::cout << "vertices: " << mesh.n_vertices() << std::endl;
std::cout << "edges: " << mesh.n_edges() << std::endl;
std::cout << "faces: " << mesh.n_faces() << std::endl;
Mesh 그리기 코드
auto n = mesh.get_vertex_property<pmp::Normal>("v:normal");
for (auto f : mesh.faces()) {
glBegin(GL_TRIANGLES);
for (auto v : mesh.vertices(f)){
auto p = mesh.position(v);
glNormal3dv(n[v].data());
glVertex3dv(p.data());
}
glEnd();
}