Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 5 of 5

Thread: Why does this math work?

  1. #1
    Intern Contributor
    Join Date
    Mar 2000
    Posts
    94

    Why does this math work?

    //This is a rotate function that is passed an angle

    cx = sin(angle);
    cz = -cos(angle); //->Why negative Cosine?

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45, ratio, 1, 1000);

    gluLookAt(x,y,z, /*Camera Position*/ x+cx,y+cy,z+cz, 0,1,0); /*Up Vector */

    This code works perfectly for rotating the view in a 3D world. I pass in angle to my function and this code updates the view accordingly. I don't understand why you can take the cosine/sine of the angle when the center is not the origin (0,0,0). I mean, I could be anywhere in my 3D world and this code works. Also, why do you take NEGATIVE cosine. I thought you take the value of cos(theta) to get the "x" value and sine(theta) to get the "z" value?

    Does the gluLookAt() translate to the origin, rotate, and then translate back? (behind the scene?)

    I just want to understand this fragment.

    Any help would be appreciated.

  2. #2
    Senior Member OpenGL Guru
    Join Date
    Feb 2000
    Location
    Sweden
    Posts
    3,115

    Re: Why does this math work?

    That minus sign before cosine depends on how you want your world coordinate system to look like. Some people prefer a right-handed system, and some a left-handed system, and setup ther environment after their needs. If you go from a left-handed system to a right-handed system, some axis will change sign. And it also depends on what direction you want when the angle is zero. x=sin and z=cos will result in a look-at direction down the positive Z-axis when the angle is zero. You can also use x=cos and z=sin. Then you look down then positive X when the angle is zero. It also depends on what direction you want to rotate when the angle increase. Why YOU use a negatine cosine for Z and positive sine for X is beyond my knowledge, it's your choise and I don't know why you did it.

    And why you take the sine/cosine directly like that, is becaue you don't get a specific point in worldspace, you get an offset from the viewpoint you also pass to gluLookAt

    And gluLookAt rotates and then translates the origin, or more correctly, the world around the origin.

  3. #3
    Intern Contributor
    Join Date
    Mar 2000
    Posts
    94

    Re: Why does this math work?

    Thank you

  4. #4
    Junior Member Newbie
    Join Date
    Oct 2000
    Location
    Vienna / Austria
    Posts
    15

    Re: Why does this math work?

    Hey Ace_Man, thanks for mentioning that the minus sign was required there for the 1st person view rotation. I had some trouble with that. How'd you figure out that the Cosine of the angle needed a minus sign?
    *Keepin it real*
    -Brian

  5. #5
    Senior Member OpenGL Guru
    Join Date
    Feb 2000
    Location
    Sweden
    Posts
    3,115

    Re: Why does this math work?

    Well, the minus sign is only required if you want to achieve that particular effect. To figure out how to do, just take a paper and draw the coordinate system, and with a little bit of thinking, you can come up with just about anything you need about movements. It's just a matter of HOW YOU want the scene to respond on a certain parameter.

Posting Permissions

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