Система координат сцены 3d.io - PullRequest
0 голосов
/ 02 июня 2018

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

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

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

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

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

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

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

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

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

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

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

Является ли это предположение ложным?

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

Ответы [ 2 ]

0 голосов
/ 20 июня 2018

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

let worldCoordinates = obj.data3dView.threeParent.getWorldPosition();
0 голосов
/ 04 июня 2018

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

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

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

// 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
}
...