SCNGeometrySource
Соответствует
-
AnyObject -
CVarArgType -
Сопоставимый -
Hashable -
NSCoding -
NSObjectProtocol -
NSSecureCoding -
Печатаемый -
NSObject -
NSSecureCoding
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в iOS 8.0 и позже.
SCNGeometrySource объект указывает данные на вершину для набора вершин, формирующих поверхность трехмерного объекта или геометрию. Вы используете источники геометрии вместе с SCNGeometryElement объекты определить пользовательский SCNGeometry объекты или проверить данные, составляющие существующую геометрию.
Вы создаете пользовательскую геометрию с помощью трехступенчатого процесса:
Создайте один или больше
SCNGeometrySourceобъекты, содержащие данные вершины. Каждый источник геометрии определяет атрибут, или семантический, вершин, которые он описывает. Необходимо обеспечить по крайней мере один источник геометрии, с помощьюSCNGeometrySourceSemanticVertexсемантический, для создания пользовательской геометрии; обычно Вы также обеспечиваете источники геометрии для поверхности normals и координат текстуры.Создайте по крайней мере один
SCNGeometryElementобъект, содержа массив индексов, идентифицирующих вершины в источниках геометрии и описывающих получение, примитивное, что использование SceneKit для соединения вершин при рендеринге геометрии.Создайте
SCNGeometryэкземпляр из источников геометрии и элементов геометрии.
Чередование данных вершины
Поскольку большинство конфигураций использует больше чем один источник геометрии, и GPU обычно использует данные из многократных источников вместе, можно достигнуть лучшей производительности рендеринга для пользовательских конфигураций путем чередования данных вершины для многократной семантики в том же массиве.
Чтобы сделать это, сначала создайте массив, где каждый элемент содержит значения для многократной семантики для той же вершины. Затем, создайте NSData объект от того массива, и создает каждый источник геометрии из тех данных с помощью offset и stride параметры для указания, где значения для каждого семантического могут быть найдены в массиве. Для создания указания размеров и расположений векторов более удобным можно определить собственную структуру данных для вершин и использовать sizeof (и, в Objective C, offsetof) функции, как показано в Перечислении 1.
Swift
struct Float3 {var x, y, z: GLfloat}struct Float2 {var s, t: GLfloat}struct Vertex {var position: Float3var normal: Float3var 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 VertexdataStride: 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 VertexdataStride: 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 VertexdataStride: sizeof(Vertex))
Objective C
typedef struct {float x, y, z; // positionfloat nx, ny, nz; // normalfloat 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:datasemantic:SCNGeometrySourceSemanticVertexvectorCount:VERTEX_COUNTfloatComponents:YEScomponentsPerVector:3 // x, y, zbytesPerComponent:sizeof(float)dataOffset:offsetof(MyVertex, x)dataStride:sizeof(MyVertex)];normalSource = [SCNGeometrySource geometrySourceWithData:datasemantic:SCNGeometrySourceSemanticNormalvectorCount:VERTEX_COUNTfloatComponents:YEScomponentsPerVector:3 // nx, ny, nzbytesPerComponent:sizeof(float)dataOffset:offsetof(MyVertex, nx)dataStride:sizeof(MyVertex)];tcoordSource = [SCNGeometrySource geometrySourceWithData:datasemantic:SCNGeometrySourceSemanticTexcoordvectorCount:VERTEX_COUNTfloatComponents:YEScomponentsPerVector:2 // s, tbytesPerComponent:sizeof(float)dataOffset:offsetof(MyVertex, s)dataStride:sizeof(MyVertex)];
-
init (data:semantic:vectorCount:floatComponents:componentsPerVector:bytesPerComponent:dataOffset:dataStride:) + geometrySourceWithData:semantic:vectorCount:floatComponents:componentsPerVector:bytesPerComponent:dataOffset:dataStride:Создает источник геометрии из указанных данных и опций.
Объявление
Swift
convenience init(datadata: NSData, semanticsemantic: String, vectorCountvectorCount: Int, floatComponentsfloatComponents: Bool, componentsPerVectorcomponentsPerVector: Int, bytesPerComponentbytesPerComponent: Int, dataOffsetoffset: Int, dataStridestride: Int)Objective C
+ (instancetype)geometrySourceWithData:(NSData *)datasemantic:(NSString *)semanticvectorCount:(NSInteger)vectorCountfloatComponents:(BOOL)floatComponentscomponentsPerVector:(NSInteger)componentsPerVectorbytesPerComponent:(NSInteger)bytesPerComponentdataOffset:(NSInteger)offsetdataStride:(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Доступность
Доступный в iOS 8.0 и позже.
-
Создает источник геометрии из массива позиций вершины.
Объявление
Swift
convenience init(verticesvertices: UnsafePointer<SCNVector3>, countcount: Int)Objective C
+ (instancetype)geometrySourceWithVertices:(const SCNVector3 *)verticescount:(NSInteger)countПараметры
verticesМассив трехкомпонентных векторов, каждый из которых представляет позицию вершины для источника геометрии.
countЧисло позиций вершины.
Возвращаемое значение
Новый источник геометрии, чей
semanticсвойствоSCNGeometrySourceSemanticVertex.Обсуждение
SceneKit преобразовывает эти данные в свой собственный формат для оптимизации производительности рендеринга. Для чтения преобразованных данных исследуйте свойства создаваемого
SCNGeometrySourceобъект.Создать пользовательское
SCNGeometryобъект из источника геометрии, используйтеgeometryWithSources:elements:метод.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
Создает источник геометрии из массива векторов нормали.
Объявление
Swift
convenience init(normalsnormals: UnsafePointer<SCNVector3>, countcount: Int)Objective C
+ (instancetype)geometrySourceWithNormals:(const SCNVector3 *)normalscount:(NSInteger)countПараметры
normalsМассив трехкомпонентных векторов, каждый из которых представляет поверхность, нормальную для источника геометрии.
countЧисло векторов нормали.
Возвращаемое значение
Новый источник геометрии, чей
semanticсвойствоSCNGeometrySourceSemanticNormal.Обсуждение
SceneKit преобразовывает эти данные в свой собственный формат для оптимизации производительности рендеринга. Для чтения преобразованных данных исследуйте свойства создаваемого
SCNGeometrySourceобъект.Создать пользовательское
SCNGeometryобъект из источника геометрии, используйтеgeometryWithSources:elements:метод.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
Создает источник геометрии из массива точек координаты текстуры.
Объявление
Параметры
texcoordМассив точек, каждая из которых представляет пару координаты текстуры для источника геометрии.
countЧисло точек координаты текстуры.
Возвращаемое значение
Новый источник геометрии, чей
semanticсвойствоSCNGeometrySourceSemanticTexcoord.Обсуждение
SceneKit преобразовывает эти данные в свой собственный формат для оптимизации производительности рендеринга. Для чтения преобразованных данных исследуйте свойства создаваемого
SCNGeometrySourceобъект.Создать пользовательское
SCNGeometryобъект из источника геометрии, используйтеgeometryWithSources:elements:метод.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
dataСвойствоДанные для источника геометрии. (только для чтения)
Обсуждение
Данные источника геометрии являются массивом векторов, каждый из которых представляет определенный атрибут (или семантический) вершины в геометрии. Другие свойства источника геометрии определяют, как SceneKit интерпретирует эти данные. Например, массив позиций вершины может иметь три 32-разрядных компонента с плавающей точкой на вектор, но массив координат текстуры может иметь два 8-разрядных целых числа coponents на вектор.
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
semanticСвойствоСемантическое значение (или атрибут) источник геометрии описывает для каждой вершины. (только для чтения)
Объявление
Swift
var semantic: String { get }Objective C
@property(nonatomic, readonly) NSString *semanticОбсуждение
Семантическое описывает атрибут для каждой вершины, такой как позиция, цвет, поверхностный вектор нормали или координаты текстуры.
Посмотрите Геометрию Семантические Идентификаторы для доступных значений.
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
vectorCountСвойство -
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Доступность
Доступный в iOS 8.0 и позже.
-
componentsPerVectorСвойствоЧисло скалярных компонентов в каждом векторе. (только для чтения)
Объявление
Swift
var componentsPerVector: Int { get }Objective C
@property(nonatomic, readonly) NSInteger componentsPerVectorОператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
bytesPerComponentСвойствоРазмер, в байтах, каждого векторного компонента. (только для чтения)
Объявление
Swift
var bytesPerComponent: Int { get }Objective C
@property(nonatomic, readonly) NSInteger bytesPerComponentОператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
dataOffsetСвойствоСмещение, в байтах, с начала данных к первому векторному компоненту, который будет использоваться в источнике геометрии. (только для чтения)
Объявление
Swift
var dataOffset: Int { get }Objective C
@property(nonatomic, readonly) NSInteger dataOffsetОбсуждение
Можно использовать
dataOffsetиdataStrideпараметры могут вместе для чередования данных для многократных источников геометрии в том же массиве, улучшая рендеринг производительности. Посмотрите Чередующиеся Данные Вершины для подробных данных.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
-
dataStrideСвойствоЧисло байтов от вектора до следующего в данных. (только для чтения)
Объявление
Swift
var dataStride: Int { get }Objective C
@property(nonatomic, readonly) NSInteger dataStrideОбсуждение
Можно использовать
dataOffsetиdataStrideпараметры могут вместе для чередования данных для многократных источников геометрии в том же массиве, улучшая рендеринг производительности. Посмотрите Чередующиеся Данные Вершины для подробных данных.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
