三维网格入门第一篇,学习使用openmesh,三维模型的读取、存储有自己的数据结构,要想详细了解就开始学习openmesh,openmesh是开源的一个三角网格处理库,有三维顶点、面片、边、半边等,还有遍历算法、法向求解等等三维图形基础知识。
openmesh官网OpenMesh: OpenMesh Documentation
读取OBJ三维模型例子如下:
#include <iostream>
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
int main(int argc, char **argv) {
if (argc != 2) {
std::cerr << "Usage: " << argv[0] << " <input.obj>" << std::endl;
return 1;
}
// 定义一个网格对象
MyMesh mesh;
// 读取OBJ文件
if (!OpenMesh::IO::read_mesh(mesh, argv[1])) {
std::cerr << "Error: Cannot read mesh from " << argv[1] << std::endl;
return 1;
}
// 输出网格信息
std::cout << "Number of vertices: " << mesh.n_vertices() << std::endl;
std::cout << "Number of edges: " << mesh.n_edges() << std::endl;
std::cout << "Number of faces: " << mesh.n_faces() << std::endl;
// 遍历并输出每个顶点的坐标
std::cout << "Vertex coordinates: " << std::endl;
for (MyMesh::VertexIter v_it = mesh.vertices_begin(); v_it != mesh.vertices_end(); ++v_it) {
std::cout << "v[" << *v_it << "]: " << mesh.point(*v_it) << std::endl;
}
return 0;
}