如何在 Opengl 中渲染一组自定义屏幕坐标

How do I render a custom set of screen coordinates in Opengl

有什么方法可以渲染一组不同于 -1,-1 到 1,1 之间的标准等距网格的屏幕坐标? 我不是在谈论可以通过顶点着色器中的变换来完成的变换。 特别是 ES2 会很好,但任何版本都可以。

这是否直接与 OpenGl 相关,或者通常由管道库提供的标准网格?

不,没有其他办法。您在顶点(或曲面细分或几何体)着色器中写入 gl_Position 的值是 clip space 坐标。 GPU 将通过除以 w 坐标(当然是在实际图元裁剪之后)将这些转换为规范化设备 space(“[-1,1] 网格”),并最终使用视口参数进行转换结果为 window space.

想使用渲染管线时,没有办法直接使用window坐标。有一些操作会绕过该管道的大部分,例如 frambuffer blitting,它提供了一种将某些内容直接绘制到帧缓冲区的有限方式。

但是,使用像素坐标并不难实现。您基本上必须反转 GPU 将要执行的转换。虽然通常 "ortho" 矩阵用于此,但唯一需要的操作是缩放和平移,归结为每个组件的融合乘加,因此您可以在顶点着色器中非常高效地实现这一点。