OpenMesh学习笔记1 安装配置和入门示例

OpenMesh学习笔记1 安装 配置 入门示例

    前段时间在学习vcglib的过程中,只写了一篇文章,就基本放弃了,文档真的是太少了,学习起来难度太大。最近因为需要,选择了另外一种Mesh库——OpenMesh,跟vcglib比起来,文档详细的多,但是基本看完介绍文档后,还是觉得有很多内容没有写出来的,还是需要自己去探索。写这一系列的笔记,除了供入门学习之用,也希望记录在OpenMesh使用过程中发掘的更多更加有用和便利的功能。好了,现在就说说安装吧。
    进入OpenMesh的 官网,选择左侧的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打开如下图:
       

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页