大家好,又见面了,我是全栈君。
昨天只是简单运行了官方的Demo,今天抽时间看了下文档和代码,大概了解一下原理。
Demo功能很简单,打开之后自动检测平面,手指触摸平面会在触摸位置放置一个机器人。
检测平面成功后如下面截图所示,可以看到很多蓝色小点和平面的菱形网状图。
蓝色点称为锚点,结合手机传感器用于追踪手机移动。详细原理介绍参考官网介绍
网格、小点和机器人都是使用OpenGL在SurfaceView上绘制的,看代码发现,当手指点击时会去检测触摸点与平面的碰撞,如果有碰撞则会在平面处放置一个机器人。理解一个不熟悉的东西,就先试着修改一番。
修改后实现的效果是,如果手指点击时没有碰撞到平面,则在手机当前所在的空间位置放置一个机器人,所做的主要逻辑修改代码如下,也很简单。
原来的逻辑是拿到MotionEvent后,去做碰撞检测,如果有碰撞结果,并且碰撞结果属于平面碰撞类型,即与SDK检测到的平面有碰撞,则把一个标识要显示机器人的PlaneAttachment放到队列。
所做的修改是,新增了一种碰撞类型叫FrameAttachment,不是上面的平面碰撞类型则作为这个类型放到队列。
更多细节可以参考Github
修改后的效果如图,点击平面则在平面放置机器人,没有平面则在当前空间手机的位置放置一个机器人。
以上只是个人理解的大概介绍,没有严格的术语考证,之后再完善。
代码放到了Github上,做了一点修改,测试过是支持Neuxs 6的。
Github地址
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/121304.html原文链接:https://javaforall.cn