Unreached limits, dear Robert. You were right, the problem was in the modelview matrix. Thanks you very much.
On 11 mayo, 08:37, Robert Green <[email protected]> wrote: > Hmm.. I'm sorry but this has reached the limit of what Iknowoff- > 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 Iknowis 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 <[email protected]> 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 toknowif > > 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 > > > > > > [email protected] > > > > > > To unsubscribe from this group, send email to > > > > > > [email protected] > > > > > > 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 > > > > > [email protected] > > > > > To unsubscribe from this group, send email to > > > > > [email protected] > > > > > 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 [email protected] > > > > To unsubscribe from this group, send email to > > > > [email protected] > > > > 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 [email protected] > > > To unsubscribe from this group, send email to > > > [email protected] > > > 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 [email protected] > > To unsubscribe from this group, send email to > > [email protected] > > 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 [email protected] > To unsubscribe from this group, send email to > [email protected] > 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 [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

