AR制作,模型在识别到的时候,朝向固定

需求

       在传统的AR制作中,一般来说,都是预设好了模型和图片的相对关系,在识别到的时候将模型现实在相应的位置,模型的面朝方向和识别图的方向相关。
       现在遇见需求,需要在识别的时候,保持模型的朝向和识别图的朝向不挂钩,即无论识别图的方向如何改变,在识别到识别图的时候,模型都是统一的朝向。此为硬性需求。

解决思路

(一)

       最开始看见此需求以后,第一反应是使用手机的陀螺仪进行控制,毕竟在获取的外部输入中,重力加速度的方向是不会改变的,于是进行了各种计算。来改变模型的朝向。

public class Gyro : MonoBehaviour
{
    public GameObject m;      //  模型
    Vector3 g;                        //  重力加速度方向
    // Use this for initialization
    void Start ()
    {
        testU = Vector3.zero;
        testU.y = 1;
        if(!Input.gyro.enabled)
            Input.gyro.enabled = true;
        Input.gyro.updateInterval = 0.1f;
    }
    
    // Update is called once per frame
    void Update ()
    {
       
    }

     public void test()
    {
        g = Input.gyro.gravity;
        g.x = 0;
        g.z = 0;
        Vector3 dir = g - m.transform.up;
        float dotValue = Vector3.Dot(-m.transform.up, dir.normalized);
       float angle = Mathf.Acos(dotValue) * Mathf.Rad2Deg;
      Vector3 tempDir = Vector3.Cross(-m.transform.up, dir.normalized);
       if (tempDir.z < 0)
           angle = -1 * angle;
        m.transform.RotateAround(m.transform.position, Vector3.forward, angle);
        m.transform.rotation = Quaternion.Slerp(m.transform.rotation, Quaternion.LookRotation(dir), 1);
    }
}

       然后悲剧的发现,手机的陀螺仪在重力检测的时候,很多情况下,会和模型的方向成180度夹角,这就要对这些进行更深入的考量,而且如果手机如果恰好是水平姿态,哈哈,恭喜,又是另外一种悲剧的情况。
至此,对使用手机陀螺仪的方案,产生了怀疑。

(二)

       古语有云,山不转水转,水不转人转,突然获得启发。模型跟随摄像机一起旋转,是否就能完成需求。

public class Gyro : MonoBehaviour
{
    public GameObject arc;
    public GameObject m;
    // Use this for initialization
    void Start ()
    {
    }
    
    // Update is called once per frame
    void Update ()
    {
       
    }
     public void test()
    {
        m.transform.localEulerAngles = arc.transform.localEulerAngles;
    }

}

       测试结果完美搞定,未免夜长梦多,将此遗忘在时间长河,遂留于此,待后时有需,再此

你可能感兴趣的:(AR制作,模型在识别到的时候,朝向固定)