如何在OpenGL ES 2.0中实现glOrthof

我正试图将我的OpenGL ES 1应用程序转换为OpenGL ES 2应用程序,以便能够使用着色器。 现在我使用glOrthof函数来创build一个“真实大小的视口”,这样我就可以将顶点放置在OpenGL视图中的“实际”像素上。

 glOrthof(0, _frame.size.width, _frame.size.height, 0, -1, 1); 

我很难find如何在OpenGL ES 2实现这一点,有没有人可以告诉我如何做到这一点?

如果没有,有没有人有一个良好的OpenGL ES 1 to OpenGL ES 2教程/解释的链接?

glOrtho方法除了创build一个新的matrix并将当前的投影matrix乘以这个matrix之外别无其他。 有了OpenGL ES 2.0,你必须自己pipe理matrix。 为了复制glOrtho行为,您需要在顶点着色器中使用统一的投影matrix,然后将顶点与顶点相乘。 通常你也有一个模型和一个视图matrix(或者一个组合的模型视图matrix,就像在OpenGL ES 1中一样),在投影变换之前,用你的顶点变换你的顶点。

 uniform mat4 projection; uniform mat4 modelview; attribute vec4 vertex; void main() { gl_Position = projection * (modelview * vertex); } 

glOrtho构造的特定投影matrix可以在这里find。

正如Christian所描述的那样,所有处理顶点的matrixmathglOrthof()您决定,所以您必须复制glOrthof()创build的matrix。 在我的回答中,我提供了以下用于生成这种正交投影matrix的Objective-C方法:

 - (void)loadOrthoMatrix:(GLfloat *)matrix left:(GLfloat)left right:(GLfloat)right bottom:(GLfloat)bottom top:(GLfloat)top near:(GLfloat)near far:(GLfloat)far; { GLfloat r_l = right - left; GLfloat t_b = top - bottom; GLfloat f_n = far - near; GLfloat tx = - (right + left) / (right - left); GLfloat ty = - (top + bottom) / (top - bottom); GLfloat tz = - (far + near) / (far - near); matrix[0] = 2.0f / r_l; matrix[1] = 0.0f; matrix[2] = 0.0f; matrix[3] = tx; matrix[4] = 0.0f; matrix[5] = 2.0f / t_b; matrix[6] = 0.0f; matrix[7] = ty; matrix[8] = 0.0f; matrix[9] = 0.0f; matrix[10] = 2.0f / f_n; matrix[11] = tz; matrix[12] = 0.0f; matrix[13] = 0.0f; matrix[14] = 0.0f; matrix[15] = 1.0f; } 

这里使用的matrix被定义为

 GLfloat orthographicMatrix[16]; 

然后我使用类似下面的东西在我的顶点着色器中应用matrix:

 gl_Position = modelViewProjMatrix * position * orthographicMatrix; 

我的乘法顺序与Christian的顺序不同,所以我可能在这里稍微做了一些事情,但这正是我在OpenGL ES 2.0应用程序(它的源代码可以在这里find)处理这个问题的原因。