SCNGeometry
SCNGeometry
объект представляет трехмерную форму — набор вершин, normals и координат текстуры, определяющих поверхность, также известную как модель или сетка. В SceneKit, конфигурации, присоединенные к SCNNode
объекты формируют видимые элементы сцены, и SCNMaterial
объекты, присоединенные к геометрии, определяют ее появление.
Работа с геометрическими объектами
Вы управляете появлением геометрии в сцене с узлами и материалами. Геометрический объект обеспечивает только форму видимого объекта, представленного SceneKit. Вы указываете цвет и текстуру для поверхности геометрии, управляете, как это реагирует на свет, и добавьте, что специальные эффекты путем присоединения материалов (для подробных данных, видят методы в Управлении Материалами Геометрии). Вы располагаете и ориентируете геометрию в сцене путем присоединения его к SCNNode
объект. Многократные узлы могут сослаться на тот же геометрический объект, позволив ему появиться в различных позициях в сцене.
Можно легко скопировать конфигурации и изменить их материалы. Геометрический объект управляет ассоциацией между неизменными данными вершины и непостоянным присвоением материалов. Чтобы заставить геометрию появиться несколько раз в той же сцене с различным набором материалов, используйте его наследованный copy
метод. Копия совместно использует базовые данные вершины оригинала, но может быть присвоенными материалами независимо. Можно таким образом сделать много копий геометрии, не подвергаясь значительной стоимости для рендеринга производительности.
Можно анимировать геометрический объект. Данные вершины, связанные с геометрией, являются неизменными, но SceneKit обеспечивает несколько способов анимировать геометрию. Можно использовать a SCNMorpher
или SCNSkinner
объект деформировать поверхность геометрии или выполнить анимации, создаваемые во внешнем 3D инструменте разработки и загруженные из файла сцены. Можно также использовать методы в SCNShadable
протокол для добавления пользовательских программ программы построения теней GLSL, изменяющих рендеринг SceneKit геометрии.
Получение геометрического объекта
SceneKit обеспечивает несколько способов представить геометрические объекты Вашему приложению:
Действие |
Для получения дополнительной информации |
---|---|
Загрузка из файла сцены создала использование внешних 3D инструментов разработки |
|
Используйте и настройте встроенные примитивные формы SceneKit |
|
Создайте 3D геометрию из 2D текста или кривых Bézier |
|
Создайте пользовательскую геометрию из данных вершины |
|
Наследование
Соответствует
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.8 и позже.
-
Создает новую геометрию, созданную из указанных источников геометрии и элементов.
Объявление
Swift
convenience init(sources
sources
: [AnyObject], elementselements
: [AnyObject]?)Параметры
sources
Массив
SCNGeometrySource
объекты, описывающие вершины в геометрии и их атрибутах.elements
Массив
SCNGeometryElement
объекты, описывающие, как соединить вершины геометрии.Обсуждение
Видимое содержание геометрии прибывает из комбинации источников геометрии, содержащих данные, описывающие его вершины с элементами геометрии, содержащими данные, описывающие, как вершины соединяются для формирования поверхности.
Каждый
SCNGeometrySource
объект описывает атрибут всех вершин в геометрии (позиция вершины, поверхностный вектор нормали, цвет или координаты отображения текстур) идентифицированный источникомsemantic
свойство. Для создания пользовательской геометрии, необходимо обеспечить по крайней мере один источник, дляSCNGeometrySourceSemanticVertex
семантический. Как правило, Вы также обеспечиваете источники для normals и координаты текстуры для использования в освещении и штриховке.Источники для вершины, нормальная, и цветная семантика должна быть уникальной — если многократные объекты в
sources
массив имеет семантическое то же, SceneKit использует только первое. Геометрия может иметь многократные источники дляSCNGeometrySourceSemanticTexcoord
семантический — порядок источников координаты текстуры вsources
массив определяет значение для использования дляmappingChannel
свойство при присоединении материалов.Каждый
SCNGeometryElement
объект описывает, как вершины из источников геометрии объединены в многоугольники для создания формы геометрии. Создание пользовательской геометрии требует по крайней мере одного элемента. Еслиelements
массив содержит многократные объекты, их порядок определяет расположение материалов геометрии — для подробных данных, посмотрите обсуждениеmaterials
свойство.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Создает новый геометрический объект без содержания (или содержания по умолчанию).
Объявление
Objective C
+ (instancetype)geometry
Возвращаемое значение
Новый геометрический объект.
Обсуждение
Этот метод создает геометрию без видимого содержания. Можно использовать пустую геометрию с другой геометрией
levelsOfDetail
свойство, чтобы заставить геометрию исчезнуть, когда это слишком далеко от камеры для полезного рендеринга.SceneKit
SCNGeometry
подклассы используют этот метод для создания экземпляров геометрии с содержанием по умолчанию. Например, если Вы обращаетесь к этому методуSCNSphere
класс, это создает геометрию сферы чейradius
свойство имеет значение по умолчанию0.5
.Вы не можете добавить источники геометрии или элементы к геометрическому объекту после создания его. Для создания пользовательской геометрии из собственного источника и данных элемента используйте
geometryWithSources:elements:
метод.Оператор импорта
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.9 и позже.
-
Имя связалось с геометрическим объектом.
Обсуждение
Можно обеспечить описательное имя для геометрического объекта для создания управления графиком сцены проще. Конфигурации, загруженные из файла сцены, могут иметь имена, присвоенные художником, использующим 3D инструмент разработки. Используйте
SCNSceneSource
класс для исследования конфигураций в файле сцены, не загружая его график сцены.Имена геометрии сохраняются при экспорте сцены в файл с помощью
writeToURL:options:delegate:progressHandler:
метод. Они также появляются в редакторе сцены XCode.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
levelsOfDetail levelsOfDetail
СвойствоМассив
SCNLevelOfDetail
объекты для управления появлением геометрии, когда просматривается от далеко.Объявление
Swift
var levelsOfDetail: [AnyObject]?
Objective C
@property(nonatomic, copy) NSArray *levelsOfDetail
Обсуждение
Поскольку рендеринг сложной геометрии несет расходы производительности, можно использовать объекты уровня детализации заменить более простыми конфигурациями в его месте как его расстояние от увеличений камеры точки зрения (или ее очевидные уменьшения размера). Для получения дополнительной информации посмотрите Ссылку класса SCNLevelOfDetail.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.9 и позже.
-
Массив
SCNMaterial
объекты, определяющие появление геометрии, когда представлено.Объявление
Swift
var materials: [AnyObject]?
Objective C
@property(nonatomic, copy) NSArray *materials
Обсуждение
Материалы предоставляют информацию использование SceneKit для добавления цвета, освещения, текстуры и специальных эффектов при рендеринге геометрии. Каждый
SCNMaterial
объект может быть совместно использован несколькими конфигурациями.Если геометрия содержит многократные элементы (см.
geometryElementCount
), можно связать разделять материал с каждым элементом геометрии. Например, заварной чайник на рисунке 1 имеет четыре элемента, каждого с различным материалом.Если геометрия имеет то же число материалов, как это имеет элементы геометрии, существенный индекс соответствует индексу элемента. Для конфигураций с меньшим количеством материалов, чем элементы SceneKit определяет существенный индекс для каждого элемента путем вычисления индекса того элемента по модулю число материалов. Например, в геометрии с шестью элементами и тремя материалами, SceneKit представляет элемент в индексе
5
использование материала в индексе5 % 3 = 2
.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
firstMaterial firstMaterial
СвойствоПервый материал, присоединенный к геометрии.
Объявление
Swift
var firstMaterial: SCNMaterial?
Objective C
@property(nonatomic, retain) SCNMaterial *firstMaterial
Обсуждение
Вызов этого удобного метода эквивалентен получению первого объекта от геометрии
materials
массив. Значение этого свойстваnil
если геометрия не имеет никаких присоединенных материалов.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Возвращает первый материал, присоединенный к геометрии с указанным именем.
Объявление
Swift
func materialWithName(_
name
: String) -> SCNMaterial?Objective C
- (SCNMaterial *)materialWithName:(NSString *)
name
Параметры
name
Имя материала, который будет получен.
Возвращаемое значение
Материальный объект с указанным именем.
Обсуждение
Можно использовать
name
свойство каждогоSCNMaterial
объект сделать управление Вашим графиком сцены проще. Материалы, загруженные из файла сцены, могут иметь имена, присвоенные художником, использующим 3D инструмент разработки.Если геометрии присоединили многократные материалы с тем же именем, этот метод возвращает первое согласно порядку
materials
массив.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Присоединяет материал к геометрии в указанном индексе.
Объявление
Swift
func insertMaterial(_
material
: SCNMaterial, atIndexindex
: Int)Objective C
- (void)insertMaterial:(SCNMaterial *)
material
atIndex:(NSUInteger)index
Параметры
material
index
Расположение в геометрии
materials
массив, в котором можно добавить новый материал.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Удаляет материал, присоединенный к геометрии.
Объявление
Swift
func removeMaterialAtIndex(_
index
: Int)Objective C
- (void)removeMaterialAtIndex:(NSUInteger)
index
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Заменяет материал, присоединенный к геометрии с другим.
Объявление
Swift
func replaceMaterialAtIndex(_
index
: Int, withMaterialmaterial
: SCNMaterial)Objective C
- (void)replaceMaterialAtIndex:(NSUInteger)
index
withMaterial:(SCNMaterial *)material
Параметры
index
material
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
geometryElementCount geometryElementCount
СвойствоЧисло элементов геометрии в геометрии. (только для чтения)
Объявление
Swift
var geometryElementCount: Int { get }
Objective C
@property(nonatomic, readonly) NSInteger geometryElementCount
Обсуждение
Каждый
SCNGeometryElement
объект описывает, как вершины из источников геометрии объединены в многоугольники для создания формы геометрии. Видимые конфигурации содержат по крайней мере один элемент.Для конфигураций с многократными элементами можно использовать
materials
свойство для присоединения различных материалов к каждому элементу.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
См. также
-
Возвращает элемент геометрии в указанном индексе.
Объявление
Swift
func geometryElementAtIndex(_
elementIndex
: Int) -> SCNGeometryElement?Objective C
- (SCNGeometryElement *)geometryElementAtIndex:(NSInteger)
elementIndex
Параметры
elementIndex
Индекс элемента геометрии.
Возвращаемое значение
Элемент геометрии.
Обсуждение
Каждый
SCNGeometryElement
объект описывает, как вершины из источников геометрии объединены в многоугольники для создания формы геометрии. Видимые конфигурации содержат по крайней мере один элемент.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Возвращает источники геометрии для указанного семантического.
Объявление
Swift
func geometrySourcesForSemantic(_
semantic
: String) -> [AnyObject]?Параметры
semantic
Постоянная идентификация семантического, для которого можно возвратить источники геометрии. Посмотрите
Geometry Semantic Identifiers
для возможных значений.Возвращаемое значение
Массив
SCNGeometrySource
объекты, илиnil
если геометрия не имеет никакого источника для указанного семантического.Обсуждение
Каждый
SCNGeometrySource
объект описывает атрибут всех вершин в геометрии (позиция вершины, поверхностный вектор нормали, цвет или координаты отображения текстур) идентифицированный источникомsemantic
свойство. Геометрия всегда имеет по крайней мере один источник, дляSCNGeometrySourceSemanticVertex
семантический, и обычно имеет дополнительные источники для использования в освещении и штриховке.Вершина, нормальная, и цветная семантика каждый обращается к самое большее одному источнику. Геометрия может иметь многократные источники для
SCNGeometrySourceSemanticTexcoord
семантический — в этом случае, индексы в массиве возвращенного массива соответствуют значениям дляmappingChannel
свойство, используемое при присоединении текстур к материалам.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
См. также
-
subdivisionLevel subdivisionLevel
СвойствоЧисло подразделений использование SceneKit для сглаживания поверхности геометрии во время отображения.
Объявление
Swift
var subdivisionLevel: Int
Objective C
@property(nonatomic) NSUInteger subdivisionLevel
Обсуждение
Поверхностное подразделение является методом для использования геометрии низкой подробности для генерации гладкой поверхности для рендеринга. Когда Вы увеличиваетесь
subdivisionLevel
значение геометрии, SceneKit автоматически разделяет каждую поверхность на представленной поверхности, создавая более подробную, более гладкую геометрию, как показано на рисунке 2. SceneKit выполняет этот процесс подразделения во время отображения, сохраняя исходные данные геометрии.Подразделение поверхности округляет далеко любой резкий край и углы в геометрии; однако, такие подробные данные могут быть важны для проекта модели. Для сохранения краев используйте
edgeCreasesElement
свойство для идентификации краев иedgeCreasesSource
свойство, чтобы указать, как гладкий или резкий они должны появиться после подразделения. Для сохранения углов включайте источник геометрии чейsemantic
значениеSCNGeometrySourceSemanticVertexCrease
при создании геометрии.Уровень подразделения по умолчанию является нулем, не указывая подразделения — SceneKit представляет геометрию точно, поскольку ее данные вершины указывают.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
-
edgeCreasesElement edgeCreasesElement
СвойствоИдентификация элемента геометрии, какие края поверхности геометрии должны остаться резкими после подразделения.
Объявление
Swift
var edgeCreasesElement: SCNGeometryElement?
Objective C
@property(nonatomic, retain) SCNGeometryElement *edgeCreasesElement
Обсуждение
Этот элемент геометрии
primitiveType
значение должно бытьSCNGeometryPrimitiveTypeLine
. Данные элемента геометрии являются массивом индексов вершины, каждая пара которых определяет линейный сегмент, идентифицирующий край, который будет обработан как складка во время подразделения. ИспользуйтеedgeCreasesSource
свойство для указания гладкости или резкости каждой складки.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
См. также
-
edgeCreasesSource edgeCreasesSource
СвойствоИсточник геометрии, указывающий гладкость или резкость краев после поверхностного подразделения.
Объявление
Swift
var edgeCreasesSource: SCNGeometrySource?
Objective C
@property(nonatomic, retain) SCNGeometrySource *edgeCreasesSource
Обсуждение
Этот источник геометрии
semantic
значение должно бытьSCNGeometrySourceSemanticEdgeCrease
. Его данные являются массивом скалярных значений (т.е. источникcomponentsPerVector
значение1
). Значение в индексе в источнике геометрии определяет гладкость или резкость края, идентифицированного примитивом в соответствующем индексе вedgeCreasesElement
элемент геометрии: значение0.0
указывает полностью сглаживавший край и значение10.0
или больше указывает бесконечно резкий край.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
См. также