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.
What does forward vector mean?
Is it a vector formed by camera look at and camera position points.
What does a right 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?
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?
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.
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?
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?
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement