想象你为话剧团负责布景:要把一张三人沙发放进舞台,既不能挡住演员,又要和灯光融为一体。ARKit、ARCore、WebXR 就是三支布景师队伍:ARKit 只服务苹果的剧场,ARCore 服务安卓剧场,WebXR 则在浏览器里搭台。它们都做三件事:找地面、读灯光、钉钉子。找地面对应平面检测,读灯光对应光照估计,钉钉子对应锚点管理。如果你要同时在三家剧场巡演,就得有跨平台策略和选型决策。这篇内容带你从零认识这套 AR 开发的“舞台地基”。

岗位关联

学完这一篇,你会看懂 AR 应用背后的框架分工与核心算法,能判断一个 AR 需求该用 ARKit、ARCore 还是 WebXR,也能向团队解释为什么选型要综合平台覆盖、团队栈与性能预算。

目录
  1. 可视化演示
  2. AR平台三剑客:三位布景师
  3. 平面检测:给沙发找地板
  4. 光照估计:灯光师举起测光表
  5. 锚点管理:给道具钉钉子
  6. 跨平台开发策略:同一台剧在不同剧院巡演
  7. 框架选型:制作人算总账
  8. 典型应用落地:三个舞台的首演之夜
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示ARKit/ARCore/WebXR三大框架的功能对比和AR处理管道流程,通过滑块调节性能参数观察实时指标。

本节配有交互动效(进入视口后自动加载,约 3KB)。

框架对比:ARKit/ARCore/WebXR功能评测 ARKit:iOS优化精度最高 WebXR:跨平台但功能受限 Score = avg(PD, LE, ANC, PERF) ARKit综合得分领先,WebXR覆盖最广。

AR平台三剑客:三位布景师

苹果剧场里有一位专属布景师 ARKit,只服务 iOS 设备;安卓剧场里有一位布景师 ARCore,覆盖安卓手机;还有一位从网页来的布景师 WebXR,不用安装 App,打开浏览器就能搭台。三位布景师虽然工具包不同,但都在做同一件事:让虚拟物体和真实世界同处一个坐标系,然后在摄像头画面里稳定呈现。

这个“同处一个坐标系”的能力,在技术上叫做 SLAM(即时定位与地图构建)。手机一边拍摄真实场景,一边估算自己的位置和朝向,再告诉 AR 框架:虚拟沙发应该放在哪里。ARKit 把能力封装成 iOS 的 ARKit API,ARCore 封装成 Android 的 ARCore API,WebXR 则提供一个浏览器标准,让开发者通过 JavaScript 调用底层 AR 能力。

对开发者来说,三套 API 的名字不同,但核心概念高度相通:摄像机位姿、锚点、平面、光照估计。它们共同把“摄像头画面 + 传感器数据 + 3D 渲染”串成完整的 AR 体验。布景师们的工作流程相似,所以学会一个框架,再学另一个会快很多。

三支布景师队伍各管各的剧场,但他们的核心本领都在这条变换链上。选哪个队,取决于你的观众坐在哪个剧场。

Pworld=Tanchor×plocal\displaystyle \mathbf{P}_{world} = \mathbf{T}_{anchor} \times \mathbf{p}_{local}
这个公式的意思是:把虚拟物体在自己的局部坐标里的点,先经过锚点变换,转到世界坐标里。锚点在这里就像一个“布景定位点”,告诉系统道具该放在舞台的哪里。
  1. 局部坐标 $\mathbf{p}_{local}$这是虚拟物体还没放进场景时,自己内部使用的坐标。比如沙发的中心点就是 $(0,0,0)$,这是它自己的“原点”。
    plocal\mathbf{p}_{local}
  2. 锚点变换 $\mathbf{T}_{anchor}$这个矩阵包含旋转和平移,描述“从局部坐标到真实世界坐标”该怎么转换。就像布景师拿着卷尺,量好方向、算好距离。
    Tanchor\mathbf{T}_{anchor}
  3. 矩阵乘法用锚点变换乘上局部坐标,就得到物体在世界空间里的位置 $\mathbf{P}_{world}$。
    Pworld=Tanchor×plocal\mathbf{P}_{world} = \mathbf{T}_{anchor} \times \mathbf{p}_{local}

平面检测:给沙发找地板

布景师要放沙发,第一步是用手摸一摸地面平不平。AR 世界里没有手,但有平面检测。平面检测的作用,就是从手机摄像头画面中找到一块可以“放东西”的平整表面:地面、桌面、墙面都可以。它先提取画面里的特征点,再判断这些特征点是否落在同一个平面上。

ARKit 和 ARCore 都支持水平面和垂直面的识别。水平面通常是地板、桌面,垂直面通常是墙壁。系统检测到平面后,会返回一个平面锚点,包含平面的中心位置、范围和边界。WebXR 则通过命中测试(hit test)完成类似功能:虚拟射线打中某个真实表面,返回交点作为放置位置。

平面检测的质量并不总是“满分”。当场景纹理少、光线暗或者摄像头快速移动时,特征点不足,检测质量会从高降到低。开发者需要根据质量分级决定是否提示用户移动手机,或者等平面稳定后再放置虚拟物体。这正是“检测质量分级”要解决的问题。

摸清地面之后,布景师才能安心地把沙发放上去。平面检测就是 AR 场景的“找平地”环节。

ax+by+cz+d=0\displaystyle a x + b y + c z + d = 0
这是空间解析几何中的平面方程。手机得到一堆三维特征点后,就是在寻找一组系数 $a,b,c,d$,让大多数特征点都满足这个方程。
  1. 法向量 $(a,b,c)$它垂直于平面,决定了平面的朝向。比如地面朝上,法向量就近似指向天空。
    (a,b,c)(a,b,c)
  2. 偏移量 $d$它表示坐标系原点到平面的距离。平面离原点越远,$d$ 的绝对值越大。
    dd
  3. 平面方程对任意一个点 $(x,y,z)$,只要代入左边结果接近 0,就说明这个点落在平面上。AR 框架正是靠它判断哪些特征点属于同一块地板。
    ax+by+cz+d=0a x + b y + c z + d = 0

光照估计:灯光师举起测光表

地板找好了,还不能直接放沙发。如果虚拟沙发明亮如白天,而真实客厅昏暗得像晚上,观众一眼就会觉得假。布景团队里有一名灯光师,会用测光表测量舞台光线;AR 里对应的角色是光照估计。

光照估计从摄像头图像里读取当前环境的大致亮度,有的框架还能估计色温和方向光。ARKit 提供环境光强度(以勒克斯为单位)和色温(以开尔文为单位);ARCore 提供相似的光照估计,并在高级模式里支持环境光 HDR;WebXR 也有光照估计 API,让 3D 物体根据网页端传来的光照数据调整明暗和反射。

有了光照信息,渲染引擎就能给虚拟物体打上“和现场一致”的光,让它投射出合理的阴影,反射出环境的颜色。这样,虚拟沙发和真实地板之间才有了相同的明暗关系,而不是像一张贴图硬生生浮在画面里。

灯光师读懂了现场光线,虚拟沙发才不会在昏暗的房间里“自带光环”。

Iavg=1N∑k=1NYk\displaystyle I_{avg} = \frac{1}{N}\sum_{k=1}^{N} Y_k
这是最基础的环境光强度估计:把所有采样像素的亮度 $Y_k$ 加起来,再除以像素个数 $N$,得到平均亮度。平均亮度越高,说明环境越亮。
  1. 像素亮度 $Y_k$把彩色像素转成灰度后,每个像素有一个亮度值。它近似表示真实世界里这一小块区域的光照强度。
    YkY_k
  2. 求和 $\sum_{k=1}^{N}$把一帧画面里所有采样像素的亮度都加在一起。
    ∑k=1NYk\sum_{k=1}^{N} Y_k
  3. 取平均 $\frac{1}{N}$除以总像素数,得到整个画面平均亮度 $I_{avg}$,这就是最基础的光照估计结果。
    Iavg=1N∑k=1NYkI_{avg} = \frac{1}{N}\sum_{k=1}^{N} Y_k

锚点管理:给道具钉钉子

道具位置确定后,布景师还要把道具“钉”在舞台地板上,防止它漂移。AR 里的“钉子”就是锚点。锚点是一个固定在真实世界某个位置与朝向的坐标参考点。手机移动时,虚拟物体不会跟着手机画面乱跑,而是钉在原处,保持真实世界和虚拟世界的对齐。

锚点有多种类型:平面锚点钉在检测到的平面上,图像锚点钉在一张图片上,物体锚点钉在 3D 物体上。AR 框架会维护锚点的生命周期:创建、跟踪、丢失、恢复。如果手机快速移动或画面被遮挡,锚点可能暂时丢失;系统会尝试重新定位,找回锚点。多个锚点一起工作,就能在房间里同时摆放沙发、茶几和台灯。

开发者通常不直接操作坐标,而是操作锚点。把虚拟物体挂到锚点下,系统每帧自动更新它的世界坐标。这样,虚拟内容就像用螺丝拧在水泥地上一样,稳定地存在于空间之中。

钉子钉得牢,道具才稳。锚点就是 AR 世界里那枚看不见的螺丝钉。

Tanchorworld=Tcamworld×Tanchorcam\displaystyle \mathbf{T}_{anchor}^{world} = \mathbf{T}_{cam}^{world} \times \mathbf{T}_{anchor}^{cam}
这个公式描述锚点在世界坐标中的位姿:把“锚点相对相机”的位姿,与“相机相对世界”的位姿结合起来,就能得到锚点相对世界的位姿。
  1. 相机在世界中的位姿 $\mathbf{T}_{cam}^{world}$手机通过传感器知道自己现在站在哪、面朝哪,这个信息由相机位姿提供。
    Tcamworld\mathbf{T}_{cam}^{world}
  2. 锚点相对相机的位姿 $\mathbf{T}_{anchor}^{cam}$在相机坐标系里,锚点有一个相对位置和朝向,比如“沙发在相机前方 2 米,偏左 30 厘米”。
    Tanchorcam\mathbf{T}_{anchor}^{cam}
  3. 两个矩阵相乘把相机在世界中的位置,加上锚点相对相机的位置,就得到锚点在世界中的最终位置。
    Tanchorworld=Tcamworld×Tanchorcam\mathbf{T}_{anchor}^{world} = \mathbf{T}_{cam}^{world} \times \mathbf{T}_{anchor}^{cam}

跨平台开发策略:同一台剧在不同剧院巡演

如果剧团想同时在苹果剧场、安卓剧场和网页剧场巡演,该怎么办?一种方式是组建两套甚至三套完全不同的布景团队,分别按各自平台写原生代码;另一种方式是找一家“巡回演出公司”,用一套中间层适配不同平台。前者是原生双端并行,后者对应跨平台引擎和 WebXR。

Unity AR Foundation 是常见的跨平台方案。它把 ARKit 和 ARCore 的功能统一封装,开发者写一份 C# 代码,发布到 iOS 和 Android。WebXR 则完全跳过 App 安装,适合网页端快速传播,但能力受浏览器和硬件限制。还有云渲染方案:把复杂的 AR 渲染放到云端,手机只接收视频流,适合轻量设备。

跨平台策略的核心不是“一套代码走天下”,而是看你的演出需要在哪些剧院上演。如果只在苹果剧场演,直接用 ARKit 最省事;如果要在全部剧场演,就得考虑中间层带来的抽象成本和性能损耗。

巡回演出要算上座率。跨平台的价值,藏在用户覆盖率这张票根里。

Pcoverage=1−∏i=1n(1−pi)\displaystyle P_{coverage} = 1 - \prod_{i=1}^{n}(1 - p_i)
这是多平台覆盖率的简化公式。它计算“至少一个平台支持 AR 功能”的概率,帮助团队评估跨平台投入的价值。
  1. 单平台支持率 $p_i$比如你的目标用户中,有 70% 用支持 ARCore 的手机。
    pip_i
  2. 单平台不支持率 $1-p_i$剩下 30% 的用户在这个平台上无法使用完整 AR 能力。
    1−pi1 - p_i
  3. 连乘 $\prod_{i=1}^{n}(1-p_i)$所有平台都不支持的概率。
    ∏i=1n(1−pi)\prod_{i=1}^{n}(1-p_i)
  4. 补集 $1-$反过来,就是至少有一个平台能覆盖到用户的概率。
    Pcoverage=1−∏i=1n(1−pi)P_{coverage} = 1 - \prod_{i=1}^{n}(1 - p_i)

框架选型:制作人算总账

制作人面对三支布景团队,不会只看名气,而是拿出评分表:观众的设备分布、团队熟悉的技术栈、需要实现的功能、发布渠道和性能预算,每项都占一定权重。框架选型也应该是这种“算总账”的过程。

比如,你的目标用户全是 iOS 用户,那 ARKit 权重极高;如果用户是一半安卓一半苹果,Unity AR Foundation 或原生双端并行更合适;如果产品主要靠网页营销传播,WebXR 的“无 App 安装”优势会非常突出。团队如果只会前端 JavaScript,直接上 WebXR 可能比转学 Swift 更快交付。

加权评分模型能把模糊的“感觉哪个好”变成可比较的分数。每一项打分后乘权重,再求和,得分最高的方案就是当前项目的最优解。这个方法并不能替代实际技术验证,但在项目早期能有效帮团队避免拍脑袋决策。

制作人算的不是谁名气大,而是谁最适合这场戏。框架选型也一样。

Scorej=∑i=1mwi×si,j,∑i=1mwi=1\displaystyle Score_j = \sum_{i=1}^{m} w_i \times s_{i,j}, \quad \sum_{i=1}^{m} w_i = 1
这是框架选型的加权评分公式。每个候选框架 $j$ 的总分,等于所有评估因子的分数与权重乘积之和。
  1. 权重 $w_i$表示第 $i$ 个因素的重要程度。比如“用户平台占比”权重 0.5,“团队熟悉度”权重 0.3,“性能要求”权重 0.2。
    wiw_i
  2. 单项分数 $s_{i,j}$给候选框架 $j$ 在因素 $i$ 上打分,比如 ARKit 在 iOS 用户覆盖这项打 0.9,WebXR 打 0.5。
    si,js_{i,j}
  3. 加权求和把每个因素的两数相乘,再全部相加,得到框架 $j$ 的总分。
    Scorej=∑i=1mwi×si,jScore_j = \sum_{i=1}^{m} w_i \times s_{i,j}

典型应用落地:三个舞台的首演之夜

布景团队、地面、灯光、钉子都齐了,首演之夜正式开始。在客厅里,用户打开家居预览 App,手机先扫描地板,找到水平面,然后放上一张虚拟沙发。沙发会根据真实光照调整亮度,用户绕着沙发走动,锚点让沙发始终钉在原地。这就是 ARKit 与 ARCore 最常见的落地场景。

在课堂里,AR 应用把一个虚拟星球放在课桌平面上,学生可以旋转、放大、观察。教育场景重视交互与直观,对帧率要求高,因为画面卡顿会破坏沉浸感。在商场里,用户扫二维码打开网页,通过 WebXR 看一只虚拟吉祥物从海报上跳出来,整个过程不用安装 App,传播成本低。工业巡检则用平板在设备上叠加标注信息,帮助维修人员快速定位零件。

这些场景最后都要问:帧率够不够?移动端 AR 通常以 60 帧每秒为目标,也就是说每一帧处理时间必须控制得很短。性能预算就像舞台总时长,超时就会让观众看到“穿帮”。

从客厅到教室再到商场,AR 的每个应用都是一场“空间舞台剧”。布景、灯光、钉子和排演时间,缺一不可。

Tframe≤100060≈16.67 ms\displaystyle T_{frame} \leq \frac{1000}{60} \approx 16.67\ \text{ms}
这是 60 帧每秒的帧预算公式。手机每秒要绘制 60 帧,所以每帧必须在约 16.67 毫秒内完成计算与渲染。
  1. 每秒 1000 毫秒1 秒等于 1000 毫秒,这是帧预算的时间总量。
    1000 ms1000\ \text{ms}
  2. 目标帧率 60希望每秒显示 60 帧画面,动画才会流畅自然。
    6060
  3. 每帧预算1000 除以 60,得到每帧约 16.67 毫秒。超过这个时间,帧率就会下滑,AR 画面会抖动或卡顿。
    Tframe≤100060≈16.67 msT_{frame} \leq \frac{1000}{60} \approx 16.67\ \text{ms}

AI 应用场景

家居虚拟预览

阶段:空间感知与交互设计

解决的问题:传统家居购物只能靠想象,用户很难判断沙发尺寸、颜色是否适合客厅。AR 应用先做平面检测,找到地面或墙面;再用光照估计调整虚拟家具的明暗;最后用锚点把家具固定在空间中,让用户绕圈观看。

具体案例:宜家 Place 类应用让用户在手机镜头里“放”一张真实比例的沙发。用户可以边走边看,甚至拍照发给家人参考,下单前已经有接近实物的体验。

WebAR品牌营销

阶段:跨平台发布与用户触达

解决的问题:原生 App 下载成本高,用户不愿为一次营销活动安装应用。WebXR 让 AR 体验跑在浏览器里,用户扫二维码即可进入,适合传播性强的品牌互动。

具体案例:某饮料品牌在包装上印二维码,用户扫码后,手机摄像头出现一只虚拟的吉祥物站在桌面上,可以合照分享。使用 WebXR 命中测试和平面检测,无需下载 App。

工业巡检辅助

阶段:边缘计算与现场数据叠加

解决的问题:维修人员面对复杂设备时,需要反复翻图纸。AR 应用通过图像锚点把设备零部件标注固定在真实设备上,维修时直接看到“哪个螺丝需要拧”。

具体案例:巡检人员用平板对准车床,AR 界面在对应位置显示温度、压力和上次保养日期。锚点丢失后,系统引导用户返回初始位置重新定位。

Python 演示

python98 行
import mathimport randomfrom dataclasses import dataclass, field  @dataclassclass FeaturePoint:    x: float    y: float    z: float = 0.0  @dataclassclass Frame:    features: list = field(default_factory=list)    pixels: list = field(default_factory=list)  class PlaneDetector:    def detect(self, frame):        floor_points = [p for p in frame.features if abs(p.z) < 0.1]        if len(floor_points) < 3:            return None        avg_x = sum(p.x for p in floor_points) / len(floor_points)        avg_y = sum(p.y for p in floor_points) / len(floor_points)        avg_z = sum(p.z for p in floor_points) / len(floor_points)        variance = sum((p.z - avg_z) ** 2 for p in floor_points) / len(floor_points)        return {            "center_x": avg_x,            "center_y": avg_y,            "center_z": avg_z,            "variance": variance        }  class LightEstimator:    def estimate(self, frame):        if not frame.pixels:            return 0.0        return sum(frame.pixels) / len(frame.pixels)  class AnchorManager:    def __init__(self):        self._anchors = {}        self._next_id = 0     def add_anchor(self, x, y, z):        self._anchors[self._next_id] = (x, y, z)        self._next_id += 1     def count(self):        return len(self._anchors)  def choose_framework(candidates, weights):    scores = {}    for name, values in candidates.items():        scores[name] = sum(weights[i] * values[i] for i in range(len(weights)))    best = max(scores, key=scores.get)    return best, scores  def main():    random.seed(7)    frame = Frame()    for _ in range(30):        frame.features.append(FeaturePoint(            random.uniform(-1, 1),            random.uniform(-1, 1),            random.uniform(-0.02, 0.02)        ))    frame.pixels = [random.randint(60, 220) for _ in range(50)]     plane = PlaneDetector().detect(frame)    light = LightEstimator().estimate(frame)     anchors = AnchorManager()    anchors.add_anchor(0.1, 0.2, 0.0)    anchors.add_anchor(0.4, 0.5, 0.0)     candidates = {        "ARKit+ARCore": [0.9, 0.6, 0.4],        "Unity AR Foundation": [0.8, 0.7, 0.8],        "WebXR": [0.5, 0.9, 0.7],    }    weights = [0.4, 0.3, 0.3]    best, scores = choose_framework(candidates, weights)     print("平面检测:", plane)    print("光照估计:", round(light, 2))    print("锚点数量:", anchors.count())    print("框架评分:", scores)    print("推荐框架:", best)  if __name__ == "__main__":    main()
目的:用一个小脚本模拟 AR 场景的三步核心流程:特征点平面检测、环境光估计、锚点管理,最后用加权评分推荐开发框架。
  1. floor_points = [p for p in frame.features if abs(p.z) < 0.1]只保留 z 坐标接近 0 的特征点,模拟“接近水平地面”的点。
  2. avg_z = sum(p.z for p in floor_points) / len(floor_points)计算这些特征点的平均高度,用来判断平面是否平整。
  3. sum(frame.pixels) / len(frame.pixels)所有采样像素的平均亮度,对应光照估计中的环境光强度。
  4. self._anchors[self._next_id] = (x, y, z)为每个锚点分配独立编号并存储空间坐标。
  5. scores[name] = sum(weights[i] * values[i] for i in range(len(weights)))计算每个候选框架的加权总分。
  6. best = max(scores, key=scores.get)从评分表中选出得分最高的 AR 方案。

常见误区

误区我一直以为 WebXR 只是把 ARCore 搬到浏览器里,功能应该和原生 SDK 完全一样。

正解WebXR 是浏览器端的 W3C 标准,它定义的是“浏览器如何调用 AR 能力”的接口,而不是某个平台的私有 SDK。它会在支持底层原生 AR 的设备上调用系统能力,但能力边界受浏览器、操作系统和硬件共同影响,不可能与原生 SDK 完全对齐。

为何常见:因为 WebXR 和 ARCore 都做平面检测、锚点和光照估计,名称相似,容易让人误以为它们是同一套能力的“换皮”。

误区只要选 Unity AR Foundation,写一次代码就能同时发布 iOS 和 Android,再也不用碰 Swift 或 Kotlin。

正解跨平台引擎抽象了大部分 AR 功能,但相机权限、性能优化、平台特有 API、应用商店配置等仍可能需要原生代码或原生插件。跨平台不等于“零原生”,它更像是把“两套舞台”的布景方案统一成一套图纸,但电工、吊杆仍要按当地剧场规则施工。

为何常见:宣传材料常强调“一次构建,处处运行”,让开发者在项目初期误判了集成成本。

误区我以为平面检测可以直接识别出椅子、杯子这些真实物体,并知道它们的大小和形状。

正解平面检测只能找到平整表面,比如地面、桌面、墙面,它根据特征点拟合出一个平面方程。它不知道“这是一个杯子”还是“这是一本书”。识别物体属于物体追踪或机器学习模型的任务,不属于平面检测的常规职责。

为何常见:AR 里“扫描房间”看起来很智能,容易让人高估平面检测的能力边界。

误区光照估计返回了一个亮度值,那它应该和真实光照仪测出来的一样准确。

正解光照估计是用摄像头图像推断出来的近似值,不是物理测光。它可能受曝光、白平衡、动态光源影响而偏差。它的核心目标是让虚拟物体看起来与真实场景“足够协调”,而不是复现一个科学测定值。

为何常见:开发者看到 ARKit 返回的勒克斯和色温数值,误以为这是高精度传感器数据,而忽略它本质上是图像算法估计。

误区只要锚点创建成功,虚拟物体就会一直稳稳地钉在那里,无论设备怎么动都不会出错。

正解锚点依赖相机追踪。相机快速移动、遮挡、光线剧变都可能导致追踪丢失,锚点出现漂移或暂时失效。优秀的 AR 应用会监听锚点状态,在丢失时提示用户重新扫描,或引导用户回到起始位置完成重定位。

为何常见:演示视频里锚点看起来都很稳定,用户看不到开发者在后台为状态恢复做的努力。

面试题

Q1. 下列哪个框架主要面向苹果 iOS 设备?

单选题 · easy

  • A.ARKit框架← 正确答案
  • B.ARCore框架
  • C.WebXR标准
  • D.Unity引擎

答案:A。ARKit 是苹果公司推出的 AR 开发框架,运行在 iOS 设备上;ARCore 面向安卓;WebXR 是浏览器标准;Unity 是跨平台游戏引擎。对应布景师分工,ARKit 就是苹果剧场的专属布景师。

Q2. ARCore 的主要目标平台是哪个?

单选题 · easy

  • A.安卓手机设备← 正确答案
  • B.苹果手机设备
  • C.桌面浏览器
  • D.智能电视盒子

答案:A。ARCore 是谷歌推出的移动 AR 平台,主要运行在安卓设备上。苹果设备使用 ARKit,浏览器中使用 WebXR。记住“苹果 ARKit、安卓 ARCore”这个对仗关系即可。

Q3. 相比原生 AR 应用,WebXR 的最大特点是?

单选题 · easy

  • A.无需安装额外App← 正确答案
  • B.完全不依赖网络
  • C.只能识别微信扫码
  • D.可以替代所有原生应用

答案:A。WebXR 在浏览器中运行,用户扫码或点链接即可打开 AR 体验,省去了下载安装 App 的过程。但它依然可能依赖网络,也不能完全替代原生 AR 的全部能力。

Q4. ARKit 和 ARCore 的平面检测主要能识别什么?

单选题 · mid

  • A.水平或垂直的平整表面← 正确答案
  • B.任意复杂物体的颜色
  • C.音视频流的编码格式
  • D.当前用户的登录状态

答案:A。平面检测通过特征点拟合平面方程,主要用于识别地面、桌面、墙面这类水平或垂直的平整表面。它不会识别物体颜色、音视频编码或用户登录状态。

Q5. 在 AR 场景中,锚点(Anchor)的核心作用是什么?

单选题 · mid

  • A.把虚拟内容稳定绑定到空间位置← 正确答案
  • B.压缩高分辨率全景图片
  • C.提升摄像头像素数量
  • D.防止手机内部过度发热

答案:A。锚点是一个固定在真实空间中的坐标参考,虚拟物体挂在锚点下后,设备移动也能保持位置不漂移。它和图片压缩、摄像头像素、散热无关。

Q6. 光照估计的主要价值是什么?

单选题 · mid

  • A.让虚拟物体融入真实光照← 正确答案
  • B.通过光信号给手机充电
  • C.提高人脸识别算法准确率
  • D.降低三维建模软件门槛

答案:A。光照估计从摄像头画面中推断环境亮度、色温和方向光,让虚拟物体能匹配真实场景的明暗和阴影,增强真实感。它并不用于充电、人脸识别或建模。

Q7. 下面哪些属于跨平台 AR 开发的可行策略?

多选题 · mid

  • A.双端原生并行开发← 正确答案
  • B.使用跨平台游戏引擎← 正确答案
  • C.使用 WebXR 网页方案← 正确答案
  • D.彻底关闭 AR 核心功能

答案:ABC。原生双端并行、跨平台引擎封装、WebXR 都是实际可行的跨平台策略。“彻底关闭 AR 核心功能”则完全偏离了开发目标,不属于方案。

Q8. 锚点跟踪丢失后,下面哪些做法是合理的?

多选题 · hard

  • A.保留最近一次世界坐标← 正确答案
  • B.尝试重新扫描平面恢复← 正确答案
  • C.引导用户回到起始位置← 正确答案
  • D.直接删除所有虚拟内容

答案:ABC。合理的恢复策略包括保留最近坐标、重新扫描平面、引导用户回到起始位置进行重定位。直接删除所有虚拟内容会破坏用户体验,不是标准恢复手段。

Q9. 下列哪些能力被 ARKit 与 ARCore 共同覆盖?

多选题 · hard

  • A.设备位置与姿态追踪← 正确答案
  • B.平面识别与命中测试← 正确答案
  • C.光照估计与渲染融合← 正确答案
  • D.自动生成付费会员体系

答案:ABC。ARKit 与 ARCore 都提供运动追踪、平面识别、命中测试和光照估计等核心 AR 能力。付费会员体系属于业务功能,不属于 AR SDK 的职责。

Q10. WebXR 在支持底层原生 AR 的设备上,通常通过什么完成空间定位?

单选题 · extreme

  • A.通过浏览器调用底层原生AR能力← 正确答案
  • B.依靠纯CPU模拟所有传感器
  • C.由服务器人工远程标定坐标
  • D.使用GPS实现毫米级定位

答案:A。WebXR 是浏览器封装的原生 AR 接口,在设备支持时会调用底层 ARCore 或 ARKit 能力完成空间定位。纯 CPU 模拟无法满足实时追踪,服务器远程标定不现实,GPS 精度也不足以支撑毫米级 AR 定位。