美文网首页
LeapMotion拉动物体旋转

LeapMotion拉动物体旋转

作者: xiaoxingyun | 来源:发表于2016-10-11 02:06 被阅读424次

在VR中经常需要实现这样的功能:展示一个物体,当玩家碰触到这个物体时,可以用手来拨动这个物体,把物体前后左右上下都看一下,在程序上就是获取手的位置变化来控制物体的旋转,具体的思路呢就是求出手与物体中心两点之间的向量,然后求出上一帧与下一帧这两个向量的夹角,这样就能得出我们的手相对于物体移动的角度,再让物体转动相应的角度即可。物体的转动一定是要以camera 的轴向旋转的。

    public Camera cam;
    private Collider colObj;
    private Vector3 lastPos;
    private bool grab;
    public bool relase;
    private Transform hand;
    void Awake()
    {
        colObj = GetComponent<Collider>();
    }

    void OnTriggerEnter(Collider col)
    {
        lastPos = col.transform.position;//记录手触碰到物体时的位置
        hand = col.transform;
        grab = true;
        relase = false;
    }

    void OnTriggerExit(Collider e)
    {
        grab = false;
        relase = true;
    }
    void Update()
    {
        if (!grab)
            return;
        //求当前手与物体中心的向量
        Vector3 newVec = Vector3.Normalize((hand.transform.position - transform.position));
        //求上一帧手与物体中心的向量
        Vector3 lastVec = Vector3.Normalize((lastPos - transform.position));
        //计算两个向量之间的夹角
        Quaternion drot = Quaternion.FromToRotation(lastVec, newVec);
        //把quaternion转换成欧拉角
        Vector3 euler = drot.eulerAngles;
        Vector3 camfor = cam.transform.forward;
        Vector3 fwd = Vector3.Cross(camfor, Vector3.up);
        //物体在camera对应的轴向上旋转
        transform.Rotate(cam.transform.up,euler.y,Space.World);
        transform.Rotate(fwd,-euler.x,Space.World);
        //旋转之后再次记录手的位置
        lastPos = hand.transform.position;
    }

好啦,基本的实现就是这些,可以根据实际情况再加一些有趣的功能哦。

相关文章

  • LeapMotion拉动物体旋转

    在VR中经常需要实现这样的功能:展示一个物体,当玩家碰触到这个物体时,可以用手来拨动这个物体,把物体前后左右上下都...

  • VR物体交互

    分享一个功能:用leap拉动一个固定位置的物体,拉动的同时使物体跟随手旋转,具体是这样的,手向上(下)运动,物体在...

  • 丽江古城(10)

    (手机旋转90°左右拉动图片)

  • 行走丽江

    (手机旋转90°左右拉动图片)

  • 丽江古城(11)

    (手机旋转90°左右拉动图片)

  • 行走丽江

    (手机旋转90°左右拉动图片)

  • Unity引擎 —— LeapMotion开发

    一:LeapMotion简介 二:LeapMotion for Unity开发

  • Unity Leapmotion 手势识别

    Leapmotion 手势识别,支持识别:握拳、抓取、左右上下前后滑动,大拇指上下朝向、放大/缩小、旋转。 使用步...

  • 丽江古城(8)

    ——拍照记录生活 (手机旋转90°左右拉动图片)

  • 物体的旋转

    1.1物体的旋转 1.1.1对象的旋转方式 (1)transform.Rotate 应用一个欧拉角的旋转角度,eu...

网友评论

      本文标题:LeapMotion拉动物体旋转

      本文链接:https://www.haomeiwen.com/subject/xfwvyttx.html