2012-04-28 12 views
0

私の単純な2D OpenGLゲームに問題があります。 本当に奇妙なことに、私は正しく表示するためにテクスチャを取得しますが、色を単純に変更してパーティクルエフェクトを作成したいときは、何らかの理由でバッファから間違った色が表示されます。私はAndroidのOpenGL ES 1.1を使用していますが、VBOを使用するOpenGLのどのバージョンでも同じです。OpenGL 2Dの色が間違っています

画面などを初期化して、赤い三角形が表示されますが、私のカラーバッファーによれば、白でなければなりません。何が間違っていますか?

 GL11 gl11 = (GL11) gl; 
     gl11.glLoadIdentity(); 
     gl11.glClear(GL_COLOR_BUFFER_BIT); 
     GLU.gluLookAt(gl, 0f, 0f, -container.getCamera().getScale(), 0f, 0f, 0f, 0f, -1f, 0f); 
     gl11.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl11.glEnableClientState(GL10.GL_COLOR_ARRAY); 

     gl11.glTranslatef(container.getCamera().getX(), container.getCamera().getY(), 0.0f); 

     container.addParticle(new ColouredParticle(-container.getCamera().getX(), -container.getCamera().getY(), (float)Math.random(), (float)Math.random(), 0f, 5000)); 

     particleColorBufferPointer = createFloatBuffer(gl11, GL11.GL_ARRAY_BUFFER, new float[] { 
       1f, 1f, 1f, 1f, 
       1f, 1f, 1f, 1f, 
       1f, 1f, 1f, 1f, 

     }); 

     gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, particleColorBufferPointer); 
     gl11.glColorPointer(4, GL10.GL_FLOAT, 0, 0); 

     particleVertexBufferPointer = createFloatBuffer(gl11, GL11.GL_ARRAY_BUFFER, new float[]{ 
       -0.1f, -0.05f, 
       0.1f, -0.05f, 
       0.0f, 0.05f 
     }); 
     gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, particleVertexBufferPointer); 
     gl11.glVertexPointer(2, GL10.GL_FLOAT, 0, 0); 

     gl11.glDrawArrays(GL11.GL_TRIANGLES, 0, 3); 

     gl11.glDeleteBuffers(2, new int[]{particleVertexBufferPointer, particleColorBufferPointer}, 0); 

     gl11.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
     gl11.glDisableClientState(GL10.GL_COLOR_ARRAY); 

     int error = gl11.glGetError(); 
     if(error != GL11.GL_NO_ERROR) { 
      Log.v(TAG, "error " + Integer.toHexString(error)); 
     } 

三角形の頂点と色を含むその単純なハードコードされたfloat配列を、私は前に言ったように色が間違っているいくつかの理由のために、何がおそらくコードのような小さな量と間違って行くことができますか?色は黒以外のものに変わらず、バッファから赤の値だけを読み取るようになります。また、エラーはまったくありません!

createFloatBuffer方法:

private int createFloatBuffer(GL11 gl, int type, float[] data) { 
    int[] bufferPointerBuffer = new int[1]; 
    gl.glGenBuffers(1, bufferPointerBuffer, 0); 
    int bufferPointer = bufferPointerBuffer[0]; 
    gl.glBindBuffer(type, bufferPointer); 
    FloatBuffer dataBuffer = createFloatBuffer(data); 
    gl.glBufferData(type, data.length * FLOAT_SIZE, dataBuffer, GL_STATIC_DRAW); 
    gl.glBindBuffer(type, -1); 
    return bufferPointer; 
} 
+0

カラーデータのバインドは、頂点データではないため、GL_ELEMENT_ARRAY_BUFFERを使用する必要があります。 –

+0

@StefanHanke: 'GL_ELEMENT_ARRAY_BUFFER'はインデックスのみです。なぜそれがカラーに当てはまると思いますか?私はそれが正しいとは思わない。 – Tim

+0

@Tim:ドキュメントが誤って読まれました。ごめんなさい! –

答えて

0

うわー...それはすべて私が何らかの理由で拘束し、それテクスチャが、私はテクスチャcoordsのが無効になっていた場合でも、それを描画しようとしていたので、私はちょうどその時聞いていたかったです私はもう必要のない状態を無効にするように言われました..ありがとうございました!問題が解決しました!

+1

さて、正確に言えば、(glBindTexture'を使って)テクスチャをバインドしても、(glDisable(GL_TEXTURE_2D)で)テクスチャを無効にしていれば問題ありません。 –

+0

あなたがそこに作った良い点 – Ruuhkis

関連する問題