2011-02-06 13 views
0

私はAndroidゲームで作業を開始しており、OpenGL ESを学んでいます。私はOpenGLを少し使用しましたが、これまでにかなりの時間前です。私は最近、最近C++でDirectXを使用していたので、グラフィックAPIの概念はかなりよく理解されています。Android 2.1のOpenGL ESで基本VBOを使用した三角形描画問題

私自身がAPIを使って遊んでいて、予期せぬ結果を得ることができなかったとき、私はthisチュートリアルに目を向けると、私はかなり包括的に見えるオンラインを見つけました。私はまだ単純な四角形を表示するための画面を得ることができません(現在、色のない頂点配列以外を使用していません)。

以下は私がいくつかの時間を凝視していた私のレンダラクラスのコードで、私の間違いを見つけることができないので少し夢中になり始めました。グラフィックスAPI(DirectXとOpenGLの両方)では、はるかに複雑なことをやっているので、このような恥ずかしさを感じ、おそらく明らかに目に見えるような見落としを指摘する必要があります。

ありがとうございます!

public class GameRenderer implements Renderer { 

private float red, green, blue = 0.0f; 

private final float vertices[] = { 
     0.5f, -0.5f, 0.0f, // 0, Bottom Right 
     0.5f, 0.5f, 0.0f, // 1, Top Right 
     -0.5f, 0.5f, 0.0f, // 2, Top Left 
     -0.5f, -0.5f, 0.0f, // 3, Bottom Left 
}; 

private final short indices[] = { 
     0, 1, 2, 0, 2, 3 
}; 


private final float colours[] = { 
     1.0f, 1.0f, 1.0f, 
     0.5f, 0.5f, 0.5f, 
     0.5f, 0.5f, 0.5f, 
     0.0f, 0.0f, 0.0f 
}; 

FloatBuffer vFBuff; 
FloatBuffer cFBuff; 

ShortBuffer iSBuff; 

public GameRenderer(){ 
    super(); 
} 

@Override 
public void onDrawFrame(GL10 gl) { 

    gl.glClearColor(red, green, blue, 0.5f); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    gl.glLoadIdentity(); 
    gl.glScalef(2.0f, 2.0f, 0.0f); 
    gl.glTranslatef(0.0f, 0.0f, -4f); 

    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, iSBuff); 
} 

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
    // TODO Auto-generated method stub 
    // set viewport 
    gl.glViewport(0, 0, width, height); 
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    GLU.gluPerspective(gl, 45.0f, (float)width/(float)height, 0.0f, 100.0f); 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
} 

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 

    gl.glShadeModel(GL10.GL_SMOOTH); 
    gl.glClearDepthf(1.0f); 
    gl.glEnable(GL10.GL_DEPTH_TEST); 
    gl.glDepthFunc(GL10.GL_LEQUAL); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 

    ByteBuffer vBBuff = ByteBuffer.allocateDirect(vertices.length * 4); 
    ByteBuffer cBBuff = ByteBuffer.allocateDirect(colours.length * 4); 
    ByteBuffer iBBuff = ByteBuffer.allocateDirect(indices.length * 2); 

    vFBuff = vBBuff.asFloatBuffer(); 
    vFBuff.put(vertices); 
    vFBuff.position(0); 

    cFBuff = cBBuff.asFloatBuffer(); 
    cFBuff.put(colours); 
    cFBuff.position(0); 

    iSBuff = iBBuff.asShortBuffer(); 
    iSBuff.put(indices); 
    iSBuff.position(0); 

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vFBuff); 

    gl.glFrontFace(GL10.GL_CCW); 
    gl.glEnable(GL10.GL_CULL_FACE); 
    gl.glCullFace(GL10.GL_BACK); 
} 

public void setColour(float r, float g, float b) { 
    red = r; 
    blue = b; 
    green = g; 
} 

答えて

0
GLU.gluPerspective(gl, 45.0f, (float)width/(float)height, 0.0f, 100.0f); 

あなたzNearto zeroを設定しないでください:

デプスバッファの精度の(r = zFar/zNear)おおよそlog2(r)ビットが失われた場合。 zNearが0に近づくようrが無限大に近づくので、zNearは0

+0

に設定してはならない、それが現在0に設定されている理由は、私は、通常、他のプロジェクトで使用するものです10.0fだった私の元の値(ためであります)はうまくいかず、0.0fは私が元の作者のために働いたと仮定したチュートリアルで使用されたものです。いずれにせよ、私の四角形はレンダリングされません。 – Andrew

関連する問題