#关于 ArSession
ArSession 是 AR 拼图中最关键的元素。会话管理 AR 系统状态并处理会话生命周期。 Session 类 是 ARCore API 的主要入口点。此类允许用户创建会话、配置会话、启动或停止会话,最重要的是,接收允许访问ARCamera 图像和设备姿势的ArFrames。
要使用 ARCore,您需要一个 ArSession。 ARCore 不渲染 3D 模型 (Renderables)。这项工作适用于Sceneform 框架。
代码示例:
private Session mSession;
Config config = new Config(mSession);
if (!mSession.isSupported(config)) {
showSnackbarMessage("This phone doesn't support AR", true);
}
mSession.configure(config);
Session 的配置也可以包含嵌套类:
-
Config.AugmentedFaceMode(选择
Augmented Faces子系统的行为)
-
Config.CloudAnchorMode(
Config中的云锚模式)
-
Config.FocusMode(选择
camera focus 子系统的所需行为)
-
Config.LightEstimationMode(选择
lighting estimation子系统的行为)
-
Config.PlaneFindingMode(选择
plane detection子系统的行为)
-
Config.UpdateMode(选择
update()的行为)
#关于姿势
Pose 表示从一个坐标空间到另一个坐标空间的不可变刚性变换。正如所有 ARCore API 所提供的,姿势总是描述从对象的局部坐标空间到世界坐标空间的转换。转换是使用围绕原点的四元数旋转和平移来定义的。
代码示例:
float[] position = { 0, 0, -2.2 }; // { x, y, z } position
float[] rotation = { 0, 0, 0, 1 }; // { x, y, z, w } quaternion rotation
Session session = arFragment.getArSceneView().getSession();
Anchor myAnchor = session.createAnchor(new Pose(position, rotation));
#关于 ARCamera
ARCamera 代表一个虚拟相机,它决定了观看场景的视角。如果摄像头是 ArSceneView 的一部分,则摄像头会自动跟踪来自 ARCore 的 Camera Pose。 ARCamera 是一个长期存在的对象,每次调用Session.update() 时都会更新相机的属性。 Camera 类提供有关用于捕获图像的相机的信息以及每个 ArFrame 内部的附加信息。
代码示例:
// Shared camera access with ARCore
sharedSession = new Session(this, EnumSet.of(Session.Feature.SHARED_CAMERA))
sharedCamera = sharedSession.getSharedCamera();
cameraId = sharedSession.getCameraConfig().getCameraId();
#关于ArFrame
当 ARCore 对环境的理解发生变化时,它会调整其世界模型以保持事物的一致性。发生这种情况时,ARCamera 和 ARAnchors 的数字位置(坐标)可能会发生显着变化,以保持它们所代表的物理位置的适当相对位置。这些变化意味着每个 ArFrame 都应被视为完全处于独特的世界坐标空间。 ARAnchors 和 ARCamera 的数字坐标决不能在检索它们的渲染帧之外使用。
每个 ArFrame 都存储以下有关 ARCore 状态的信息::
- RGB 图像本身
- 跟踪状态
- 相机相对于世界的姿势
- 估计的照明参数
- 对象更新信息(如点云)
代码示例:
private void onUpdateFrame(FrameTime frameTime) {
Frame frame = arFragment.getArSceneView().getArFrame();
// .............
}
另外,您可以阅读this useful post。