Android颜色选择没有得到正确的颜色

时间:2011-04-20 16:44:01

标签: android opengl-es color-picker

我为我的应用程序实现了一个简单的颜色选择器,它正常工作,除了绘制的对象没有精确的颜色ID。因此glReadPixles可以将22,0,0,23,0,0,24,0,0的颜色ID选为22,0,0。我也试过禁用抖动,但不确定是否有另外的gl设置我必须禁用或启用以获取对象绘制为确切的颜色ID。

   if(picked)
   {
       GLES10.glClear(GLES10.GL_COLOR_BUFFER_BIT | GLES10.GL_DEPTH_BUFFER_BIT);
       GLES10.glDisable(GLES10.GL_TEXTURE_2D);
       GLES10.glDisable(GLES10.GL_LIGHTING);
       GLES10.glDisable(GLES10.GL_FOG);
       GLES10.glPushMatrix();
        Camera.Draw(gl);

       for(Actor actor : ActorManager.actors)
       {
           actor.Picking();
       }

       ByteBuffer pixels = ByteBuffer.allocate(4);

       GLES10.glReadPixels(x, (int)_height - y, 1, 1, GLES10.GL_RGBA, GLES10.GL_UNSIGNED_BYTE, pixels);
       for(Actor actor : ActorManager.actors)
       {
           if(actor._colorID[0] == (pixels.get(0) & 0xff) && actor._colorID[1] == (pixels.get(1) & 0xff) && actor._colorID[2] == (pixels.get(2) & 0xff))
           {
               actor._location.y += -1;
           }
       }
       GLES10.glPopMatrix();

       picked = false;
   }




public void Picking()
{
   GLES10.glPushMatrix();
   GLES10.glTranslatef(_location.x, _location.y, _location.z);
   GLES10.glVertexPointer(3, GLES10.GL_FLOAT, 0, _vertexBuffer);
   GLES10.glColor4f((_colorID[0] & 0xff)/255.0f,( _colorID[1] & 0xff)/255.0f, (_colorID[2] & 0xff)/255.0f, 1.0f);
   GLES10.glDrawElements(GLES10.GL_TRIANGLES, _numIndicies,
           GLES10.GL_UNSIGNED_SHORT, _indexBuffer);
   GLES10.glPopMatrix();
}

1 个答案:

答案 0 :(得分:0)

看起来android并没有默认为8888颜色模式,所以这导致颜色问题无法正确绘制给我。通过在活动中设置正确的颜色模式,只要设备支持它,我现在解决了问题。如果我希望我的程序支持更多设备,我可能必须稍后找到另一种方法来绘制到另一个缓冲区或纹理,但这现在可以使用。

_graphicsView.getHolder().setFormat(PixelFormat.RGBA_8888);