BufferGeometry

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

Для чтения и редактирования данных в атрибутах BufferGeometry смотрите документацию BufferAttribute.

Менее эффективное, но более простое в использовании представление геометрии см. в Geometry.

Пример

const geometry = new v3d.BufferGeometry(); // создадим простую квадратную форму. Дублируем левый верхний и правый нижний угол вершин, потому что каждая вершина должна появляться один раз в треугольнике. const vertices = new Float32Array([ -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0 ]); // itemSize = 3, поскольку на каждую вершину приходится 3 значения (компонента) geometry.setAttribute('position', new v3d.BufferAttribute(vertices, 3)); const material = new v3d.MeshBasicMaterial({ color: 0xff0000 }); const mesh = new v3d.Mesh(geometry, material);

Примеры

Mesh with non-indexed faces
Mesh with indexed faces
Lines
Indexed Lines
Particles
Raw Shaders

Конструктор

BufferGeometry()

Создает новый BufferGeometry. Также устанавливает несколько свойств в значение по умолчанию.

Свойства

.attributes : Object

Эта хэш-карта имеет в качестве id имя устанавливаемого атрибута, а в качестве value - buffer для его установки. Вместо прямого доступа к этому свойству, используйте .setAttribute и .getAttribute для доступа к атрибутам этой геометрии.

.boundingBox : Box3

Ограничевающая область для bufferGeometry, которая может быть рассчитана с помощью .computeBoundingBox(). По умолчанию null.

.boundingSphere : Sphere

Граничная сфера для bufferGeometry, которая может быть вычислена с помощью .computeBoundingSphere(). По умолчанию null.

.drawRange : Object

Определяет часть геометрии для отрисовки. Его не следует задавать напрямую, вместо этого используйте .setDrawRange. По умолчанию { start: 0, count: Infinity } Для неиндексированной BufferGeometry, count - это количество вершин для рендеринга. Для индексированной BufferGeometry, count - это количество индексов для рендеринга.

.groups : Array

Разделите геометрию на группы, каждая из которых будет отрисована в отдельном вызове WebGL draw. Это позволяет использовать массив материалов вместе с bufferGeometry.

Каждая группа является объектом формы: { start: Integer, count: Integer, materialIndex: Integer } где start указывает первый элемент в этом вызове рисования - первая вершина для неиндексированной геометрии, иначе - индекс первого треугольника. Count указывает, сколько вершин (или индексов) будет включено, а materialIndex указывает индекс массива материалов для использования.

Используйте .addGroup для добавления групп, а не изменяйте этот массив напрямую.

.id : Integer

Уникальный номер для данного экземпляра bufferGeometry.

.index : BufferAttribute

Позволяет повторно использовать вершины в нескольких треугольниках; это называется использованием "индексированных треугольников" и работает так же, как в Geometry: каждый треугольник связан с индексами трех вершин. Поэтому этот атрибут хранит индекс каждой вершины для каждой треугольной грани. Если этот атрибут не установлен, то renderer предполагает, что все три смежные позиции представляют собой один треугольник. По умолчанию null.

.morphAttributes : Object

Хэшмап BufferAttribute-атрибутов, содержащих сведения о геометрических morphTargets.

.morphTargetsRelative : Boolean

Используется для управления поведением цели морфа; если установлено значение true, данные цели морфа обрабатываются как относительные смещения, а не как абсолютные позиции/нормали. По умолчанию false.

.name : String

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

.userData : Object

Объект, который можно использовать для хранения пользовательских данных о BufferGeometry. Он не должен содержать ссылки на функции, так как они не будут клонироваться.

.uuid : String

UUID данного экземпляра объекта. Он присваивается автоматически и не подлежит редактированию.

Методы

EventDispatcher методы доступны для этого класса.

.setAttribute(name : String, attribute : BufferAttribute) → BufferGeometry

Устанавливает атрибут для данной геометрии. Используйте это свойство вместо свойства attributes, так как для ускорения итерации по атрибутам ведется внутренняя хэш-карта .attributes.

.addGroup(start : Integer, count : Integer, materialIndex : Integer) → null

Добавляет группу к этой геометрии; подробности см. в свойстве groups.

.applyMatrix4(matrix : Matrix4) → null

Запекает матричное преобразование непосредственно в координаты вершин.

.center() → BufferGeometry

Отцентрируйте геометрию на основе ограничительной рамки.

.clone() → BufferGeometry

Создает клон этой BufferGeometry.

.copy(bufferGeometry : BufferGeometry) → BufferGeometry

Копирует другую BufferGeometry в эту BufferGeometry.

.clearGroups() → null

Очищает все группы.

.computeBoundingBox() → null

Вычисляет граничную область геометрии, обновляя атрибут .boundingBox.
Граничные поля не вычисляются по умолчанию. Они должны быть вычислены явно, иначе они null.

.computeBoundingSphere() → null

Вычисляет граничную сферу геометрии, обновляя атрибут .boundingSphere.
Граничные сферы не вычисляются по умолчанию. Их нужно вычислить явно, иначе они будут null.

.computeVertexNormals() → null

Вычисляет нормали вершин путем усреднения нормалей граней.

.dispose() → null

Удаляет объект из памяти.
Вы должны вызвать этот вызов, когда вы хотите удалить BufferGeometry во время работы приложения.

.fromDirectGeometry(Geometry : Geometry) → BufferGeometry

Заполняет эту BufferGeometry данными из объекта DirectGeometry, содержащего грани. Не реализовано для линейной геометрии.

Примечание: DirectGeometry в основном используется как промежуточный объект для преобразования между Geometry и BufferGeometry.

.fromGeometry(Geometry : Geometry) → BufferGeometry

Заполняет этот BufferGeometry данными из объекта Geometry, содержащего грани. Не реализовано для линейной геометрии.

.getAttribute(name : String) → BufferAttribute

Возвращает атрибут BufferAttribute с указанным именем.

.getIndex() → BufferAttribute

Возвращает буфер .index.

.hasAttribute(name : String) → Boolean

Возвращает true, если атрибут с указанным именем существует.

.lookAt(vector : Vector3) → BufferGeometry

vector - Вектор мира, на который можно посмотреть.

Поворачивает геометрию лицом к точке в пространстве. Обычно это выполняется однократно, а не в цикле. Используйте Object3D.lookAt для типичного использования сетки в реальном времени.

.merge(bufferGeometry : BufferGeometry, offset : Integer) → null

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

.normalizeNormals() → null

Каждый нормальный вектор в геометрии будет иметь величину 1. Это исправит освещение на поверхностях геометрии.

.deleteAttribute(name : String) → BufferAttribute

Удаляет атрибут BufferAttribute с указанным именем.

.rotateX(radians : Float) → BufferGeometry

Поверните геометрию вокруг оси X. Обычно это делается однократно, а не во время цикла. Используйте Object3D.rotation для типичного вращения сетки в реальном времени.

.rotateY(radians : Float) → BufferGeometry

Поверните геометрию вокруг оси Y. Обычно это делается однократно, а не во время цикла. Используйте Object3D.rotation для типичного вращения сетки в реальном времени.

.rotateZ(radians : Float) → BufferGeometry

Поворот геометрии вокруг оси Z. Обычно это делается однократно, а не во время цикла. Используйте Object3D.rotation для типичного вращения сетки в реальном времени.

.scale(x : Float, y : Float, z : Float) → BufferGeometry

Масштабирование геометрических данных. Обычно это делается однократно, а не во время цикла. Используйте Object3D.scale для типичного масштабирования сетки в реальном времени.

.setIndex(index : BufferAttribute) → BufferGeometry

Установите буфер .index.

.setDrawRange(start : Integer, count : Integer) → null

Установите свойство .drawRange. Для неиндексированной BufferGeometry, count - это количество вершин для отрисовки. Для индексированной BufferGeometry, count - это количество индексов для рендеринга.

.setFromObject(object : Object3D) → BufferGeometry

Устанавливает атрибуты для этой BufferGeometry из Object3D.

.setFromPoints(points : Array) → BufferGeometry

Устанавливает атрибуты для этой BufferGeometry из массива точек.

.toNonIndexed() → BufferGeometry

Возвращает неиндексную версию индексированной BufferGeometry.

.translate(x : Float, y : Float, z : Float) → BufferGeometry

Перевести геометрию. Обычно это делается однократно, а не во время цикла. Используйте Object3D.position для типичного перевода меша в реальном времени.

.updateFromObject(object : Object3D) → BufferGeometry

Обновляет атрибуты для этой BufferGeometry из Object3D.

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

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