【问题标题】:OpenGL ES multiple objects not being renderedOpenGL ES多个对象没有被渲染
【发布时间】:2012-04-04 11:13:48
【问题描述】:

我正在执行以下操作来渲染多个球在屏幕上移动,但只看到一个球出现并起作用。我不知道为什么剩下的(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();

             }


        }

编辑我的 void draw(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 个球甚至都没有被渲染。我该如何解决这个问题?

【问题讨论】:

  • 你能写 mParticleSystem.getBall(i).draw(gl) 代码吗?,你是不是禁用了其中的任何东西?
  • 我的意思是 MyGLBall 类中的 MyGLBall.draw(GL10 gl) 方法
  • @SteveL 哦,我明白了。再次更新我的答案

标签: android object opengl-es rendering


【解决方案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);被无限调用。

【讨论】:

  • 再靠近一点,他在 glDrawElements 之前启用了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2014-10-28
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多