SCNGeometry объект представляет трехмерную форму — набор вершин, normals и координат текстуры, определяющих поверхность, также известную как модель или сетка. В SceneKit, конфигурации, присоединенные к SCNNode объекты формируют видимые элементы сцены, и SCNMaterial объекты, присоединенные к геометрии, определяют ее появление.
Работа с геометрическими объектами
Вы управляете появлением геометрии в сцене с узлами и материалами. Геометрический объект обеспечивает только форму видимого объекта, представленного SceneKit. Вы указываете цвет и текстуру для поверхности геометрии, управляете, как это реагирует на свет, и добавьте, что специальные эффекты путем присоединения материалов (для подробных данных, видят методы в Управлении Материалами Геометрии). Вы располагаете и ориентируете геометрию в сцене путем присоединения его к SCNNode объект. Многократные узлы могут сослаться на тот же геометрический объект, позволив ему появиться в различных позициях в сцене.
Можно легко скопировать конфигурации и изменить их материалы. Геометрический объект управляет ассоциацией между неизменными данными вершины и непостоянным присвоением материалов. Чтобы заставить геометрию появиться несколько раз в той же сцене с различным набором материалов, используйте его наследованный copy метод. Копия совместно использует базовые данные вершины оригинала, но может быть присвоенными материалами независимо. Можно таким образом сделать много копий геометрии, не подвергаясь значительной стоимости для рендеринга производительности.
Можно анимировать геометрический объект. Данные вершины, связанные с геометрией, являются неизменными, но SceneKit обеспечивает несколько способов анимировать геометрию. Можно использовать a SCNMorpher или SCNSkinner объект деформировать поверхность геометрии или выполнить анимации, создаваемые во внешнем 3D инструменте разработки и загруженные из файла сцены. Можно также использовать методы в SCNShadable протокол для добавления пользовательских программ программы построения теней GLSL, изменяющих рендеринг SceneKit геометрии.
Получение геометрического объекта
SceneKit обеспечивает несколько способов представить геометрические объекты Вашему приложению:
Действие
Для получения дополнительной информации
Загрузка из файла сцены создала использование внешних 3D инструментов разработки
Массив SCNGeometrySource объекты, описывающие вершины в геометрии и их атрибутах.
elements
Массив SCNGeometryElement объекты, описывающие, как соединить вершины геометрии.
Обсуждение
Видимое содержание геометрии прибывает из комбинации источников геометрии, содержащих данные, описывающие его вершины с элементами геометрии, содержащими данные, описывающие, как вершины соединяются для формирования поверхности.
Каждый SCNGeometrySource объект описывает атрибут всех вершин в геометрии (позиция вершины, поверхностный вектор нормали, цвет или координаты отображения текстур) идентифицированный источником semantic свойство. Для создания пользовательской геометрии, необходимо обеспечить по крайней мере один источник, для SCNGeometrySourceSemanticVertex семантический. Как правило, Вы также обеспечиваете источники для normals и координаты текстуры для использования в освещении и штриховке.
Источники для вершины, нормальная, и цветная семантика должна быть уникальной — если многократные объекты в sources массив имеет семантическое то же, SceneKit использует только первое. Геометрия может иметь многократные источники для SCNGeometrySourceSemanticTexcoord семантический — порядок источников координаты текстуры в sources массив определяет значение для использования для mappingChannel свойство при присоединении материалов.
Каждый SCNGeometryElement объект описывает, как вершины из источников геометрии объединены в многоугольники для создания формы геометрии. Создание пользовательской геометрии требует по крайней мере одного элемента. Если elements массив содержит многократные объекты, их порядок определяет расположение материалов геометрии — для подробных данных, посмотрите обсуждение materials свойство.
Создает новый геометрический объект без содержания (или содержания по умолчанию).
Объявление
Objective C
+ (instancetype)geometry
Возвращаемое значение
Новый геометрический объект.
Обсуждение
Этот метод создает геометрию без видимого содержания. Можно использовать пустую геометрию с другой геометрией levelsOfDetail свойство, чтобы заставить геометрию исчезнуть, когда это слишком далеко от камеры для полезного рендеринга.
SceneKit SCNGeometry подклассы используют этот метод для создания экземпляров геометрии с содержанием по умолчанию. Например, если Вы обращаетесь к этому методу SCNSphere класс, это создает геометрию сферы чей radius свойство имеет значение по умолчанию 0.5.
Вы не можете добавить источники геометрии или элементы к геометрическому объекту после создания его. Для создания пользовательской геометрии из собственного источника и данных элемента используйте geometryWithSources:elements: метод.
Можно обеспечить описательное имя для геометрического объекта для создания управления графиком сцены проще. Конфигурации, загруженные из файла сцены, могут иметь имена, присвоенные художником, использующим 3D инструмент разработки. Используйте SCNSceneSource класс для исследования конфигураций в файле сцены, не загружая его график сцены.
Имена геометрии сохраняются при экспорте сцены в файл с помощью writeToURL:options:delegate:progressHandler: метод. Они также появляются в редакторе сцены XCode.
Поскольку рендеринг сложной геометрии несет расходы производительности, можно использовать объекты уровня детализации заменить более простыми конфигурациями в его месте как его расстояние от увеличений камеры точки зрения (или ее очевидные уменьшения размера). Для получения дополнительной информации посмотрите Ссылку класса SCNLevelOfDetail.
Материалы предоставляют информацию использование SceneKit для добавления цвета, освещения, текстуры и специальных эффектов при рендеринге геометрии. Каждый SCNMaterial объект может быть совместно использован несколькими конфигурациями.
Если геометрия содержит многократные элементы (см. geometryElementCount), можно связать разделять материал с каждым элементом геометрии. Например, заварной чайник на рисунке 1 имеет четыре элемента, каждого с различным материалом.
Геометрия рисунка 1A с многократными элементами геометрии
Если геометрия имеет то же число материалов, как это имеет элементы геометрии, существенный индекс соответствует индексу элемента. Для конфигураций с меньшим количеством материалов, чем элементы SceneKit определяет существенный индекс для каждого элемента путем вычисления индекса того элемента по модулю число материалов. Например, в геометрии с шестью элементами и тремя материалами, SceneKit представляет элемент в индексе 5 использование материала в индексе 5 % 3 = 2.
Вызов этого удобного метода эквивалентен получению первого объекта от геометрии materials массив. Значение этого свойства nil если геометрия не имеет никаких присоединенных материалов.
Можно использовать name свойство каждого SCNMaterial объект сделать управление Вашим графиком сцены проще. Материалы, загруженные из файла сцены, могут иметь имена, присвоенные художником, использующим 3D инструмент разработки.
Если геометрии присоединили многократные материалы с тем же именем, этот метод возвращает первое согласно порядку materials массив.
Каждый SCNGeometryElement объект описывает, как вершины из источников геометрии объединены в многоугольники для создания формы геометрии. Видимые конфигурации содержат по крайней мере один элемент.
Для конфигураций с многократными элементами можно использовать materials свойство для присоединения различных материалов к каждому элементу.
Каждый SCNGeometryElement объект описывает, как вершины из источников геометрии объединены в многоугольники для создания формы геометрии. Видимые конфигурации содержат по крайней мере один элемент.
Постоянная идентификация семантического, для которого можно возвратить источники геометрии. Посмотрите Geometry Semantic Identifiers для возможных значений.
Возвращаемое значение
Массив SCNGeometrySource объекты, или nil если геометрия не имеет никакого источника для указанного семантического.
Обсуждение
Каждый SCNGeometrySource объект описывает атрибут всех вершин в геометрии (позиция вершины, поверхностный вектор нормали, цвет или координаты отображения текстур) идентифицированный источником semantic свойство. Геометрия всегда имеет по крайней мере один источник, для SCNGeometrySourceSemanticVertex семантический, и обычно имеет дополнительные источники для использования в освещении и штриховке.
Вершина, нормальная, и цветная семантика каждый обращается к самое большее одному источнику. Геометрия может иметь многократные источники для SCNGeometrySourceSemanticTexcoord семантический — в этом случае, индексы в массиве возвращенного массива соответствуют значениям для mappingChannel свойство, используемое при присоединении текстур к материалам.
Поверхностное подразделение является методом для использования геометрии низкой подробности для генерации гладкой поверхности для рендеринга. Когда Вы увеличиваетесь subdivisionLevel значение геометрии, SceneKit автоматически разделяет каждую поверхность на представленной поверхности, создавая более подробную, более гладкую геометрию, как показано на рисунке 2. SceneKit выполняет этот процесс подразделения во время отображения, сохраняя исходные данные геометрии.
Рисунок 2Rendering поверхность подразделения
Подразделение поверхности округляет далеко любой резкий край и углы в геометрии; однако, такие подробные данные могут быть важны для проекта модели. Для сохранения краев используйте edgeCreasesElement свойство для идентификации краев и edgeCreasesSource свойство, чтобы указать, как гладкий или резкий они должны появиться после подразделения. Для сохранения углов включайте источник геометрии чей semantic значение SCNGeometrySourceSemanticVertexCrease при создании геометрии.
Уровень подразделения по умолчанию является нулем, не указывая подразделения — SceneKit представляет геометрию точно, поскольку ее данные вершины указывают.
Этот элемент геометрии primitiveType значение должно быть SCNGeometryPrimitiveTypeLine. Данные элемента геометрии являются массивом индексов вершины, каждая пара которых определяет линейный сегмент, идентифицирующий край, который будет обработан как складка во время подразделения. Используйте edgeCreasesSource свойство для указания гладкости или резкости каждой складки.
Этот источник геометрии semantic значение должно быть SCNGeometrySourceSemanticEdgeCrease. Его данные являются массивом скалярных значений (т.е. источник componentsPerVector значение 1). Значение в индексе в источнике геометрии определяет гладкость или резкость края, идентифицированного примитивом в соответствующем индексе в edgeCreasesElement элемент геометрии: значение 0.0 указывает полностью сглаживавший край и значение 10.0 или больше указывает бесконечно резкий край.