2

据我了解,法线是按顶点指定的,在 OpenGL 中,“顶点”不仅指空间中的一个点,还指与其相关的法线(和其他一些数据)。对于像立方体这样面成直角的模型,这将是有问题的,因为每个几何顶点需要 3 个法线,每个面一个。显而易见的解决方案似乎是只为每个面指定 4 个具有适当法线的不同顶点(即不要在面之间共享顶点),但这种方法似乎非常浪费。有没有更好的方法可以让我在不共享法线的情况下共享顶点位置?

4

1 回答 1

7

正如您所写,顶点是位置、法线、纹理坐标等的整个向量。

如果这些属性中只有一个不同,那么它就是一个完全不同的顶点。

但是这种方法似乎很浪费。

不同的属性,不同的顶点。这不是一个很难理解的概念。现代 GPU 采用顶点缓存,该缓存使用顶点属性作为顶点变换阶段缓存输出的键。如果属性共享是可能的,那么这个缓存就不能以一种有效的方式实现。

有没有更好的方法可以让我在不共享法线的情况下共享顶点位置?

你为什么想这么做?具有不同法线的顶点是不同的顶点。试图节省一点内存会打开一大堆蠕虫。不仅适用于缓存,还适用于程序的其他部分。

拥有单独的顶点和单独的法线实际上是一件好事。

于 2013-10-08T00:44:02.147 回答