Camera Using Spherical Coordinates

Hi all,

I am trying to make a camera using spherical coordinates, as the title implies. I believe I have a problem with the up vector, but here is the code anyways:


        float eyeX = gs.vDist * ( (float) cos(gs.theta) ) * ( (float) sin(gs.phi) );
        float eyeY = gs.vDist * ( (float) sin(gs.theta) ) * ( (float) cos(gs.phi) );
        float eyeZ = gs.vDist * ((float) cos(gs.phi));
        
        eye = new Vector(eyeX, eyeY, eyeZ);
        center = gs.cnt;
        
        Vector V = eye.subtract(center).normalized();        
        
        up = new Vector( (float) cos(gs.theta), (float) sin(gs.theta), 1);

gs is a Global State variable that houses all the required information.
gs.theta is the angle between the point projection on the vertical plane and the x-axis, and gs.phi is the angle with z-axis. gs.vDist is the distance between the origin and the point on the sphere (radius).

The camera should be able to move in any direction using left click drag. I understand that in order to do that, z coordinate of the up vector cannot be 1, but should be adjusted accordingly. I just don’t know what it should be.

What changes should I make in order for it to work?

Just as the side note, all the parameters are later added to gluLookAt(…).

Thank you in advance!