没有重复顶点的 OpenGL 纹理映射

OpenGL texture mapping without duplicate vertices

我使用 OpenGL 已经有一段时间了,现在我正在优化我的应用程序的各个方面。

问题在于:在某些情况下,我最终会为纹理贴图复制顶点。我一直在使用这本书: http://staff.fit.ac.cy/eng.ap/FALL2017/3d-game-development-with-lwjgl.pdf

您可以转到第 70-71 页查看问题和建议的解决方案。基本上,它表示当一个顶点需要为不同的面具有不同的纹理坐标时 - 您必须复制该顶点。 那是唯一的解决办法。

但我犹豫了——是吗?对于顶点,许多 UV 贴图都会出现坐标被切开一点的情况。 IE。顶点最终有不同的坐标。复制它们似乎是一种巨大的浪费。

有没有其他方法可以做到这一点?

顶点不仅仅是一个位置。顶点是位置、颜色、纹理坐标以及您要放入其中的任何其他属性的整个向量。

But I hesitate - is it?

是的。这也是执行此操作的最有效方法,因为这样可以更轻松地进行缓存。

Is there a way to do it a different way?

您可以为每个属性使用不同的数组,然后有一个主索引数组来寻址到辅助索引数组,每个属性一个,然后对每个属性进行查找。

两个间接和非常小的缓存一致性。总的来说,二级索引数组的开销会比 "few" 个重复位置顶点的开销小得多。而且您正在避免双重间接寻址。

总的来说,一些重复顶点位置的方式也是性能最高的方式。