Can*_*ato 5 java augmented-reality arcore
我正在学习 ARCore参考资料,开发,从Coursera制作课程,并阅读、理解和学习示例。
但是我仍然缺少一些实际使用示例的定义。
什么是会话?每次我需要使用 ARCore 时,我都需要一个会话吗?Session 总是有一个摄像头连接,所以我可以在屏幕上看到和绘制/渲染我的 3D 模型?我可以在没有会话的情况下执行此操作吗?
Camera有getPose,Frame有GetPose,它们有什么区别?
我想过把这个问题分开,但不知何故我知道它们都是相连的。会话、CameraAr、框架和姿势。
#关于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 的配置也可以包括嵌套类:
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));
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 对环境的理解发生变化时,它会调整其世界模型以保持一致。发生这种情况时,的数值位置(坐标)
ARCamera和ARAnchors可显著改变,以保持他们represent.These变化意味着每个物理位置的适当的相对位置ArFrame应被认为是一个完全独特的世界坐标空间。的数值坐标ARAnchors与ARCamera不应该在此期间它们被检索渲染帧之外使用。
Every
ArFrame存储以下有关 ARCore 状态的信息:
代码示例:
private void onUpdateFrame(FrameTime frameTime) {
Frame frame = arFragment.getArSceneView().getArFrame();
// .............
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以阅读这篇有用的帖子。
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |