Поместите пользовательский объект в пространство просмотра, используя координаты GPS - PullRequest
0 голосов
/ 25 января 2020

Я размещаю маркерные объекты на модели, используя данные, полученные из исследований дронов. У меня есть доступ к высокоточным данным GPS, а также к данным о вращении Омега / Фи / Каппа.

Цель состоит в том, чтобы переместить камеру зрителя в положение, когда я выбираю фотографию, чтобы мы могли получить достаточно хороший обзор этой части модели на фотографии.

Пока что мы работаем с одной моделью, и я хочу убедиться, что я правильно использую преобразования, чтобы это работало с другими моделями. Кроме того, мне нужно сопоставить ориентацию камеры с помощью omega / phi / kappa, и я хочу знать, нужно ли мне также преобразовывать данные об ориентации.

Модель изначально была выпущена Revit.

Здесь представлены различные преобразования, которые я нашел до сих пор, используя NOP_VIEWER.model.getData().

  1. GlobalOffset (Vector3)
  2. placeWithOffset (Matrix4) - кажется, это только обратная GlobalOffset как матрица?
  3. placeTransform (Matrix4) - обычно не определено, я видел некоторые подсказки, что это определяемая пользователем матрица.
  4. refPointTransform (Matrix4)

Также есть некоторые преобразования в NOP_VIEWER.model.getData().metadata:

  1. metadata.georeference.positionLL84 (Array [3] ) - здесь хранятся координаты GPS модели
  2. metadata.georeference.refPointLMV (Array [3]) - не знаю, что это такое, и она имеет огромные и, казалось бы, случайные значения на много моделей. Например, в моей текущей модели это [-17746143.211481072, -6429345.318822183, 27.360225423452952]
  3. метаданные. [Пользовательские значения] .angleToTrueNorth - Я полагаю, это указывает, будет ли модель выровнена по истине или по магнитам c север?
  4. метаданные. [пользовательские значения] .refPointTransform - (Массив [12]) - данные, использованные для создания матрицы refPointTransform выше

I удалось получить данные о местоположении в пространство просмотра, выполнив следующие действия:

  1. Используйте функцию Autodesk.geolocation extension lonLatToLmv для преобразования lon / lat / alt в координаты зрителя.
  2. Возьмите преобразованные данные и примените различные преобразования, пока они не будут правильно расположены в пространстве модели.
const gpsPosition = new THREE.Vector3(
  longitude,
  latitude,
  altitude,
);

const position = viewer
  .getExtension('Autodesk.Geolocation')
  .lonLatToLmv(gpsPosition);

const data = viewer.model.getData();

const globalOffset = data.globalOffset;
const refPointTransform = data.refPointTransform;
const angleToTrueNorth = THREE.Math.degToRad(
    data.metadata['custom values'].angleToTrueNorth
);

// applying the transform

position.add(globalOffset)
position.applyMatrix4(refPointTransform);

// finally, rotate the position based on angle to true north. 

const quaterion = new THREE.Quaternion().setFromEuler(
  new THREE.Euler(0, 0, -angleToTrueNorth),
);

position.applyQuaternion(quaterion);

Вопросы:

  1. нужно ли мне также применить некоторые преобразования к данным вращения?
  2. Правильно ли я применяю преобразования?

РЕДАКТИРОВАТЬ: выяснилось, что матрица data.refPointTransform уже кодирует angleToTrueNorth, поэтому я явно делаю что-то не так, применяя это дважды.

В настоящее время у меня нет доступа к данным фотографии дрона, указывающим, выровнены ли они по истинному или магнетическому c северу, хотя я предполагаю, что это истинный север.

1 Ответ

1 голос
/ 28 января 2020

Обнаруженные вами параметры гео-позиционирования являются внутренними и не должны использоваться напрямую, тем более что разные форматы входных файлов (Revit, IF C, Navisworks и др. c) могут выводить эту информацию в разных формах , Использование расширения геолокации (как вы делаете в своем примере кода) и его метода lonLatToLmv должно дать вам окончательное значение lat / long / alt, сопоставленное с системой координат сцены. Если этого не произойдет, отправьте нам образец файла и фрагмент вашего кода по адресу forge (dot) help (at) autodesk (dot) com, и мы рассмотрим его с нашей стороны.

Что касается различных найденных вами свойств xform:

  • globalOffset иногда определяется в модели, когда данные вершин модели перемещаются близко к исходной точке, чтобы избежать проблем с точностью
  • placeWithOffset внутренне вычисляется путем применения globalOffset к placeTransform
  • placeTransform - необязательный параметр, который можно передать при загрузке модели; преобразование будет применено ко всем x-формам отдельных элементов в модели
  • refPointTransform - это другой тип метаданных, который иногда может быть определен в моделях (обычно конвертируемых из конструкций AE C), когда globalOffset недостаточно
...