纹理坐标
纹理坐标范围0-1。假如0和1的纹理坐标采样到图片的第一个像素和最后一个像素,那么普通计算纹理坐标不应该是x/width而应该是x/(width-1)。反过来说如果0表示第一个像素的左上角,1表示最后一个像素的右下角,这样一切就能说通了。
纹理坐标定义在左下角为原点,y轴向上。而OpenGL实际实现的时候当成左上角为原点,y轴向下了。这是为什么加载纹理的时候需要y翻转的原因。
正交投影
正交投影中near和far含义。LearnOpenGL教程中错误的以为near far是z 坐标最小值和最大值。这也是错误的,应该是-near和-far 的最小值和最大值。这一点和透视投影是相同的,只是在透视投影中 near 和 far 从来不会是负值,所以大家都理解成距离相机的距离了。
在绘制屏幕二维对象时,通过翻转正交投影的上下线,就可以让坐标系以右上角为原点,y轴向下。这样就能使用传统的屏幕空间坐标系了。
NDC坐标空间
NDC坐标空间z的范围。z坐标范围应该是-1到1(DirectX里面才是0到1)。深度值是0到1,这中变换是在视口变换中进行的。
NDC是左手系。虽然OpenGL号称右手系,但是可编程管线是不管世界空间坐标系的。而OpenGL使用的NDC空间则是左手系,这么说来称OpenGL是左手系一点都不为错。网上有人说左右手坐标系和矩阵左乘右乘有关系,这属于一本正经的胡说八道,两者没有任何关系。
光照坐标系
光照计算可以在世界空间,但是大部分都选择在视图空间计算的,这样少一个相机位置的变量。但是在凹凸贴图的情况下,实在切空间计算的。在切空间计算能减少运算量。