C++ 删除数组中的重复项并更新引用索引。(删除重复的顶点和面)
我需要找到一种快速的方法来删除网格的重复顶点和面 顶点和面存储在缓冲区中,因为我使用的是大型数据集,我使用C++ 删除数组中的重复项并更新引用索引。(删除重复的顶点和面),c++,algorithm,sorting,graphics,3d,C++,Algorithm,Sorting,Graphics,3d,我需要找到一种快速的方法来删除网格的重复顶点和面 顶点和面存储在缓冲区中,因为我使用的是大型数据集,我使用boost::shared_array vertexBuffer和boost::shared_array faceBuffer作为缓冲区。 接下来,我创建一个KD搜索树并检查每个点是否有一个距离为dist(点,邻居)的邻居,为什么需要将顶点移动到末端?我认为,考虑到一个大数组,该操作将花费不必要的成本。因为创建一个新的顶点数组并插入所有不重复的顶点将导致分配大量新内存,这可能超过可用内存量。
boost::shared_array vertexBuffer
和boost::shared_array faceBuffer
作为缓冲区。
接下来,我创建一个KD搜索树并检查每个点是否有一个距离为
dist(点,邻居)的邻居,为什么需要将顶点移动到末端?我认为,考虑到一个大数组,该操作将花费不必要的成本。因为创建一个新的顶点数组并插入所有不重复的顶点将导致分配大量新内存,这可能超过可用内存量。因此,在一天结束时,您希望将这些数组传递给某个渲染引擎?几乎是这样。删除重复的顶点和面后,我在网格上运行了一些简化算法(这对重复的顶点和面不起作用),然后可以重新绘制网格。好的,为什么不能只更改面数组中的顶点索引,将它们和(按原样)顶点数组传递给简化算法?简化算法应只考虑面中表示的顶点的连通性(拓扑)。在此过程中将不会引用阵列中重复的顶点。最后,还应该能够按原样将顶点数组传递给渲染器。同样,这些未被几何体引用的顶点将不会被“使用”
1.3 4.5 3.7|1.8 4.5 3.7|1.3 4.5 3.7|4.3 8.5 2.7|4.9 4.5 2.7
-----------|-----------|-----------|-----------|-----------
Vertex 0 Vertex 1 Vertex 2 Vertex 3 Vertex 4
0 1 3 | 1 2 3 | 4 0 1 | 2 3 4
------------------------------------------------
Face 0 | Face 1 | Face 2 | Face 3
1.3 4.5 3.7|1.8 4.5 3.7|4.3 8.5 2.7|4.9 4.5 2.7|1.3 4.5 3.7
-----------|-----------|-----------|-----------|-----------
Vertex 0 Vertex 1 Vertex 3 Vertex 4 Vertex 2
NewID 0 NewID 1 NewID 2 NewID 3
0 1 2 | 1 0 2 | 3 0 1 | 0 2 3
------------------------------------------------
Face 0 | Face 1 | Face 2 | Face 3