Advertisement

Quaterion first person style camera

Started by April 29, 2016 10:32 PM
1 comment, last by multivac 8 years, 4 months ago

my update function is adding rotation around the view axis(roll),which is increasing over time.I only want to change the yaw and pitch part.

is my calculation wrong or is it the float accuracy?

m_orientation is my global Quaterion to hold the final rotation. Q is type of glm::quat. V is glm::vec3


return [this](glm::vec2 ls, glm::vec2 rs, double dTime) {
auto rightVec = m_orientation * V(1, 0, 0);
Q q1 = glm::angleAxis(-rs.x * (float)dTime, V(0,1,0)); // yaw
Q q2 = glm::angleAxis(rs.y * (float)dTime, rightVec); // pitch

auto roll = glm::roll(m_orientation);
printf("%f\n", roll);

m_orientation = q1 * m_orientation;
m_orientation = q2 * m_orientation;


m_position += m_orientation * V(1, 0, 0) * ls.x * (float)dTime * sensitivity; //sidewards
m_position += m_orientation * V(0, 0, -1) * ls.y * (float)dTime * sensitivity; //forwards
buildViewMatrix();
};
Try making these changes


Q q2 = glm::angleAxis(rs.y * (float)dTime, V(1, 0, 0)); // pitch
...
m_orientation = q1 * m_orientation * q2;
My current game project Platform RPG
Advertisement

thx, your answer is correct.

This topic is closed to new replies.

Advertisement