SCNMorpher
SCNMorpher объект деформирует поверхность геометрии узла, гладко переходящей между основной геометрией и один или несколько целевыми конфигурациями.
Вы управляете этими переходами путем соединения SCNMorpher объект с узлом с помощью morpher свойство. morpher поддерживает массив целевых конфигураций и ряда весов, связанных с каждым. Когда все веса являются нулем, поверхность принимает форму основной геометрии (от узла geometry свойство). Когда Вы используете setWeight:forTargetAtIndex: метод для увеличения веса до 1.0, поверхность принимает форму геометрии в соответствующем индексе в morpher’s targets массив. При использовании множества значений веса для нескольких целей поверхность принимает форму, пропорционально интерполирующую между целевыми конфигурациями.
Можно также анимировать веса неявно или явно использующий keypath анимации. Например, следующий код создает анимацию морфа, переходящую один целевой вес назад и вперед неоднократно:
Swift
let animation = CABasicAnimation(keyPath: "morpher.weights[0]")animation.fromValue = 0.0;animation.toValue = 1.0;animation.autoreverses = true;animation.repeatCount = Float.infinity;animation.duration = 5;
Objective C
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"morpher.weights[0]"];animation.fromValue = @0.0;animation.toValue = @1.0;animation.autoreverses = YES;animation.repeatCount = INFINITY;animation.duration = 5;[node addAnimation:animation forKey:nil];
morpher и его целевые конфигурации могут быть загружены из файла сцены или созданы программно. Основная геометрия и все целевые конфигурации должны быть топологически идентичными — т.е. они должны содержать то же число и структурное расположение вершин.
Соответствует
-
AnyObject -
CVarArgType -
Сопоставимый -
Hashable -
NSCoding -
NSObjectProtocol -
NSSecureCoding -
Печатаемый -
SCNAnimatable -
NSObject -
NSSecureCoding -
SCNAnimatable
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.9 и позже.
-
Массив целевых конфигураций для превращений между.
Обсуждение
Массив
SCNGeometryобъекты.morpher смешивается между основной геометрией, указанной в
geometryсвойство узла morpher присоединено, и один или несколько целевые конфигурации. Основная геометрия и все целевые конфигурации должны быть топологически идентичными — т.е. они должны содержать то же число и структурное расположение вершин.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
Возвращает значение веса для указанного целевого индекса.
Объявление
Swift
func weightForTargetAtIndex(_targetIndex: Int) -> CGFloatObjective C
- (CGFloat)weightForTargetAtIndex:(NSUInteger)targetIndexПараметры
targetIndexИндекс геометрии в morpher’s
targetsмассив.Возвращаемое значение
Число, указывающее вклад целевой геометрии на смешанную поверхность, обычно между
0.0и1.0.Обсуждение
Конфигурации Target и их веса определяют текущую форму поверхности, произведенной morpher. Например, если morpher имеет одну цель, вес которой
0.5, форма получающейся поверхности будет промежуточной между теми из основной геометрии и целевой геометрии.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
Указывает значение веса в указанном целевом индексе.
Объявление
Swift
func setWeight(_weight: CGFloat, forTargetAtIndextargetIndex: Int)Objective C
- (void)setWeight:(CGFloat)weightforTargetAtIndex:(NSUInteger)targetIndexПараметры
weightЧисло, указывающее вклад целевой геометрии на смешанную поверхность, обычно между
0.0и1.0.targetIndexИндекс геометрии в morpher’s
targetsмассив.Обсуждение
Конфигурации Target и их веса определяют текущую форму поверхности, произведенной morpher. Например, если morpher имеет одну цель, вес которой
0.5, форма получающейся поверхности будет промежуточной между теми из основной геометрии и целевой геометрии.Можно также анимировать веса неявно или явно использование keypath
weights[index], гдеindexсоответствуетtargetIndexпараметр этого метода.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
calculationMode calculationModeСвойствоИнтерполяционная формула для смешивания между целевыми конфигурациями.
Объявление
Swift
var calculationMode: SCNMorpherCalculationModeObjective C
@property(nonatomic) SCNMorpherCalculationMode calculationModeОбсуждение
Значение по умолчанию этого свойства
SCNMorpherCalculationModeNormalized. ПосмотритеSCNMorpherCalculationModeдля позволенных значений.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
Интерполяционные формулы для смешивания между целевыми конфигурациями.
Объявление
Swift
enum SCNMorpherCalculationMode : Int { case Normalized case Additive }Objective C
typedef enum : NSInteger { SCNMorpherCalculationModeNormalized, SCNMorpherCalculationModeAdditive } SCNMorpherCalculationModeКонстанты
-
NormalizedSCNMorpherCalculationModeNormalizedВеса Target должны быть в диапазоне между
0.0и1.0, и вклад основной геометрии на превращенную поверхность связан с суммой целевых весов. Это - режим по умолчанию.Доступный в OS X v10.9 и позже.
-
AdditiveSCNMorpherCalculationModeAdditiveВеса Target могут взять любое значение, и взвешенные вклады для каждой цели добавляются к основной геометрии,
Доступный в OS X v10.9 и позже.
Обсуждение
morpher вычисляет свою текущую поверхность путем подведения итогов взвешенных элементов геометрии от основной геометрии и всех целевых конфигураций. Позиция вершины на поверхности производится путем добавления радиус-вектора точки на основной геометрии к радиус-векторам соответствующих точек на всех целевых конфигурациях. morpher’s
calculationModeсвойство выбирает формулу, используемую для вычисления этой суммы.Если режим
SCNMorpherCalculationModeNormalized, позиция от основной геометрии взвешивается одной минус сумма всех целевых весов, как в следующей формуле:Position = (1 - weight0 - weight1 - ...) * Base + weight0 * Target0 + weight1 * Target1 + ...
Если режим
SCNMorpherCalculationModeAdditive, позиция от основной геометрии не взвешивается, и SceneKit использует следующую формулу вместо этого:Position = Base + weight0 * Target0 + weight1 * Target1 + ...
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
