Translate mouse coordinates to world coordinates

Posts: 14
Joined: 2005.12
Post: #1
After searching for a long time I still cannot find a way to convert from the view's mouse coordinates to the opengl world coordinates. Here's what I have:

A windowed opengl view that's about 400 x 300
I draw a bunch of quads all at the same z location but different x & y locations
I want to be able to tell which quad I clicked on, I know each quads location and dimension in world coordinates, e.g. quad 1 is at -2, -2 and is 0.8 by 0.8 big.
I do glTranslatef(0.0, 0.0, -5.0f); to back off the camera from where I've drawn.

In mouseDown, get the window coordinates from the event locationInWindow
Then I grab the viewport, modelview matrix and projection matrix and call gluUnProject

The values I get back from that don't seem to make any sense. I'm guessing it's because I'm sending in 0.0 to gluUnProject for the local z coordinate which is the near plane, so I'm getting back the coordinates at the near plane.

So, am I supposed to figure out what z position to put in since I know the projection near & far planes and what z position my objects are at?

Or am I supposed to cast a ray at see what it intersects with?

Any pointers would be appreciated.
Quote this message in a reply
Posts: 776
Joined: 2003.04
Post: #2
Have you looked at glOrtho?
Quote this message in a reply
Posts: 5,143
Joined: 2002.04
Post: #3
If you need the perspective view, call gluUnProject twice, passing 0.0 for z the first time and 1.0 for z the second. That gives you two points on the line in 3D space that would be transformed to the pixel that was clicked. You can then programmatically intersect that line with your geometry to find out what was hit.
Quote this message in a reply
Posts: 14
Joined: 2005.12
Post: #4
I was misunderstanding the use of gluUnProject. I found this page:

which details just what OSC said. Thanks for the info.
Quote this message in a reply
Post: #5
My own solution for mouse coordinate conversion:
// 768x512 window not resizeable to make this simple

NSPoint point;

- (void)mouseDown:(NSEvent *)event
   point = [event locationInWindow];

- (NSPoint)convertMousePoint:(NSPoint)mouse
   NSPoint m;
   m.x = mouse.x * (2.0 / 768.0) - 1.0;
   m.y = mouse.y * (2.0 / 512.0) - 1.0;
   return (m);  // returns the converted point

NSPoint mouseGLCoords;
mouseGLCoords = [self convertMousePoint:point];

This does work for me.
Quote this message in a reply
Post Reply 

Possibly Related Threads...
Thread: Author Replies: Views: Last Post
  Translate Like chaiwise 12passion 0 3,666 Dec 11, 2012 12:27 AM
Last Post: 12passion
  Updating Map Annotations - coordinates PHANTOMIAS 0 3,696 Dec 8, 2009 08:39 AM
  Local (X, Y) Coordinates from 3D plane coordinates merrill541 5 12,113 Jun 29, 2009 01:32 AM
Last Post: RhinosoRoss
  calculating X and Y coordinates w/ an angle and distance ferum 13 21,560 Jun 25, 2008 10:53 PM
Last Post: rosenth
  Find 3D Direction with 2D Coordinates suan832001 1 3,776 Aug 24, 2007 07:03 AM
Last Post: backslash