Jump to content
  • Advertisement
Sign in to follow this  
zahidayar

easy camera rotation

This topic is 4410 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hello, how can i rotate the first person view when i press the right or left keys on the keyboard? currently this is the code im using but it doesnt do well after rotating really far left or right: else if ( e.KeyCode == Keys.Left ) this.cameraTarget.X--; else if ( e.KeyCode == Keys.Right ) this.cameraTarget.X++; the code basically changes the camera target of the device's view transform: device.Transform.View = Matrix.LookAtLH( this.cameraLocation , this.cameraTarget , new Vector3(0, 1, 0)); any suggestions would be appreciated... thanks for your time, Zahid [Edited by - zahidayar on May 24, 2006 3:12:31 PM]

Share this post


Link to post
Share on other sites
Advertisement
Here's the code I'm using right now that takes the relative mouse input from DirectInput, but the process can use any input.

void SimCamera::Rotate(SimInput *p_input)
{
D3DXVECTOR3 vDirection, vRotAxis;
D3DXMATRIX matRotAxis, matRotZ;

D3DXVec3Normalize(&vDirection, &(look - eye));
D3DXVec3Cross(&vRotAxis, &up, &vDirection);
D3DXVec3Normalize(&vRotAxis, &vRotAxis);

D3DXMatrixRotationAxis(&matRotAxis, &vRotAxis, p_input->GetRelativeY() / 200);
D3DXMatrixRotationY(&matRotZ, p_input->GetRelativeX() / 200);

D3DXVec3TransformCoord(&vDirection, &vDirection, &(matRotAxis * matRotZ));
look = eye + vDirection;
}

Share this post


Link to post
Share on other sites
thanks a lot for the help Nick!

i was able to successfully rotate the camera along the Y axis by translating your code to c#:

else if ( e.KeyCode == Keys.Left )
{
Vector3 movementDirectionVector = Vector3.Normalize ( this.cameraTarget - this.cameraLocation );
Vector3 rotationAxisVector = Vector3.Cross ( this.cameraUpOrientation , movementDirectionVector );
rotationAxisVector = Vector3.Normalize ( rotationAxisVector );

Matrix rotationMatrix = Matrix.RotationY ( -.07F );
movementDirectionVector = Vector3.TransformCoordinate ( movementDirectionVector , rotationMatrix );
this.cameraTarget = this.cameraLocation + movementDirectionVector;

}

else if ( e.KeyCode == Keys.Right )
{
Vector3 movementDirectionVector = Vector3.Normalize ( this.cameraTarget - this.cameraLocation );
Vector3 rotationAxisVector = Vector3.Cross ( this.cameraUpOrientation , movementDirectionVector );
rotationAxisVector = Vector3.Normalize ( rotationAxisVector );

Matrix rotationMatrix = Matrix.RotationY ( .07F );
movementDirectionVector = Vector3.TransformCoordinate ( movementDirectionVector , rotationMatrix );
this.cameraTarget = this.cameraLocation + movementDirectionVector;
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!