我正在使用两个库(Opencascade和DWF Toolkit)构建CAD文件转换器。
然而,我的问题是平台无关的:
已知:
我已经生成了一个网格,它是通过我的应用程序构建的模型的三角形面列表。每个三角形由三个顶点定义,这些顶点由三个浮点数(x、y和z坐标)组成。由于三角形形成了网格,大多数顶点被多个三角形共享。
目标:
我需要找到唯一顶点的列表,并生成一个由三个索引元组组成的面数组,这些索引在该列表中。
我想要做的是:
//step 1: build a list of unique vertices
for each triangle
for each vertex in triangle
if not vertex in listOfVertices
Add vertex to listOfVertices
//step 2: build a list of faces
for each triangle
for each vertex in triangle
Get Vertex Index From listOfvertices
AddToMap(vertex Index, triangle)
虽然我已经有一个实现方法可以做到这一点,但是第一步(生成唯一顶点列表)非常慢,时间复杂度为O(n!),因为每个顶点都要与列表中的所有顶点进行比较。我想:“嘿,让我们使用std::map构建我的顶点组件的哈希映射表,那应该可以加快速度!” ,但是发现从三个浮点值生成唯一键不是一项微不足道的任务。
在这里,stackoverflow的专家们发挥了作用:我需要一种能够处理3个浮点数的哈希函数,或者任何其他能够从3D顶点位置生成唯一值的函数。