【问题标题】:Android Color Picking Not Getting Correct ColorsAndroid 颜色选择没有得到正确的颜色
【发布时间】:2023-03-11 22:36:01
【问题描述】:

我为我的应用程序实现了一个简单的颜色选择器,它工作正常,除了正在绘制的对象没有精确的颜色 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();
}

【问题讨论】:

    标签: android opengl-es color-picker


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2020-01-24
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多