下载 openmesh
去官网下载最新版的openmesh,下载时注意版本和你选择的是源代码还是已经编译过得,这里我推荐选择编译的,只需要安装即可。
官网下载地址
在官网中选择vs2010版本或你自己想要的版本,下载后选择目录安装即可。
vs2010下的搭建
右键工程文件->属性->vc++目录。在包含目录下添加 openmesh安装路径\include
在包含目录和库目录中依次添加 openmesh安装路径\lib
在连接器->输入中的附加依赖项中添加OpenMeshCored.lib和OpenMeshToolsd.lib,注意,如果这里你需要编译的是release版本的话,将lib文件名的最后的d去掉即可。
到这里编译文件的话会提示没有添加预处理定义_USE_MATH_DEFINES,在c/c++->预处理器中的预处理定义中添加_USE_MATH_DEFINES即可,此时vs2010下的搭建已经完成。
在Qt creator中的搭建
qt creator 生成的是.pro文件,不能像vs2010方便的添加外部库,需要我们自己手动添加,其实也很简单。
打开.pro文件,在其中添加如下代码。
INCLUDEPATH += openmesh安装路径\include
LIBS += openmesh安装路径\lib\OpenMeshCored.lib
LIBS += openmesh安装路径\lib\OpenMeshToolsd.lib
DEFINES += _USE_MATH_DEFINES
需要注意的是,在这里,openmesh安装路径是你自己选的openmesh的安装地址,如我的是
INCLUDEPATH += D:\OpenMesh_4.1\include
LIBS += D:\OpenMesh_4.1\lib\OpenMeshCored.lib
LIBS += D:\OpenMesh_4.1\lib\OpenMeshToolsd.lib
DEFINES += _USE_MATH_DEFINES
在安装路径下,我建议不要出现任何的中文以及空格,否则可能并不能成功。
搭建到这,基本就搭建完成了
下面我给出测试代码已方便你们测试是否搭建成功】
测试代码
//=============================================================================
//
// OpenMesh
// Copyright (C) 2001-2005 by Computer Graphics Group, RWTH Aachen
// www.openmesh.org
//
//-----------------------------------------------------------------------------
//
// License
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Library General Public License as published
// by the Free Software Foundation, version 2.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
//-----------------------------------------------------------------------------
//
// $Revision: 83 $
// $Date: 2009-02-27 17:31:45 +0100 (Fri, 27 Feb 2009) $
//
//=============================================================================
#include <iostream>
// -------------------- OpenMesh
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
// ----------------------------------------------------------------------------
typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
// ----------------------------------------------------------------------------
// Build a simple cube and write it to std::cout
int main()
{
MyMesh mesh;
// generate vertices
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;
}
这是官网文档中的部分代码。运行后会生成一个.off文件。说明执行成功,用openmesh目录下自带的QTviewer可以打开生成的off文件。