OpenMesh学习笔记1 安装 配置 入门示例
前段时间在学习vcglib的过程中,只写了一篇文章,就基本放弃了,文档真的是太少了,学习起来难度太大。最近因为需要,选择了另外一种Mesh库——OpenMesh,跟vcglib比起来,文档详细的多,但是基本看完介绍文档后,还是觉得有很多内容没有写出来的,还是需要自己去探索。写这一系列的笔记,除了供入门学习之用,也希望记录在OpenMesh使用过程中发掘的更多更加有用和便利的功能。好了,现在就说说安装吧。
进入OpenMesh的
官网,选择左侧的Download标签,进入下载页面,可以下载源码自己编译,也可以直接下载已经编译好的二进制安装文件,我为了省去麻烦,就直接下载了二进制的安装文件如下,我下载安装了很多版本试了一下,至于为什么最终选择了这一个,我就不多说了(我的电脑是Win10 64bit + VS2013)。
官网,选择左侧的Download标签,进入下载页面,可以下载源码自己编译,也可以直接下载已经编译好的二进制安装文件,我为了省去麻烦,就直接下载了二进制的安装文件如下,我下载安装了很多版本试了一下,至于为什么最终选择了这一个,我就不多说了(我的电脑是Win10 64bit + VS2013)。
安装时要选择安装路径,要记得放在哪里了。
接下来就介绍配置和入门程序。我们新建一个“空的基于控制台的Win32程序”,并添加一个源文件Ex01.cpp。在输入代码前先配置一下OpenMesh吧。为了使配置可以很方便的移植到其他使用OpenMesh的程序上,我这里是新建了一个属性表,在VS2013中,选择Property Manager视图,在项目名称上右键,选择Add New Project Property Sheet…,命名为OpenMesh,创建后,展开Debug | Win32,双击打开OpenMesh,分别添加包含目录D:\\Program Files (x86)\\OpenMesh 5.1\\include和库目录D:\\Program Files (x86)\\OpenMesh 5.1\\lib,这个具体的视你的安装目录而定,然后在链接器—输入中,加入附加依赖项OpenMeshCored.lib,OpenMeshToolsd.lib,最后在C\\C++的Preprocessor中添加Preprocessor Definition,内容为_USE_MATH_DEFINES,至此,配置全部完成。项目目录下的OpenMesh.props文件,日后可以用于添加到使用OpenMesh的项目中,就不需要再做配置了。
下面是示例程序,在Ex01.cpp中输入以下代码:
#include <iostream>
// -------------------- OpenMesh
#include <OpenMesh\\/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
using namespace std;
typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
int main()
{
MyMesh mesh;
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] = mesh.add_vertex(MyMesh::Point(-1, 1, 1));
vhandle[4] = mesh.add_vertex(MyMesh::Point(-1, -1, -1));
vhandle[5] = mesh.add_vertex(MyMesh::Point(1, -1, -1));
vhandle[6] = mesh.add_vertex(MyMesh::Point(1, 1, -1));
vhandle[7] = mesh.add_vertex(MyMesh::Point(-1, 1, -1));
// generate (quadrilateral) faces
std::vector<MyMesh::VertexHandle> face_vhandles;
face_vhandles.clear();
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[3]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[7]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[4]);
face_vhandles.push_back(vhandle[5]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[6]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[7]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[7]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);
// write mesh to output.obj
try
{
if (!OpenMesh::IO::write_mesh(mesh, "output.off"))
{
std::cerr << "Cannot write mesh to file 'output.off'" << std::endl;
return 1;
}
}
catch (std::exception& x)
{
std::cerr << x.what() << std::endl;
return 1;
}
return 0;
}
运行后,在项目当前目录下会生成一个outoff.off文件,里面存储了一个立方体的网格数据,用Meshlab打开如下图:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容