移动AR示例更新

采纳建议, 放弃opengl+obj, 采用unity3d做渲染, 同时将artoolkit也换成了vuforia。 最新的demo如下

存在以下问题:想了很多办法减少晃动, 但结果仍然不理想。 看来光靠目前手机传感器还不够,需要加上图像识别,红外测距等其他技术,才能达到像hololens那样的稳定效果。这方面,哪位大牛有心得,可以一起交流学习哈。

视频演示1

视频演示2

截图1

截图2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AR场景中拖拽物体移动需要使用Unity的触摸事件和射线检测。 以下是实现拖拽移动的步骤: 1. 添加一个脚本到需要拖拽的物体上,脚本中需要实现OnMouseDown()、OnMouseDrag()和OnMouseUp()三个方法。 2. 在OnMouseDown()方法中,使用Camera.main.ScreenPointToRay()方法获取射线,并使用Physics.Raycast()方法检测射线是否与物体碰撞,如果碰撞,则记录物体与射线的交点。 3. 在OnMouseDrag()方法中,使用Camera.main.ScreenPointToRay()方法获取射线,并使用Physics.Raycast()方法检测射线是否与平面碰撞,如果碰撞,则计算物体应该移动的位置,并将物体移动到该位置。 4. 在OnMouseUp()方法中,清除记录的交点,结束拖拽。 需要注意的是,在AR场景中,射线检测需要使用AR摄像机而不是普通的摄像机,可以使用Camera.main.GetComponent<Camera>().transform来获取AR摄像机的Transform组件。另外,在计算物体移动位置时,需要考虑到AR摄像机的移动和旋转。 以下是代码示例: ``` using UnityEngine; public class DragObject : MonoBehaviour { private Vector3 screenPoint; private Vector3 offset; private Vector3 originalPosition; void OnMouseDown() { originalPosition = transform.position; screenPoint = Camera.main.WorldToScreenPoint(transform.position); offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); } void OnMouseDrag() { Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; transform.position = curPosition; } void OnMouseUp() { RaycastHit hit; if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit)) { transform.position = hit.point; } else { transform.position = originalPosition; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值