Эффективное представление геометрии меша, линий или точек. Включает позиции вершин, индексы граней, нормали, цвета, UV и пользовательские атрибуты в буферах, снижая затраты на передачу всех этих данных в GPU.
Для чтения и редактирования данных в атрибутах BufferGeometry смотрите документацию BufferAttribute.
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);
Создает новый BufferGeometry. Также устанавливает несколько свойств в значение по умолчанию.
Эта хэш-таблица имеет в качестве id имя устанавливаемого атрибута, а в качестве value — устанавливаемый buffer. Вместо прямого доступа к этому свойству, для доступа к атрибутам геометрии используйте .setAttribute и .getAttribute.
Ограничивающий бокс для BufferGeometry, рассчитывается с помощью метода .computeBoundingBox(). По умолчанию null.
Ограничивающая сфера для BufferGeometry, рассчитывается с помощью метода .computeBoundingSphere(). По умолчанию null.
Определяет часть геометрии для отрисовки. Его не следует задавать напрямую, вместо этого используйте .setDrawRange. По умолчанию:
{ start: 0, count: Infinity }
Для неиндексированной BufferGeometry, count — это количество вершин для рендеринга. Для индексированной BufferGeometry, count — это количество индексов для рендеринга.
Разделяет геометрию на группы, каждая из которых будет отрисована в отдельном WebGL-вызове. Это позволяет использовать массив материалов вместе с геометрией.
Каждая группа является объектом вида:
{ start: Integer, count: Integer, materialIndex: Integer }
где start указывает первый элемент в вызове отрисовки — первая вершина для неиндексированной геометрии, либо индекс первого треугольника. count указывает, сколько вершин (или индексов) будет включено, а materialIndex указывает индекс в используемом массиве материалов.
Используйте .addGroup для добавления групп, а не изменяйте этот массив напрямую.
Каждый вертекс или индекс должен принадлежать только к одной группе. Или иначе, группы не должны содержать дупликаты вертексов и индексов. Кроме того, нельзя оставлять неиспользуемые вертексы/индексы.
Уникальный номер для данного экземпляра BufferGeometry.
Позволяет повторно использовать вершины в нескольких треугольниках; это называется использованием "индексированных треугольников". Поскольку каждый треугольник связан с индексами трех вершин, данный атрибут хранит индекс каждой вершины для каждой треугольной грани.
Если этот атрибут не установлен, то renderer предполагает, что все три смежные позиции представляют собой один треугольник.
По умолчанию null.
Флаг, указывающий, что данный объект является экземпляром BufferGeometry. Только для чтения.
Хэш-таблица BufferAttribute-атрибутов, содержащих сведения о морф таргетах. Внимание: после создания геометрии, данные морф таргетов не могут быть изменены. Вам потребуется вызвать метод .dispose() и создать новый экзепляр BufferGeometry.
Используется для управления поведением цели морфа; если установлено значение true, данные цели морфа обрабатываются как относительные смещения, а не как абсолютные позиции/нормали. По умолчанию false.
Необязательное имя для данного экземпляра BufferGeometry. По умолчанию это пустая строка.
Объект, который можно использовать для хранения пользовательских данных о BufferGeometry. Он не должен содержать ссылки на функции, так как они не будут клонироваться.
UUID данного экземпляра. Он присваивается автоматически и не подлежит редактированию.
Методы базового класса EventDispatcher также могут использоваться в данном классе.
Добавляет группу к этой геометрии; подробности см. в свойстве groups.
Запекает матричное преобразование непосредственно в геометрию.
Запекает кватернион поворота непосредственно в геометрию.
Центрирует геометрию на основе ограничивающего бокса.
Очищает все группы.
Создает клон текущей BufferGeometry.
Вычисляет граничную область геометрии, обновляя атрибут .boundingBox. Граничные поля не вычисляются по умолчанию. Они должны быть вычислены явно, иначе они null.
Вычисляет граничную сферу геометрии, обновляя атрибут .boundingSphere. Граничные сферы не вычисляются по умолчанию. Их нужно вычислить явно, иначе они будут null.
Calculates and adds a tangent attribute to this geometry.
The computation is only supported for indexed geometries and if position, normal, and uv attributes are defined.
Вычисляет нормали вершин путем усреднения нормалей граней.
Копирует другую BufferGeometry в текущую BufferGeometry.
Удаляет атрибут BufferAttribute с указанным именем.
Удаляет объект из памяти. Вы должны вызвать этот вызов, когда вы хотите удалить BufferGeometry во время работы приложения.
Возвращает атрибут BufferAttribute с указанным именем.
Возвращает буфер .index.
Возвращает true, если атрибут с указанным именем существует.
vector — вектор в мировой системе координат, вдоль которого нужно посмотреть.
Поворачивает геометрию лицом к точке в пространстве. Обычно это выполняется однократно, а не в в процессе рендеринга. Используйте Object3D.lookAt для простого ориентирования мешей в реальном времени.
Каждый нормальный вектор в геометрии будет иметь величину 1. Это исправляет освещение на поверхностях геометрии.
Поворачивает геометрию вокруг оси X. Обычно это делается однократно, а не в процессе рендеринга. Используйте Object3D.rotation для простого вращения мешей в реальном времени.
Поворачивает геометрию вокруг оси Y. Обычно это делается однократно, а не в процессе рендеринга. Используйте Object3D.rotation для простого вращения мешей в реальном времени.
Поворачивает геометрию вокруг оси Z. Обычно это делается однократно, а не в процессе рендеринга. Используйте Object3D.rotation для простого вращения мешей в реальном времени.
Масштабирование геометрических данных. Обычно это делается однократно, а не в процессе рендеринга. Используйте Object3D.scale для простого масштабирования мешей в реальном времени.
Устанавливает атрибут для данной геометрии. Используйте это свойство вместо свойства attributes, так как для ускорения итерации по атрибутам ведется внутренняя хэш-таблица .attributes.
Устанавливает свойство .drawRange. Для неиндексированной BufferGeometry, count - это количество вершин для отрисовки. Для индексированной BufferGeometry, count — это количество индексов для рендеринга.
Устанавливает атрибуты для этой BufferGeometry из массива точек.
Устанавливает буфер .index.
Возвращает неиндексную версию индексированной BufferGeometry.
Перемещает геометрию. Обычно это делается однократно, а не в процессе рендеринга. Используйте Object3D.position для простого перемещения меша в реальном времени.
О том как получить исходный код этого модуля читайте тут.