0
votes

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();
};
1

1 Answers

0
votes

solved with 2 changes

auto q2 = glm::angleAxis(rs.y * (float)dTime, V(1,0,0)); // pitch
m_orientation = q1 * m_orientation * q2;