BufferAttribute - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать BufferAttribute в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

# BufferAttribute

Этот класс хранит данные для атрибутов (таких как позиции вершин, индексы граней, нормали, цвета, UV и любые пользовательские атрибуты), связанных с BufferGeometry, что позволяет более эффективно передавать данные на GPU. Подробности и пример использования см. на указанной странице.

При работе с векторными данными, также будет полезным использовать вспомогательные методы .fromBufferAttribute(attribute, index) классов Vector2, Vector3, Vector4 и Color.

## Конструктор

### BufferAttribute(array : TypedArray, itemSize : Integer, normalized : Boolean)

- array — должен быть TypedArray. Используется для инстанцирования буфера. Этот массив должен иметь `itemSize * numVertices` элементов, где numVertices — количество вершин в ассоциированной BufferGeometry.
- itemSize — количество значений массива, которые должны быть связаны с конкретной вершиной. Например, если этот атрибут хранит трехкомпонентный вектор (такой как позиция, нормаль или цвет), то itemSize должен быть равен 3.
- normalized — (необ.) применяется только к целочисленным данным. Указывает, как базовые данные в буфере отображаются на значения в коде GLSL. Например, если array является экземпляром UInt16Array, и normalized равно `true`, значения 0 - +65535 в данных массива будут отображены на `0.0f - +1.0f` в атрибуте GLSL. Массив Int16Array (знаковый) будет отображать значения `-32767 - +32767` на `-1.0f - +1.0f`. Если normalized равно `false`, значения будут преобразованы в числа с плавающей запятой без изменений, т.е. `32767` станет `32767.0f`.

## Свойства

### # .array : TypedArray

Типизированный массив, содержащий данные, хранящиеся в буфере.

### # .count : Integer

Содержит длину массива array, разделенную на itemSize.

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

### # .isBufferAttribute : Boolean

Указывает, что данный объект является экземпляром BufferAttribute. Только для чтения.

### # .itemSize : Integer

Длина векторов, которые хранятся в массиве array.

### # .name : String

Необязательное имя для данного экземпляра атрибута. По умолчанию пустая строка.

### # .needsUpdate : Boolean

Флаг, указывающий на то, что данный атрибут изменился и должен быть повторно отправлен на GPU. Установите это значение в `true` при изменении значения массива.

Установка этого значения в `true` также увеличивает версию BufferAttribute.version.

### # .normalized : Boolean

Указывает, как данные в буфере отображаются на значения в коде шейдера GLSL. Подробности см. в конструкторе выше.

### # .onUploadCallback : Function

Функция обратного вызова, которая выполняется после того, как рендерер передал данные массива атрибутов на GPU.

### # .updateRange : Object

Объект, содержащий:

- offset: По умолчанию `0`. Позиция, с которой следует начать обновление.
- count: По умолчанию `-1`, что означает не использовать диапазоны обновления.

Это можно использовать для обновления только некоторых компонентов хранимых векторов (например, только компонента, связанного с цветом).

### # .usage : Usage

Определяет предполагаемую схему использования хранилища данных в целях оптимизации. Соответствует параметру `usage` в WebGLRenderingContext.bufferData(). По умолчанию StaticDrawUsage. Остальные значения параметра см. в разделе константы.

После первого использования буфера, параметр usage не может быть изменён. Вместо этого создайте новый и установите нужное значение параметра перед первым кадром отрисовки.

### # .version : Integer

Номер версии, увеличивающийся каждый раз, когда свойство needsUpdate установлено в `true`.

## Методы

### # .applyMatrix3(m : Matrix3) → this

Применяет матрицу m к каждому элементу Vector3 данного BufferAttribute.

### # .applyMatrix4(m : Matrix4) → this

Применяет матрицу m к каждому элементу Vector3 данного BufferAttribute.

### # .applyNormalMatrix(m : Matrix3) → this

Применяет нормальную матрицу m к каждому элементу Vector3 данного BufferAttribute.

### # .transformDirection(m : Matrix4) → this

Применяет матрицу m к каждому элементу Vector3 этого BufferAttribute, интерпретируя элементы как векторы направления.

### # .clone() → BufferAttribute

Возвращает копию этого BufferAttribute.

### # .copy(bufferAttribute : BufferAttribute) → BufferAttribute

Копирует другой BufferAttribute в текущий BufferAttribute.

### # .copyArray(array) → BufferAttribute

Копирует указанный массив (который может быть обычным массивом или TypedArray) в свойство array.

Смотрите TypedArray.set, содержащий требования при копировании TypedArray.

### # .copyAt(index1 : Integer, bufferAttribute : BufferAttribute, index2 : Integer) → this

Копирует вектор из bufferAttribute[index2] в array[index1].

### # .getX(index : Integer) → Float

Возвращает x-компоненту вектора по заданному индексу.

### # .getY(index : Integer) → Float

Возвращает y-компоненту вектора по заданному индексу.

### # .getZ(index : Integer) → Float

Возвращает z-компоненту вектора по заданному индексу.

### # .getW(index : Integer) → Float

Возвращает w-компоненту вектора по заданному индексу.

### # .onUpload(callback : Function) → this

Устанавливает значение свойства onUploadCallback.

### # .set(value : Array, offset : Integer) → this

- value — Array или TypedArray, из которого копируются значения.
- offset — (необ.) индекс массива array, с которого следует начать копирование.

Вызывает TypedArray.set(value, offset) на массиве array.

В частности, смотрите на странице выше требования, предъявляемые к TypedArray.

### # .setUsage(value : Usage) → this

Устанавливает значение usage. Значения параметра см. в разделе константы.

После первого использования буфера, параметр usage не может быть изменён. Вместо этого создайте новый и установите нужное значение параметра перед первым кадром отрисовки.

### # .setX(index : Integer, x : Float) → this

Устанавливает x-компонент вектора по заданному индексу.

### # .setY(index : Integer, y : Float) → this

Устанавливает компонент y вектора по заданному индексу.

### # .setZ(index : Integer, z : Float) → this

Устанавливает компонент z вектора по заданному индексу.

### # .setW(index : Integer, w : Float) → this

Устанавливает w-компоненту вектора по заданному индексу.

### # .setXY(index : Integer, x : Float, y : Float) → this

Устанавливает x и y компоненты вектора по заданному индексу.

### # .setXYZ(index : Integer, x : Float, y : Float, z : Float) → this

Устанавливает x, y и z компоненты вектора по заданному индексу.

### # .setXYZW(index : Integer, x : Float, y : Float, z : Float, w : Float) → this

Устанавливает x, y, z и w компоненты вектора по заданному индексу.

## Исходный файл

О том как получить исходный код этого модуля читайте тут.