【问题标题】:Quaterion first person style camera四元数第一人称相机
【发布时间】:2016-04-29 20:37:23
【问题描述】:

我的更新功能是围绕视轴(滚动)添加旋转,随着时间的推移而增加。我只想改变偏航和俯仰部分。

是我的计算错误还是浮点精度?

m_orientation 是我的全局 Quaterion,用于保持最后的旋转。 Q 是 glm::quat 的类型。 V 是 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();
};

【问题讨论】:

    标签: 3d camera frame-rate quaternions glm-math


    【解决方案1】:

    通过 2 处更改解决

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多