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

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

Разработчик

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

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

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

SCNGeometrySource

SCNGeometrySource объект указывает данные на вершину для набора вершин, формирующих поверхность трехмерного объекта или геометрию. Вы используете источники геометрии вместе с SCNGeometryElement объекты определить пользовательский SCNGeometry объекты или проверить данные, составляющие существующую геометрию.

Вы создаете пользовательскую геометрию с помощью трехступенчатого процесса:

  1. Создайте один или больше SCNGeometrySource объекты, содержащие данные вершины. Каждый источник геометрии определяет атрибут, или семантический, вершин, которые он описывает. Необходимо обеспечить по крайней мере один источник геометрии, с помощью SCNGeometrySourceSemanticVertex семантический, для создания пользовательской геометрии; обычно Вы также обеспечиваете источники геометрии для поверхности normals и координат текстуры.

  2. Создайте по крайней мере один SCNGeometryElement объект, содержа массив индексов, идентифицирующих вершины в источниках геометрии и описывающих получение, примитивное, что использование SceneKit для соединения вершин при рендеринге геометрии.

  3. Создайте SCNGeometry экземпляр из источников геометрии и элементов геометрии.

Чередование данных вершины

Поскольку большинство конфигураций использует больше чем один источник геометрии, и GPU обычно использует данные из многократных источников вместе, можно достигнуть лучшей производительности рендеринга для пользовательских конфигураций путем чередования данных вершины для многократной семантики в том же массиве.

Чтобы сделать это, сначала создайте массив, где каждый элемент содержит значения для многократной семантики для той же вершины. Затем, создайте NSData объект от того массива, и создает каждый источник геометрии из тех данных с помощью offset и stride параметры для указания, где значения для каждого семантического могут быть найдены в массиве. Для создания указания размеров и расположений векторов более удобным можно определить собственную структуру данных для вершин и использовать sizeof (и, в Objective C, offsetof) функции, как показано в Перечислении 1.

Перечисление 1Creating многократные источники геометрии от чередованных данных

Swift

  • struct Float3 {
  • var x, y, z: GLfloat
  • }
  • struct Float2 {
  • var s, t: GLfloat
  • }
  • struct Vertex {
  • var position: Float3
  • var normal: Float3
  • var tcoord: Float2
  • }
  • var vertices: [Vertex] = [ /* ... vertex data ... */ ]
  • let data = NSData(bytes: vertices, length: vertices.count * sizeof(Vertex))
  • let vertexSource = SCNGeometrySource(data: data,
  • semantic: SCNGeometrySourceSemanticVertex,
  • vectorCount: vertices.count,
  • floatComponents: true,
  • componentsPerVector: 3,
  • bytesPerComponent: sizeof(GLfloat),
  • dataOffset: 0, // position is first member in Vertex
  • dataStride: sizeof(Vertex))
  • let normalSource = SCNGeometrySource(data: data,
  • semantic: SCNGeometrySourceSemanticNormal,
  • vectorCount: vertices.count,
  • floatComponents: true,
  • componentsPerVector: 3,
  • bytesPerComponent: sizeof(GLfloat),
  • dataOffset: sizeof(Float3), // one Float3 before normal in Vertex
  • dataStride: sizeof(Vertex))
  • let tcoordSource = SCNGeometrySource(data: data,
  • semantic: SCNGeometrySourceSemanticTexcoord,
  • vectorCount: vertices.count,
  • floatComponents: true,
  • componentsPerVector: 2,
  • bytesPerComponent: sizeof(GLfloat),
  • dataOffset: 2 * sizeof(Float3), // 2 Float3s before tcoord in Vertex
  • dataStride: sizeof(Vertex))

Objective C

  • typedef struct {
  • float x, y, z; // position
  • float nx, ny, nz; // normal
  • float s, t; // texture coordinates
  • } MyVertex;
  • MyVertex vertices[VERTEX_COUNT] = { /* ... vertex data ... */ };
  • NSData *data = [NSData dataWithBytes:vertices length:sizeof(vertices)];
  • SCNGeometrySource *vertexSource, *normalSource, *tcoordSource;
  • vertexSource = [SCNGeometrySource geometrySourceWithData:data
  • semantic:SCNGeometrySourceSemanticVertex
  • vectorCount:VERTEX_COUNT
  • floatComponents:YES
  • componentsPerVector:3 // x, y, z
  • bytesPerComponent:sizeof(float)
  • dataOffset:offsetof(MyVertex, x)
  • dataStride:sizeof(MyVertex)];
  • normalSource = [SCNGeometrySource geometrySourceWithData:data
  • semantic:SCNGeometrySourceSemanticNormal
  • vectorCount:VERTEX_COUNT
  • floatComponents:YES
  • componentsPerVector:3 // nx, ny, nz
  • bytesPerComponent:sizeof(float)
  • dataOffset:offsetof(MyVertex, nx)
  • dataStride:sizeof(MyVertex)];
  • tcoordSource = [SCNGeometrySource geometrySourceWithData:data
  • semantic:SCNGeometrySourceSemanticTexcoord
  • vectorCount:VERTEX_COUNT
  • floatComponents:YES
  • componentsPerVector:2 // s, t
  • bytesPerComponent:sizeof(float)
  • dataOffset:offsetof(MyVertex, s)
  • dataStride:sizeof(MyVertex)];

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


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


Swift

import SceneKit

Objective C

@import SceneKit;

Доступность


Доступный в OS X v10.8 и позже.
  • Создает источник геометрии из указанных данных и опций.

    Объявление

    Swift

    convenience init(data data: NSData, semantic semantic: String, vectorCount vectorCount: Int, floatComponents floatComponents: Bool, componentsPerVector componentsPerVector: Int, bytesPerComponent bytesPerComponent: Int, dataOffset offset: Int, dataStride stride: Int)

    Objective C

    + (instancetype)geometrySourceWithData:(NSData *)data semantic:(NSString *)semantic vectorCount:(NSInteger)vectorCount floatComponents:(BOOL)floatComponents componentsPerVector:(NSInteger)componentsPerVector bytesPerComponent:(NSInteger)bytesPerComponent dataOffset:(NSInteger)offset dataStride:(NSInteger)stride

    Параметры

    data

    Данные для источника геометрии.

    semantic

    Семантическое значение (или атрибут), который источник геометрии описывает для каждой вершины. Посмотрите Геометрию Семантические Идентификаторы для доступных значений.

    vectorCount

    Число исходных векторов геометрии.

    floatComponents

    Булево значение, указывающее, являются ли векторные компоненты значениями с плавающей точкой. Указать YEStrue для значений с плавающей точкой, или NOfalse для целочисленных значений.

    componentsPerVector

    Число скалярных компонентов в каждом векторе.

    bytesPerComponent

    Размер, в байтах, каждого векторного компонента.

    offset

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

    stride

    Число байтов от каждого вектора до следующего в данных.

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

    Новый исходный объект геометрии.

    Обсуждение

    Данные источника геометрии являются массивом векторов, каждый из которых представляет определенный атрибут (или семантический) вершины в геометрии. Другие параметры определяют, как SceneKit интерпретирует эти данные. Например, массив позиций вершины может иметь три 32-разрядных компонента с плавающей точкой на вектор, но массив координат текстуры может иметь два 8-разрядных целых числа coponents на вектор. Можно использовать offset и stride параметры вместе для чередования данных для многократных источников геометрии в том же массиве, улучшая рендеринг производительности. Посмотрите Чередующиеся Данные Вершины для подробных данных.

    Создать пользовательское SCNGeometry объект из источника геометрии, используйте geometryWithSources:elements: метод.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Создает источник геометрии из массива позиций вершины.

    Объявление

    Swift

    convenience init(vertices vertices: UnsafePointer<SCNVector3>, count count: Int)

    Objective C

    + (instancetype)geometrySourceWithVertices:(const SCNVector3 *)vertices count:(NSInteger)count

    Параметры

    vertices

    Массив трехкомпонентных векторов, каждый из которых представляет позицию вершины для источника геометрии.

    count

    Число позиций вершины.

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

    Новый источник геометрии, чей semantic свойство SCNGeometrySourceSemanticVertex.

    Обсуждение

    SceneKit преобразовывает эти данные в свой собственный формат для оптимизации производительности рендеринга. Для чтения преобразованных данных исследуйте свойства создаваемого SCNGeometrySource объект.

    Создать пользовательское SCNGeometry объект из источника геометрии, используйте geometryWithSources:elements: метод.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Создает источник геометрии из массива векторов нормали.

    Объявление

    Swift

    convenience init(normals normals: UnsafePointer<SCNVector3>, count count: Int)

    Objective C

    + (instancetype)geometrySourceWithNormals:(const SCNVector3 *)normals count:(NSInteger)count

    Параметры

    normals

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

    count

    Число векторов нормали.

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

    Новый источник геометрии, чей semantic свойство SCNGeometrySourceSemanticNormal.

    Обсуждение

    SceneKit преобразовывает эти данные в свой собственный формат для оптимизации производительности рендеринга. Для чтения преобразованных данных исследуйте свойства создаваемого SCNGeometrySource объект.

    Создать пользовательское SCNGeometry объект из источника геометрии, используйте geometryWithSources:elements: метод.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Создает источник геометрии из массива точек координаты текстуры.

    Объявление

    Swift

    convenience init(textureCoordinates texcoord: UnsafePointer<CGPoint>, count count: Int)

    Objective C

    + (instancetype)geometrySourceWithTextureCoordinates:(const CGPoint *)texcoord count:(NSInteger)count

    Параметры

    texcoord

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

    count

    Число точек координаты текстуры.

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

    Новый источник геометрии, чей semantic свойство SCNGeometrySourceSemanticTexcoord.

    Обсуждение

    SceneKit преобразовывает эти данные в свой собственный формат для оптимизации производительности рендеринга. Для чтения преобразованных данных исследуйте свойства создаваемого SCNGeometrySource объект.

    Создать пользовательское SCNGeometry объект из источника геометрии, используйте geometryWithSources:elements: метод.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • данные данные Свойство

    Данные для источника геометрии. (только для чтения)

    Объявление

    Swift

    var data: NSData? { get }

    Objective C

    @property(nonatomic, readonly) NSData *data

    Обсуждение

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

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Семантическое значение (или атрибут) источник геометрии описывает для каждой вершины. (только для чтения)

    Объявление

    Swift

    var semantic: String { get }

    Objective C

    @property(nonatomic, readonly) NSString *semantic

    Обсуждение

    Семантическое описывает атрибут для каждой вершины, такой как позиция, цвет, поверхностный вектор нормали или координаты текстуры.

    Посмотрите Геометрию Семантические Идентификаторы для доступных значений.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • vectorCount vectorCount Свойство

    Число векторов в данных. (только для чтения)

    Объявление

    Swift

    var vectorCount: Int { get }

    Objective C

    @property(nonatomic, readonly) NSInteger vectorCount

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • floatComponents floatComponents Свойство

    Булево значение, указывающее, являются ли векторные компоненты значениями с плавающей точкой. (только для чтения)

    Объявление

    Swift

    var floatComponents: Bool { get }

    Objective C

    @property(nonatomic, readonly) BOOL floatComponents

    Обсуждение

    Если YEStrue, SceneKit интерпретирует данные источника геометрии как массив векторов, компоненты которых являются значениями с плавающей точкой. Тип значения с плавающей точкой определяется bytesPerComponent свойство: 4 байта для float значения или 8 байтов для double значения.

    Если NOfalse, SceneKit интерпретирует данные источника геометрии как массив векторов, компоненты которых являются целочисленными значениями. Тип целочисленного значения определяется bytesPerComponent свойство; например, 2 байта для unsigned short значения или 4 байта для unsigned int значения.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Число скалярных компонентов в каждом векторе. (только для чтения)

    Объявление

    Swift

    var componentsPerVector: Int { get }

    Objective C

    @property(nonatomic, readonly) NSInteger componentsPerVector

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Размер, в байтах, каждого векторного компонента. (только для чтения)

    Объявление

    Swift

    var bytesPerComponent: Int { get }

    Objective C

    @property(nonatomic, readonly) NSInteger bytesPerComponent

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • dataOffset dataOffset Свойство

    Смещение, в байтах, с начала данных к первому векторному компоненту, который будет использоваться в источнике геометрии. (только для чтения)

    Объявление

    Swift

    var dataOffset: Int { get }

    Objective C

    @property(nonatomic, readonly) NSInteger dataOffset

    Обсуждение

    Можно использовать dataOffset и dataStride параметры могут вместе для чередования данных для многократных источников геометрии в том же массиве, улучшая рендеринг производительности. Посмотрите Чередующиеся Данные Вершины для подробных данных.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • dataStride dataStride Свойство

    Число байтов от вектора до следующего в данных. (только для чтения)

    Объявление

    Swift

    var dataStride: Int { get }

    Objective C

    @property(nonatomic, readonly) NSInteger dataStride

    Обсуждение

    Можно использовать dataOffset и dataStride параметры могут вместе для чередования данных для многократных источников геометрии в том же массиве, улучшая рендеринг производительности. Посмотрите Чередующиеся Данные Вершины для подробных данных.

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

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.