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這樣的矩陣。