Hmm.. I'm sorry but this has reached the limit of what I know off- hand. I'd have to get into debugging your code to be able to help more.
I have a feeling one of two things is wrong: 1) Your projection matrix is not matching what glOrthof is doing (fix by using glLoadMatrix there) 2) Something is happening to your modelview matrix later that I can't see from your code snippet and remappedRotationMatrix no longer matches it. Sorry I can't help more. All I know is that if your "Camera" space is wrong from what you think it should be, you will face nothing but problems trying to do visibility tests or picking. I do 3D visibility testing of objects by creating frustum bounds and testing against object bounding boxes - this is all in world space. I actually don't need unproject to figure out what you touched because for me, it's just a matter of making a segment from the near plane to the far at the percentage distance from the sides in the viewport to your touch point used on the near/far planes. If you debug my suggestions 1 and 2 and come up with nothing, perhaps there is an alternative way to check without still checking for drawn pixels (which makes me shudder.) On May 10, 8:15 pm, Alfonso <alfonsocris...@gmail.com> wrote: > Robert, first of all thanks for your time and kindness. The problem > for me is not drawing my scene. In fact, the scene is done. I'm going > to try being more explicit: > > First of all, I set the projection matrix with: > near_height = 1; > zNear = 1; > zFar = 100; > window_height = height; > window_width = width; > > gl.glViewport(0, 0, width, height); //Reset The Current Viewport > gl.glMatrixMode(GL10.GL_PROJECTION); //Select The Projection Matrix > gl.glLoadIdentity(); //Reset The > Projection Matrix > ratio = (float) width / height; > Matrix.orthoM(orthoProjectionMatrix, 0, -near_height * ratio, > near_height * ratio, -near_height, near_height, zNear, zFar); //I get > the Projection Matrix here > gl.glOrthof(-near_height * ratio, near_height * ratio, -near_height, > near_height, zNear, zFar); > > Later, I get the rotation matrix and remap it with the lines: > SensorManager.getRotationMatrix(rotationMatrix, null, > mAccelerometerValues, mMagneticValues); > SensorManager.remapCoordinateSystem(rotationMatrix, > SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, > remappedRotationMatrix); > gl.glMatrixMode(GL10.GL_MODELVIEW); > gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); > gl.glLoadIdentity(); //Reset The Current > Modelview Matrix > gl.glLoadMatrixf(remappedRotationMatrix, 0); > > Then, I draw all wich I want. Don't worry about the ray, it is well > done. I followed this page instructions <http://www.opengl.org/ > resources/faq/technical/selection.htm>. I use glPushMatrix and > glPopMatrix, but as you can think it is not necessary. I have the > modelview untouched in remappedRotationMatrix. > > My problem: Once I have finished drawing objects, I want to know if > there is some of them painted in the screen when I point an exact > place with the phone. I'm OK to choose an only one object if it is so > easier. With the next instruction: > > GLU.gluProject(pos3DdelPuntoInteres[0], pos3DdelPuntoInteres[1], > pos3DdelPuntoInteres[2], remappedRotationMatrix, 0, > orthoProjectionMatrix, 0,new int[] {0,0,window_width,window_height}, > 0, prueba, 0); > > I should get the screen coords of the pos3DdelPuntoInteres vector in > the prueba one. But if I see it with a Log, I can't deduce any > connection between this values and the screen. In the poing signed by > pos3DdelPuntoInteres there is an icon, if I move the phone so place > the icon in the upper left corner, then the first coord of prueba is > 0, but no one else. In fact, it is impossible get an 0,0 position in > prueba. > > Alternatively, I've found that if I multiply the modelview by > pos3DdelPuntoInteres, one of the components of prueba takes values > from 1 to -1 if the icon is displayed on the screen and out of this > range if not. The problem is that this value only refers to the x axis > of the screen and not to the y one. The others two values of prueba > seems to refer the angle of the yaw. Knows someone about a way of > calculate the position of the y axis like with de x ones using the > modelview matrix, so I can control if the object is on the screen? > > Thanks. > > The problem > > On 10 mayo, 22:13, Robert Green <rbgrn....@gmail.com> wrote: > > > > > > > If you're doing this to set up and draw your scene: > > > gl.glMatrixMode(GL10.GL_PROJECTION); > > gl.glLoadIdentity(); > > GLU.gluPerspective(gl, FOV, viewAspectRatio, zNear, zFar); > > // **get or recreate this matrix for the unproject projection > > gl.glMatrixMode(GL10.GL_MODELVIEW); > > gl.glLoadIdentity(); > > GLU.gluLookAt(gl, pos.x, pos.y, pos.z, lookAt.x, lookAt.y, lookAt.z, > > upVec.x, upVec.y, upVec.z); > > // **get or recreate this matrix for the unproject modelview > > > // for each object > > gl.glPushMatrix(); > > // transform/rotate/scale to match collision data - do not use this > > matrix for unproject. > > // draw > > gl.glPopMatrix(); > > > then using GLU.gluUnProject with those same matrices that I pointed > > out (projection and modelview) will return the correct point in world > > space which should be the same coordinate system as your collision > > data. After that you just need to use ((normalize(lookAt - pos) * > > farZ) + the unproject point) and you have your ray. > > > On May 10, 1:24 pm, Alfonso <alfonsocris...@gmail.com> wrote: > > > > I've got that collision detection system implemented, yet. And I'm > > > agree to use glUnproject as the best achoice. My problem is that I > > > remap the modelview matrix with the sensors and when I rotate the > > > phone, change the coords of the screen returned by glUnproject. Even > > > if I keep the object in the same place of the screen. Furthermore, I > > > don't understand why it doesn't return values according to the given > > > viewport. Because of all this I was looking for alternatives, but if > > > you explain me what's the matter with glUnproject, I'll be really > > > pleasent. > > > > Thanks you very much for this answer and (I hope) for the next one. > > > > On 10 mayo, 19:11, Robert Green <rbgrn....@gmail.com> wrote: > > > > > What are you trying to do? > > > > > glReadPixels is a pipeline stall - it will slow everything down. If > > > > you want to check to see if an object has been touched, use a > > > > collision detection system, unproject the touch point into a ray and > > > > get the closest item that intersects with that ray. It's actually > > > > easier, more reliable and faster. > > > > > On May 10, 10:16 am, Alfonso <alfonsocris...@gmail.com> wrote: > > > > > > glReadPixels is too slow, so I need another way. Without testing > > > > > object by object, Is there any other way? > > > > > > Thanks you very much > > > > > > -- > > > > > You received this message because you are subscribed to the Google > > > > > Groups "Android Developers" group. > > > > > To post to this group, send email to > > > > > android-developers@googlegroups.com > > > > > To unsubscribe from this group, send email to > > > > > android-developers+unsubscr...@googlegroups.com > > > > > For more options, visit this group > > > > > athttp://groups.google.com/group/android-developers?hl=en > > > > > -- > > > > You received this message because you are subscribed to the Google > > > > Groups "Android Developers" group. > > > > To post to this group, send email to android-developers@googlegroups.com > > > > To unsubscribe from this group, send email to > > > > android-developers+unsubscr...@googlegroups.com > > > > For more options, visit this group > > > > athttp://groups.google.com/group/android-developers?hl=en > > > > -- > > > You received this message because you are subscribed to the Google > > > Groups "Android Developers" group. > > > To post to this group, send email to android-developers@googlegroups.com > > > To unsubscribe from this group, send email to > > > android-developers+unsubscr...@googlegroups.com > > > For more options, visit this group > > > athttp://groups.google.com/group/android-developers?hl=en > > > -- > > You received this message because you are subscribed to the Google > > Groups "Android Developers" group. > > To post to this group, send email to android-developers@googlegroups.com > > To unsubscribe from this group, send email to > > android-developers+unsubscr...@googlegroups.com > > For more options, visit this group > > athttp://groups.google.com/group/android-developers?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group > athttp://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en