据我所知,每个顶点都指定了法线,而在OpenGL中,“顶点”不仅指空间中的一个点,还指其相关的法线(以及其他一些数据)。对于诸如面部成直角的立方体的模型,这将是有问题的,因为每个几何顶点需要3个法线,每个面一个法线。显而易见的解决方案似乎是为每个面指定4个不同的顶点和适当的法线(即不要在面之间共享顶点),但这种方法似乎非常浪费。有没有更好的方法让我实际上共享顶点位置而不共享法线?
答案 0 :(得分:7)
正如您所写,顶点是位置,法线,纹理坐标等的整个矢量。
如果这些属性中只有一个不同,则它是一个完全不同的顶点。
但这种做法似乎非常浪费。
不同的属性,不同的顶点。这不是一个难以理解的概念。现代GPU采用顶点缓存,该顶点缓存使用顶点属性作为顶点变换阶段的缓存输出的关键字。如果可以进行属性共享,则无法以有效的方式实现此缓存。
有没有更好的方法让我实际上共享顶点位置而不共享法线?
你为什么要那样做?具有不同法线的顶点是不同的顶点。试图节省一点内存会打开一大堆蠕虫。不仅用于缓存,还用于程序的其他部分。
单独的顶点具有单独的法线实际上是一件好事。