Введение
SceneKit является платформой Objective C для создания приложений и игр, использующих 3D графику, комбинируя высокоэффективный механизм рендеринга с высоким уровнем, дескриптивным API. SceneKit поддерживает импорт, манипулирование и рендеринг 3D активов. В отличие от APIs низшего уровня, такого как OpenGL, которые требуют, чтобы Вы реализовали в точной подробности алгоритмы рендеринга, выводящие на экран сцену, SceneKit только требует описаний содержания Вашей сцены и действий или анимаций, которые Вы хотите, чтобы он выполнил. Для узнавания больше о SceneKit см. Руководство по программированию SceneKit.
Начало работы с SceneKit
SceneKit реализует содержание как иерархическую древовидную структуру узлов, также известных как график сцены. Сцена состоит из корневого узла, определяющего координатное пространство для мира сцены и другие узлы, заполняющие мир с видимым содержанием. SceneKit выводит на экран сцены в представлении, обрабатывая график сцены и выполняя анимации прежде эффективно представить каждый кадр на GPU.
Прежде, чем работать с SceneKit, необходимо быть знакомы с основными графическими понятиями, такими как системы координат и математика трехмерной геометрии. SceneKit использует правую систему координат, где (по умолчанию) направление представления приезжает отрицательная ось z, как проиллюстрировано на рисунке i-1.
Таблица i-1 перечисляет рекомендуемый порядок чтения на самые важные классы в SceneKit. Читайте об этих классах перед хождением дальше к другим классам в платформе и создании Вашего приложения или игры.
Класс / Протокол |
Описание |
---|---|
Представление, выводящее на экран (или рендеринг) содержание SceneKit и протокол, определяющий важные методы для использования с представлениями SceneKit. |
|
Контейнер для всего содержания SceneKit. Вы загружаете сцену из файла, создаваемого в 3D инструменте разработки, или создаете тот программно, затем выводите на экран его в представлении. |
|
Основа сцены. Иерархия узлов определяет логическую структуру сцены, и Вы обеспечиваете видимое содержание путем присоединения конфигураций, световых сигналов и камер к узлам. |
|
Трехмерный объект, который может быть присоединен к узлу. Геометрия (иногда называемый моделью или сеткой) определяет только форму или форму для видимого объекта. Для определения поверхностного появления объекта, Вы присоединяете материалы к нему. Можно загрузить конфигурации, создаваемые в 3D инструментах разработки из файла сцены, или создать их использование классы SceneKit для примитивных форм, вытеснил 2D формы и текст и пользовательские данные вершины. |
|
Допускающее повторное использование определение поверхностных свойств появления для объекта. Материалы указывают, как поверхность окрашена или текстурирована и как она реагирует на световые сигналы в сцене. |
|
Источник света, который может быть присоединен к узлу, обеспечив заштриховывающий в представленной сцене. |
|
Виртуальная камера, которая может быть присоединена к узлу, обеспечив точку зрения для рендеринга сцены. |
Анимация содержания SceneKit
Поддержка анимации SceneKit основывается на Базовой платформе Анимации. (Для фона на Базовой Анимации считайте Базовое Руководство по программированию Анимации.) Несколько классов SceneKit определяют animatable свойства — можно создать анимации что переход гладко между двумя значениями свойства. Например, анимация узла opacity
свойство постепенно появляется видимое содержание узла или. Можно создать анимации неявно или явно.
Вы создаете анимацию неявно путем изменения значения animatable свойства. SceneKit автоматически комбинирует все изменения, которые Вы вносите в сцену во время одной передачи через цикл выполнения в единственную атомарную работу названный транзакцией, представленной SCNTransaction
класс. Продолжительность транзакции по умолчанию является нулем, таким образом, изменения, которые Вы вносите в animatable свойства, сразу происходят. Однако при увеличении продолжительности анимации транзакции все изменения в animatable свойствах автоматически анимируют. Когда Вы хотите быстро анимировать разовое изменение или анимировать несколько изменений свойства вместе, не пишущий много кода анимации, как в Перечислении i-1 ниже, неявная анимация полезна. Для получения дополнительной информации на неявной анимации, см. Ссылку класса SCNTransaction.
Swift
func fallAndFade(sender: AnyObject) {
SCNTransaction.setAnimationDuration(1.0)
textNode.position = SCNVector3(x: 0.0, y: -10.0, z: 0.0)
textNode.opacity = 0.0
}
Objective C
- (IBAction)fallAndFade:(id)sender
{
[SCNTransaction setAnimationDuration:1.0];
_textNode.position = SCNVector3Make(0.0, -10.0, 0.0);
_textNode.opacity = 0.0;
}
Для более сложных анимаций можно явно создать объект Animation и присоединить его к анимируемому элементу сцены. Для явного создания анимации Вы выбираете a CAAnimation
подкласс для типа анимации, которую Вы хотите создать, укажите свойство, которое будет анимировано с помощью кодирования значения ключа, затем установите параметры анимации. Вы тогда приводите анимацию в движение путем присоединения его к одному или более элементам сцены, как показано в Перечислении i-2. Используя различные Базовые классы Анимации можно объединить или упорядочить несколько анимаций или создать анимации, интерполирующие значение свойства между несколькими значениями ключевого кадра. Для получения дополнительной информации при создании объектов Animation, см. Базовое Руководство по программированию Анимации. Для получения дополнительной информации при присоединении анимаций к объектам SceneKit, см. Ссылку на протокол SCNAnimatable.
Swift
let animation = CABasicAnimation(keyPath: "geometry.extrusionDepth")
animation.fromValue = 0.0
animation.toValue = 100.0
animation.duration = 1.0
animation.autoreverses = true
animation.repeatCount = Float.infinity
textNode.addAnimation(animation, forKey: "extrude")
Objective C
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"geometry.extrusionDepth"];
animation.fromValue = @0.0;
animation.toValue = @100.0;
animation.duration = 1.0;
animation.autoreverses = YES;
animation.repeatCount = INFINITY;
[_textNode addAnimation:animation forKey:@"extrude"];
SceneKit также использует CAAnimation
объекты для анимаций создали использование внешних 3D инструментов разработки и сохраненный в файлах сцены. Например, художник мог бы создать игровой персонаж с анимациями для обхода, перехода и других действий. Вы включаете эти анимации в свою игру путем загрузки объектов Animation из файла сцены с помощью SCNSceneSource
класс и присоединение их к SCNNode
объект, представляющий игровой символ.
Классы
|
|
|
|
Вы присоединяете |
|
|
|
Ограничение автоматически корректирует трансформацию (позиция, вращение и масштаб) узла на основе правил, которые Вы определяете. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тестирование хита является процессом нахождения элементов сцены, расположенной в указанной точке, или вдоль указанного линейного сегмента (или луч). |
|
Использовать |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вы используете |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вы используете |
Протоколы
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|