ARCore之路-运动跟踪之实例

版权声明:David Wang原创ARCore文章,仅供学习研究之用,不得用于任何商业目的,未经授权不得转载! https://blog.csdn.net/yolon3000/article/details/82860534

  本文是运动跟踪的实例,应该放在运动跟踪内,但现在插不进去了,就放这里吧。
  我们已经对ARCore运动跟踪进行了深入的了解,对其原理、机制、局限性都有了比较深刻的认识,本节我们将结合ARCore的运动跟踪技术来展示其在空间的定位和跟踪能力。
  在Google ARCore开发者演示中,有一款在空间绘画的应用叫ARCore Drawing,我们就来实现其核心的技术。

这里写图片描述

一、思路

  我们的目标是实现用户利用手机在空间画线的功能(用户轨迹),主要利用ARCore对用户位置的空间跟踪能力。具体实现思路是:

  1. 建一个材质用于渲染线条。
  2. 随时间获取用户当前的位置,我们每隔1秒获取1次用户位置(手机设备)。
  3. 将获取到的位置保存起来,利用lineRender来画出位置点之间的连线。

二、实现步骤

  创建材质
  在Assets->Materials文件夹下新建材质LineRender,Shader选择Particles/Additive(选择其它Shader也是可以的),设置好Particle Texture,如图所示:

这里写图片描述

  创建AppController
  在Assets->Scripts文件夹下新建C# 脚本 Appcontroller(代码附后),在Hierarchy窗口中新建一个空对象,并为其添加Appcontroller脚本,设置脚本参数如下图:

这里写图片描述

  实现代码
  先设置lineRender相关参数,每隔1秒获取1次用户位置数据并将位置信息赋给lineRender,利用lineRender画线连接位置点,AppController代码沿用了之前我们写的代码结构,重复部分不赘述,关键代码如下:

    public Material mMaterial;
    public Camera FirstPersonCamera;
    private LineRenderer lineRender;
    private int PointCount = 0;
    private bool mIsQuitting = false;
    private float mDeltaTime = 1.0f;
    private float mNextPointTime = 0.0f;
    private int mMaxPoint = 100;
    // Use this for initialization
    void Start () {
        OnCheckDevice();
        lineRender = gameObject.AddComponent<LineRenderer>();
        lineRender.material = mMaterial;
        lineRender.startWidth = 0.005f;
        lineRender.endWidth = 0.002f;
        lineRender.startColor = Color.red;
        lineRender.endColor = Color.yellow;
        mNextPointTime = Time.time;
    }
	
	// Update is called once per frame
	void Update () {
        UpdateApplicationLifecycle();
        if (Time.time > mNextPointTime && PointCount <= mMaxPoint)
        {
            AddLinePoint();
            mNextPointTime += mDeltaTime;
        }
        
    }

    void AddLinePoint()
    {
        lineRender.positionCount = PointCount + 1;
        lineRender.SetPosition(PointCount, FirstPersonCamera.transform.position);
        PointCount++;
    }

  以上代码实现了最基础,但也是最核心的空间运动跟踪及可视化的实现,对代码稍作扩展即可以实现空中手写、空中绘画、空中标点等功能。
  编译运行,结果如下:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/82860534
今日推荐