Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Lode

OpenGL gluLookAt - Cameras in OpenGL

This topic is 5902 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I already had a little conversation about this in the For Beginners forum but this is NOT a double post, I swear! I like to describe my camera with vectors. In a raytracer I gave my camera 4 vectors and that worked great: one for location, one for direction, one for U vector of the camera plane and one for V vector of the camera plane. With that, I could move, roll, yaw, pitch, change x and y fov, and even skew the camera and get some alien effects. Now I'm busy with OpenGL and I'm having some difficulties with the camera. First I planned to move and rotate the world with glTranslatef and glRotatef, but because glRotatef used euclidiean angles it wasn't good for my camera (that uses a vector for the looking direction). So someone suggested that I should use gluLookAt and that looked perfect at first sight... until I tried it. I'm getting some unwanted results now: 1) I still use glTranslatef for the translation of the camera because gluLookAt did a little bit weird with it. It has problems with negative numbers appearantly, why is that? 2) It supports upx, upy and upz, but does it also support this for the horizontal direction? (I think this is a retorical question because appearantly it doesn't) 3) My biggest problem and concern is this: I'm completely confused with the coordinate system. The rotation works, and the translation with glTranslatef too but BAD, appearantly, the axes of translation rotate together with the camera direction and that's NOT what I want. I simply change the X position of the camera with 2 arrow keys, but if the camera is rotated, the camera translates along other directions than the X position. Why is that? I prefer to use ABSOLUTE world coordinates (I just thrust that more) for my camera so if I change the X direction, it always moves along that axis no matter how the camera is rotated. How do I do that? Thanks. EDIT: OMG! I found out that there's an even bigger problem! If I moved my camera far away from the scene I found out that the scene is rotating indeed, and not the camera How do I properly work with cameras in OGL? [edited by - Lode on July 28, 2002 9:45:02 AM]

Share this post


Link to post
Share on other sites
Advertisement
Go to gametutorials.com and look at their opengl camera tutorials. It looks like your main problem is using glTranslatef for the translation of the camera, which is stemming off a whole bunch of other problems.

Oh yeah:

quote:

2) It supports upx, upy and upz, but does it also support this for the horizontal direction? (I think this is a retorical question because appearantly it doesn't)



Think about it - gluLookAt calculates its horizontal vector from the up and eye vectors.

Heres something i whipped up in psp:



[edit] - when looking at that diagram, imagine the up vector going along the Y axis, the eye going down the z axis and the horizontal going along X. Its not a 2d diagram

[edited by - sark on July 28, 2002 5:29:45 PM]

Share this post


Link to post
Share on other sites
www.gametutorials.com
Mentioned already, but worth mentioning again.

Why do you need a horizontal vector? The up vector''s purpose is to tell what direction is up, by using that, you obviously know what way is right/left.

As for the camera not moving along the X axis, I suggest you do not use glRotatef on the camera. Possiblely on other objects, but not the camera. Use gametutorials rotations instead.

As for your edit, of course the scene moves. You have a flat, stationary moniter. What do you expect to move?

------------
aud.vze.com - The Audacious Engine <-- It''s not much, yet. But it''s mine... my own... my preciousssss...
MSN: nmaster42@hotmail.com, AIM: LockePick42, ICQ: 74128155

Share this post


Link to post
Share on other sites
Good point about the monitor :D

For the horizontal vector: well changing xfov and vfov seperatly can be handy sometimes, for example that looks just better sometimes when resizing a window to non 4:3 sizes. In case I WANT the scene to be stretched if I stretch the window namely. And the camera skewing is cool too for special effects but for that I would have to be able to make the horizontal and vertical vector not perpendicular.

/me checks gametutorials.com

[edited by - Lode on July 28, 2002 7:35:36 PM]

Share this post


Link to post
Share on other sites
Hmm, well that''s an interesting point. But that would require a much more complex function than gluLookAt to mess around with the screen like that.
Really, all gluLookAt does is ask for more logical information. Normally we don''t think "rotate head 45 on y, rotate head 25 on z" we think "look at object". It takes our version and turns it into glTranslate/glRotatef. And this is just to calculate where things are on screen. Not to do anything to the screen itself.

Perhaps there some tweaks you could do to the perspective/viewport functions instead.

------------
aud.vze.com - The Audacious Engine <-- It''s not much, yet. But it''s mine... my own... my preciousssss...
MSN: nmaster42@hotmail.com, AIM: LockePick42, ICQ: 74128155

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!