Sign in to follow this  
multivac

Quaterion first person style camera

Recommended Posts

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this