SCNIKConstraint
SCNIKConstraint
объект автоматически корректирует ориентации одного или более узлов в указанной иерархии, применяя инверсную кинематику для создания цепочечной досягаемости к целевой точке.
Инверсная кинематика (IK) является итеративным процессом, находящим позиции для соединений, соединяющих цепочку твердых тел (например, манипулятор) для перемещения одного из тел, названных исполнительным элементом конца (например, рука или инструмент в конце манипулятора), максимально близко к желаемой точке в пространстве. Для создания основанного на IK поведения в приложении SceneKit или игре выполните эти шаги:
Создайте иерархию узлов чей
position
иpivot
свойства описывают соединения между ними. Например, узел, представляющий предплечье робота, должен быть дочерним элементом своего узла плеча, и узел предплечьяpivot
свойство должно быть помещено так, чтобы корректировкаrotation
свойство, кажется, изгибает руку в коленчатом соединении. Рука робота должна поочередно быть дочерним узлом узла предплечья.Создайте
SCNIKConstraint
объект, чейchainRootNode
свойство относится к самому высокому узлу в иерархии, ориентация которой должна быть скорректирована ограничением. Продолжая предыдущий пример, корень цепочки должен быть узлом, содержащим плечо (не организация робота, ориентация которой остается фиксированной).Примените ограничение IK до конца узел исполнительного элемента цепочки с тем узлом
constraints
свойство. В примере манипулятора исполнительный элемент конца является рукой или инструментом в конце руки.(Необязательно) Предел диапазон движения одного или более соединений в цепочке с
setMaxAllowedRotationAngle:forJoint:
метод.Для приведения ограниченных узлов в движение обеспечьте целевую позицию для ограничения с
targetPosition
свойство. Можно анимировать изменение в этом свойстве
Соответствует
-
AnyObject
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSCoding
-
NSCopying
-
NSObjectProtocol
-
NSSecureCoding
-
Печатаемый
-
SCNAnimatable
-
NSCopying
-
NSObject
-
NSSecureCoding
-
SCNAnimatable
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.10 и позже.
-
Создает ограничение инверсной кинематики, чья цепочка узлов начинается с указанного узла.
Объявление
Swift
class func inverseKinematicsConstraintWithChainRootNode(_
chainRoot
: SCNNode) -> Self!Objective C
+ (instancetype)inverseKinematicsConstraintWithChainRootNode:(SCNNode *)
chainRoot
Параметры
chainRoot
Родительский узел иерархии, которая будет затронута ограничением.
Возвращаемое значение
Новый ограничительный объект.
Обсуждение
Корневой узел является самым высоким узлом в иерархии, перемещенной ограничением. Например, манипулятор может иметь два сегмента руки и руку, подключенную к организации. Плечо является дочерним узлом организации, предплечье является дочерним узлом плеча, и рука является дочерним узлом предплечья. В этом случае плечо является цепочечным корневым узлом, потому что организация не должна перемещаться для следования за рукой.
Узел Вы применяете ограничение к (использование, что узел
constraints
свойство), исполнительный элемент конца цепочки — самый низкий узел в иерархии. Когда Вы устанавливаете ограничениеtargetPosition
свойство, SceneKit пытается переместить этот узел к целевой точке путем вращения его относительно ее родительского узла (и поворачивая ее родителя и узлы наследователя, цепочка, заканчивающаясяchainRoot
узел). Продолжая вышеупомянутый пример, исполнительный элемент конца манипулятора является своей рукой.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
-
chainRootNode chainRootNode
СвойствоРодительский узел иерархии затронут ограничением. (только для чтения)
Объявление
Swift
var chainRootNode: SCNNode { get }
Objective C
@property(nonatomic, readonly) SCNNode *chainRootNode
Обсуждение
Корневой узел является самым высоким узлом в иерархии, перемещенной ограничением. Например, манипулятор может иметь два сегмента руки и руку, подключенную к организации. Плечо является дочерним узлом организации, предплечье является дочерним узлом плеча, и рука является дочерним узлом предплечья. В этом случае плечо является цепочечным корневым узлом, потому что организация не должна перемещаться для следования за рукой.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
-
Возвращает предел вращения, в градусах, для указанного узла.
Объявление
Swift
func maxAllowedRotationAngleForJoint(_
node
: SCNNode) -> CGFloatПараметры
node
Узел, затронутый ограничением — любой узел, чей
constraints
свойство ссылается на ограничение или одного из родителя того узла или узлов наследователя до узла, указанного ограничениемchainRootNode
свойство.Возвращаемое значение
Максимальное вращение, в градусах, что SceneKit применяется к указанному узлу при оценке ограничения.
Обсуждение
Когда SceneKit оценивает ограничение IK, он проверяет целевые ориентации каждого узла в цепочке относительно их начальных ориентаций (с того, когда ограничение было применено к узлу). Для каждого узла в цепочке SceneKit ограничивает вращение (в любом направлении) между начальными и целевыми ориентациями к значению, возвращенному этим методом.
Предел вращения по умолчанию для каждого соединения составляет 180 градусов в любом направлении, позволяя неограниченное вращение.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
-
Устанавливает предел вращения, в градусах, для указанного узла.
Объявление
Swift
func setMaxAllowedRotationAngle(_
angle
: CGFloat, forJointnode
: SCNNode)Параметры
angle
Максимальное вращение, в градусах, что SceneKit должен примениться к указанному узлу при оценке ограничения.
node
Узел, затронутый ограничением — любой узел, чей
constraints
свойство ссылается на ограничение или одного из родителя того узла или узлов наследователя до узла, указанного ограничениемchainRootNode
свойство.Обсуждение
Когда SceneKit оценивает ограничение IK, он проверяет целевые ориентации каждого узла в цепочке относительно их начальных ориентаций (с того, когда ограничение было применено к узлу). Для каждого узла в цепочке SceneKit ограничивает вращение (в любом направлении) между начальными и целевыми ориентациями к
angle
значение указано с этим методом.Предел вращения по умолчанию для каждого соединения составляет 180 градусов в любом направлении, позволяя неограниченное вращение.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
-
targetPosition targetPosition
СвойствоЖелаемая позиция для ограниченного узла, в пространстве мировой координаты сцены. Animatable.
Объявление
Swift
var targetPosition: SCNVector3
Objective C
@property(nonatomic) SCNVector3 targetPosition
Обсуждение
При установке этого свойства SceneKit пытается переместить узел исполнительного элемента конца (узел, чей
constraints
свойство ссылается на ограничение) к этой позиции. SceneKit перемещает этот узел к целевой точке путем вращения его относительно ее родительского узла (и поворачивая ее родителя и узлы наследователя, цепочка, заканчивающаясяchainRoot
узел), пока узел не в целевой позиции или пока это не максимально близко к целевой позиции, данной вращательные пределы каждого соединения в цепочке.Как правило, Вы анимируете изменения в значении этого свойства, создавая анимацию, показывающую цепочку узлов, перемещающихся к новой целевой позиции. Посмотрите Анимацию Содержание SceneKit.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.