Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Ссылка платформы SceneKit ссылка класса SCNIKConstraint

Опции
Развертывание Target:

На этой странице
Язык:

SCNIKConstraint

Наследование


Оператор импорта


Swift

import SceneKit

Objective C

@import SceneKit;

Доступность


Доступный в iOS 8.0 и позже.

SCNIKConstraint объект автоматически корректирует ориентации одного или более узлов в указанной иерархии, применяя инверсную кинематику для создания цепочечной досягаемости к целевой точке.

Ограничение IK рисунка 1An, перемещающее цепочку узлов к целевой точке image: ../Art/ikconstraint.pdf

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

  1. Создайте иерархию узлов чей position и pivot свойства описывают соединения между ними. Например, узел, представляющий предплечье робота, должен быть дочерним элементом своего узла плеча, и узел предплечья pivot свойство должно быть помещено так, чтобы корректировка rotation свойство, кажется, изгибает руку в коленчатом соединении. Рука робота должна поочередно быть дочерним узлом узла предплечья.

  2. Создайте SCNIKConstraint объект, чей chainRootNode свойство относится к самому высокому узлу в иерархии, ориентация которой должна быть скорректирована ограничением. Продолжая предыдущий пример, корень цепочки должен быть узлом, содержащим плечо (не организация робота, ориентация которой остается фиксированной).

  3. Примените ограничение IK до конца узел исполнительного элемента цепочки с тем узлом constraints свойство. В примере манипулятора исполнительный элемент конца является рукой или инструментом в конце руки.

  4. (Необязательно) Предел диапазон движения одного или более соединений в цепочке с setMaxAllowedRotationAngle:forJoint: метод.

  5. Для приведения ограниченных узлов в движение обеспечьте целевую позицию для ограничения с targetPosition свойство. Можно анимировать изменение в этом свойстве

  • Создает ограничение инверсной кинематики, чья цепочка узлов начинается с указанного узла.

    Объявление

    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

    Доступность

    Доступный в iOS 8.0 и позже.

  • chainRootNode Свойство

    Родительский узел иерархии затронут ограничением. (только для чтения)

    Объявление

    Swift

    var chainRootNode: SCNNode { get }

    Objective C

    @property(nonatomic, readonly) SCNNode *chainRootNode

    Обсуждение

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

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в iOS 8.0 и позже.

  • Возвращает предел вращения, в градусах, для указанного узла.

    Объявление

    Swift

    func maxAllowedRotationAngleForJoint(_ node: SCNNode) -> CGFloat

    Objective C

    - (CGFloat)maxAllowedRotationAngleForJoint:(SCNNode *)node

    Параметры

    node

    Узел, затронутый ограничением — любой узел, чей constraints свойство ссылается на ограничение или одного из родителя того узла или узлов наследователя до узла, указанного ограничением chainRootNode свойство.

    Возвращаемое значение

    Максимальное вращение, в градусах, что SceneKit применяется к указанному узлу при оценке ограничения.

    Обсуждение

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

    Предел вращения по умолчанию для каждого соединения составляет 180 градусов в любом направлении, позволяя неограниченное вращение.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в iOS 8.0 и позже.

  • Устанавливает предел вращения, в градусах, для указанного узла.

    Объявление

    Swift

    func setMaxAllowedRotationAngle(_ angle: CGFloat, forJoint node: SCNNode)

    Objective C

    - (void)setMaxAllowedRotationAngle:(CGFloat)angle forJoint:(SCNNode *)node

    Параметры

    angle

    Максимальное вращение, в градусах, что SceneKit должен примениться к указанному узлу при оценке ограничения.

    node

    Узел, затронутый ограничением — любой узел, чей constraints свойство ссылается на ограничение или одного из родителя того узла или узлов наследователя до узла, указанного ограничением chainRootNode свойство.

    Обсуждение

    Когда SceneKit оценивает ограничение IK, он проверяет целевые ориентации каждого узла в цепочке относительно их начальных ориентаций (с того, когда ограничение было применено к узлу). Для каждого узла в цепочке SceneKit ограничивает вращение (в любом направлении) между начальными и целевыми ориентациями к angle значение указано с этим методом.

    Предел вращения по умолчанию для каждого соединения составляет 180 градусов в любом направлении, позволяя неограниченное вращение.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в iOS 8.0 и позже.

  • targetPosition Свойство

    Желаемая позиция для ограниченного узла, в пространстве мировой координаты сцены. Animatable.

    Объявление

    Swift

    var targetPosition: SCNVector3

    Objective C

    @property(nonatomic) SCNVector3 targetPosition

    Обсуждение

    При установке этого свойства SceneKit пытается переместить узел исполнительного элемента конца (узел, чей constraints свойство ссылается на ограничение) к этой позиции. SceneKit перемещает этот узел к целевой точке путем вращения его относительно ее родительского узла (и поворачивая ее родителя и узлы наследователя, цепочка, заканчивающаяся chainRoot узел), пока узел не в целевой позиции или пока это не максимально близко к целевой позиции, данной вращательные пределы каждого соединения в цепочке.

    Как правило, Вы анимируете изменения в значении этого свойства, создавая анимацию, показывающую цепочку узлов, перемещающихся к новой целевой позиции. Посмотрите Анимацию Содержание SceneKit.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в iOS 8.0 и позже.