컴퓨터 공학/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();
}