ARCore: Как разместить якорь объекта на горизонтальной поверхности параллельно (не в воздухе)?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 ARCore: Как разместить якорь объекта на горизонтальной поверхности параллельно (не в воздухе)?

Сообщение Anonymous »

В настоящее время я работаю над внутренней навигацией с помощью ARCore от источника до места назначения. Итак, я хочу загрузить навигационные стрелки от источника к месту назначения на горизонтальной поверхности (земле) параллельно с нулевой высотой (не в воздухе) от поверхности. Я перепробовал множество решений и документацию ARCore, но не получил правильного и точного результата.
Я хочу разместить стрелку навигации параллельно нижней горизонтальной поверхности с такой точностью, как здесь. Введите описание изображения здесь. , но иногда это нагрузки внутри поверхности или неточные. введите описание изображения здесь
Кто-нибудь может мне помочь в этом случае? Вот моя функция для объекта Place:
public int placeItem(Renderable r, double dist, float angle, float rotation, float height, boolean rotate) {

Session session = fragment.getArSceneView().getSession();
Frame frame = fragment.getArSceneView().getArFrame();
//Get some anchors to anchor our item to
//Get the phone's pose in ARCore
Pose deviceOrientedPose = frame.getCamera().getPose().compose(
Pose.makeTranslation(0.0f, -0.1f, 0.0f));

//Get the phone's pose in relation to the real world
float heading = visualAnchorCompass.getHeading(session, frame, false);
float cameraFrame = VisualAnchorCompass.getAngleFromPose(deviceOrientedPose);

//Rotate around y axis...
float offset_by = (heading + cameraFrame) % 360;
float from_camera = (rotation - offset_by + 360) % 360;
float rotAngle = (-from_camera + 360) % 360;
Quaternion qt = Quaternion.axisAngle(Vector3.up(), rotAngle);

//Build the node
Anchor anchor = session.createAnchor(deviceOrientedPose);
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(fragment.getArSceneView().getScene());
Node node = new Node();
node.setParent(anchorNode);
node.setRenderable(r);
//Set rotation
if (rotate)
node.setLocalRotation(qt);

//Set angle
float from_camera1 = (angle - offset_by + 360) % 360;
float angrad = ((-from_camera1 + 360) % 360);
Log.d(TAG, "drawing... " + rotation + " intended angle:" + angle + " angrad:" + heading + ",campose" + cameraFrame);

Vector3 pos = new Vector3(-(float) dist * (float) Math.sin(Math.toRadians(angrad)),
0, -(float) dist * (float) Math.cos(Math.toRadians(angrad)));

float[] vec = deviceOrientedPose.getTranslation();
Vector3 camPos = new Vector3(vec[0], vec[1], vec[2]);
Log.d(TAG, "xyz: " + pos.x + "," + pos.z);
pos = Vector3.add(camPos, pos);
node.setLocalPosition(pos);
item_counter++;
items.put(item_counter, node);
return item_counter;
}


Подробнее здесь: https://stackoverflow.com/questions/710 ... e-parallel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»