OpenGl에 익숙하지 않고 각 픽셀 색을 받고 그에 따라 뷰를 업데이트하는 간단한 GLSurfaceView를 작성하려고합니다. 어디서나이 작업을 수행 할 수 없습니다. 어느 누구도 도움이 될 수 있습니다.GLSurfaceView는 각 픽셀을 다른 색으로 설정합니다.
0
A
답변
0
우선 프레임 버퍼의 각 픽셀을 특정 색상으로 설정하지 않아도됩니다. 성능이 좋지 않고 불쾌합니다. 그것에 대해 생각 해봐. 당신은 약 786432 다른 픽셀 색상 thats 1024 x 768 픽셀의 frameBuffer가 !!!! 이 작업을 수행하는 가장 좋은 방법은 3 개의 꼭지점이있는 삼각형을 만든 다음 각 꼭지점에 색상을 지정하는 것입니다. 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);
}
주, 프로젝션 등 때마다이 프로세스가 일시 정지하거나 다시 전화를해야 들렸다 것을 의미하는 OpenGL을 STATES 있습니다. 이 예제는 현재 성능상으로 최적화되지 않았지만 지금은 이해할 수없는 점을 명심하십시오. OpenGL ES 상태를주의 깊게 연구하고 그래픽 파이프 라인에 대해 배울 것을 제안합니다. 처음에는 2 차원으로 가십시오 (othrographic 투영에 대한 힌트 연구). identity, modelView 및 viewPort와 같은 행렬을 살펴보십시오.