# Thread: How to calculate camera roll...

1. ## How to calculate camera roll...

Hello,

I have hopefully a simple question regarding calculating the roll of a camera.

I can calculate the yaw and pitch just fine using GLM:
Code :
```CameraAxis = glm::cross(DirectionOfWhereCameraIsFacing, DirectionOfUpForPerson);
CameraQuatPitch = glm::angleAxis(CurrentCameraViewingSettings.Pitch, CameraAxis);
CameraQuatYaw = glm::angleAxis(CurrentCameraViewingSettings.Yaw, DirectionOfUpForPerson);```

The first problem is calculating the roll of the camera. I tried this but my math is off as this doesn't work:

Code :
`CameraQuatRoll = glm::angleAxis(CurrentCameraViewingSettings.Roll, CameraAxis);`

This seems to me like another pitch calculation.

The second piece is accuratly combining the changed roll to find out where the camera is finally facing.

I do this for the yaw and pitch above by doing the following below:

Code :
```CameraQuatBothPitchAndYaw = glm::cross(CameraQuatPitch, CameraQuatYaw);
CameraQuatBothPitchAndYaw = glm::normalize(CameraQuatBothPitchAndYaw);
DirectionOfWhereCameraIsFacing = glm::rotate(CameraQuatBothPitchAndYaw, DirectionOfWhereCameraIsFacing);```

How do I also incorporate roll into this?

2. Your 3 axes that you should be rotating around are DirectionOfWhereCameraIsFacing (roll), DirectionOfUpForPerson (yaw) & CameraAxis (pitch),so you need to change CameraAxis to DirectionOfWhereCameraIsFacing in your roll calculation.

I believe to combine the 3 rotations you just multiply the quaternions:
Code :
`CombinedRotation = CameraQuatYaw * (CameraQuatPitch* CameraQuatRoll);// or is it roll*(pitch*yaw)?`

Depending on what you're after, you might actually want to roll/pitch/yaw around (1,0,0), (0,1,0) & (0,0,1) axes instead.

3. Thanks, I will give this a shot.

#### Posting Permissions

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