Как визуализировать объект, который всегда движется вдоль движения - PullRequest
0 голосов
/ 31 мая 2019

Я рендеринг объекта, используя 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);

Мой ожидаемый результат - прилипание объекта к камере во время движения.

1 Ответ

0 голосов
/ 13 июня 2019

Вместо того, чтобы получить мировую позицию, вы должны использовать позу камеры.Поэтому вместо этого

Vector3 cameraPosition = arFragment.getArSceneView().getScene().getCamera().getWorldPosition();

Вы можете использовать:

Pose cameraPose = arFragment.getArSceneView().getScene().getCamera().getPose();

Или же вы можете создать новую позу без поворота камеры.

Pose cameraPose = arFragment.getArSceneView().getScene().getCamera().getPose().extractTranslation();

Затем вы можете использовать эту позу, чтобы составить позу для объекта, который вы хотите иметь перед камерой.Например, это поместит объект перед камерой на одинаковую высоту на расстоянии 2 м (с использованием второй камеры):

// 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);
....
...