2015-02-06 3 views
0

У меня есть узел, который я извлекаю из SCNScene. У меня есть информация об этом, но я смущен одной вещью - как рассчитывается ограничивающая рамка. Узел позиционируется, как только он будет загружен в векторе 0,0,0 с помощью:SCNNode getBoundingBoxMin

[myNode setPosition: SCNVector3Make(0, 0, 0)]; 

Тем не менее, по-прежнему ограничивающий прямоугольник сообщает о min.x -1.

Как это может быть, если я только что положил его на 0? Кроме того, не имеет значения, какие векторные значения я даю, у него всегда есть min.x of -1 - несмотря на то, что узел действительно перемещается по экрану, как ожидалось.

ответ

1

Это трудно ответить определенно без получения более подробной информации о том, что в вашей сцене, и то, что вы делаете с ним, но это, вероятно, один или оба из этих вопросов:

Коробка ограничивающая говорит вам степень узла содержание, а не его положение - например если у вас есть куб 2 единицы по ширине, расположенный на (0, 0, 0), его ограничивающий прямоугольник min и max углы будут (-1, -1, -1) и (1, 1, 1).

В зависимости от того, какие трюки вы используете для перемещения узла вокруг, сам узел может не меняться - SCNAction s, CAAnimation s и физика работают над отдельной копией иерархии узлов. (Частично это означает поддержку неявной анимации - например, установить position узла, и он будет отображаться в анимации из текущей позиции в позицию, которую вы установили, но вы можете читать position и быть ее значением, которое вы установили to.)

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

+0

Чтобы уточнить: если у вас есть куб 2 единицы по ширине, его ограничивающий прямоугольник min и max углы будут * всегда * быть '(-1, -1, -1)' и '(1, 1, 1)', * независимо от положения узла *. Ограничивающая рамка всегда выражается в системе координат приемника, и поскольку размеры куба остаются неизменными, ограничивающая рамка узла остается прежней. Вам нужно будет использовать утилиты преобразования, чтобы выразить эти координаты в мировом пространстве. – mnuages

+0

Правильно. :) Итак, если вы хотите, чтобы ограничительная рамка вашего узла в системе координат родителя, вы должны [конвертировать] (https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNNode_Class/ index.html # // apple_ref/occ/instm/SCNNode/convertPosition: fromNode :) те векторы. Или, если это единственный дочерний элемент родительского узла, спросите родительский узел (или узел представления родителя) для * его * ограничивающего блока. – rickster

+0

Спасибо, ребята. Вы упомянули, что куб из 2 единиц всегда начинался с (-1, -1, -1). Это потому, что оно сосредоточено на (0,0,0), когда вы его впервые разместите? Следовательно, 1 единица с обеих сторон от нуля. – Roo

Смежные вопросы