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

时间:2015-05-15 17:03:06

标签: opengl-es opengl-es-2.0

有没有办法渲染一套不​​同于-1,-1到1,1之间的标准等距网格的屏幕坐标? 我不是在讨论可以通过顶点着色器中的变换实现的变换。 特别是ES2会很好,但任何版本都可以。

这甚至是直接与OpenGl相关还是通常由管道库提供的标准网格?

1 个答案:

答案 0 :(得分:1)

不,没有其他办法。您在顶点(或细分或几何)着色器中写入gl_Position的值是剪辑空间坐标。 GPU将这些转换为规范化的设备空间(" [ - 1,1]网格")除以w坐标(当然是在实际的基元剪切之后),并最终使用视口参数来将结果转换为窗口空间

当您想要使用渲染管道时,无法直接使用窗口坐标。有一些操作绕过该管道的大部分,例如frambuffer blitting,它提供了一种有限的方式将一些东西直接绘制到帧缓冲区。

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