2012-04-19 7 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)です。

単に三角形が表示される深度の範囲外です。私は赤の画面フラッシュアップの上部を作るれるglMatrixMode(GL_PROJECTION)とglOrthox(...)を加え

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

(三角形の色が、それでも:

onSurfaceCreated単純な射影行列を追加してみてください私は座標を変更したので混乱し、同じ位置に留まります)。そして活力の瞬間の後、それは数分の1秒で消えます。そう? – mcxme

関連する問題