关于OpenGL中渲染管线的输入与输出?
①对于顶点着色器的输出:输出就是在裁剪空间上的坐标(Clip Space)。
②由GPU自己实现由裁剪空间到NDC(标准化设备坐标)的映射,也即是直接除以裁剪空间坐标的w分量(是一个负值分量)即可
③为什么叫裁剪坐标,因为②除以一个负的分量的结果,会把三个xyz坐标映射到[-1,1]范围内,不在范围内的坐标就会被裁剪
④由于在原本的裁剪空间是标准的右手系,由于除以一个负的分量后,变为了标准的左手系
⑤对于片元着色器的输入是什么?不是裁剪空间的坐标,也不是经过了NDC变换后的标准设备坐标。而是将NDC坐标在经过视口变换(view port)转换为了屏幕坐标(window space)(screen space)
⑥对于片元着色器的输入的屏幕坐标,他的范围就在定义的可视平面的范围内。即
以x轴为例,变换只是将NDC的[-1,1] 线性映射到[x, x+width]范围内。
z轴则会从NDC的[-1,1]映射到[nearVal, farVal]内(默认near=0,far=1)
现在对于NDC坐标的描述也就清楚多了