반응형
Bounding Box 계산
Bounding Box는 3D 모델의 공간적인 범위를 나타내는 데 사용되는 기본적인 데이터입니다. OpenMesh에서는 각 Vertex의 위치 정보를 사용하여 메쉬의 Bounding Box를 계산할 수 있습니다.
Bounding Box는 아래 글에서 설명했듯이 3D 공간에서 객체를 포함하는 최소한의 직육면체입니다. 이를 계산하기 위해 3축(x,y,z)의 최소값과 최대값을 계산하면 됩니다.
2024.08.22 - [3D Algorithm] - AABB(Axis Aligned Bounding Box) 계산과 활용
예제코드
MyMesh mesh;
if (!OpenMesh::IO::read_mesh(mesh, "example.stl"))
{
std::cerr << "Error: Cannot read mesh file." << std::endl;
return 1;
}
MyMesh::Point min_point(std::numeric_limits<float>::max(),
std::numeric_limits<float>::max(),
std::numeric_limits<float>::max());
MyMesh::Point max_point(std::numeric_limits<float>::lowest(),
std::numeric_limits<float>::lowest(),
std::numeric_limits<float>::lowest());
for (MyMesh::VertexIter v_it = mesh.vertices_begin(); v_it != mesh.vertices_end(); ++v_it)
{
MyMesh::Point p = mesh.point(*v_it);
min_point[0] = std::min(min_point[0], p[0]);
min_point[1] = std::min(min_point[1], p[1]);
min_point[2] = std::min(min_point[2], p[2]);
max_point[0] = std::max(max_point[0], p[0]);
max_point[1] = std::max(max_point[1], p[1]);
max_point[2] = std::max(max_point[2], p[2]);
}
std::cout << "Bounding Box:" << std::endl;
std::cout << "Min Point: (" << min_point[0] << ", " << min_point[1] << ", " << min_point[2] << ")" << std::endl;
std::cout << "Max Point: (" << max_point[0] << ", " << max_point[1] << ", " << max_point[2] << ")" << std::endl;
Bounding Box는 3D 메쉬의 공간적 경계를 정의하는 데 유용하며, OpenMesh의 Vertex 좌표 데이터를 활용하여 간단히 계산할 수 있습니다. 위의 코드와 방법을 활용하여 메쉬의 크기와 범위에 해당하는 Bounding Box를 계산 할 수 있습니다.
반응형
'OpenMesh' 카테고리의 다른 글
Triangle Area (0) | 2024.11.27 |
---|---|
Boundary Detection (0) | 2024.11.26 |
Delete Face (0) | 2024.11.24 |
Delete Vertex (0) | 2024.11.23 |
Incoming and outgoing halfedges (1) | 2024.11.22 |