其他分享
首页 > 其他分享> > android-OpenGL ES 2中2D图形的矩阵模式

android-OpenGL ES 2中2D图形的矩阵模式

作者:互联网

至于OpenGL ES 2,我了解到其中不再有任何矩阵(矩阵堆栈).因此,我必须创建自己的矩阵.

我想要做的就是绘制一些简单的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_DEPTH_TEST等)时).取而代之的是,您可以自己创建和管理矩阵,并将其传递给每个帧渲染的着色器.

您可以只创建一个正交投影矩阵,然后将其作为统一的形式传递到着色器(例如:glUniformMatrix4fv).

我无法确切说明如何使用Android执行此操作,但是如果您有Matrix类,则它应该具有创建正交投影矩阵的功能.然后,您只需在调用glDrawArrays / glDrawElements / etc之前将指向数据的指针(即16个浮点数-4×4矩阵)传递给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的所有功能:

http://www.learnopengles.com/android-lesson-one-getting-started/

标签:android,opengl-es-2-0
来源: https://codeday.me/bug/20191123/2066453.html