2012-04-04 74 views
1

我做以下,以使多个球在屏幕上移动,但只有1球是看到出现和功能。我不知道为什么,其余(计数1)球未被绘制OpenGL ES的多个对象没有被渲染

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); 

} 

我不能拿上我的快照三星手机,但这里是模拟器截图。实际上,球随着方向和加速度的变化而移动并且随机地改变颜色(由于r.nextFLoat())。但是,其他35个球甚至没有被渲染,你可以看到。我怎样才能解决这个问题?

enter image description here

+0

你能写mParticleSystem.getBall(I).draw(GL)代码?,你在禁用它什么? – SteveL 2012-04-04 11:54:10

+0

@SteveL更新了我的答案。 – jmishra 2012-04-04 12:07:38

+0

以及我在你MyGLBall类 – SteveL 2012-04-04 12:11:23

回答

1

当这被称为gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);,循环回来应具有gl.glEnableClientState(GL10.GL_VERTEX_ARRAY)的第二时间;否则将不会绘制任何其他内容。

我敢打赌,你有gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);在你onsurfacecreated()中。这意味着只被调用一次。而gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);被无限调用。

+0

稍微靠近一点,他使glDrawElements之前的行成为可能。 – Tim 2012-05-22 05:32:09