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

Reply via email to