2011-04-20 152 views
1

我爲我的應用程序實現了一個簡單的顏色選擇器,除了正在繪製的對象沒有確切的顏色ID之外,它正常工作。因此,22,0,0,23,0,0,24,0,0的顏色ID可能被glReadPixles拾取爲22,0,0。我也嘗試禁用抖動,但不知道是否有另一個gl設置我必須禁用或啓用獲取對象繪製,因爲有確切的顏色ID。Android顏色挑選不正確顏色

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(); 
} 

回答

0

看起來像android不會默認爲8888色彩模式,所以這導致了顏色不能正確繪製的問題。通過在活動中設置正確的顏色模式,只要設備支持,我現在就解決了問題。如果我希望我的程序支持更多設備,那麼稍後我可能需要找到一種方法來繪製到另一個緩衝區或紋理,但這種方法現在可行。

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