camera

Started by
21 comments, last by tinu 17 years ago
Your up vector should always be at right angles to your right and forwards vectors. So you can take the cross product of the two of them and use that as your up vector.
Advertisement
What does forward vector mean?

Is it a vector formed by camera look at and camera position points.

What does a right vector mean?
I'd highly recommend looking at some basic trigonometry and matrix maths stuff before going any further or you're just going to get very confused. The forwards vector is the vector that describes the direction of the camera, which is the normalised vector of viewTarget - cameraPos. The right vector is a vector that is at right angles to the forward vector. If you know the forwards vector and the up or right vector, you can calculate the last vector by using the vector cross product.
I have only my forward vector.
I don't have right or up vectors.
How can I compute Right vector ( a perpendicular to forward vector which is known)
in direct X?
Well, if you know your forward vector, the right vector will be 90 degrees to the right. So you can calculate that using the same trig as mentioned by Sc4Freak and I.
To rotate around X pitch as mentioned,I do the following:

CameraPosition.z = Camera_Radius * cos( Angle * 0.0174 );
CameraPosition.y = Camera_Radius * sin (Angle * 0.0174 );

D3DXVec3Normalize(&CameraDirection,&(Target position -Camera Position));

FwdVector.x=0.0f;
FwdVector.y=Camera_Radius * sin( 90 * 0.0174 );
FwdVector.z=Camera_Radius * cos( 90 * 0.0174 );

D3DXVec3Cross(&Up,&FwdVector,&CameraDirection);

Is this correct?
FwdVector should be equal to CameraDirection, and the right vector should be at 90 degrees to the forwards vector. I think this will work (not tested):

D3DXVECTOR3 vRight;
vRight.x = 0.0f;
vRight.z = Camera_Radius * cos ((Angle+90.0f) * 0.0174);
vRight.y = Camera_Radius * sin ((Angle+90.0f) * 0.0174);

You'd still be far easier rotating the object instead of the camera though, there's a reason functions like this don't already exist in D3DX.
Thank you Sir,

Thank you for your suggestions.

it helped me a lot.

Now orbiting along X and Y are happening properly.

But combination does not work properly.

Why is it so?
Define "does not work properly".
If I am orbiting in X or Y direction separately , its working properly.. But If I rotate around Y direction after along X direction and vice versa, the orbiting doesn't work..

This topic is closed to new replies.

Advertisement