Эффективное представление геометрии меша, линии или точки. Включает позиции вершин, индексы граней, нормали, цвета, UVs и пользовательские атрибуты в буферах, снижая затраты на передачу всех этих данных в 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);
Эта хэш-карта имеет в качестве id имя устанавливаемого атрибута, а в качестве value - buffer для его установки. Вместо прямого доступа к этому свойству, используйте .setAttribute и .getAttribute для доступа к атрибутам этой геометрии.
Ограничевающая область для bufferGeometry, которая может быть рассчитана с помощью .computeBoundingBox(). По умолчанию null.
Граничная сфера для bufferGeometry, которая может быть вычислена с помощью .computeBoundingSphere(). По умолчанию null.
Определяет часть геометрии для отрисовки. Его не следует задавать напрямую, вместо этого используйте .setDrawRange. По умолчанию
{ start: 0, count: Infinity }
Для неиндексированной BufferGeometry, count - это количество вершин для рендеринга. Для индексированной BufferGeometry, count - это количество индексов для рендеринга.
Разделите геометрию на группы, каждая из которых будет отрисована в отдельном вызове WebGL draw. Это позволяет использовать массив материалов вместе с bufferGeometry.
Каждая группа является объектом формы:
{ start: Integer, count: Integer, materialIndex: Integer }
где start указывает первый элемент в этом вызове рисования - первая вершина для неиндексированной геометрии, иначе - индекс первого треугольника. Count указывает, сколько вершин (или индексов) будет включено, а materialIndex указывает индекс массива материалов для использования.
Используйте .addGroup для добавления групп, а не изменяйте этот массив напрямую.
Уникальный номер для данного экземпляра bufferGeometry.
Позволяет повторно использовать вершины в нескольких треугольниках; это называется использованием "индексированных треугольников" и работает так же, как в BufferGeometry: каждый треугольник связан с индексами трех вершин. Поэтому этот атрибут хранит индекс каждой вершины для каждой треугольной грани. Если этот атрибут не установлен, то renderer предполагает, что все три смежные позиции представляют собой один треугольник. По умолчанию null.
Хэшмап BufferAttribute-атрибутов, содержащих сведения о геометрических morphTargets.
Используется для управления поведением цели морфа; если установлено значение true, данные цели морфа обрабатываются как относительные смещения, а не как абсолютные позиции/нормали. По умолчанию false.
Необязательное имя для данного экземпляра bufferGeometry. По умолчанию это пустая строка.
Объект, который можно использовать для хранения пользовательских данных о BufferGeometry. Он не должен содержать ссылки на функции, так как они не будут клонироваться.
UUID данного экземпляра объекта. Он присваивается автоматически и не подлежит редактированию.
Устанавливает атрибут для данной геометрии. Используйте это свойство вместо свойства attributes, так как для ускорения итерации по атрибутам ведется внутренняя хэш-карта .attributes.
Добавляет группу к этой геометрии; подробности см. в свойстве groups.
Запекает матричное преобразование непосредственно в координаты вершин.
Отцентрируйте геометрию на основе ограничительной рамки.
Создает клон этой BufferGeometry.
Копирует другую BufferGeometry в эту BufferGeometry.
Очищает все группы.
Вычисляет граничную область геометрии, обновляя атрибут .boundingBox.
Граничные поля не вычисляются по умолчанию. Они должны быть вычислены явно, иначе они null.
Вычисляет граничную сферу геометрии, обновляя атрибут .boundingSphere.
Граничные сферы не вычисляются по умолчанию. Их нужно вычислить явно, иначе они будут null.
Вычисляет нормали вершин путем усреднения нормалей граней.
Удаляет объект из памяти.
Вы должны вызвать этот вызов, когда вы хотите удалить BufferGeometry во время работы приложения.
Возвращает атрибут BufferAttribute с указанным именем.
Возвращает буфер .index.
Возвращает true, если атрибут с указанным именем существует.
vector - Вектор мира, на который можно посмотреть.
Поворачивает геометрию лицом к точке в пространстве. Обычно это выполняется однократно, а не в цикле.
Используйте Object3D.lookAt для типичного использования сетки в реальном времени.
Слияние в другой BufferGeometry с необязательным смещением места начала слияния.
Каждый нормальный вектор в геометрии будет иметь величину 1. Это исправит освещение на поверхностях геометрии.
Удаляет атрибут BufferAttribute с указанным именем.
Поверните геометрию вокруг оси X. Обычно это делается однократно, а не во время цикла. Используйте Object3D.rotation для типичного вращения сетки в реальном времени.
Поверните геометрию вокруг оси Y. Обычно это делается однократно, а не во время цикла. Используйте Object3D.rotation для типичного вращения сетки в реальном времени.
Поворот геометрии вокруг оси Z. Обычно это делается однократно, а не во время цикла. Используйте Object3D.rotation для типичного вращения сетки в реальном времени.
Масштабирование геометрических данных. Обычно это делается однократно, а не во время цикла. Используйте Object3D.scale для типичного масштабирования сетки в реальном времени.
Установите буфер .index.
Установите свойство .drawRange. Для неиндексированной BufferGeometry, count - это количество вершин для отрисовки. Для индексированной BufferGeometry, count - это количество индексов для рендеринга.
Устанавливает атрибуты для этой BufferGeometry из Object3D.
Устанавливает атрибуты для этой BufferGeometry из массива точек.
Возвращает неиндексную версию индексированной BufferGeometry.
Перевести геометрию. Обычно это делается однократно, а не во время цикла. Используйте Object3D.position для типичного перевода меша в реальном времени.
О том как получить исходный код этого модуля читайте тут.