【问题标题】:Xna rotate around world axis?Xna 绕世界轴旋转?
【发布时间】:2012-02-20 19:50:22
【问题描述】:

我想让俯仰偏航或滚动绕世界轴而不是本地轴旋转,但我不确定如何,我已经做到了。

Vector2 mouse_change = new Vector2(mouse_previous.X - mouse_new.X, mouse_previous.Y - mouse_new.Y);
camera_angles *= Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), mouse_change.X / 800f);
camera_angles *= Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), mouse_change.Y / 800f);

更新每一帧,然后我就有了。

view_matrix = Matrix.Invert(Matrix.CreateFromQuaternion(camera_angles) * Matrix.CreateTranslation(camera_position));
projection_matrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, device.Viewport.AspectRatio, 0.2f, 500f);

【问题讨论】:

    标签: c# xna


    【解决方案1】:

    对于一个简单的答案,对“camera_position”执行与对“camera_angles”相同的旋转

    //Add these operations
    camera_position = Vector3.Transform(camera_position, Quaternion.CreateFromAxisAngle(new Vector3(0, 1, 0), mouse_change.X / 800f));
    
    camera_position = Vector3.Transform(camera_position, Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), mouse_change.Y / 800f));
    

    【讨论】:

    • 如果您希望相机始终与相机围绕世界轴旋转的方向相同,那么只做 camera_position 而不是角度。
    • 绕着其他位置旋转,有没有办法用我的 camera_angles 四元数来做?
    猜你喜欢
    • 2019-10-18
    • 1970-01-01
    • 2015-07-23
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2016-09-09
    相关资源
    最近更新 更多