2012-04-19 5 views
-1

Android 장치에서 OpenGL ES를 사용하여 좋아하는 모양을 표시하고 싶습니다. 문제는 내 코드가 직사각형과 같은 쉬운 모양에서도 작동하지 않는다는 것입니다 (아래에서 사용하려고합니다).Android OpenGL ES가 TRIANGLES를 사용하여 삼각형 모양을 표시하지 않습니다.

나는 glTranslatef과 함께 뭔가가 잘못되었다고 생각합니다. 나는 모든 값을 조정했지만 그것이 무엇인지 알 수는 없다.

사각형은 점 P(0,0,0), P(0,1,0), P(1,1,0), P(1,0,0)으로 정의됩니다.

private static FloatBuffer getVertexCoords() { 
    float coords[] = { 
     0f, 0f, 0f, // first triangle first point 
     0f, 1f, 0f, // first triangle second point 
     1f, 1f, 0f, // first triangle third point 
     1f, 1f, 0f, // second triangle first point 
     1f, 0f, 0f, // second triangle second point 
     0f, 0f, 0f, // second triangle third point     
     } 
    ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4); // n coords * 4 bytes per float 
    vbb.order(ByteOrder.nativeOrder()); 
    FloatBuffer trianglesVB = vbb.asFloatBuffer(); 
    trianglesVB.put(coords); 
    trianglesVB.position(0); 
    return trianglesVB; 
} 


@Override 
public void onDrawFrame(GL10 gl) { 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glLoadIdentity(); 
    gl.glTranslatef(0f, 0f, -4f); 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // glBegin 
    gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, getVertexCoords()); 
    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 2 * 3 * 3); // triangles * points * coords 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); // glEnd 
    int error = gl.glGetError(); 
    if (error != GL10.GL_NO_ERROR) { 
     Log.e(TAG, "OpenGL ES Error: " + error); 
    } 
} 

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
    // think this one doesn't matter 
} 

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // white background 
    gl.glFrontFace(GL10.GL_CW);   // front face is clockwise 

} 

답변

0

난 당신이 어딘가에에 투영 행렬을 필요가 있다고 생각하십시오 Activity에서 나는이 같은 GLSurfaceView.Renderer을 구현했습니다. 설정하지 않으면 정규화 된 장치 좌표로 직접 그려지고 있으며 그 중 유효한 Z 값은 (-1에서 1)까지입니다.

단순히 삼각형이 표시된 깊이 범위를 벗어납니다. onSurfaceCreated에 간단한 투영 행렬을 추가

시도 :

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-10, 10, -10, 10, 0, 10); 
+0

나는 여전히 상단 빨간색 화면 플래시 최대의 일부 (삼각형의 색상 만한다 glMatrixMode (GL_PROJECTION)와 glOrthox (...)를 추가 좌표를 변경했기 때문에 혼란스럽고 동일한 위치에 남아 있습니다). 그리고 활력의 순간 후에 그것은 몇 초 안에 사라집니다. 그래서? – mcxme

관련 문제