Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Page 3 of 4 FirstFirst 1234 LastLast
Results 21 to 30 of 31

Thread: Position of pixel in 3D world space?

  1. #21
    Senior Member OpenGL Pro
    Join Date
    Oct 2000
    Location
    Fargo, ND
    Posts
    1,797

    Re: Position of pixel in 3D world space?

    Ok, I'm assuming you're using a perspective projection here...

    Using the parameters you used in glFrustum/gluPerspective, you should easily be able to find the location of what m was before applying the MODELVIEW matrix. R is essentially the near clip plane, I think. (If I'm understanding correctly) So the z is easy. x and y would be found by knowing what your left, right, top, and bottom clip planes are. (If you use gluPerspective you can calculate those using the FOV, aspect and near clip plane. Think of those as defining a pyramid, then you should be able to figure out the trig involved.)

    Once you have that location, just multiply it by the MODELVIEW matrix after any "camera transformations" you may have done.

    [This message has been edited by Deiussum (edited 05-30-2003).]
    Deiussum
    Software Engineer and OpenGL enthusiast

  2. #22
    Junior Member Newbie
    Join Date
    May 2004
    Posts
    2

    Re: Position of pixel in 3D world space?

    Hi Jebus,

    R is a representation of the final rasterized image. Its the rectangle that represents the image being synthesized. Its position is independent of the near clipping plane.

    Regards,
    Slammo

  3. #23
    Junior Member Newbie
    Join Date
    May 2004
    Posts
    2

    Re: Position of pixel in 3D world space?

    Hi Deiussum,

    Thanks for the message. I should have started this thread with an image, but now I think you're starting to understand me.

    R is not the near clipping plane though, it is the plane on which the image is formed. R is located a distance f (where f is the focal length) away from the center of projection C. So for a given focal length, the location of R is fixed. If I change the position of the clipping planes, R does not move.

    Regards,
    Slammo

  4. #24
    Junior Member Regular Contributor
    Join Date
    Aug 2002
    Location
    philadelphia, pa, usa
    Posts
    109

    Re: Position of pixel in 3D world space?

    here's something that i think would work. ignore everything i had previously said though... i just didn't understand what you were asking.

    first you need to get a definition of the plane that you want to intersect in world space. you have the distance from the center of projection (which i assume is the eye point in standard opengl terms), and the normalized view direction. multiply the distance by the view direction and add it to the eye location. this will get you a point in the plane. the normal to the plane is the vector from the point you just computed to the eye location. now you have a complete specification of a plane.

    next you can find a line segment to intersect against the plane. take your (x,y) screen coordinates and supply them to gluUnProject(), specifying a z value of 0.0 and the appropriate transformations. this'll get you the world space location of the point projected onto the near clip plane. now do the same thing, except specify a z value of 1.0. this'll get you the world space location of the screen point projected onto the back clipping plane. these two points specify your line segment. one thing to watch out for is that you don't include the modeling transformation when you call gluUnProject(), or else you'll get coordinates in object space instead of world space. just specify the viewing transformation and the unprojected points should be in world space.

    now interset this line segment with the plane to get the world coordinates. code for line segment-plane intersection can be found almost anywhere, including here .

    eh... may as well do up some pseudo code.

    Code :
    Vector3 eyeLoc; //initialize to your eye location in world coordinates
    Vector3 viewDir; //make sure this is normalized
    float focalPtDistanceFromEye; //initialize as appropriate
     
    //first form the plane
    Vector3 ptOnPlane = eyeLoc + focalPtDistanceFromEye*viewDir;
    Vector3 planeNormal = eyeLoc - ptOnPlane;
     
    //now compute the line segment in world space
    int x, y; //screen coordinates
    Matrix modelView, projection;
    Rect viewport;
    //initialize transformations as appropriate
    //make sure to only include the viewing transformation in the modelview matrix
     
    Vector3 worldPtOnNearPlane = gluUnProject(x,y,0.0,modelView,projection,viewport);
    Vector3 worldPtOnFarPlane = gluUnProject(x,y,1.0,modelView,projection,viewport);
     
    Vector3 intersectionLocation = SegmentPlaneIntersection(worldPtOnNearPlane,worldPtOnFarPlane,planeNormal,ptOnPlane);
    as before, that code hasn't been tested or anything, so be careful. hope i have the right idea here.

    -steve

  5. #25
    Junior Member Newbie
    Join Date
    May 2004
    Posts
    2

    Re: Position of pixel in 3D world space?

    Hi Steve,

    Thanks for the idea. I think your solution may work. Perhaps I will give it a try.

    Regards,
    Slammo

  6. #26
    Junior Member Newbie
    Join Date
    May 2004
    Posts
    2

    Re: Position of pixel in 3D world space?

    Thanks everyone for your help. I finally figured this out -- many of you were close to the right solution.

    The easiest way to do it is to use gluUnproject(), but use the negative of the near clipping plane for the z coordinate.

    Thanks to all who helped.

    Regards,
    Slammo

  7. #27
    Junior Member Newbie
    Join Date
    Jun 2012
    Location
    Asmterdam, NL
    Posts
    3
    I found it entertaining to read this thread because of the repeated misunderstanding of the OP's question.

    I'm also trying to figure out the 3d coordinates of points on the image plane, but as a relative newbie to OpenGL, to me at least the whole concept of the image plane seems elusive in the OpenGL framework!

    Slammo: from your last post, can I deduce that the image plane is at the same distance from the focal / view point as the near clipping plane?

    In fact, would it be correct to say that that is just a convention for gluUnproject to take the z coordinate of the pixel as -(near clipping distance), but that in general, choosing the "focal length" is also to choose: the actual size of objects relative to the actual size of the pixels.
    Last edited by wimute; 06-16-2012 at 08:06 AM.

  8. #28
    Senior Member OpenGL Guru Dark Photon's Avatar
    Join Date
    Oct 2004
    Location
    Druidia
    Posts
    2,882
    Why did you resurrect a 9 year old thread? Wonder if we could consider locking threads after 6 months or so of inactivity...

  9. #29
    Junior Member Newbie
    Join Date
    Jun 2012
    Location
    Asmterdam, NL
    Posts
    3
    Quote Originally Posted by Dark Photon View Post
    Why did you resurrect a 9 year old thread? Wonder if we could consider locking threads after 6 months or so of inactivity...
    Because OpenGL's API hasn't changed much in 9 years and this particular issue is discussed practically nowhere else on the net...

  10. #30
    Advanced Member Frequent Contributor
    Join Date
    Apr 2010
    Location
    Germany
    Posts
    892
    Because OpenGL's API hasn't changed much in 9 years[..]
    (*random characters here to reach minimum*)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •