我正在执行以下操作,以使多个球在屏幕上移动,但仅看到一个球出现并起作用。我不知道为什么其余的(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);
}
我无法在三星手机上拍摄快照,但这是模拟器的屏幕截图。实际上,球会随着方向和加速度的变化而四处移动,并保持随机变化的颜色(由于r.nextFLoat())。但是,您可以看到其他35个球甚至都没有渲染。我怎样才能解决这个问题?
最佳答案
当将其称为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);被无限调用。