ArCore:两种Anchor创建方式的上下文差异及理解正确性确认
ARCore中两种Anchor创建方式的差异解析
好问题!咱们来拆解这两段代码的差异,以及验证你的理解是否正确:
你的理解结论:完全正确!
先给你吃个定心丸,你对两种语句的上下文判断是准确的,下面来详细解释两者的具体区别:
1. 语句2:Anchor anchor = hitResult.createAnchor();
这个方法是从可跟踪平面(Trackable Plane)的上下文创建Anchor:
- 因为
HitResult来自OnTapArPlaneListener,它绑定了你点击到的那个具体的Plane实例 - 用这个方式创建的Anchor会和该Plane建立关联:当ARCore后续更新这个Plane的位置、尺寸(比如平面扩展)时,Anchor会自动跟着Plane调整自身姿态,始终保持相对于该平面的固定位置
- 适合需要物体“贴在平面上”的场景,比如放置家具在地面,地面平面扩展后家具位置会自动对齐新的平面范围
2. 语句1:Anchor anchor = arFragment.getArSceneView().getSession().createAnchor(hitResult.getHitPose());
这个方法是直接从Session全局上下文创建Anchor:
- 它跳过了Trackable Plane的关联,直接基于Session的空间坐标系创建独立的Anchor
- 这个Anchor不绑定任何Plane或Trackable对象,ARCore会直接在全局空间中维护它的位置,不会因为某个Plane的更新而改变姿态(除非Session的整体空间映射发生全局调整)
- 适合需要固定空间点的场景,比如标记一个空间中的特定位置,不管周围平面如何变化,这个点始终保持在原地
额外小提醒
你的示例代码里有个小问题:两次定义了同名的Anchor anchor变量,编译会报错,实际使用时需要调整变量名或者合并逻辑哦~
内容的提问来源于stack exchange,提问作者Daniyal Javaid
相关产品推荐
相关产品推荐

