0

単純な2DOpenGLゲームで問題が発生しています。本当に奇妙で、テクスチャが正しく表示されるなどですが、単純な色の変更でパーティクルエフェクトを作成したい場合、何らかの理由でバッファから間違った色が表示されます。私はAndroidのOpenGLES1.1を使用していますが、VBOを使用するOpenGLのどのバージョンでも同じです。

画面などを初期化すると赤い三角形が表示されますが、カラーバッファによると白になっているはずですが、どうしたのでしょうか。

        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;
}
4

1 に答える 1

0

うわー..それはすべて、テクスチャをバインドしていて、テクスチャ座標を無効にしても、何らかの理由でそれを描画しようとしたためです。不要になった状態を無効にするように言われたときに、ただ聞いていたらよかったのにと思います。ありがとう。彼ら!問題が解決しました!

于 2012-04-29T10:23:45.967 に答える