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

Reply via email to