我正在使用node.setWorldPosition(0,0,-2f)渲染对象。 但我希望它总是显示在2米外的相机视图前
我试图显示始终面对相机的节点,但是当我向前移动设备时,无法移动该节点。我没有使用锚来固定我的对象。
private void nodeAlwaysFaceCamera() {
Vector3 cameraPosition = arFragment.getArSceneView().getScene().getCamera().getWorldPosition();
Vector3 cardPosition = node.getWorldPosition();
Vector3 direction = Vector3.subtract(cameraPosition, cardPosition);
Quaternion lookRotation = Quaternion.lookRotation(direction, Vector3.up());
node.setWorldRotation(lookRotation);
}
将对象渲染到相机前方2米处
node = new Node();
node.setParent(arFragment.getArSceneView().getScene());
node.setWorldPosition(new Vector3(0f, 0f, -2f));
node.setRenderable(viewRenderable);
我的预期结果是,物体在移动时会粘在相机上。
答案 0 :(得分:0)
您应该使用相机的姿势来代替获取世界位置。因此,除了此
Vector3 cameraPosition = arFragment.getArSceneView().getScene().getCamera().getWorldPosition();
您可以使用:
Pose cameraPose = arFragment.getArSceneView().getScene().getCamera().getPose();
或者,您也可以在不旋转相机的情况下创建新的姿势。
Pose cameraPose = arFragment.getArSceneView().getScene().getCamera().getPose().extractTranslation();
然后,您可以使用该姿势来构成要在相机前放置的对象的姿势。在示例中,这会将对象放置在距离2m的相同高度的相机前面(使用第二个CameraPose):
// Compose the Pose of the Object relative to the cameraPose
Pose objectPose = cameraPose.compose(Pose.makeTranslation(0,0,-2f));
// Create an Anchor for the object
Anchor objectAnchor = arFragment.getArSceneView().getSession().createAnchor(objectPose);
AnchorNode objectAnchorNode = AnchorNode(objectAnchor);
// Here is your code
node = new Node();
node.setParent(anchorNode);
node.setRenderable(viewRenderable);
....