gluLookAt - Cameras in OpenGL

Started by
3 comments, last by Lode 21 years, 8 months ago
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]
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]
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
_______________________________________Pixelante Game Studios - Fowl Language
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]
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
_______________________________________Pixelante Game Studios - Fowl Language

This topic is closed to new replies.

Advertisement