从网格中读取顶点和三角形
CGAL: Read vertices and triangles from mesh
我只是花了几个小时在Visual Studio c++中的CGAL试图了解网格是如何工作的。我想要的是访问顶点和三角形的列表(顶点是double[3]的形式,三角形是int[3]的形式)。以下是我正在编写的脚本:
http://doc.cgal.org/latest/Surface_mesher/Surface_mesher_2mesh_a_3d_gray_image_8cpp-example.html关键是-函数CGAL::output_surface_facets_to_off (out, c2t3);
以。off格式输出我一个很好的文件(由MeshLab访问),但我不能通过操纵c2t3
或tr
变量来做任何类似的事情。我期待的是这样的内容:
c2t3。顶点(从0到N)和c2t3。三角形(从0到M),值为整数的三倍。我得到的是顶点列表,切面列表,单元格列表,边列表。除了在非排序的顶点列表中查找每个顶点编号,没有其他方法可以从facet中获得顶点编号。
谁能解决我的问题,指出我做错了什么?此外,CGAL的API非常…生的。挖掘源代码也是非常硬核的——我找不到output_surface函数体。好的,我在Complex_2_in_triangulation_3_file_writer.h
文件中找到了答案。显然,CGAL库正在创建整个地图的顶点和寻找面顶点在这个地图。代码部分:
using CGAL::Surface_mesher::number_of_facets_on_surface;
typedef typename C2t3::Triangulation Tr;
typedef typename Tr::Finite_facets_iterator Finite_facets_iterator;
typedef typename Tr::Finite_vertices_iterator Finite_vertices_iterator;
typedef typename Tr::Facet Facet;
typedef typename Tr::Edge Edge;
typedef typename Tr::Vertex_handle Vertex_handle;
std::map<Vertex_handle, int> V;
int inum = 0;
for(Finite_vertices_iterator vit = tr.finite_vertices_begin();
vit != tr.finite_vertices_end();
++vit)
{
V[vit] = inum++;
}
for( Finite_facets_iterator fit = tr.finite_facets_begin();
fit != tr.finite_facets_end(); ++fit)
{
const typename Tr::Cell_handle cell = fit->first;
const int& index = fit->second;
if (cell->is_facet_on_surface(index)==true)
{
const int index1 = V[cell->vertex(tr.vertex_triple_index(index, 0))];
const int index2 = V[cell->vertex(tr.vertex_triple_index(index, 1))];
const int index3 = V[cell->vertex(tr.vertex_triple_index(index, 2))];
}
}
相关文章:
- 如何循环打印顶点结构
- 绘制旋转的三角形
- 如何用for循环在c++中生成单词三角形
- D3D11-将混合权重和索引传递到顶点着色器
- 如何使用递归打印修改后的星号三角形图案
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- C++ 创建带有 for 循环的三角形
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Eigen c++ 三角形来自
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 给定一个用三角形镶嵌的补丁,如何修改其新的顶点位置
- 从三角形3D顶点确定DZ/DX值
- OpenGL - 不渲染顶点/三角形
- 如何在现代 OpenGl 中选择网格的顶点或三角形(上面的 3.3)
- 如何在约束delaunay三角剖分中获取三角形的顶点
- C++程序在试图显示一个顶点从数据文件中读取的三角形时会冻结
- 从网格中读取顶点和三角形
- C++分层表示2D顶点、线段和三角形的数据结构(缓冲区)