TBN的使用方式
LearnOpenGL指出,使用TBN矩阵转换法线坐标系时有两种常见方式,一是在顶点着色器中计算TBN,让后把TBN传给片元着色器用于将法线转化到世界坐标系;其次是在顶点着色器中直接利用TBN的逆将光源属性转化到切线空间之下,这样可以避免片元着色器中进行矩阵运算。因此实现时通常偏向于第二种
不过实际上,第二种方式在片元着色器性能受限的旧设备上能够起到优化作用,并且仅适用于单光源的场景,因为多光源需要对每个光源都进行变换和差值,性能反而可能会更低。【参考】
Cube Map的轴向
不同于普通纹理,Cube Map中每个图像原点是位于左下角的,因此加载图片时无需进行翻转。【参考】
OpenGL坐标系轴向改变
如果一直在右手系中进行变换,最终NDC的深度值越小越远,与知觉相悖。OpenGL中,投影矩阵会将右手系变为左手系(即反转Z),从而使得深度值越大越远。
调试技巧
Debug技巧,直接加断点,定位GL报错位置。
Sampler绑定问题
Sampler不同,不能绑定相同的unit,导致default情况下,产生冲突(GL_INVALID_OPERATION error generated. State(s) are invalid: program texture usage)
材质大小
材质大小由glTexImage2D决定,Viewport仅影响写入