2016-02-09 3 views
1

Я пытаюсь получить размер узла на экране. Это код:Ограничение размера SCNNode и масштабирование

var v1 = SCNVector3(x:0, y:0, z:0) 
var v2 = SCNVector3(x:0, y:0, z:0) 
carNode.getBoundingBoxMin(&v1, max: &v2) 
print(v2) 

carNode.scale = SCNVector3(0.9, 1.2, 0.5) 
//carNode.transform = SCNMatrix4MakeScale(0.9, 1.2, 0.5) 

carNode.getBoundingBoxMin(&v1, max: &v2) 
print(v2) 

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

ответ

4

Per SCNBoundingVolume Protocol Reference:

В Протоколе SCNBoundingVolume в ... Методы измерения местоположения и размера объекта в локальном пространстве координат объекта, выраженное в виде либо коробки или сферы.

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

Возможно, вам ничего не нужно. Обратите внимание, при SCNPhysicsShapeScaleKey документации (в соответствии с SCNPhysicsShape классом справки:. Симуляция физики

SceneKit игнорирует масштаб свойство узлов, содержащих физические тела при моделировании столкновений Вместо этого, используйте этот параметр, чтобы обеспечить коэффициент масштабирования при создании пользовательских физических форм (If. вы создаете тело физики для узла без указания пользовательских форм, SceneKit использует масштаб свойство узла вывести этот масштабный фактор во время создания.)

Так что, если ваш масштабный коэффициент не применяется автоматически, она появляется (Я не тестировал его), передавая ваш масштабный вектор на SCNPhysicsShape.init(node:options:), используя optio ns key SCNPhysicsShapeScaleKey, сделает то, что вы хотите.

+0

Спасибо, это решение отлично, не знаю, что я мог бы это сделать. опции: [SCNPhysicsShapeScaleKey: nodeScale] – Alessandro

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