0
我是OpenGl的新手,我试图编写一个简单的GLSurfaceView,它接收每个像素的颜色并相应地更新视图。 我无法找到任何地方如何做到这一点。任何人都可以帮忙。GLSurfaceView将每个像素设置为不同的颜色
我是OpenGl的新手,我试图编写一个简单的GLSurfaceView,它接收每个像素的颜色并相应地更新视图。 我无法找到任何地方如何做到这一点。任何人都可以帮忙。GLSurfaceView将每个像素设置为不同的颜色
首先你不需要用特定的颜色设置帧缓冲区的每个像素。它的表现糟糕而令人讨厌。想想看。你有一个1024×768像素的frameBuffer,这大概786432不同的像素颜色! 做到这一点的最佳方法是创建3个顶点的Tringle,然后为每个顶点赋予一种颜色。 OpenGL将自动生成一个很好的三角形,并且在这三个顶点上指定颜色。
让我们在这里添加一些代码吧?
public void triangleRender() {
//add the background buffer color you want
gl.glClearColor(1,0,0,1);
//clear the buffer
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, 320, 0, 480, 1, -1);
FloatBuffer vertices;
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * 2 * 4);
byteBuffer.order(ByteOrder.nativeOrder());
vertices = byteBuffer.asFloatBuffer();
vertices.put(new float[] { 0.0f, 0.0f, 1, 0, 0, 1,
319.0f, 0.0f, 0, 1, 0, 1,
160.0f, 479.0f, 0, 0, 1, 1});
vertices.flip();
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
vertices.position(0);
gl.glVertexPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, vertices);
vertices.position(2);
gl.glColorPointer(4, GL10.GL_FLOAT, VERTEX_SIZE, vertices);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
注意,每个能dissable,投影等都是openGL的STATES这意味着每一次的过程中暂停或采空你必须再次打电话给他们。 请记住,这个例子不是性能优化,你现在还不认为。 我建议你仔细研究openGL es状态,了解图形管道。首先去2d(暗示研究投影),然后看看像身份,modelView和viewPort这样的矩阵。