我正在研究ARCore References,Develop,从Coursera开始学习该课程,并从Samples阅读,理解和学习。
但是我仍然缺少一些实际使用示例的定义。
什么是会话?每次我需要使用ARCore时,都需要一个会话吗?会话始终连接相机,这样我就可以在屏幕上查看和绘制/渲染我的3D模型吗?我可以不参加会议吗?
相机有一个getPose,相框有一个GetPose,它们之间有什么区别?
我考虑过将这些问题分开,但不知何故我知道它们都已连接。会话,CameraAr,帧和姿势。
答案 0 :(得分:2)
ArSession
是AR拼图中最关键的元素 。会话管理AR系统状态并处理会话生命周期。 会话类是ARCore API的主要入口点。此类允许用户创建会话,配置会话,启动或停止会话,最重要的是,接收ArFrames
允许访问ARCamera
图片和设备 Pose 。< / p>要使用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的配置可以包括嵌套类:
Augmented Faces
子系统的行为)Config
中的云锚模式)camera focus
子系统的所需行为)lighting estimation
子系统的行为)plane detection
子系统的行为)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
代表一个虚拟摄像机,该摄像机确定查看场景的视角。如果相机是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();
当ARCore对环境的理解发生变化时,它会调整其世界模型以保持事物的一致性。发生这种情况时,
ARCamera
和ARAnchors
的数字位置(坐标)会发生很大变化,以保持它们代表的物理位置的适当相对位置。这些变化意味着每个ArFrame
应该是被认为位于完全独特的世界坐标空间中。ARAnchors
和ARCamera
的数字坐标永远不要在检索它们的渲染框架之外使用。每个
ArFrame
存储以下有关ARCore状态的信息:
代码示例:
private void onUpdateFrame(FrameTime frameTime) {
Frame frame = arFragment.getArSceneView().getArFrame();
// .............
}
希望这会有所帮助。