C++ 四面体网格内部元素的去除算法

C++ 四面体网格内部元素的去除算法,c++,opengl,glut,C++,Opengl,Glut,我正在OpenGL中渲染四面体网格。每个四面体使用每个面的三角形绘制(每个四面体总共4个三角形)。我正在寻找一种简单的方法来删除网格的内部元素。例如,如果网格的形状是一个单位球体(以原点为中心),我可以平均四面体中每个面的三个坐标,并且只绘制距离原点最大的面。这将产生一个球形外壳 我正在使用的网格比球体更复杂:)。根据您的描述,我相信当一个面只是一个四面体的一部分时,它是壳的一部分。通过创建面上每个点的连接点列表,可以找到面所属的四面体数。然后找出每个列表中有多少点在所有三个列表中是共同的-这是

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


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

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

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

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;
}

网格的外部是否防水?网格是凸面的吗?@JohnCalsbeek是的,网格将具有防水的外部。我相信网格可能是凹面的。我有一个网格,它是矩形棱柱体,从一边去掉一个半圆。这将是凹面的,对吗?@Styne666我不确定我是否理解点三角形测试。我曾想过做一些类似于(我相信)你所描述的事情。我只是在定义内部的
时遇到了麻烦。网格可以在空间的任何地方。我怎么知道室内是什么?我可以找到网格的中心,然后从那里开始,但是如果网格是凸面的,而我找到的“中心”在网格之外呢?然后我会得到与查找边相反的效果。我假设你的网格也有定义良好的缠绕?i、 你可以看一个三角形,找出它的朝向。如果一个面只属于一个四面体,那这个面不是壳的一部分吗?壳的每个面是否只属于一个四面体?