Geometry

Geometry - это удобная альтернатива BufferGeometry. Геометрии хранят атрибуты (позиции вершин, грани, цвета и т.д.), используя объекты типа Vector3 или Color, которые легче считывать и редактировать, но менее эффективны, чем типизированные массивы.

Предпочтите BufferGeometry для больших или серьезных проектов.

Пример

const geometry = new v3d.Geometry(); geometry.vertices.push( new v3d.Vector3(-10, 10, 0), new v3d.Vector3(-10, -10, 0), new v3d.Vector3( 10, -10, 0) ); geometry.faces.push(new v3d.Face3(0, 1, 2)); geometry.computeBoundingSphere();

Примеры

WebGL / geometry / minecraft
WebGL / geometry / minecraft / ao
WebGL / geometry / nurbs
WebGL / geometry / spline / editor
WebGL / interactive / cubes / gpu
WebGL / interactive / lines
WebGL / interactive / raycasting / points
WebGL / interactive / voxelpainter

Конструктор

Geometry()

Конструктор не принимает никаких аргументов.

Свойства

.boundingBox : Box3

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

.boundingSphere : Sphere

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

.colors : Array

Массив вершин colors, соответствующий количеству и порядку вершин.

Он используется Points и Line и любыми классами, производными от них, такими как LineSegments и различными помощниками. В Meshes вместо этого используется Face3.vertexColors.

Чтобы сигнализировать об обновлении этого массива, Geometry.colorsNeedUpdate должно быть установлено в true.

.faces : Array

Массив faces.
Массив граней описывает, как каждая вершина в модели соединена для формирования граней. Кроме того, в нем хранится информация о нормалях и цветах граней и вершин.

Чтобы сигнализировать об обновлении этого массива, Geometry.elementsNeedUpdate должно быть установлено в true.

.faceVertexUvs : Array

Массив лицевых UV слоев, используемых для наложения текстур на геометрию..
Каждый UV-слой представляет собой массив Vector2, соответствующих порядку и количеству вершин в гранях.

Чтобы сигнализировать об обновлении этого массива, Geometry.uvsNeedUpdate должно быть установлено в true.

.id : Integer

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

.lineDistances : Array

Массив, содержащий расстояния между вершинами для геометрии Line. Это необходимо для корректного отображения LineDashedMaterial.

.morphTargets : Array

Массив morph targets. Каждая цель морфа является объектом Javascript: { name: "targetName", vertices: [new v3d.Vector3(), ...] } Вершины морфа соответствуют количеству и порядку первичных вершин.

.morphNormals : Array

Массив нормалей морфа. Нормали морфа имеют такую же структуру, как и цели морфа, каждый набор нормалей - это объект Javascript: morphNormal = { name: "NormalName", normals: [new v3d.Vector3(), ...] }

.name : String

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

.skinWeights : Array

При работе с SkinnedMesh каждая вершина может иметь до 4 bones, влияющих на нее. Свойство skinWeights представляет собой массив значений веса, которые соответствуют порядку вершин в геометрии. Так, например, первый skinWeight будет соответствовать первой вершине в геометрии. Поскольку каждая вершина может быть изменена 4 костями, для представления весов скинов для этой вершины используется Vector4.

Значения вектора обычно находятся в диапазоне от 0 до 1. Например, при значении 0 трансформация кости не будет иметь никакого эффекта. При значении 0,5 эффект составит 50%. При значении 100% эффект будет равен 100%. Если с вершиной связана только одна кость, то вам нужно беспокоиться только о первой компоненте вектора, остальные можно игнорировать и установить значение 0.

.skinIndices : Array

Как и свойство skinWeights, значения skinIndices соответствуют вершинам геометрии. Каждая вершина может иметь до 4 костей, связанных с ней. Таким образом, если вы посмотрите на первую вершину и первый skinIndex, это покажет вам кости, связанные с этой вершиной. Например, первая вершина может иметь значение (10.05, 30.10, 12.12). Тогда первый индекс skin может иметь значение (10, 2, 0, 0). Первый вес skin может иметь значение (0.8, 0.2, 0, 0). По сути, это возьмет первую вершину, а затем кость mesh.bones[10] и применит ее на 80% пути. Затем он возьмет кость skeleton.bones[2] и применит ее на 20% пути. Следующие два значения имеют вес 0, поэтому они не будут иметь никакого эффекта.

В коде другой пример может выглядеть следующим образом: // например geometry.skinIndices[15] = new v3d.Vector4( 0, 5, 9, 10); geometry.skinWeights[15] = new v3d.Vector4(0.2, 0.5, 0.3, 0); // или соответствует следующей вершине geometry.vertices[15]; // эти кости будут использоваться следующим образом: skeleton.bones[0]; // weight of 0.2 skeleton.bones[5]; // weight of 0.5 skeleton.bones[9]; // weight of 0.3 skeleton.bones[10]; // weight of 0

.uuid : String

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

.vertices : Array

Массив vertices.
В массиве вершин хранится положение каждой вершины в модели.
Чтобы сигнализировать об обновлении этого массива, .verticesNeedUpdate должно быть установлено в true.

.verticesNeedUpdate : Boolean

Устанавливается в true, если массив вершин был обновлен.

.elementsNeedUpdate : Boolean

Устанавливается в true, если массив граней был обновлен.

.uvsNeedUpdate : Boolean

Устанавливается в true, если массив uvs был обновлен.

.normalsNeedUpdate : Boolean

Устанавливается в true, если массив нормалей был обновлен.

.colorsNeedUpdate : Boolean

Устанавливается в true, если массив colors или цвет face3 был обновлен.

.groupsNeedUpdate : Boolean

Устанавливается в значение true, если индекс материала face3 был обновлен.

.lineDistancesNeedUpdate : Boolean

Устанавливается в true, если массив linedistances был обновлен.

Методы

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

.applyMatrix4(matrix : Matrix4) → null

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

.center() → Geometry

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

.clone() → Geometry

Создает новый клон геометрии.

Этот метод копирует только вершины, грани и uvs. Он не копирует никакие другие свойства геометрии.

.computeBoundingBox() → null

Вычисляет ограничивающую область геометрии, обновляя атрибут Geometry.boundingBox.

.computeBoundingSphere() → null

Вычисляет граничную сферу геометрии, обновляя атрибут Geometry.boundingSphere.

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

.computeFaceNormals() → null

Вычисляет face normals.

.computeFlatVertexNormals() → null

Вычисляет плоские vertex Normals. Устанавливает вершинную нормаль каждой вершины каждой грани равной нормали грани.

.computeMorphNormals() → null

Вычисляет .morphNormals.

.computeVertexNormals(areaWeighted : Boolean) → null

areaWeighted - Если true, то вклад каждой нормали грани в нормаль вершины взвешивается по площади грани. По умолчанию true.

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

.copy(geometry : Geometry) → Geometry

Копирует вершины, грани и uvs в данную геометрию. Не копирует никакие другие свойства геометрии.

.dispose() → null

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

.fromBufferGeometry(geometry : BufferGeometry) → Geometry

Преобразование BufferGeometry в геометрию.
При преобразовании BufferGeometry в Geometry все вершины сохраняются, поэтому возможно появление дублированных вершин. Для их удаления используйте Geometry.mergeVertices.

.lookAt(vector : Vector3) → Geometry

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

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

.merge(geometry : Geometry, matrix : Matrix4, materialIndexOffset : Integer) → null

Объединить две геометрии или геометрию и геометрию из объекта (используя преобразование объекта)

.mergeMesh(mesh : Mesh) → null

Объедините геометрию меша с этой геометрией, также применив трансформацию меша.

.mergeVertices() → null

Проверка на наличие дубликатов вершин с помощью hashmap.
Дублирующиеся вершины удаляются, а вершины граней обновляются.

.normalize() → null

Нормализуйте геометрию.
Сделайте геометрию центрированной и имеющей граничную сферу радиуса 1.0.

.rotateX(radians : Float) → Geometry

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

.rotateY(radians : Float) → Geometry

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

.rotateZ(radians : Float) → Geometry

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

.setFromPoints(points : Array) → Geometry

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

.sortFacesByMaterialIndex() → null

Сортирует массив граней в соответствии с индексом материала. Для сложных геометрий с несколькими материалами это может привести к уменьшению количества вызовов рисования и повышению производительности.

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

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

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

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

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

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