我正在OpenGL中渲染四面体网格。每个面使用一个三角形绘制每个四面体(每个四面体总共4个三角形)。我正在寻找一种简单的方法来删除网格的内部元素。例如,如果网格的形状是一个单位球体(以原点为中心),则我可以对四面体中每个面的三个坐标求平均值,并且只绘制一个使距原点的距离最大的面。这将产生球形 shell 。

我正在使用的网格比球体还复杂:)。

最佳答案

根据您的描述,我相信,当一个面仅是一个四面体的一部分时,它就是该壳的一部分。通过创建到面的每个点的连接点列表,可以找到面所属的四面体的数量。然后只需找出每个列表中所有三个列表中共有多少个点-这是一个面/三角形所包含的四面体的数量。

我能想到的高级伪代码是:

bool isPartOfShell(Triangle triangle)
{
  foreach(Point p in triangle)
    make a list of all connected points in p

  x = the number of points common in all lists

  return x == 1;
}

关于c++ - 去除四面体网格中内部元素的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12094200/

10-09 23:41