Система координат сцены 3d.io

В настоящий момент я пишу код, который определяет координаты предметов мебели в трехмерной сцене.

Из того, что я собираю, каждый предмет мебели имеет свои собственные координаты, которые основаны на родительском предмете мебели. Будь родитель уровня или группы и т. Д...

Если родитель оказывается "уровнем", то координаты предметов мебели напрямую влекут за собой то, где предмет мебели находится в трехмерной сцене.

Однако, если у предмета мебели есть неуровневый родительский элемент, координаты предмета мебели основываются на родительском (ых) элементе (ах).

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

Поскольку рекурсивная функция повторяется, она поднимается по уровням родителей и увеличивает исходные координаты в соответствии с координатами узла, который в данный момент находится в функции.

Если класс узла, который в данный момент находится в функции, относится к классу "io3d-level", рекурсивная функция остановится и вернет увеличенные координаты. Это связано с тем, что узел с классом "io3d-level" должен иметь объект координат {0, 0, 0}.

Опять же, рекурсивная функция будет повторяться с уровня мебельного узла и подниматься по структуре родителей, собирая и добавляя их координаты к исходным координатам мебельного узла, пока текущий класс узла внутри функции не станет уровнем, на котором point функция останавливается и возвращает координаты.

Эта рекурсивная функция, по-видимому, дает первичные результаты почти во всех случаях.

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

Предположение, лежащее в основе этой рекурсивной функции, состоит в том, что истинные координаты узлов мебели относительно уровня могут быть получены путем захвата координат всех родителей узлов мебели и их суммирования. Очевидно, что с учетом того, что координаты x суммируются с координатами x, а координаты z суммируются с координатами z.

Это предположение неверно?

Возможно, я неправильно истолковываю систему координат, которая противоречит сценам 3d.io?

2 ответа

Решение

Это можно сделать напрямую, без неточностей, используя дескриптор three.js.

let worldCoordinates = obj.data3dView.threeParent.getWorldPosition();

Я полагаю, что-то идет не так в вашем коде

Так что лучше всего поделиться своим кодом, чтобы нам не приходилось догадываться.

Вот небольшой фрагмент, который применяет родительское местоположение для элемента при работе со структурой сцены.

// apply parent location
function applyLocation(element, parent) {
  // Rotate element on the XZ plane around parent's center
  var angleY = -parent.ry * Math.PI / 180
  var rotatedX = element.x * Math.cos(angleY) - element.z * Math.sin(angleY)
  var rotatedZ = element.z * Math.cos(angleY) + element.x * Math.sin(angleY)

  // Get parent space coordinates for our element
  element.x = parent.x + rotatedX
  element.y += parent.y
  element.z = parent.z + rotatedZ
  element.ry += parent.ry
  return element
}
Другие вопросы по тегам