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