问题描述
如果我具有以下条件:
- 顶点数组:包含具有x,y,z值的网格的顶点。
- 索引数组:包含将顶点链接在一起的索引
如何计算有向半边?
解决方法
要构建半边数据结构,我知道的最简单的方法是使用地图。
每个顶点id是其在数组中的索引,每个半边的id是组成该边的经点对的顶点。
我假设您只处理三角形网格,可以将其概括为多边形面,但出于解释的原因,它使其更简单。
- 对索引数组进行3乘3迭代(3个索引组成一个面。)
- 假设i,j,k是您刚刚获取的3个索引。那么您的3个半边是(i,j); (j,k); (k,i)。
- 检查地图,如果地图中已经有一个半边的排列(例如k,j),则为该对边。否则我们找不到边缘。
- 如果该对存在,则在第一个边缘之外分配新发现的边缘。
- 否则,分配2个插槽并将新边存储在第一个位置。 (当您更改查找对时,它将分配在另一个插槽上。)
如果您需要实现参考: https://gitlab.com/Makogan/vkengine/-/blob/master/Src/Engine/MasterEngine/Geometry/HMesh.hpp