2

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

实际上:

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

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

我的问题:

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

或者是否有某种魔法,也许是着色器级别的方法可以立即给出这些答案?

或者,也许,物理层以某种方式快速知道碰撞网格的哪些 tris 是相邻的?

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

怎么了,低级高手??谢谢

PS当然,如果“从硬件”无法获得此信息,最好的办法是维护网格的某种空间数据库。很容易,但如果信息已经从管道/硬件的某些方面可用,那就很傻了。谢谢!


稍后为未来的读者注意,我现在已经与致力于硬件的 coupla folx 广泛讨论了这个问题。

这是答案:

事实上,总而言之,3D 管道不知道相邻的三角形:就这么简单。正如 Anteru 解释的那样,一个顶点仅针对同一个三角形中的其他两个顶点进行渲染,仅此而已。希望它可以帮助某人。

4

4 回答 4

2

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

对于渲染,硬件只关心共享哪些顶点,因此如果可能(即,如果它们适合顶点缓存),它不会对它们进行不必要的着色。

于 2011-12-09T21:04:11.367 回答
1

我对 Open GL 的理解是它只是画出你告诉它的内容。它不维护任何内部列表或层次结构。所以不,它不会。

于 2011-12-09T21:08:23.233 回答
1

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

于 2011-12-09T23:32:52.133 回答
0

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

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

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

于 2011-12-10T10:15:54.610 回答