1

複数のボールが画面上を移動するようにレンダリングするために次のことを行っていますが、表示されて機能するボールは 1 つだけです。残りの (count-1) ボールが描画されない理由がわかりません

 public void onDrawFrame(GL10 gl) {
            // TODO Auto-generated method stub
            gl.glDisable(GL10.GL_DITHER);
             gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);   
             gl.glMatrixMode(GL10.GL_MODELVIEW);
            gl.glClientActiveTexture(DRAWING_CACHE_QUALITY_HIGH);
             gl.glLoadIdentity();
             for(int i=0;i<mParticleSystem.getParticleCount();i++){
                gl.glPushMatrix();
                      gl.glTranslatef(mParticleSystem.getPosX(i), mParticleSystem.getPosY(i), -3.0f);
                      gl.glScalef(0.3f, 0.3f, 0.3f);
                      gl.glColor4f(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1);
                      gl.glEnable(GL10.GL_TEXTURE_2D);   
                      mParticleSystem.getBall(i).draw(gl);
                gl.glPopMatrix();

             }


        }

編集私のボイドドロー(GL10 gl)メソッド

    public void draw(GL10 gl){

    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glEnable(GL10.GL_SMOOTH);
    gl.glEnable(GL10.GL_DEPTH_TEST);
//  gl.glTranslatef(0.2f, 0.2f, -3.0f);
//  gl.glScalef(size, size, 1.0f);

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertBuff);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, points/2);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

 }

Samsung Phone でスナップショットを撮ることができませんでしたが、これがエミュレータのスクリーンショットです。実際には、ボールは方向と加速度の変化とともに動き回り、色がランダムに変化し続けます (r.nextFLoat() による)。ただし、ご覧のとおり、他の 35 個のボールはレンダリングされていません。どうすればこれを修正できますか?

ここに画像の説明を入力

4

1 に答える 1

1

これが gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); と呼ばれる場合、2 回目のループは gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); になるはずです。そうしないと、他に何も描画されません。

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); があるに違いありません。あなたのonsurfacecreated()で。これは、一度だけ呼び出されることを意味します。一方 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 無限に呼び出されています。

于 2012-05-22T01:20:47.077 に答える