给定一个顶点数组和一个索引数组,如何计算半边线?

问题描述

如果我具有以下条件:

  • 顶点数组:包含具有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