在OpenGL中共享顶点位置但不是法线

jay*_*ica 2 opengl normals

据我所知,每个顶点指定法线,而在OpenGL中,"顶点"不仅指空间中的点,还指其相关的法线(以及其他一些数据).对于诸如面部成直角的立方体的模型,这将是有问题的,因为每个几何顶点需要3个法线,每个面一个法线.显而易见的解决方案似乎只是为每个面指定4个不同的顶点和适当的法线(即不要在面之间共享顶点),但这种方法似乎非常浪费.有没有更好的方法让我实际上共享顶点位置而不共享法线?

dat*_*olf 7

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

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

但这种做法似乎非常浪费.

不同的属性,不同的顶点.这不是一个难以理解的概念.现代GPU采用顶点缓存,该顶点缓存使用顶点属性作为顶点变换阶段的缓存输出的关键字.如果可以进行属性共享,则无法以高效的方式实现此缓存.

有没有更好的方法让我实际上共享顶点位置而不共享法线?

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

单独的顶点具有单独的法线实际上是一件好事.