OpenMesh 读写网格控制(读取写入纹理坐标,法向等)
生活随笔
收集整理的這篇文章主要介紹了
OpenMesh 读写网格控制(读取写入纹理坐标,法向等)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OpenMesh讀取網格默認是不自動讀取obj網格中的法向,紋理坐標等信息的,寫入網格同樣也是。所以要讀取(或寫入)這些信息需要修改默認的選項。
先看一下其讀寫網格的函數
1 template<class Mesh> 2 bool OpenMesh::IO::read_mesh( 3 Mesh &_mesh, 4 const std::string &_filename, 5 Options &_opt, 6 bool _clear = true 7 )
1 template<class Mesh > 2 bool OpenMesh::IO::write_mesh( 3 const Mesh &_mesh, 4 const std::string &_filename, 5 Options _opt = Options::Default, 6 std::streamsize _precision = 6 7 )
函數中的參數 Options 就可以控制讀寫其他信息。
OpenMesh的IO::Options::Flag
在OpenMesh的官方文檔中,有很多關于IO的options,更詳細的內容請看這里 http://www.openmesh.org/media/Documentations/OpenMesh-Doc-Latest/a00231.html#details
enum Flag
{
Default = 0x0000, Binary = 0x0001, MSB = 0x0002, LSB = 0x0004,
Swap = 0x0006, VertexNormal = 0x0010, VertexColor = 0x0020, VertexTexCoord = 0x0040,
EdgeColor = 0x0080, FaceNormal = 0x0100, FaceColor = 0x0200, FaceTexCoord = 0x0400,
ColorAlpha = 0x0800, ColorFloat = 0x1000, Custom = 0x2000
}
這些options可以讓你自定義讀取/寫入網格。
OpenMesh 讀網格
如果想要在讀取obj網格的時候自動讀取紋理坐標,只需要添加讀取紋理坐標的option,注意在讀取網格之前要先給紋理坐標分配內存,即request_vertex_texcoords2D()。讀取法向或其他信息也是一樣。
。
1 OpenMesh::IO::Options opt_read = 0x0040; //選項控制讀取紋理坐標
2 ptr_mesh_->request_vertex_texcoords2D();
3 if ( !OpenMesh::IO::read_mesh(*ptr_mesh_, byfilename.data(), opt_read) )
4 {
5 std::cerr<< "Cannot Open mesh to file '1.obj'" << std::endl;
6 return;
7 }
OpenMesh 寫網格
如果要想在寫入網格時寫入頂點的法向信息,也是同樣的。
1 OpenMesh::IO::Options opt_write = OpenMesh::IO::Options::VertexNormal;
2 if (!OpenMesh::IO::write_mesh(*ptr_mesh_, "mesh.obj", opt_write))
3 {
4 std::cerr << "Cannot Write mesh to file" << std::endl;
5 return;
6 }
如果要控制寫入網格的數據精度,也很簡單:
1 OpenMesh::IO::write_mesh(*ptr_mesh_, "mesh.obj", opt_write, 12)
總結
以上是生活随笔為你收集整理的OpenMesh 读写网格控制(读取写入纹理坐标,法向等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下轻松切换GDM, Ligh
- 下一篇: moveTo( )方法