Android OpenGL ES 2中二维图形的矩阵模式

Android OpenGL ES 2中二维图形的矩阵模式,android,opengl-es-2.0,Android,Opengl Es 2.0,至于OpenGLES2,我知道它不再有任何矩阵(矩阵堆栈)。所以我必须创建自己的矩阵 我想做的就是画一些简单的2D图形,比如几个矩形 我发现很多代码都使用OpenGL ES 1或更老的OpenGL,其中仍然有一个矩阵堆栈,因此我无法在2.0中直接使用它 我相信我需要这样的代码 public void onSurfaceCreated(GL10 unused, EGLConfig eglConfig) { // Set the background frame color GLES

至于OpenGLES2,我知道它不再有任何矩阵(矩阵堆栈)。所以我必须创建自己的矩阵

我想做的就是画一些简单的2D图形,比如几个矩形

我发现很多代码都使用OpenGL ES 1或更老的OpenGL,其中仍然有一个矩阵堆栈,因此我无法在2.0中直接使用它

我相信我需要这样的代码

public void onSurfaceCreated(GL10 unused, EGLConfig eglConfig) {
    // Set the background frame color
    GLES20.glClearColor(0.1f, 0.3f, 0.5f, 1.0f);

    // Set 2D drawing mode
    GLES20.glViewport(0, 0, windowWidth, windowHeight);
    GLES20.glMatrixMode(GL_PROJECTION);
    GLES20.glLoadIdentity();
    GLES20.glOrtho(0, windowWidth, windowHeight, 0, -1, 1);
    GLES20.glDisable(GLES20.GL_DEPTH_TEST);
}
但是不再有任何方法glMatrixMode、glLoadIdentity和glOrtho

我如何将其转换为OpenGL ES 2以设置为2D绘图?我相信我可以使用android提供的Matrix类,但我不确定如何使用。

基本上,您不会使用OpenGL ES 2.0“设置”任何矩阵(当您设置其他内容时,如视口、禁用GL\u深度测试等)。相反,您可以自己创建和管理矩阵,并在每个帧渲染时将其传递给着色器

您只需创建一个正交投影矩阵,然后将其作为统一体传递给着色器(例如:glUniformMatrix4fv)

我无法评论Android如何实现这一点,但如果您有一个Matrix类,它应该具有创建正交投影矩阵的函数。然后,在调用glDrawArrays/glDrawElements/etc之前,只需将指向数据(即16个浮点-4x4矩阵)的指针传递给glUniformMatrix4fv

因此,您的上述设置功能将小得多

public void onSurfaceCreated(GL10 unused, EGLConfig eglConfig) {
    // Set the background frame color
    GLES20.glClearColor(0.1f, 0.3f, 0.5f, 1.0f);

    // Set 2D drawing mode
    GLES20.glViewport(0, 0, windowWidth, windowHeight);
    GLES20.glDisable(GLES20.GL_DEPTH_TEST);
}
但是渲染函数看起来会有所不同(您仍然可以在上面创建正交投影矩阵…只要确保在必要时进行更新即可..例如:屏幕大小调整/移动/等等)

对于Android,本页介绍的内容非常全面: