我是OpenGl的新手,我正在尝试编写一个简单的GLSurfaceView,它接收每个像素颜色并相应地更新视图。 我无法在任何地方找到如何做到这一点。任何人都可以提供帮助。
答案 0 :(得分:0)
首先,您不需要使用特定颜色设置帧缓冲区的每个像素。它的糟糕和令人讨厌的表现。想一想。你有一个1024 x 768像素的frameBuffer,大约有786432种不同的像素颜色! 执行此操作的最佳方法是创建3个顶点的tringle,然后为每个顶点赋予颜色。 OpenGL将自动生成一个漂亮的三角形,其中包含您在这3个顶点上指定的颜色。
我们在这里添加一些代码吗?
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,projection等都是openGL STATES,这意味着每次进程暂停或停止时都必须再次调用它们。 请记住,此示例不是性能优化的,您现在不会理解。 我建议你仔细研究openGL es状态,了解图形管道。首先去2d(关于othrographic投影的提示研究),还要看一下像identity,modelView和viewPort这样的矩阵。