我想知道OpenGL如何处理视口转换到窗口。
据我了解,视口转换是通过将视口转换应用于该场景来将场景拉伸到 OpenGL 窗口上。
如果我错了,请纠正我。
在裁剪和透视分割之后,所有剩余的(可见的)顶点坐标 x,y,z 都在 -1 和 +1 之间——这些被称为标准化设备坐标。这些通过适当的比例和移位映射到设备坐标——即视口变换。
例如,如果视口大小为 1024x768,具有 16 位深度缓冲区且原点为 (0,0),则点将缩放 (512,384,2^14) 并移动 (512,384,2^14)为设备产生适当的像素和深度值。
http://www.songho.ca/opengl/gl_transform.html:
窗口坐标(屏幕坐标)
它是通过将标准化设备坐标 (NDC) 应用于视口变换来产生的。NDC 被缩放和平移以适应渲染屏幕。窗口坐标最终被传递到 OpenGL 流水线的分级过程,成为一个片段。glViewport() 命令用于定义最终图像映射的渲染区域的矩形。并且,glDepthRange() 用于确定窗口坐标的 z 值。使用上述 2 个函数的给定参数计算窗口坐标;
按照链接查看数学详细信息。