至于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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。