2012-04-04 4 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(); 

      } 


     } 

EDIT Моя пустота ничья (GL10 ГЛ) метод

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 шаров arent даже визуализируются, как вы можете видеть. Как я могу это исправить?

enter image description here

+0

Можете ли вы написать код mParticleSystem.getBall (i) .draw (gl)?, Вы отключите что-нибудь в нем? – SteveL

+0

@SteveL обновил мой ответ. – jmishra

+0

хорошо я имел в виду метод MyGLBall.draw (GL10 gl) в вашем классе MyGLBall – SteveL

ответ

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

Смежные вопросы