OpenGL开发时遇到的一些问题&经验

汇总了OpenGL开发过程中遇到的一些图形开发的相关问题和经验

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仅影响写入

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部