前言
最近跑实验代码需要找一些三维模型,但是网上的大部分都是obj格式的模型,off的模型比较少,因此就想把obj格式的模型转换成off格式,这种工作对于程序元来说也不麻烦。而且OpenMesh库里面提供了很好的函数支持。
主要步骤
主要步骤只有三步如下非常简单
一、下载OpenMesh库
OpenMesh的官方下载地址http://www.openmesh.org/download/,如下按照VS的版本下载相应的库
如上图红框所标注,不管你的电脑是64位的还是32位的都下载32位的比较好,我的电脑是64位的,下载的64位的跑出一堆bug,然后还是32位的跑出来的。
二、VS中配置OpenMesh库
配置OpenMesh库主要分为两个步骤:
步骤一:点击下载的OpenMesh的exe文件进行安装默认安装地址是
C:\Program Files (x86)\OpenMesh 6.3
或者 C:\Program Files\OpenMesh 6.3
,记住安装的地址在后面的VS配置中要用到。
步骤二:
点击项目——》属性——》VC++目录。然后进行如下配置
上面红色框框中是安装的OpenMesh的目录地址中的include包和lib包。
三、代码
//OPENMESH
#define _USE_MATH_DEFINES
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
#ifdef _DEBUG
#pragma comment(lib, "OpenMeshCored.lib")
#pragma comment(lib, "OpenMeshToolsd.lib")
#else
#pragma comment(lib, "OpenMeshCore.lib")
#pragma comment(lib, "OpenMeshTools.lib")
#endif // _DEBUG
typedef OpenMesh::TriMesh_ArrayKernelT<> MyTriMesh;
using namespace OpenMesh;
using namespace std;
int main(int argc, char** argv)
{
MyTriMesh mesh;
IO::Options ropt;
ropt += IO::Options::Binary;
ropt += IO::Options::Swap;
char filename[256];
for (int i = 0; i<1; i++) {
//Load Mesh with openmesh
sprintf_s(filename, "D:/论文代码/models/person1.obj", i);
//要转换的obj文件地址
if (!IO::read_mesh(mesh, filename, ropt))
{
std::cerr << "Error loading mesh from file " << filename << std::endl;
return false;
}
sprintf_s(filename, "D:/论文代码/Geometry/person1.off", i);
//目的off文件地址
if (!OpenMesh::IO::write_mesh(mesh, filename))
{
std::cerr << "Cannot write mesh to file " << filename << std::endl;
}
else
cout << "successfully save mesh to " << filename << endl;
}
}