Выбор цвета Android не получает правильные цвета

1

Я применил простой набор цветов для моего приложения, который работает правильно, за исключением того, что объекты рисуются с отсутствием точного идентификатора цвета. Таким образом, идентификаторы цвета 22,0,0, 23,0,0, 24,0,0 могут быть отобраны glReadPixles как 22,0,0. Я также попытался отключить сглаживание, но не уверен, что есть еще один параметр gl, который я должен отключить или включить, чтобы объекты рисовались, как там есть точный идентификатор цвета.

   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();
}
Теги:
opengl-es
color-picker

1 ответ

0

Похоже, что андроид по умолчанию не соответствует цветному режиму 8888, так что это вызвало проблему неправильного рисования цветов для меня. Путем настройки правильного цветового режима в действии я решил проблему до сих пор, пока устройство поддерживает ее. Мне, вероятно, придется найти способ позже рисовать в другой буфер или текстуру позже, если я хочу, чтобы моя программа поддерживала больше устройств, но это будет работать пока.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню