我想知道OpenGL如何处理窗口的视口转换。
据我所知,视口转换是通过将视口转换应用于该场景,将场景拉伸到OpenGL窗口。
如果我错了,请纠正我。
答案 0 :(得分:2)
http://www.songho.ca/opengl/gl_transform.html:
窗口坐标(屏幕坐标)
通过应用归一化设备坐标(NDC)来产生 视口转换。 NDC按比例缩放和翻译 适合渲染屏幕。窗口坐标最终是 传递到OpenGL管道的raterization过程成为一个 分段。 glViewport()命令用于定义矩形 渲染最终图像映射的区域。并且,glDepthRange()是 用于确定窗口坐标的z值。窗户 坐标是用上面2的给定参数计算的 功能;
点击链接查看数学详情。
答案 1 :(得分:2)
在裁剪和透视划分之后,所有剩余(可见)顶点坐标x,y,z都介于-1和+1之间 - 这些被称为标准化设备坐标。它们通过适当的比例和移位(即视口转换)映射到设备坐标。
例如,如果视口的大小为1024x768,深度缓冲区为16位且原点为(0,0),那么这些点将缩放(512,384,2 ^ 14)并移位(512,384,2) ^ 14)为设备产生适当的像素和深度值。