假设你有一个网格。考虑一个三角形。假设您想知道哪个三角形是该三角形的邻居。
事实上:
OpenGL(或3D管道的某些其他方面)是否以某种方式“了解”此信息?
我知道找到相邻三角形的唯一方法是简单地浏览网格的所有顶点。
我的问题:
在实际的3D管道级别,确定“硬件”知道哪些三角形相邻 ??
或者是否存在某种魔法,也许还有Shader级别的方法可以立即给出这些答案?
或者,或许物理层在某种程度上可以快速知道碰撞网格的哪个tris相邻?
或者,您是否可以通过编写自定义着色器获取此信息,着色器级别是否“知道”此信息?
什么是低价专家?感谢
PS当然,如果这个信息不是“来自硬件”,最好的办法是维护网格的某种空间数据库。如果信息已经从管道/硬件的某些方面可用,那么很容易,但很愚蠢。谢谢!的
LATER NOTE ,我现在已经广泛讨论了这个问题,他们是一位致力于硬件的coupla folx。
以下是答案:
事实上,总之,3D管道不知道关于相邻的三角形:就是这么简单。只有与相同的三角形中的其他两个相对应才能渲染顶点,就像Anteru解释的那样。希望它可以帮到某人。
答案 0 :(得分:2)
不,OpenGL不知道也不关心什么是近在咫尺。它单独呈现每个三角形。相邻三角形相关的唯一情况是使用几何着色器,但在这种情况下,您必须提供邻接信息。
对于渲染,硬件只关心共享哪些顶点,因此如果可能的话,它们不会经常遮挡它们(即,如果它们适合顶点缓存。)
答案 1 :(得分:1)
我对Open GL的理解是它只是描绘了你所说的。它不维护任何内部列表或层次结构。所以不,它不会。
答案 2 :(得分:1)
Open GL ES可能不知道哪些三角形彼此“接近”,但iOS设备硬件使用的GPU中基于图块的延迟渲染器可能会这样做,至少下降到“相同图块”级别。但是,此信息对应用程序代码不透明。
答案 3 :(得分:0)
您可以创建邻近的数据结构。如果网格存储为:
每个顶点都很容易创建使用该顶点的三角形索引列表。有了它,为了检查相邻的三角形,只测试3个列表中的三角形就足够了。