Unity 3D——四元数的应用

来源:互联网 发布:stc单片机引脚功能图 编辑:程序博客网 时间:2024/06/06 15:44
   四元数用于旋转,确实很不好理解,但是,有一点好处是不会发生万向锁。 主要用法就是:
   首先,获取你当前的Rotation的四元数和目标Rotation的四元数,相乘即可。
来自前辈的示范:
using UnityEngine;using System.Collections;// 暴走武林里主界面的球体的旋转效果public class SphereRotate : MonoBehaviour{    public Camera m_camera = null;    private bool m_mouseDown = false;    private Vector3 m_previosMousePosition = Vector3.zero;    public float m_speed = 0.05f;    private Quaternion m_targetRot = Quaternion.identity;    void Start()    {    }    void Update()    {        if (Input.GetMouseButtonDown(0))        {            Debug.Log("mouse down");            m_mouseDown = true;            m_previosMousePosition = Input.mousePosition;        }        else if (Input.GetMouseButtonUp(0))        {            if (m_mouseDown)            {                Debug.Log("mouse up");                m_mouseDown = false;                m_speed = 0.002f;            }        }        if (m_mouseDown)        {            Vector3 _dir = Input.mousePosition - m_previosMousePosition;            if (_dir.sqrMagnitude > 0.1f)            {                Vector3 _dir0 = new Vector3(0, 0, -1);                Vector3 _dir1 = _dir0 + _dir * m_speed;                // 四元数旋转                Quaternion _qt = Quaternion.FromToRotation(_dir0, _dir1);                Quaternion _result = _qt * transform.rotation;                transform.rotation = _result;                // 边界限制                float _angle = Quaternion.Angle(Quaternion.identity, _result);                Debug.Log(_angle);                if (_angle > 10)                {                    float _lerp = 10 / _angle;                    m_speed *= _lerp;                    m_targetRot = Quaternion.Lerp(Quaternion.identity, _result, _lerp);                }                else                {                    m_targetRot = _result;                }                m_previosMousePosition = Input.mousePosition;            }        }        else        {            transform.rotation = Quaternion.Lerp(transform.rotation, m_targetRot, 0.2f);        }    }}


0 0
原创粉丝点击