GLSL怎样在使用glDrawElements时传输顶点法向量

stackoverflow的说法是正确的。在六个三角形中用到3个法向量这个说法是错误的。12个三角形占据8个顶点24个法向量,当然要用索引的方法让顶点公用法向量。

■网友
是没有必要啊……索引并不是万能的,只不过日常模型中较光滑的面比较多,直接共用顶点的情况比较多,索引可以省存储空间(减少宽带压力)。如果你非要像obj文件一样顶点/法线/纹理坐标分开索引的话,也不是不行。把数据存纹理然后手动根据索引在pixel shader里访问纹理吧……或者直接用geometry shader生成。只不过这些方法都是吃力不讨好。
■网友
可以让顶点只包含Position
通过8个顶点和36个索引来绘制12个三角形
然后通过几何着色器来生成每个三角形顶点的法线
优点自然是节省存储和带宽
【GLSL怎样在使用glDrawElements时传输顶点法向量】 缺点是GS性能似乎不太好

■网友
顶点使用相邻面平均法线的前提是这些面之间所构成的角度接近180°,而对于cube这种相邻面角度远小于180°的情况,你只能增加冗余的顶点!你可以绘制一个使用平均法线的cube,然后打上光,看看什么效果。索引模式相对立即模式的好处是提前告知底层一次绘制有多大数据量,方便优化,跟你要绘制多少个顶点没关系!无论啥模式顶点多了都得跪啊!


    推荐阅读