文章目錄
本博文的簡述or解決問題?
瞭解OpenMesh,學會安裝,嘗試在c++裏面使用OpenMesh,書寫一個簡單地例子。
**編程環境:**Win10 x64 專業版
編程軟件: visual studio 2015
下載OpenMesh庫:
進入OpenMesh官網OpenMesh官網,下載下面的文件:
備用github直接下載:OpenMesh-8.0-VS2015-64-Bit-no-apps.exe
配置OpenMesh運行環境:
安裝OpenMesh程序:
安裝OpenMesh-8.0-VS2015-64-Bit-no-apps.exe程序
標準安裝:
創建工程:
創建一個新的(空的 項目工程)解決方案:比如項目名稱叫TestOpenMesh
配置OpenMesh的運行環境:
在Debug模式 選擇x64:
- 配置頭文件:
打開項目屬性-VC++目錄-包含目錄
,添加包含目錄C:\Program Files\OpenMesh 8.0\include
如下:
- 配置庫文件:
打開項目屬性-鏈接器-常規-附加依賴庫目錄
,添加附加庫目錄C:\Program Files\OpenMesh 8.0\lib
如下:
- 配置附加依賴項.lib文件:*
打開項目屬性-鏈接器-輸入-附加依賴項
,添加附加庫目錄OpenMeshCored.lib
和 OpenMeshToolsd.lib
如下:
- 配置預處理器添加宏
(可能有的第三方庫需要,有的第三方庫不需要這一步操作):
打開項目屬性-V/c++-預處理器
,添加附加宏_USE_MATH_DEFINES
一共經過這三步驟,就全部配置好了,接下來就是添加具體的代碼了。
添加示例程序:
添加如下代碼到創建的TestOpenMesh.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;
}
運行該項目:
在vs 2015 裏面按下Ctrl + F5
,運行該項目
看到運行成功:
驗證成功:
打開D:\programming\OpenMesh\TestOpenMesh\TestOpenMesh
目錄下,查看是否生成output.off
文件
使用MeshLab打開這個output.off
文件,看看時候加載之後,顯示是否成功
MeshLab官網下載地址:MeshLab官網
備用github直接下載:MeshLab2016.12.exe
選中該output.off
文件,打開:
發現運行成功:
源碼下載:
心得:
OpenMesh的網上教程感覺都是十分的少,唯一比較全面的話,可能就是相關的英文文檔,然鵝,裏面涉及的概念很多,且在現在工作了發現都是直接上手,根本不會讓你去系統的學習OpenMesh的相關知識,時間倉促,且系統學習,所耗費的時間和精力,也容易使得人比較倦怠。故此好的解決方法就是,就是直接在項目中直接上手;
可以按照如下步驟實現:
- ->從瞭解OpenMesh
- ->你所需要的項目需求的實現
- ->需要完成的什麼任務
- ->百度、谷歌、Bing輪着搜索怎麼實現
- ->查找函數或者迭代器的或者屬性實例的使用
- ->自己項目移植嘗試
- ->多次嘗試
- ->還是有問題,向
大佬(劃掉,巨佬)們求助 - ->仍然無果;歇一天再按照上面的步驟嘗試
- ->仍然無果;建議放棄,學習其他。或者日後有機會在學
資源:
提供一個良好的中文入門手冊:OpenMesh入門文檔.pdf (可以幫助弄清楚OpenMesh基本概念,值得一讀)
對應個人博客的本篇博文:OpenMesh入門,安裝,運行示例Hello World