OpenGL ES 2.0:设置2D投影


15

本文总体上介绍了如何使用固定功能管线绘制清晰的OpenGL 2D图形。

由于OpenGL ES 2.0具有某些ES 1.x功能不可用(例如:glOrtho()),因此必须在“片段/顶点”着色器中替换其功能。

我的问题是,如何在可编程功能管线中设置以下2D投影?

const XSize = 640, YSize = 480
glMatrixMode (GL_PROJECTION)
glLoadIdentity ();
glOrtho (0, XSize, YSize, 0, 0, 1)
glMatrixMode (GL_MODELVIEW)

如何配置片段和顶点着色器以完全替代上述固定功能2D投影设置?

Answers:


12

在我的OpenGL ES 2.X引擎中,我在CPU端计算MVP矩阵(模型视图投影)并将其注入到顶点着色器中。

正交投影是4 * 4矩阵。当我拥有MVP时,我使用以下命令将其注入到顶点着色器中:

 mMvpLoc = getUniformLocation("uMvp");
 glUniformMatrix4fv(mMvpLoc, 1, false, mMvp.pointer());

mMvp是我在CPU端的矩阵4 * 4。加载程序着色器后,只能执行一次getUniformLocation。

顶点着色器的一个示例:

uniform mat4    uMvp;
attribute vec3 aPosition;
varying vec4 vColor;

void main() {
   vec4 position = vec4(aPosition.xyz, 1.);
   gl_Position = uMvp * position;
}

gl_Position是一个特殊的预定义变量。它必须包含顶点的位置。

片段着色器的一个示例。对于每个绘制点,必须计算最终颜色“ gl_FragColor”:

#ifdef GL_ES
precision highp float;
#endif

void main(void)
{
   gl_FragColor = vColor;
}

该程序绘制一个三角形,并为每个顶点定义颜色的平滑度。

有关更好的教程,请查看此精彩的文档。


您好埃利斯,这是一个很好的完整答案。非常感谢你。问候。
Bunkai.Satori 2010年

9

从glOrtho文档中,替换为值:

         2
    ------------       0              0             -1
       XSize
                       2
        0         ------------        0              1
                   - Ysize
        0              0              -2            -1
        0              0              0              1

将此矩阵存储为统一的,然后可以将其应用(即做M.v乘积)到传入的顶点位置。


亲爱的巴巴,谢谢您的回答。因此,基本上,ES2.0中没有其他区别,只是手动创建glOrtho()矩阵替换。
Bunkai.Satori 2010年

@ Bunkai.Satori:嗯,通常情况下,GL还有更多的模型视图和投影组合上传到制服上。
巴哈巴(Bahbar)2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.