因为要做图形学的实验用到了openmesh,但是网上又没有比较详细的配置和测试方法,摸索完成配置后记下一点笔记。
1.从www.epenmesh.org下载最新版的安装包或者源代码,注意下载与自己系统匹配的版本,我下的是vs2008预编译版的,下载源码自己编译时一样的。安装好visual studio。
2.安装openmesh,预编译版的是一个安装包,直接打开下一步安装就行。
3.配置vs,以vs2008为例 打开 工具-》选项-》项目和解决方案-》VC++目录,在包含文件和库文件中依次添加C:\Program Files (x86)\OpenMesh 2.3\include和C:\Program Files (x86)\OpenMesh 2.3\lib目录,具体由自己的openmesh安装目录决定
4在所建工程上右键-》属性-》预处理器-》预处理器定义添加_USE_MATH_DEFINE,同时在连接器-》输入-》附加依赖性中添加OpenMeshCored.lib和OpenMeshToolsd.lib
(注:此处为debug模式下,release下要加入OpenMeshCore.lib和OpenMeshTools.lib)
5从openmesh官网的document中拷贝cube的测试代码,如下,放到工程中编译执行即可,
[cpp] view plaincopy
- //=============================================================================
- //
- // 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;
- }
5.运行后会生成一个.off文件。说明执行成功,用openmesh目录下自带的QTviewer可以打开生成的off文件。