OpenGL ES 2.0:设置2D投影

本文一般介绍如何使用固定functionstream水线绘制清晰的OpenGL 2Dgraphics

  • http://basic4gl.wikispaces.com/2D+Drawing+in+OpenGL

因为OpenGL ES 2.0有一些ES 1.x函数不可用(如:glOrtho()),所以它们的function必须在碎片/顶点着色器中被replace。

我的问题是,如何在可编程functionstream水线中设置以下二维投影?

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

如何将Fragment和Vertex着色器configuration为完全替代上述固定function2D投影设置?

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

正交投影是4×4matrix 。 当我有MVP时,我将它注入到顶点着色器中:

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

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

顶点着色器的一个例子:

 uniform mat4 uMvp; attribute vec3 aPosition; varying vec4 vColor; void main() { vec4 position = vec4(aPosition.xyz, 1.); gl_Position = uMvp * position; } 

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

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

 #ifdef GL_ES precision highp float; #endif void main(void) { gl_FragColor = vColor; } 

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

为了更好的教程,看看这个美好的文件。

从glOrtho文档中,用值代替:

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

将这个matrix存储在一个统一的格式中,然后你可以将它应用到你的input顶点位置。