当我触摸屏幕时,glReadpixels 返回像素的 RGB。触摸后,我调用一个方法来隐藏具有相同 RGB 值的元素。在此之后,如果我触摸屏幕 glReadpixels 仅返回 0 值。
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity(); //Reset The Current Modelview Matrix
gl.glPushMatrix();
gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
gl.glTranslatef(0.0f, 1.2f, -6.0f); //Move down 1.0 Unit And Into The Screen 6.0
squareOne.draw(gl); //Draw the square
gl.glPopMatrix();
gl.glPushMatrix();
gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
gl.glTranslatef(0.0f, -1.2f, -6.0f); //Move down 1.0 Unit And Into The Screen 6.0
squareTwo.draw(gl);
gl.glPopMatrix();
//Picking colors Objects Code
ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
PixelBuffer.order(ByteOrder.nativeOrder());
gl.glReadPixels((int) this.touchPointx, (int) this.touchPointy, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
byte b[] = new byte[4];
PixelBuffer.get(b);
String key = "" + b[0] + b[1] + b[2];
Log.i(key,key);
if(b[0]==0 && b[1]==-1 && b[2]==0){
this.squareOne.setHidden(true);
}
if(b[0]==0 && b[1]==0 && b[2]==-1){
this.squareTwo.setHidden(true);
}
}
------------------------------Square.java------ --------------------------
public void draw(GL10 gl) {
if(!isHidden()){
//Set the face rotation
gl.glFrontFace(GL10.GL_CW);
//Point to our vertex buffer
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//Enable vertex buffer
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//Draw the vertices as triangle strip
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
}
public boolean isHidden() {
return hidden;
}