Я размещаю маркерные объекты на модели, используя данные, полученные из исследований дронов. У меня есть доступ к высокоточным данным GPS, а также к данным о вращении Омега / Фи / Каппа.
Цель состоит в том, чтобы переместить камеру зрителя в положение, когда я выбираю фотографию, чтобы мы могли получить достаточно хороший обзор этой части модели на фотографии.
Пока что мы работаем с одной моделью, и я хочу убедиться, что я правильно использую преобразования, чтобы это работало с другими моделями. Кроме того, мне нужно сопоставить ориентацию камеры с помощью omega / phi / kappa, и я хочу знать, нужно ли мне также преобразовывать данные об ориентации.
Модель изначально была выпущена Revit.
Здесь представлены различные преобразования, которые я нашел до сих пор, используя NOP_VIEWER.model.getData()
.
- GlobalOffset (Vector3)
- placeWithOffset (Matrix4) - кажется, это только обратная GlobalOffset как матрица?
- placeTransform (Matrix4) - обычно не определено, я видел некоторые подсказки, что это определяемая пользователем матрица.
- refPointTransform (Matrix4)
Также есть некоторые преобразования в NOP_VIEWER.model.getData().metadata
:
- metadata.georeference.positionLL84 (Array [3] ) - здесь хранятся координаты GPS модели
- metadata.georeference.refPointLMV (Array [3]) - не знаю, что это такое, и она имеет огромные и, казалось бы, случайные значения на много моделей. Например, в моей текущей модели это
[-17746143.211481072, -6429345.318822183, 27.360225423452952]
- метаданные. [Пользовательские значения] .angleToTrueNorth - Я полагаю, это указывает, будет ли модель выровнена по истине или по магнитам c север?
- метаданные. [пользовательские значения] .refPointTransform - (Массив [12]) - данные, использованные для создания матрицы
refPointTransform
выше
I удалось получить данные о местоположении в пространство просмотра, выполнив следующие действия:
- Используйте функцию
Autodesk.geolocation
extension lonLatToLmv
для преобразования lon / lat / alt в координаты зрителя. - Возьмите преобразованные данные и примените различные преобразования, пока они не будут правильно расположены в пространстве модели.
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);
Вопросы:
- нужно ли мне также применить некоторые преобразования к данным вращения?
- Правильно ли я применяю преобразования?
РЕДАКТИРОВАТЬ: выяснилось, что матрица data.refPointTransform
уже кодирует angleToTrueNorth
, поэтому я явно делаю что-то не так, применяя это дважды.
В настоящее время у меня нет доступа к данным фотографии дрона, указывающим, выровнены ли они по истинному или магнетическому c северу, хотя я предполагаю, что это истинный север.