在使用 ARCore 和 Sceneform 的应用程序中,我需要以某种方式监控我(设备,真的)在 ARCore 空间中的运动吗?
结果,我想从选定点(Anchor
/ AnchorNode
)通过我当前的位置绘制一条射线,或者计算从选定点到这里的距离,并在移动过程中更新它们。我有想法,如何计算或绘制,但如何获取更新?
在使用 ARCore 和 Sceneform 的应用程序中,我需要以某种方式监控我(设备,真的)在 ARCore 空间中的运动吗?
结果,我想从选定点(Anchor
/ AnchorNode
)通过我当前的位置绘制一条射线,或者计算从选定点到这里的距离,并在移动过程中更新它们。我有想法,如何计算或绘制,但如何获取更新?
首先设置一个 On Update 监听器
fragment.getArSceneView().getScene().addOnUpdateListener(frameTime -> {
fragment.onUpdate(frameTime);
onUpdate();
});
在 OnUpdate() 调用 Camera.getDisplayOrientedPose()
Frame frame = fragment.getArSceneView().getArFrame();
Camera camera = frame.getCamera();
if (camera.getTrackingState() == TrackingState.TRACKING){
Pose CameraPose = camera.getDisplayOrientedPose();
}
当您四处移动时,您的相机姿势将不断更新。
在BaseArFragment#onUpdate()方法中,您可以通过调用ArFragment#getArSceneView()、ArSceneView#getArFrame()和Frame#getCamera()来获取Camera对象。
override fun onUpdate(frameTime: FrameTime?) {
super.onUpdate(frameTime)
doSomething(arSceneView.arFrame?.camera?.pose)
}
这Camera
是一个Node
跟踪查看设备位置的Pose
对象,并且有一个包含您需要的位置和旋转信息的对象。