ARCore – 会话、帧、相机和姿势

Can*_*ato 5 java augmented-reality arcore

我正在学习 ARCore参考资料开发,从Coursera制作课程,并阅读、理解和学习示例

但是我仍然缺少一些实际使用示例的定义。

什么是会话?每次我需要使用 ARCore 时,我都需要一个会话吗?Session 总是有一个摄像头连接,所以我可以在屏幕上看到和绘制/渲染我的 3D 模型?我可以在没有会话的情况下执行此操作吗?

Camera有getPose,Frame有GetPose,它们有什么区别?

我想过把这个问题分开,但不知何故我知道它们都是相连的。会话、CameraAr、框架和姿势。

ARG*_*Geo 8

#关于ArSession

ArSession是AR拼图中最关键的元素。Session 管理 AR 系统状态并处理会话生命周期。Session 类是 ARCore API 的主要入口点。这个类允许用户创建一个会话,配置它,启动或停止它,最重要的是,接收ArFrames允许访问ARCamera图像和设备Pose

为了使用 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);
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

#关于 ARCamera

ARCamera代表一个虚拟相机,它决定了观察场景的视角。如果相机是 的一部分ArSceneView,则相机会自动跟踪来自 ARCore的相机姿势。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();
Run Code Online (Sandbox Code Playgroud)

#关于ArFrame

当 ARCore 对环境的理解发生变化时,它会调整其世界模型以保持一致。发生这种情况时,的数值位置(坐标)ARCameraARAnchors可显著改变,以保持他们represent.These变化意味着每个物理位置的适当的相对位置ArFrame应被认为是一个完全独特的世界坐标空间。的数值坐标ARAnchorsARCamera不应该在此期间它们被检索渲染帧之外使用。

EveryArFrame存储以下有关 ARCore 状态的信息:

  • RGB 图像本身
  • 跟踪状态
  • 相机相对于世界的姿势
  • 估计的照明参数
  • 有关对象更新的信息(如点云)

代码示例:

private void onUpdateFrame(FrameTime frameTime) {

    Frame frame = arFragment.getArSceneView().getArFrame();

    // .............
}
Run Code Online (Sandbox Code Playgroud)


此外,您可以阅读这篇有用的帖子