使用3D管道查找附近的三角形?

时间:2011-12-09 20:59:09

标签: ios opengl-es 3d mesh polygons

假设你有一个网格。考虑一个三角形。假设您想知道哪个三角形是该三角形的邻居

事实上:

OpenGL(或3D管道的某些其他方面)是否以某种方式“了解”此信息?

我知道找到相邻三角形的唯一方法是简单地浏览网格的所有顶点。

我的问题:

在实际的3D管道级别,确定“硬件”知道哪些三角形相邻 ??

或者是否存在某种魔法,也许还有Shader级别的方法可以立即给出这些答案?

或者,或许物理层在某种程度上可以快速知道碰撞网格的哪个tris相邻?

或者,您是否可以通过编写自定义着色器获取此信息,着色器级别是否“知道”此信息?

什么是低价专家?感谢

PS当然,如果这个信息不是“来自硬件”,最好的办法是维护网格的某种空间数据库。如果信息已经从管道/硬件的某些方面可用,那么很容易,但很愚蠢。谢谢!


对于未来的读者来说,

LATER NOTE ,我现在已经广泛讨论了这个问题,他们是一位致力于硬件的coupla folx。

以下是答案:

事实上,总之,3D管道不知道关于相邻的三角形:就是这么简单。只有与相同的三角形中的其他两个相对应才能渲染顶点,就像Anteru解释的那样。希望它可以帮到某人。

4 个答案:

答案 0 :(得分:2)

不,OpenGL不知道也不关心什么是近在咫尺。它单独呈现每个三角形。相邻三角形相关的唯一情况是使用几何着色器,但在这种情况下,您必须提供邻接信息。

对于渲染,硬件只关心共享哪些顶点,因此如果可能的话,它们不会经常遮挡它们(即,如果它们适合顶点缓存。)

答案 1 :(得分:1)

我对Open GL的理解是它只是描绘了你所说的。它不维护任何内部列表或层次结构。所以不,它不会。

答案 2 :(得分:1)

Open GL ES可能不知道哪些三角形彼此“接近”,但iOS设备硬件使用的GPU中基于图块的延迟渲染器可能会这样做,至少下降到“相同图块”级别。但是,此信息对应用程序代码不透明。

答案 3 :(得分:0)

您可以创建邻近的数据结构。如果网格存储为:

  • 顶点列表
  • 三角形列表,其中每个三角形是顶点索引的三倍。

每个顶点都很容易创建使用该顶点的三角形索引列表。有了它,为了检查相邻的三角形,只测试3个列表中的三角形就足够了。