3
\$\begingroup\$

I have been having trouble with my camera, first encountering the roll tilt that is so many times asked... I fixed that issue by following the instructions at this link: Unwanted roll when rotating camera with pitch and yaw But now I find another issue, whenever I get close to my triangle, pitch becomes roll, and instead of moving up and down the triangle, the camera rotates around the plane of that triangle, see:

Pitch is fine, but as i get close the the triangle, it becomes roll

This is my code, I follow the same logic as the link above!

 float spitch = pitch * camera.sensitivity, syaw = yaw * camera.sensitivity; float npitch = Math_Quaternion_GetPitch(camera.rotation) + spitch; if(npitch > Math_Degrees_ToRadians(85) || npitch < Math_Degrees_ToRadians(-85)) return; Math_Quaternion yaw_quat; Math_Quaternion pitch_quat; Math_Vec3 up = {0, 1, 0}; Math_Vec3 left = {1, 0, 0}; Math_Quaternion_RotationAroundAxis(yaw_quat, up, syaw); Math_Quaternion_MultiplyVec3(left, camera.rotation, \* this is out! *\ left); Math_Quaternion_RotationAroundAxis(pitch_quat, left, spitch); Math_Quaternion_Multiply(pitch_quat, camera.rotation, camera.rotation); Math_Quaternion_Multiply(yaw_quat, camera.rotation, camera.rotation); Math_Quaternion_Normalize(camera.rotation); 

Edit: Also, switching the quaternion multiplication order or just using a normal pitch yaw roll method fixes the problem, but then the roll problem comes back!

\$\endgroup\$
3
  • \$\begingroup\$ It's a bit tough to get a sense of the motion happening in the animation. Are you able to record one with a visible horizon/sky to use as a global up/down reference? \$\endgroup\$ Commented Mar 11, 2018 at 21:12
  • \$\begingroup\$ I fixed it by omiting the multiplyVec3(left... line and just using left as (1, 0, 0); \$\endgroup\$ Commented Mar 11, 2018 at 21:20
  • \$\begingroup\$ You can accept your own answer. \$\endgroup\$ Commented Aug 5, 2019 at 18:57

1 Answer 1

0
\$\begingroup\$

I fixed it by omiting the multiplyVec3(left... line and just using left as (1, 0, 0); Edit: I just clumsily moved the code, made a mistake and it solved the issue, but I believe I'm locking the rotation around the x and y axis hence left and up instead of rotating my object relative to the quaternion's own up and left vectors... I'm not sure why it fixes the problem but it does!

\$\endgroup\$
1
  • 6
    \$\begingroup\$ This answer would be even better if it included some insight into why this fixes the issue, to help others who run into similar problems. \$\endgroup\$ Commented Mar 11, 2018 at 23:02

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.