Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

I'm working on a test project to learn some basic OpenGL. Right now I'm trying to work on a "camera" with gluLookAt. My camera object is really simple, I have two vectors, one for the position and the other for the rotation (x, y and z on both). I'm having trouble with the target point gluLookAt receives, how can I find a target point using only the position and camera angle?

share|improve this question
1  
What do you mean by finding a target point? Are your inputs: camPos, camOrientation(x,y,z) and targetPos(x,y,z)? You don't need a camera angle if you have its camOrientation vector.. Sorry, it's a tad ambiguous –  teodron Apr 22 '12 at 8:54
    
I think I meant Orientation instead of Rotation. I don't have the target, only the camera position angles on each axis, I'm trying to find a target with that. –  Luke B. Apr 23 '12 at 17:21
    
You have the position/eye for the glulookat. If you assume the camera looking towards (0,0,-1) and the up vector to be (0,1,0) as usually with OpenGL, then you must construct a matrix M from your angles (use Euler angles.. but beware of the infamous gimbal lock issue). Once you get the M, your direction is M * (0,0,-1), your up vector M*(0,1,0). To find the center/lookatpoint, add to your camPos the M*(0,0,-1) vector. There you go. This is a bad way to do it, but it's educational.. go for angle-axis and quaternions in the future. –  teodron Apr 24 '12 at 9:13
add comment

2 Answers 2

up vote 1 down vote accepted

If you have desired rotation angles for your camera, then gluLookAt is not really the appropriate function to use. Instead, use glRotate three times, once for each axis of rotation (typically in roll, pitch, yaw order) using the negative of the desired camera angle on each axis, then glTranslate with the negative of the camera position.

(Why the negatives? Because you're constructing a matrix to go from world space to camera space, so everything's opposite to the transformations that go from camera space to world space.)

share|improve this answer
add comment

The position passed to gluLookAt() is relative to the origin. Since you have one point relative to another point, then get that point relative to the origin by subtracting the second point from it, i.e.

V1 - V2 = (v1.x-v2.x,v1.y-v2.y,v1.z-v2.z)

And pass the result to gluLookAt().

After calling gluLookat(), call glTranslate() to "move" the camera to its position vector.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.