As it turns out I do have to be concerned with the y values in glReadPixels. It was a major stumbling block. They do start at the bottom of the screen. I used a combination of techniques to get the y value I needed. I used 'getRawY()' from the MotionEvent and another method of the view I was in called 'getLocationInWindow()' which reports the location in the parent window of the current window. I also used 'getHeight()' on the view also. My code looks something like this:
int [] locationXY = new int[2]; button_view.getLocationInWindow(locationXY); int mBot = button_view.getHeight(); int newYValue = ( mBot + locationXY[1] ) - event.getRawY; The value 'newYValue' is fed to the glReadPixels routine. This works for me because my layout is very simple. I also found the link below helpful: http://www.anddev.org/android-2d-3d-graphics-opengl-tutorials-f2/object-polygon-face-selection-aka-picking-t11572.html On Jul 23, 9:31 am, David Liebman <[email protected]> wrote: > Hi, > > I'm trying to detect the opengl object under the cursor... I have read > it referred to as picking. Here is my code: > > public int makeBuffer(GL10 gl, int x, int y) { > > ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4); > PixelBuffer.order(ByteOrder.nativeOrder()); > PixelBuffer.position(0); > int mTemp = 0; > gl.glReadPixels((int)x, (int) y, 1, 1, GL10.GL_RGBA, > GL10.GL_UNSIGNED_BYTE, PixelBuffer); > Log.e("Picking", " xy: x" + x + " y"+ y); > byte b [] = new byte[4]; > PixelBuffer.get(b); > Log.e("Picking", " rgba: r"+ PixelBuffer.get(0) + " g" + > PixelBuffer.get(1) + " b" + > PixelBuffer.get(2) + " a" + PixelBuffer.get(3)); > Log.e("Picking", " rgba: r"+ b[0] + " g" + b[1] + " b" + > b[2] + " a" + b[3]); > > //mTemp = PixelBuffer.get(0); > mTemp = b[0]; > > Log.e("Picking", "result:" + mTemp ); > > return mTemp; > } > > See that most of the code above is logcat statements. My code prints > zeros to the screen for r,g, and b. For alpha it prints '-1' which is > translatable to 255 (unsigned) as 'full alpha'. I'm trying to detect a > color on the screen at the given x/y position. I would be happy with a > red value that's somewhere between 1 and 15, as that's the color that > should be below the touch. I would expect that if I was doing it > entirely wrong I would get all zeroes, but I must be doing it at least > partially right, as I'm getting alpha. I have also included lines in > my manifest that tell the phone that I use the permissions for the > 'surface flinger' and the 'read frame buffer'. I don't know if these > lines are working. > > <uses-permission > android:name="android.permission.ACCESS_SURFACE_FLINGER" /> > <uses-permission android:name="android.permission.READ_FRAME_BUFFER" / > > > > any help would be appreciated. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

