Three.js
From three.js
Основные элементы three.js
В этом разделе описаны основные классы библиотеки three.js.
Clock - класс для отслеживания времени.
DirectGeometry - данный класс используется внутри three.js для конвертирования из Geometry в BufferGeometry.
EventDispatcher - диспетчер событий, класс для управления (отслеживания и запуска) событиями JavaScript.
Face3 - класс, определяющий параметры треугольной грани - ячейки арматуры, из которых составлена геометрическая фигура.
Geometry - основной класс для всех геометрий кроме BufferGeometry. Также можно использовать напрямую для построения собственных и нестандартных геометрических элементов.
InstancedBufferAttribute - инстанцированная версия BufferAttribute.
InstancedBufferGeometry - инстанцированная версия BufferGeometry.
InterleavedBuffer - буферный массив с чередованием
InterleavedBufferAttribute - массив буферных атрибутов с чередованием
Layers - слои для управления видимостью трехмерных объектов. Можно использовать до 32 слоёв.
Object3D - базовый класс для большинства объектов three.js, предоставляющий набор свойств и методов для управления объектами в трехмерном пространстве.
Raycaster - класс предназначен для оказания помощи с рейкастингом.
BufferAttribute
Данный класс сохраняет данные атрибута (такие как положения вершин, индексы граней, нормали, цвета, текстурные координаты (объекта (X, Y, Z) и координатами на текстуре (U, V - эти буквы
обозначают оси двумерной текстуры, потому что «X», «Y» и «Z»
уже используются для обозначения осей 3D-объекта в пространстве
модели). Значения U и V обычно изменяются от 0 до 1.')" onmouseout="hide()">UV) и все атрибуты, установленные пользователем), связанного с BufferGeometry, который позволяет более эффективное прохождение всех этих данных к
блок графических вычислений или графический процессор
или попросту - процессор видеокарты')" onmouseout="hide()">GPU. Посмотрите эту страницу для дополнительных сведений и примеров использования.
Данные хранятся как векторы произвольной длины (определяемые itemSize), и вообще в методах, описанных ниже, если передаются с индексом, то он автоматически умножается на длину вектора.
Конструктор
BufferAttribute( array, itemSize,
нормированный, т.е. приведенный к какой-то норме')" onmouseout="hide()">normalized )
array -- должен быть TypedArray (типизированным массивом).
Используется для создания экземпляра буфера.
В этом массиве должно быть (itemSize * numVertices) элементов, где numVertices - это число вершин в соответствующей BufferGeometry.
В этом массиве должно быть (itemSize * numVertices) элементов, где numVertices - это число вершин в соответствующей BufferGeometry.
itemSize -- число значений массива, связанного с конкретной вершиной.
Например, если данный атрибут хранит 3-компонентный вектор (такой как position - положение, normal - нормаль, или color - цвет), тогда itemSize должен быть равен 3.
нормированный, т.е. приведенный к какой-то норме')" onmouseout="hide()">normalized -- (дополнительный, необязательный атрибут) - показывает как базовые данные в буфере сопоставлены со значениями в коде
для программирования шейдеров. Синтаксис языка базируется на языке
программирования ANSI C, однако, из-за его специфической направленности,
из него были исключены многие возможности, для упрощения языка и повышения
производительности. В язык включены дополнительные функции и типы данных,
например для работы с векторами и матрицами. Основное преимущество GLSL
перед другими шейдерными языками — переносимость кода между
платформами и ОС.')" onmouseout="hide()">GLSL. Например, если массив является экземпляром UInt16Array, а атрибут normalized установлен как true, то значения от 0 до +65535 в данных массива будут отображены в атрибуте GLSL как значения от 0.0f до +1.0f. Массив Int16Array (со знаком) от -32767 до +32767 будет сопоставлен как -1.0f - +1.0f. Если normalized установлен как false значения будут конвертированы в числа с плавающей запятой, которые содержат точное значение, т.е. 32767 станет 32767.0f.
Свойства
.array
Массив удерживает данные, хранящиеся в буфере..count
Хранит длину массива деленную на .itemSize.Если буфер хранит 3-компонентный вектор (как например положение, нормали или цвет), то в этом случае будет подсчитано число таких хранящихся векторов.
.dynamic
Определяет, будет ли буфер динамическим или нет. Значение по умолчанию равно false.При установленном значении false, GPU сообщается, что скорее всего, содержимое буфера, будет часто использоваться, но не часто изменяться. Это соответствует флагу gl.STATIC_DRAW. Если же установлено значение true, GPU сообщается, что содержимое буфера, вероятно будет как часто использоваться, так и часто изменяться. Это соответствует флагу gl.DYNAMIC_DRAW.
Примечание переводчика: перевод части статьи по ссылке выше
gl.STATIC_DRAW: содержимое буфера, возможно, будет часто использоваться, но не часто изменяться. Содержимое записывается в буфер, но не считывается.
gl.DYNAMIC_DRAW: содержимое буфера, возможно, будет часто использоваться и часто изменяться. Содержимое записывается в буфер, но не считывается.
gl.STATIC_DRAW: содержимое буфера, возможно, будет часто использоваться, но не часто изменяться. Содержимое записывается в буфер, но не считывается.
gl.DYNAMIC_DRAW: содержимое буфера, возможно, будет часто использоваться и часто изменяться. Содержимое записывается в буфер, но не считывается.
.isBufferAttribute
Используется для проверки является ли данный класс или производные от него BufferAttribute. Значение по умолчанию равно true.Не изменяйте это свойство, так как оно используется для оптимизации внутри three.js.
.itemSize
Длина векторов, сохраняемых в array..name
Дополнительное имя для экземпляра данного атрибута. По умолчанию это пустая строка..needsUpdate
Флаг, показывающий что данный атрибут был изменен и должен быть повторно отправлен в графический процессор (GPU). Установите его как true при изменении значения массива.Установка этого значения как true также увеличивает version.
.normalized
Указывает каким образом базовые данные в буфере соответствуют значениям в коде GLSL. Подробности смотрите выше, в описании конструктора..onUploadCallback
Функция обратного вызова, выполняемая после того, как визуализатор (renderer) передал данные массива атрибутов в GPU..updateRange
Объект содержит:
offset: позиция, с которой начинается обновление, значение по умолчанию равно 0.
count: значение по умолчанию равно -1, что означает не использовать диапазон обновления.
Данное свойство может быть использовано для отдельного обновления некоторых компонентов хранящихся векторов (например, только для компонента относящегося к цвету).
- универсальный уникальный идентификатор')" onmouseout="hide()">.uuid
- универсальный уникальный идентификатор')" onmouseout="hide()">UUID данного экземпляра объекта. Он присваивается автоматически и не должен редактироваться.
.version
Номер версии, увеличивающийся каждый раз, когда свойство needsUpdate устанавливается как true.Методы
.clone( )Возвращает копию данного bufferAttribute.
.copyArray( array )Копирует, заданный здесь, массив (который может быть обычным массивом или типизированным - TypedArray) в массив array. Если копируется типизированный массив (TypedArray), ознакомьтесь на TypedArray.set с примечаниями по требованиям. Вот TypedArray.set на русском языке.
.copyAt( index1, bufferAttribute, index2 )Копирует вектор из bufferAttribute[index2] в array[index1].
Копирует массив, представленный значениями цвета в формате RGB, в array.
copy colors array - копировать массив (значений) цвета')" onmouseout="hide()">.copyColorsArray( colors )
Копирует массив, представленный индексами Face3, в array.
copy indices array - копировать массив индексов')" onmouseout="hide()">.copyIndicesArray( indices )
Копирует массив, представленный векторами Vector2, в array.
copy vector2s array - копировать массив двумерных векторов')" onmouseout="hide()">.copyVector2sArray( vectors )
Копирует массив, представленный векторами Vector3, в array.
copy vector3s array - копировать массив трехмерных векторов')" onmouseout="hide()">.copyVector3sArray( vectors )
Копирует массив, представленный векторами Vector4, в array.
copy vector4s array - копировать массив четырехмерных векторов')" onmouseout="hide()">.copyVector4sArray( vectors )
- получить координату по оси X')" onmouseout="hide()">.getX( index )
Возвращает компоненту x вектора по заданному индексу.
- получить координату по оси Y')" onmouseout="hide()">.getY( index )
Возвращает компоненту y вектора по заданному индексу.
- получить координату по оси Z')" onmouseout="hide()">.getZ( index )
Возвращает компоненту z вектора по заданному индексу.
- получить компонент W')" onmouseout="hide()">.getW( index )
Возвращает компоненту w вектора по заданному индексу..onUpload ( callback )Устанавливает значение свойства onUploadCallback.
В примере WebGL / Buffergeometry этот метод используется для высвобождения памяти после того, как буфер был передан GPU.
.set ( value, offset )
value -- массив или типизированный массив, из которого копируются значения.
offset
-- индекс массива array, с которого начинается копирование, (дополнительный, необязательный аргумент).
Метод вызывает метод TypedArray.set( value, offset ) на данный array.В частности, посмотрите эту страничку насчет требований к value в TypedArray. Вот здесь она на русском языке.
.setArray( array )Устанавливает массив array в типизированный массив TypedArray, переданный в аргументе.
После установки массива, needsUpdate должен быть установлен как true.
.Метод устанавливает значение свойства dynamic.
set dynamic - установить (свойство) dynamic')" onmouseout="hide()">setDynamic( value )
.setX( index, x )
Устанавливает компонент x вектора по заданному индексу..setY( index, y )
Устанавливает компонент y вектора по заданному индексу..setZ( index, z )
Устанавливает компонент z вектора по заданному индексу..setW( index, w )
Устанавливает компонент w вектора по заданному индексу..setXY( index, x, y )
Устанавливает компоненты вектора x, и y по заданному индексу..setXYZ( index, x, y, z )
Устанавливает компоненты вектора x, y, и z по заданному индексу..setXYZW( index, x, y, z, w )
Устанавливает компоненты вектора x, y, z и w по заданному индексу.Исходники
BufferAttribute →
Типы BufferAttribute
В three.js имеются девять типов BufferAttribute. Они соответствуют типизированным массивам в JavaScript.THREE.Float64BufferAttribute THREE.Float32BufferAttribute THREE.Uint32BufferAttribute THREE.Int32BufferAttribute THREE.Uint16BufferAttribute THREE.Int16BufferAttribute THREE.Uint8ClampedBufferAttribute THREE.Uint8BufferAttribute THREE.Int8BufferAttribute
Конструктор
Все вышеперечисленное вызывается одним и тем же способом.TypedBufferAttribute( array, itemSize )
array -- это может быть типизированный или нетипизированный (обычный) массив. Он будет преобразован в массив указанного типа.
itemSize -- число значений массива, которые должны быть увязаны с конкретной вершиной.
Свойства
Унаследованные свойства смотрите на странице BufferAttribute.
Методы
Унаследованные методы смотрите на странице BufferAttribute.
Исходники
BufferGeometry
Данный класс является эффективной альтернативой Geometry, так как он сохраняет внутри буферов все данные, включая положения вершин, индексы граней, нормали, цвета, текстурные координаты (объекта (X, Y, Z) и координатами на текстуре (U, V - эти буквы
обозначают оси двумерной текстуры, потому что «X», «Y» и «Z»
уже используются для обозначения осей 3D-объекта в пространстве
модели). Значения U и V обычно изменяются от 0 до 1.')" onmouseout="hide()">UV) и все атрибуты, установленные пользователем); это снижает затраты на прохождение всех этих данных к
блок графических вычислений или графический процессор
или попросту - процессор видеокарты')" onmouseout="hide()">GPU. При этом, работать с BufferGeometry сложнее, чем с Geometry; вместо того, чтобы обращаться к данным расположения как к объектам Vector3, а к данным о цвете как к объектам Color и так далее, нужно обращаться к необработанным данным (raw data) из соответствующего буфера атрибутов. Это делает BufferGeometry наиболее подходящим для статических объектов, где вам не нужно управлять геометрическими свойствами объекта после его создания.
Пример

var geometry = new THREE.BufferGeometry(); // create a simple square shape. We duplicate the bottom left and top right // vertices because each vertex needs to appear once per triangle. // создадим простую форму - квадрат. Нижняя левая и верхняя правая вершины // повторяются, поскольку в обоих треугольниках есть каждая из этих вершин. var 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 because there are 3 values (components) per vertex // itemSize = 3, потому что имеется 3 значения (компонента, т.е. составные части) на каждую вершину geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } ); var mesh = new THREE.Mesh( geometry, material );
Другие примеры:
Complex mesh with non-indexed faces (сложная сетка с неиндексированными гранями), Complex mesh with indexed faces (сложная сетка с индексированными гранями), Lines (линии), Indexed Lines (индексированные линии), Particles (частицы), и Raw Shaders (необработанные шейдеры).
Обращение к атрибутам Accessing attributes
WebGL хранит данные, связанные с отдельными вершинами геометрии в атрибутах. Примеры включают положение вершины, вектор нормали вершины, цвет вершины и т.д. При использовании Geometry, рендерер берет на себя заботу о переносе этой информации в буферы типизированного массива и отправлении этих данных в шейдер. В случае с BufferGeometry все эти данные хранятся в буферах, связанных с отдельными атрибутами. Это значит, что для получения данных о положении, связанных с вершиной (например), нужно вызвать метод .getAttribute для доступа к атрибуту position, затем обращаться к отдельным координатам x, y, и z этой позиции.Различными элементами этого класса устанавливаются следующие атрибуты:
Содержит координаты x, y, и z каждой вершины данной геометрии. Устанавливается при помощи метода .fromGeometry().
position - позиция, положение')" onmouseout="hide()">position (itemSize: 3)
Содержит компоненты x, y, и z векторов нормалей к каждой вершине в данной геометрии. Устанавливается при помощи метода .fromGeometry().
normal - нормаль, перпендикуляр')" onmouseout="hide()">normal (itemSize: 3)
Содержит каналы красного, зеленого и синего цвета каждой вершины в данной геометрии. Устанавливается при помощи метода .fromGeometry().
color - цвет')" onmouseout="hide()">color (itemSize: 3)
В дополнение к встроенным атрибутам, можно устанавливать свои собственные настраиваемые атрибуты при помощи метода addAttribute. При работе с Geometry, эти атрибуты установлены и хранятся в материале. В BufferGeometry эти атрибуты сохраняются вместе с самой геометрией. Обратите внимание, что по-прежнему нужно задавать сведения об атрибутах в материале, но значение каждого атрибута хранится в BufferGeometry.
Конструктор
BufferGeometry( )Конструктор создает новый BufferGeometry, а также задает некоторым свойствам значение по умолчанию.
Свойства
.attributes
У этой хеш-таблицы имя атрибута устанавливается как идентификатор, а в качестве значения устанавливается буфер.
Вместо непосредственного обращения к данному свойству, для доступа к атрибутам этой геометрии используйте методы
add attribute - добавить атрибут')" onmouseout="hide()">addAttribute и
get attribute - получить атрибут')" onmouseout="hide()">getAttribute.
Примечание переводчика: Вот чуть более подробно о хешировании, хеш-таблицах (хеш-картах) и ассоциативных таблицах. ... читать далее
Хеширование или хэширование (англ. hashing) — преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, выполняемое определённым алгоритмом.
Функция, реализующая алгоритм и выполняющая преобразование, называется «хеш-функцией» или «функцией свёртки». Исходные данные называются входным массивом, «ключом» или «сообщением».
Результат преобразования (выходные данные) называется «хешем», «хеш-кодом», «хеш-суммой», «сводкой сообщения».
(из Википедии)
Хеш-таблица — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
(из Википедии)
В информатике, хеш-таблицей (hash table) или хеш-картой (hash map) называется структура данных, которая реализует ассоциативный массив с абстрактным типом данных, и может сопоставлять ключи и значения. Хеш-таблица использует хеш-функцию для вычисления индекса в массиве of buckets or slots, из которого может быть найдено желаемое значение.
В идеале хеш-функция будет присваивать каждому ключу свое уникальное хеш-значение, но большинство конструкций хеш-таблиц применяет несовершенную хеш-функцию, которая может вызывать хеш-коллизии, когда она создает одинаковый индекс для более чем одного ключа. Такие коллизии должны каким-то образом улаживаться.
В хорошо подобранной хеш-таблице средние затраты (количество инструкций) на каждый поиск не зависит от числа элементов, хранящихся в таблице. Большинство проектов хеш-таблиц также позволяет произвольные вставки и удаления пар ключ-значение, при неизменных средних затратах на операцию.
Во многих случаях хеш-таблицы оказываются более эффективными, чем поисковые деревья или любые другие структуры просмотра таблиц. Поэтому они широко используются во многих видах компьютерных программ, в частности для ассоциативных массивов, индексирования баз данных, кэшей и наборов.
(из Википедии)
Ассоциативный массив — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу:
В паре ( k , v ) {\displaystyle (k,v)} (k, v) значение v {\displaystyle v} v называется значением, ассоциированным с ключом k {\displaystyle k} k. Семантика и названия вышеупомянутых операций в разных реализациях ассоциативного массива могут отличаться.
Операция FIND(ключ) возвращает значение, ассоциированное с заданным ключом, или некоторый специальный объект UNDEF, означающий, что значения, ассоциированного с заданным ключом, нет. Две другие операции ничего не возвращают (за исключением, возможно, информации о том, успешно ли была выполнена данная операция).
Ассоциативный массив с точки зрения интерфейса удобно рассматривать как обычный массив, в котором в качестве индексов можно использовать не только целые числа, но и значения других типов — например, строки.
(из Википедии)
(из Википедии)
Хеш-таблица — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
(из Википедии)
В информатике, хеш-таблицей (hash table) или хеш-картой (hash map) называется структура данных, которая реализует ассоциативный массив с абстрактным типом данных, и может сопоставлять ключи и значения. Хеш-таблица использует хеш-функцию для вычисления индекса в массиве of buckets or slots, из которого может быть найдено желаемое значение.
В идеале хеш-функция будет присваивать каждому ключу свое уникальное хеш-значение, но большинство конструкций хеш-таблиц применяет несовершенную хеш-функцию, которая может вызывать хеш-коллизии, когда она создает одинаковый индекс для более чем одного ключа. Такие коллизии должны каким-то образом улаживаться.
В хорошо подобранной хеш-таблице средние затраты (количество инструкций) на каждый поиск не зависит от числа элементов, хранящихся в таблице. Большинство проектов хеш-таблиц также позволяет произвольные вставки и удаления пар ключ-значение, при неизменных средних затратах на операцию.
Во многих случаях хеш-таблицы оказываются более эффективными, чем поисковые деревья или любые другие структуры просмотра таблиц. Поэтому они широко используются во многих видах компьютерных программ, в частности для ассоциативных массивов, индексирования баз данных, кэшей и наборов.
(из Википедии)
Ассоциативный массив — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу:
INSERT(ключ, значение) FIND(ключ) REMOVE(ключ)Предполагается, что ассоциативный массив не может хранить две пары с одинаковыми ключами.
В паре ( k , v ) {\displaystyle (k,v)} (k, v) значение v {\displaystyle v} v называется значением, ассоциированным с ключом k {\displaystyle k} k. Семантика и названия вышеупомянутых операций в разных реализациях ассоциативного массива могут отличаться.
Операция FIND(ключ) возвращает значение, ассоциированное с заданным ключом, или некоторый специальный объект UNDEF, означающий, что значения, ассоциированного с заданным ключом, нет. Две другие операции ничего не возвращают (за исключением, возможно, информации о том, успешно ли была выполнена данная операция).
Ассоциативный массив с точки зрения интерфейса удобно рассматривать как обычный массив, в котором в качестве индексов можно использовать не только целые числа, но и значения других типов — например, строки.
(из Википедии)
Ограничительная рамка для bufferGeometry, которая может быть рассчитана при помощи метода .computeBoundingBox(). Значением по умолчанию является null.
bounding box - ограничительная рамка')" onmouseout="hide()">.boundingBox
Ограничительная сфера для bufferGeometry, которая может быть рассчитана при помощи метода .computeBoundingSphere(). Значением по умолчанию является null.
bounding sphere - ограничительная сфера')" onmouseout="hide()">.boundingSphere
.drawRange
Используется для определения, какая часть геометрии должна быть визуализирована. Это свойство не устанавливается напрямую, взамен используйте метод .setDrawRange.Значением по умолчанию является { start: 0, count: Infinity }.
.groups
Разделите геометрию на группы, каждая из которых будет отображаться в отдельном вызове рисования WebGL. Это позволит использовать массив материалов с буферным геометрическим элементом.Каждая группа представляет собой объект в виде:
{ start: Integer, count: Integer, materialIndex: Integer }
где start указывает индекс первой вершины в этом вызове рисования, count определяет количество включенных вершин, а materialIndex устанавливает индекс используемого массива материала.Для добавления групп, вместо непосредственного изменения массива groups, используйте метод .addGroup.
.id
Уникальное число для данного экземпляра bufferGeometry..index
Свойство позволяет повторно использовать вершины для нескольких треугольников; это называется использованием "индексированных треугольников" и работает также,
как и в Geometry: каждый треугольник связан с индексами трех вершин.
Таким образом данный атрибут хранит индекс каждой вершины каждой треугольной грани.
Если этот атрибут не установлен, визуализатор (рендерер) полагает, что каждая из трех смежных позиций представляет отдельный треугольник.
Значением по умолчанию является null..isBufferGeometry
Используется для проверки, является ли данный класс и производные от него буферными геометриями (BufferGeometry). Значением по умолчанию является true.
Это свойство нельзя изменять, поскольку оно используется для оптимизации внутри three.js..morphAttributes
Хеш-карта BufferAttribute'ов, содержащая сведения о morphTargets (целях морфинга) геометрии..name
Необязательное (дополнительное) имя для данного экземпляра bufferGeometry. Значением по умолчанию является пустая строка.
- универсальный уникальный идентификатор')" onmouseout="hide()">.uuid
- универсальный уникальный идентификатор')" onmouseout="hide()">UUID данного экземпляра объекта. Он присваивается автоматически и не должен изменяться.
Методы
В данном классе возможно применение методов EventDispatcher.
.addAttribute( name,Метод добавляет атрибут в заданную геометрию. Использование этого метода лучше использования свойства атрибутов, так как для ускорения перебора поддерживается внутренний массив атрибутов.
attribute - атрибут')" onmouseout="hide()">attribute )
.addGroup( start, count, materialIndex )Добавляет группу в заданную геометрию; подробности смотрите в свойстве groups.
.applyMatrix(Передает матричное изменение непосредственно в координаты вершин.
matrix - матрица')" onmouseout="hide()">matrix )
.center( )
Центрирует геометрию исходя из ограничительной рамки.Создает клон данной BufferGeometry.
clone - клон, двойник, аналог')" onmouseout="hide()">.clone()
Копирует другую BufferGeometry в данную BufferGeometry.
copy - копия, копировать')" onmouseout="hide()">.copy( bufferGeometry )
.clearGroups( )
Удаляет все группы..computeBoundingBox()
Вычисляет ограничительную рамку геометрии и обновляет атрибут .boundingBox.Ограничительные рамки не рассчитываются по умолчанию. Они должны быть вычислены явно, в противном случае они равны null.
- вычислить ограничительную сферу')" onmouseout="hide()">.computeBoundingSphere()
Вычисляет ограничительную сферу геометрии и обновляет атрибут .boundingSphere.Ограничительные сферы не рассчитываются по умолчанию. Они должны быть вычислены явно, в противном случае они равны null.
- вычислить нормали вершин')" onmouseout="hide()">.computeVertexNormals()
Вычисляет нормали вершин путем усреднения нормалей граней..dispose()
Выводит объект из памяти.Этот метод вызывается когда во время работы приложения нужно удалить определенную bufferGeometry.
Заполняет этот BufferGeometry данными из объекта DirectGeometry.
от англ. слов from direct geometry - из прямой геометрии')" onmouseout="hide()">.fromDirectGeometry ( Geometry )
Примечание: DirectGeometry используется в основном в качестве посредника для конвертирования между Geometry и BufferGeometry.
Заполняет этот BufferGeometry данными из объекта Geometry.
от англ. слов from geometry - из геометрии')" onmouseout="hide()">.fromGeometry ( Geometry )
Возвращает атрибут с указанным именем.
от англ. слов get attribute - получить атрибут')" onmouseout="hide()">.getAttribute( name )
Возвращает .index - индекс буфера.
от англ. слов get index - получить индекс')" onmouseout="hide()">.getIndex( )
от англ. слов look at - смотреть на')" onmouseout="hide()">.lookAt( vector )
vector - вектор, представляющий позицию в "мировом" пространстве, на которую должен "смотреть" геометрический элемент.
Поворачивает геометрию к указанной точке в пространстве. Обычно выполняется как одноразовая операция, и не в процессе цикла.
Для стандартного обращения к сетке в реальном времени используйте метод Object3D.lookAt.merge( bufferGeometry, offset )Объединение с другой BufferGeometry с дополнительным смещением, от которого начинается слияние.
.normalizeNormals( )
Каждый вектор нормали геометрического элемента будет иметь единичную величину. Это исправит освещение геометрических поверхностей.Удаляет атрибут с указанным именем.
от англ. слов remove attribute - удалить атрибут')" onmouseout="hide()">.removeAttribute( name )
Поворот геометрии вокруг оси X. Обычно выполняется как одноразовая операция, и не в процессе цикла.
rotate X - поворот (по оси) X')" onmouseout="hide()">rotateX( radians )
Для обычного поворота сетки (mesh) в реальном времени используйте свойство Object3D.rotation.
Поворот геометрии вокруг оси Y. Обычно выполняется как одноразовая операция, и не в процессе цикла.
rotate Y - поворот (по оси) Y')" onmouseout="hide()">rotateY( radians )
Для обычного поворота сетки (mesh) в реальном времени используйте свойство Object3D.rotation.
Поворот геометрии вокруг оси Z. Обычно выполняется как одноразовая операция, и не в процессе цикла.
rotate Z - поворот (по оси) Z')" onmouseout="hide()">rotateZ( radians )
Для обычного поворота сетки (mesh) в реальном времени используйте свойство Object3D.rotation.
Масштабирует данные геометрии. Обычно выполняется как одноразовая операция, и не в процессе цикла.
scale - масштаб')" onmouseout="hide()">scale( x, y, z )
Для обычного масштабирования сетки (mesh) в реальном времени используйте свойство Object3D.scale.
.setIndex(Устанавливает .index - индекс буфера.
index - индекс')" onmouseout="hide()">index )
.setDrawRange( start, count )Устанавливает значение свойства буфера .drawRange. Подробнее смотрите в описании этого свойства.
Устанавливает атрибуты из Object3D для данной BufferGeometry.
set from object - установить из объекта')" onmouseout="hide()">.setFromObject( object )
Устанавливает атрибуты данной BufferGeometry из массива точек.
set from points - установить из точек')" onmouseout="hide()">.setFromPoints( points )
Notation, — то есть, в текстовый формат описания
объекта, основанный на JavaScript')" onmouseout="hide()">.toJSON( )
Возвращает необработанное представление объекта BufferGeometry.Возвращает неиндексированную версию индексированной BufferGeometry.
to non indexed - в неиндексированном (виде)')" onmouseout="hide()">.toNonIndexed( )
Перевод (смещение) координат геометрии. Обычно выполняется как одноразовая операция, и не в процессе цикла.
translate - перевод, перенос, перемещение')" onmouseout="hide()">.translate ( x, y, z )
Для обычного перевода координат сетки (mesh) в реальном времени используйте свойство Object3D.position.
Обновляет для данной BufferGeometry атрибуты из Object3D.
update from object - обновить из объекта')" onmouseout="hide()">.updateFromObject ( object )
Исходники
Clock
Объект для отслеживания времени. Он использует метод performance.now(), если такая возможность имеется, в противном случае он обращается к менее точному методу Date.now(). Вот описание методов performance.now() и Date.now() на русском языке.Конструктор
Clock( autoStart )
autoStart
— определяет, будет ли отсчет времени запускаться автоматически, (дополнительный, необязательный аргумент). Значением по умолчанию является true.
Свойства
autoStart
Если значение свойства установлено как true, при первом вызове обновления автоматически запускается отсчет времени. Значением по умолчанию является true..startTime
Здесь хранится время последнего вызова метода start.
Если отсчет времени запущен, то в этом свойстве хранится время начала отсчета..oldTime
Это свойство хранит время последнего вызова методов start, getElapsedTime или getDelta..elapsedTime
Свойство отслеживает полное время работы часов (отсчет всего времени)..running
Данное свойство отслеживает, запущены часы или нет.Методы
.start()
Запускает отсчет времени. Также устанавливает значения свойств startTime и oldTime в текущее время,
обнуляет значение свойства elapsedTime и устанавливает значение свойства running как true..stop()
Останавливает отсчет времени и устанавливает значение свойства oldTime на текущее время..getElapsedTime()
Метод получает секунды, прошедшие после запуска отсчета времени и устанавливает значение свойства oldTime на текущее время.Если отсчет времени не запущен, а значение свойства autoStart установлено как true, также запускает отсчет времени.
.getDelta()
Метод получает секунды, прошедшие после установки значения свойства oldTime и устанавливает значение oldTime на текущее время.Если отсчет времени не запущен, а значение свойства autoStart установлено как true, также запускает отсчет времени.
Исходники
DirectGeometry
Данный класс используется внутриthree.js для конвертирования из Geometry в BufferGeometry.Конструктор
DirectGeometry()Создает новую DirectGeometry.
Свойства
.id
Уникальное число для данного экземпляра DirectGeometry..name
Дополнительное, необязательное имя. Значением по умолчанию является пустая строка..type
Строка 'DirectGeometry'..indices
Инициализируется как пустой массив, заполняется методом .fromGeometry()..vertices
Инициализируется как пустой массив, заполняется методом .fromGeometry().
в данной ее точке - прямая, проходящая через эту точку и перпендикулярная к
касательной прямой (касательной плоскости) в этой точке кривой (поверхности).
Плоская гладкая кривая имеет в каждой точке единственную нормаль,
расположенную в плоскости кривой.')" onmouseout="hide()">.normals
Инициализируется как пустой массив, заполняется методом .fromGeometry( )..colors
Инициализируется как пустой массив, заполняется методом .fromGeometry( ).
буква s означает, что координаты во множественном числе')" onmouseout="hide()">.uvs
Инициализируется как пустой массив, заполняется методом .fromGeometry().
Примечание переводчика: UV это текстурные координаты, соответствующие координатам на поверхности трёхмерного объекта (X, Y, Z).
Буквы «U», «V» обозначают оси двумерной текстуры, потому что «X», «Y» и «Z» уже используются для обозначения осей 3D-объекта в пространстве модели. Значения U и V обычно изменяются от 0 до 1.
буква s означает, что координаты во множественном числе')" onmouseout="hide()">.uvs2
Инициализируется как пустой массив, заполняется методом .fromGeometry()..groups
Инициализируется как пустой массив, заполняется методом .fromGeometry().
- цели морфинга (трансформации)')" onmouseout="hide()">.morphTargets
Инициализируется как пустой массив, заполняется методом .fromGeometry().
Примечание переводчика: морфинг (англ. morphing, трансформация) — технология в компьютерной анимации, визуальный эффект, создающий впечатление плавной трансформации одного объекта в другой.
Цели морфинга - это набор последовательных изменений объекта. Исходный объект, зачастую называется затравочным (seed object).
.skinWeights
Инициализируется как пустой массив, заполняется методом .fromGeometry().
Примечание переводчика: морфинг.
.skinIndices
Инициализируется как пустой массив, заполняется методом .fromGeometry().Ограничительная рамка для bufferGeometry, которую можно рассчитать с помощью метода computeBoundingBox. Значением по умолчанию является null.
от англ. слов bounding box
- ограничительная рамка')" onmouseout="hide()">.boundingBox
Ограничительная сфера для bufferGeometry, которую можно рассчитать с помощью метода computeBoundingSphere. Значением по умолчанию является null.
от англ. слов bounding sphere
- ограничительная сфера')" onmouseout="hide()">.boundingSphere
- вершины, которые нужно обновить')" onmouseout="hide()">.verticesNeedUpdate
Значением по умолчанию является false.
- нормали, которые нужно обновить')" onmouseout="hide()">.normalsNeedUpdate
Значением по умолчанию является false.
- цвета, которые нужно обновить')" onmouseout="hide()">.colorsNeedUpdate
Значением по умолчанию является false.
- текстурные координаты, которые нужно обновить')" onmouseout="hide()">.uvsNeedUpdate
Значением по умолчанию является false.
- группы, которые нужно обновить')" onmouseout="hide()">.groupsNeedUpdate
Значением по умолчанию является false.Методы
В данном классе возможно применение методов EventDispatcher.
- вычисление ограничивающей рамки')" onmouseout="hide()">.computeBoundingBox( )
Смотрите Geometry.computeBoundingBox.
- вычисление ограничивающей сферы')" onmouseout="hide()">.computeBoundingSphere( )
Смотрите Geometry.computeBoundingSphere..computeGroups( geometry )Вычисляет части геометрии с разными materialIndex. Смотрите BufferGeometry.groups.
.dispose( )
Удаляет объект из памяти. Этот метод вызывается, если во время работы приложения нужно удалить directGeometry..fromGeometry( geometry )Переход на экземпляр Geometry для конвертирования.
Исходники
EventDispatcher
События JavaScript для настраиваемых объектов.EventDispatcher на Гитхабе.
Пример
// Adding events to a custom object
// Добавляем события в пользовательский объект
var Car = function () {
this.start = function () {
this.dispatchEvent( { type: 'start', message: 'vroom vroom!' } );
};
};
// Mixin the EventDispatcher.prototype with the custom object prototype
// Объединяем EventDispatcher.prototype с прототипом пользовательского объекта
Object.assign( Car.prototype, EventDispatcher.prototype );
// Using events with the custom object
// Использование событий с пользовательским объектом
var car = new Car();
car.addEventListener( 'start', function ( event ) {
alert( event.message );
} );
car.start();Конструктор
EventDispatcher()
Создает объект EventDispatcher.Методы
- добавить приемник событий')" onmouseout="hide()">.addEventListener( type, listener )
type - тип принимаемого события.
listener - функция, вызываемая при запуске события.
Добавляет приемник к типу события.
- имеется приемник событий')" onmouseout="hide()">hasEventListener( type, listener )
type - тип принимаемого события.
listener - функция, вызываемая при запуске события.
Проверяет, добавлен ли приемник к типу события.
- удалить приемник событий')" onmouseout="hide()">removeEventListenerremove( type, listener )
type - тип приемника удаляемого события.
listener - функция удаляемого приемника.
Удаляет приемник с типом события.dispatchEvent( event )
event - запускаемое событие.
Запускает тип события.Исходники
Face3
Треугольная грань, используемая в Geometry. Грани создаются автоматически для всех стандартных типов геометрии, однако, если строится нестандартная геометрия, их придется создавать вручную.Пример
var material = new THREE.MeshStandardMaterial( { color : 0x00cc00 } );
// create a triangular geometry
// создадим геометрию треугольника
var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( -50, -50, 0 ) );
geometry.vertices.push( new THREE.Vector3( 50, -50, 0 ) );
geometry.vertices.push( new THREE.Vector3( 50, 50, 0 ) );
// create a new face using vertices 0, 1, 2
// создаем новую грань, используя вершины 0, 1, 2
var normal = new THREE.Vector3( 0, 1, 0 ); // optional (необязательно)
var color = new THREE.Color( 0xffaa00 ); // optional (необязательно)
var materialIndex = 0; // optional (необязательно)
var face = new THREE.Face3( 0, 1, 2, normal, color, materialIndex );
// add the face to the geometry's faces array
// добавляем грань к массиву граней геометрии
geometry.faces.push( face );
// the face normals and vertex normals can be calculated automatically if not supplied above
// если выше не предоставлено, то нормали граней и вершин могут вычисляться автоматически
geometry.computeFaceNormals();
geometry.computeVertexNormals();
scene.add( new THREE.Mesh( geometry, material ) );
Другие примеры:
ubiquity / test svg / sandbox WebGL / exporter / obj WebGL / shaders / vector
Конструктор
Face3(
- ячейки сетки-арматуры, из которой состоят все грани геометрического элемента')" onmouseout="hide()">a,
- ячейки сетки-арматуры, из которой состоят все грани геометрического элемента')" onmouseout="hide()">b,
- ячейки сетки-арматуры, из которой состоят все грани геометрического элемента')" onmouseout="hide()">c,
normal - нормаль')" onmouseout="hide()">normal, color, materialIndex )
a — индекс вершины A.
b — индекс вершины B.
c — индекс вершины C.
normal — нормаль грани или массив нормалей вершин.
color — цвет грани или массив цветов вершин.
materialIndex — это индекс массива материалов, связанного с данной гранью (дополнительный, необязательный аргумент).
Свойства
- ячейки сетки-арматуры, из которой состоят все грани геометрического элемента')" onmouseout="hide()">.a
Индекс вершины A.
- ячейки сетки-арматуры, из которой состоят все грани геометрического элемента')" onmouseout="hide()">.b
Индекс вершины B.
- ячейки сетки-арматуры, из которой состоят все грани геометрического элемента')" onmouseout="hide()">.c
Индекс вершины C.Нормаль грани - вектор, представляющий направление данной грани (Face3). При автоматическом вычислении (используется метод Geometry.computeFaceNormals), это будет нормализованное векторное произведение двух сторон треугольника. Значением по умолчанию является (0, 0, 0).
normal - нормаль')" onmouseout="hide()">.normal
Цвет грани - при этом должно использоваться свойство материала vertexColors, установленное как THREE.FaceColors.
color - цвет')" onmouseout="hide()">.color
.vertexNormals
Массив из 3 нормалей вершин..vertexColors
Массив из 3 цветов вершин - при этом должно использоваться свойство материала vertexColors,
установленное как THREE.VertexColors..materialIndex
Индекс материала (показывает индекс в массиве материалов, связанном с гранью). Значение по умолчанию равно 0.Методы
Создает новый клон объекта Face3.
clone - клонировать')" onmouseout="hide()">.clone( )
Копирует в эту треугольную грань параметры другой треугольной грани (переданной в аргументе face3).
copy - копировать')" onmouseout="hide()">.copy( face3 )
Исходники
Geometry
Основной класс для всех геометрий (но не для BufferGeometries). Также его можно использовать напрямую для построения собственных и нестандартных геометрий.С Geometry работать легче, чем с BufferGeometries, так как она хранит атрибуты, такие как вершины, грани, цвета и тому подобное непосредственно у себя (а не в буферах), хотя она, как правило, работает медленней.
Пример
var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( -10, 10, 0 ), new THREE.Vector3( -10, -10, 0 ), new THREE.Vector3( 10, -10, 0 ) );
geometry.faces.push( new THREE.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, WebGL / morphNormals.
Конструктор
Geometry()Конструктор не принимает аргументов.
Свойства
.boundingBoxОграничительная рамка для Geometry, которую можно вычислить методом computeBoundingBox. Значением по умолчанию является null.
.boundingSphereОграничительная сфера для Geometry, которую можно вычислить методом computeBoundingSphere. Значением по умолчанию является null.
.colors
Массив значений цвета вершин, в соответствии с их числом и порядком.Это свойство используется классами Points и Line, а также любыми классами, производными от их, такими как LineSegments и различными вспомогательными элементами. Сетки взамен этого свойства используют Face3.vertexColors.
Чтобы задать обновление этого массива, нужно установить свойство Geometry.colorsNeedUpdate как true.
.faces
Массив граней.Массив граней описывает, как для формирования граней соединяется каждая вершина модели. Кроме того, в нем содержится информация о цвете и нормалях граней и вершин.
Чтобы задать обновление этого массива, нужно установить свойство elementsNeedUpdate как true.
.faceVertexUvs
Массив слоев UV-координат грани, используемый для элементе в соответствующем порядке, в данном
случае, изображение накладывается по
координатам UV')" onmouseout="hide()">картирования текстур на геометрическом элементе. Каждый UV-слой является массивом UV-координат, соответствующих порядку и количеству вершин в гранях.
Вот эта статья Википедии о UV-преобразовании на русском языке.
Чтобы задать обновление этого массива, нужно установить свойство uvsNeedUpdate как true.
.id
Уникальный номер для данного экземпляра геометрии..isGeometry
Используется для проверки, является ли данный класс и его производные геометриями. Значением по умолчанию является true.Не изменяйте это свойство, так как оно используется для оптимизации внутри three.js.
.lineDistances
Массив содержит расстояния между вершинами для геометрий Line. Они нужны для правильной визуализации LineSegments / LineDashedMaterial.
Линейные расстояния могут быть сгенерированы автоматически методом computeLineDistances..morphTargets
Массив из целей морфинга. Каждая цель морфинга является объектом Javascript:
{ name: "targetName", vertices: [ new THREE.Vector3(), ... ] }
Вершины морфинга соответствуют по порядку и количеству основным вершинам..morphNormals
Массив нормалей морфинга. Нормали морфинга имеют структуру подобную целям морфинга, каждый набор нормалей является объектом Javascript:
morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] }
Смотрите пример WebGL / morphNormals..name
Имя данной геометрии. Значением по умолчанию является пустая строка ("")..skinWeights
При работе с SkinnedMesh, каждая вершина может иметь до 4 костей, влияющих на неё.
Свойство skinWeights - это массив значений веса, который соответствует порядку вершин данной геометрии. Так например, первый skinWeight будет соответствовать первой вершине геометрического элемента.
Поскольку каждая вершина может быть изменена 4 костями, для представления веса оболочки каждой вершины используется четырехмерный вектор.Значения вектора обычно должны быть в диапазоне между 0 и 1. Например при установке значения равным 0, преобразование кости не будет иметь никакого эффекта. Если установить значение равным 0.5, преобразование будет иметь эффект в 50%. При установке 1, будет влияние на 100%. Если существует только одна кость, связанная с конкретной вершиной, нужно побеспокоиться только о первом компоненте приданного вектора, остальные можно проигнорировать и установить равными 0.
.skinIndices
Точно также как у свойства skinWeights, значения свойста skinIndices соответствуют вершинам геометрического элемента. Каждая вершина может иметь до четырех вершин, связанных с ней.
Поэтому, если посмотреть на первую вершину (vertex) и первый индекс оболочки (skinIndex), то они расскажут о костях, связанный с данной вершиной.
Например предположим, первая вершина имеет значение ( 10.05, 30.10, 12.12 ), значением первого индекса оболочки может быть ( 10, 2, 0, 0 ), а первый вес оболочки имеет значение ( 0.8, 0.2, 0, 0 ).
В результате это будет воспринято первой вершиной и затем костью mesh.bones[10] и к ней применено 80% воздействия. Затем это будет воспринято костью skeleton.bones[2] и к ней применено 20% воздействия.
Последующие два значения имеют вес равный 0, так что они не будут оказывать никакого влияния.Код подобного примера может выглядеть так:
// e.g. (например) geometry.skinIndices[15] = new THREE.Vector4( 0, 5, 9, 0 ); geometry.skinWeights[15] = new THREE.Vector4( 0.2, 0.5, 0.3, 0 );
// corresponds with the following vertex // соответствует следующей вершине geometry.vertices[15];
// these bones will be used like so: // эти кости будут использоваться вот так: skeleton.bones[0]; // weight of 0.2 (вес 0.2) skeleton.bones[5]; // weight of 0.5 (вес 0.5) skeleton.bones[9]; // weight of 0.3 (вес 0.3) skeleton.bones[10]; // weight of 0 (вес 0)
- универсальный уникальный идентификатор')" onmouseout="hide()">.uuid
UUID данного экземпляра объекта.
Вот статья Википедии о UUID на русском языке. Он присваивается автоматически и не должен редактироваться..vertices
Массив вершин.Массив вершин содержит положение каждой вершины геометрического элемента. Для подачи сигнала по обновлению данного массива, значение свойства verticesNeedUpdate должно быть установлено как true.
.verticesNeedUpdate
Установите значение свойства как true, если массив вершин был изменен..elementsNeedUpdate
Установите значение свойства как true, если массив граней был изменен..uvsNeedUpdate
Установите значение свойства как true, если массив UV координат был обновлен..normalsNeedUpdate
Установите значение свойства как true, если массив нормалей был изменен..colorsNeedUpdate
Установите значение свойства как true, если массив цвета или массив цвета граней был изменен..groupsNeedUpdate
Установите значение свойства как true, если был изменен индекс материала треугольной грани.
обновление линейных расстояний (между
вершинами для геометрий Line)')" onmouseout="hide()">.lineDistancesNeedUpdate
Установите значение свойства как true, если массив линейных расстояний был изменен.Методы
В данном классе возможно применение методов EventDispatcher..applyMatrix(Метод передает изменение матрицы непосредственно в координаты вершин.
matrix - матрица')" onmouseout="hide()">matrix )
.center( )
Метод центрирует геометрический элемент относительно ограничительной рамки..clone( )Создает новый клон Geometry.
Этот метод копирует только вершины, грани и UV-координаты. Он не копирует все остальные свойства геометрического элемента.
.computeBoundingBox( )
Метод рассчитывает ограничительную рамку вокруг геометрического элемента, обновляя атрибут boundingBox..computeBoundingSphere( )
Метод рассчитывает ограничительную сферу вокруг геометрического элемента, обновляя атрибут boundingSphere.По умолчанию, ни ограничительные рамки, ни ограничительные сферы не рассчитываются. Они должны рассчитываться явно, в противном случае значения этих свойств равно null.
.computeFaceNormals( )
Метод вычисляет нормали граней..computeFlatVertexNormals( )
Метод вычисляет нормали вершин плоскости. Устанавливает вершинную нормаль любой вершины каждой грани такой же, как нормаль грани..computeLineDistances( )
Метод вычисляет расстояния между вершинами..computeMorphNormals( )
Метод вычисляет нормали морфинга..computeVertexNormals( areaWeighted )
areaWeighted
- если установлено значение true, то вклад каждой нормали грани к нормали вершины определяется по площади грани. Значением по умолчанию является true.
Метод рассчитывает нормали вершин путем усреднения нормалей граней.Метод копирует вершины, грани и UV-координаты в данную геометрию. Никакие другие свойства не копируются.
copy - копировать')" onmouseout="hide()">.copy( geometry )
.dispose( )
Метод удаляет объект из памяти.Не забывайте вызывать этот метод при удалении геометрического элемента, так как он может привести к утечке памяти.
Метод конвертирует BufferGeometry в Geometry.
from buffer geometry - из буферной геометрии')" onmouseout="hide()">.fromBufferGeometry( geometry )
look at - смотреть на')" onmouseout="hide()">.lookAt(
vector - вектор')" onmouseout="hide()">vector )
vector - вектор, представляющий позицию в "мировом" пространстве, на которую должен "смотреть" геометрический элемент.
Метод поворачивает этот геометрический элемент к указанной точке пространства.
Обычно выполняется как однократная операция, но не во время цикла визуализации.Для стандартного обращения к сетке в реальном времени используйте метод Object3D.lookAt.
.merge(Метод объединяет два геометрических элемента или геометрический элемент и геометрический элемент из объекта (используя преобразование объекта).
geometry - геометрический элемент')" onmouseout="hide()">geometry,
matrix - матрица')" onmouseout="hide()">matrix, materialIndexOffset )
.mergeMesh( mesh )Метод объединяет геометрию сетки (mesh) с данным геометрическим элементом, также применяется трансформация сетки.
.mergeVertices( )
При помощи хеш-таблицы проводится проверка вершин на дубликаты.Продублированные вершины удаляются, а вершины граней обновляются.
.normalize( )
Метод нормализует геометрический элемент.Делает центрирование данного геометрического элемента и помещает его в ограничивающую сферу радиусом 1.0.
Поворот геометрического элемента вокруг оси X. Обычно он выполняется как однократная операция, но не во время цикла визуализации.
rotate X - повернуть вокруг оси X')" onmouseout="hide()">.rotateX( radians )
Для стандартного поворота сетки (mesh) в реальном времени используйте метод rotation.
Поворот геометрического элемента вокруг оси Y. Обычно он выполняется как однократная операция, но не во время цикла визуализации.
rotate X - повернуть вокруг оси Y')" onmouseout="hide()">.rotateY( radians )
Для стандартного поворота сетки (mesh) в реальном времени используйте метод rotation.
Поворот геометрического элемента вокруг оси Z. Обычно он выполняется как однократная операция, но не во время цикла визуализации.
rotate X - повернуть вокруг оси Z')" onmouseout="hide()">.rotateZ( radians )
Для стандартного поворота сетки (mesh) в реальном времени используйте метод rotation.
Метод устанавливает вершины данного геометрического элемента из массива точек.
set from points - установить из точек')" onmouseout="hide()">.setFromPoints( points )
.sortFacesByMaterialIndex( )
Метод сортирует массив граней в соответствии с индексом материала. Для сложных геометрических элементов с несколкими материалами, это может привести к снижению вызовов прорисовки и улучшению производительности.Метод масштабирует данные геометрического элемента. Обычно выполняется как однократная операция, но не во время цикла визуализации.
scale - масштаб')" onmouseout="hide()">.scale( x, y, z )
Для обычного масштабирования сетки (mesh) в реальном времени используйте Object3D.scale.
Notation, — то есть, в текстовый формат описания
объекта, основанный на JavaScript')" onmouseout="hide()">.toJSON( )
Метод конвертирует геометрический элемент в JSON формат.Метод переставляет геометрический элемент. Обычно выполняется как однократная операция, но не во время цикла визуализации.
translate - перевод, перенос')" onmouseout="hide()">.translate( x, y, z )
Для обычного переноса сетки (mesh) в реальном времени используйте Object3D.position.
Исходники
BufferAttribute →
InstancedBufferAttribute
В отличие от слова «создание», применяется не к объекту, а к классу.
То есть, говорят: (в виртуальной среде) создать экземпляр класса
или, другими словами, инстанцировать класс.')" onmouseout="hide()">Инстанцированная версия BufferAttribute (то есть, это экземпляр класса BufferAttribute). An instanced version of BufferAttribute.
Конструктор
InstancedBufferAttribute( array, itemSize, meshPerAttribute )
Свойства
Смотрите наследуемые свойства в описании BufferAttribute..meshPerAttribute
Значение по умолчанию равно 1.
- является инстанцированным буферным атрибутом')" onmouseout="hide()">.isInstancedBufferAttribute
Значение по умолчанию равно true.Методы
Смотрите наследуемые методы в описании BufferAttribute.Исходники
BufferGeometry →
InstancedBufferGeometry
В отличие от слова «создание», применяется не к объекту, а к классу.
То есть, говорят: (в виртуальной среде) создать экземпляр класса
или, другими словами, инстанцировать класс.')" onmouseout="hide()">Инстанцированная версия BufferGeometry (то есть, это экземпляр класса BufferGeometry).
Конструктор
InstancedBufferGeometry( )
Свойства
Смотрите наследуемые свойства в описании BufferGeometry.
- максимальное число инстанцированных экземпляров')" onmouseout="hide()">.maxInstancedCount
Значение по умолчанию равно undefined, т.е. не определено.
- является инстанцированной буферной геометрией')" onmouseout="hide()">.isInstancedBufferGeometry
Значение по умолчанию равно true.Методы
Смотрите наследуемые методы в описании BufferGeometry..addGroup( start, count, materialIndex )
Исходники
InterleavedBuffer →
InstancedInterleavedBuffer
Инстанцированная версия InterleavedBuffer.Конструктор
InstancedInterleavedBuffer( array, itemSize, meshPerAttribute )
Свойства
Смотрите наследуемые свойства в описании InterleavedBuffer..meshPerAttribute
Значение по умолчанию равно 1.
- является инстанцированным, чередующимся буфером')" onmouseout="hide()">.isInstancedInterleavedBuffer
Значение по умолчанию равно true.Методы
Смотрите наследуемые методы в описании InterleavedBuffer.Исходники
InterleavedBuffer
Слово "Interleaved" (т.е. "с чередованием") в названии означает, что несколько атрибутов (возможно разных типов, например, position - положение, normal - нормаль, uv - UV-координаты, color - цвет) упаковываются в один-единственный буфер массива.Введение в массивы с чередованием можно найти здесь: Interleaved array basics (Основы массива с чередованием).
Пример
webgl / buffergeometry / points / interleaved
Конструктор
InterleavedBuffer( array, stride )
array -- типизированный массив с общим буфером. Содержит данные геометрического элемента.
stride -- количество элементов типизированного массива, приходящихся на одну вершину.
Свойства
.array
Типизированный массив с общим буфером. Содержит данные геометрического элемента..stride
Количество элементов типизированного массива, приходящихся на одну вершину..count
Указывает общее число элементов в массиве..dynamic
Значение по умолчанию равно false..updateRange
Объект, содержащий offset (смещение) и count (счет)..updateRange.offset
Значение по умолчанию равно 0..updateRange.count
Значение по умолчанию равно -1..version
Номер версии, увеличивающийся каждый раз, когда свойство needsUpdate установливается как true..isInterleavedBuffer
Значение по умолчанию равно true..needsUpdate
Значение по умолчанию равно false. Установка этого свойства как true увеличивает значение свойства version.Методы
.setArray( array )
array - должен быть типизированным массивом.
Устанавливает в свойство dynamic значение, приведенное в аргументе value.
set dynamic - установить свойство dynamic')" onmouseout="hide()">.setDynamic( value )
Копирует InterleavedBuffer, приведенный в аргументе source, в данный InterleavedBuffer.
copy - копировать')" onmouseout="hide()">.copy(
source - исходник, источник')" onmouseout="hide()">source )
Метод копирует данные из index2 из массива по имени attribute')" onmouseout="hide()">attribute[index2] в array с индексом index1')" onmouseout="hide()">array[index1].
copy at - копировать в')" onmouseout="hide()">.copyAt( index1, attribute, index2 )
set - установить')" onmouseout="hide()">.set( value, offset )
value - исходный (типизированный) массив.
offset
- смещение в целевом массиве, с которого начинается запись значений из исходного массива. Значение по умолчанию равно 0.
Сохраняет несколько значений в буфер, считывая входные значения из указанного массива.Создает клон данного InterleavedBuffer.
clone - клон, клонировать')" onmouseout="hide()">.clone( )
Исходники
InterleavedBufferAttribute
Конструктор
InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized )
Свойства
Экземпляр InterleavedBuffer переданный в конструкторе.
data - данные')" onmouseout="hide()">.data
.array
Значение data.array..count
Значение data.count.
Если буфер хранит трехкомпонентный элемент (такой как position - положение, normal - нормаль, или color - цвет), то здесь будет подсчитываться число сохранённых подобных элементов..itemSize
Количество значений, составляющих каждый элемент..offset
Смещение в базовом буфере массива, с которого начинается элемент..normalized
Значение по умолчанию равно true..isInterleavedBufferAttribute
Значение по умолчанию равно true.Методы
.getX( index )
Метод возвращает компонент x элемента по индексу, приведенному в аргументе index..getY( index )
Метод возвращает компонент y элемента по индексу, приведенному в аргументе index..getZ( index )
Метод возвращает компонент z элемента по индексу, приведенному в аргументе index..getW( index )
Метод возвращает компонент w элемента по индексу, приведенному в аргументе index..setX( index, x )
Метод устанавливает компонент x элемента по индексу, приведенному в аргументе index..setY( index, y )
Метод устанавливает компонент y элемента по индексу, приведенному в аргументе index..setZ( index, z )
Метод устанавливает компонент z элемента по индексу, приведенному в аргументе index..setW( index, w )
Метод устанавливает компонент w элемента по индексу, приведенному в аргументе index..setXY( index, x, y )
Метод устанавливает компоненты x и y элемента по индексу, приведенному в аргументе index..setXYZ( index, x, y, z )
Метод устанавливает компоненты x, y и z элемента по индексу, приведенному в аргументе index..setXYZW( index, x, y, z, w )
Метод устанавливает компоненты x, y, z и w элемента по индексу, приведенному в аргументе index.Исходники
Layers
Объект Layers назначает для Object3D 1 или больше (до 32) слоев, пронумерованных от 0 до 31 - внутренне слои хранятся в виде битовой маски (вот эта статья на русском), и по умолчанию все объекты Object3D имеют принадлежность к слою 0.Это можно использовать для управления видимостью - чтобы быть видимым, при визуализации представления этой камеры, объект должен иметь общий слой с камерой.
Все классы, которые наследуют от Object3D имеют свойство layers, являющееся экземпляром данного класса.
Конструктор
Layers()Создает новый объект Layers, принадлежность которого установлена изначально на слой 0.
Свойства
.mask
Битовая маска, в которой хранится к каким из 32 слоев принадлежит этот объект в данный момент.Методы
.disable( layer )
layer - целое число от 0 до 31.
Метод удаляет принадлежность объекта к данному слою (указанному в layer)..enable( layer )
layer - целое число от 0 до 31.
Метод добавляет принадлежность объекта к данному слою (указанному в layer).set( layer )
layer - целое число от 0 до 31.
Метод устанавливает принадлежность объекта к указанному слою (в аргументе layer) и удаляет принадлежность ко всем другим слоям..test( layers )
layers - объект Layers.
Метод возвращает значение true, если этот и переданный объект (в аргументе layers) принадлежать к одному и тому же набору слоев..toggle( layer )
layer - целое число от 0 до 31.
Метод переключает принадлежность к слою.Исходники
Object3D
Object3D является базовым классом для большинства объектов three.js и предоставляет набор свойств и методов для управления объектами в трехмерном пространстве.Обратите внимание, что имеется возможность для группировки объектов с помощью метода .add( object ), который добавляет объект в качестве дочернего, но все же для этого лучше использовать класс Group.
Конструктор
Object3D()Конструктор не принимает аргументов.
Свойства
.castShadow
Будет ли объект представлен в теневой карте. Значением по умолчанию является false.Массив дочерних объектов. Для информации о группировке объектов вручную, смотрите Group.
children - дети, здесь имеются ввиду дочерние объекты,
т.е. объекты, являющиеся производными от объекта-родителя')" onmouseout="hide()">.children
отбраковка (объектов вне) усеченного
конуса видимости (камеры)')" onmouseout="hide()">.frustumCulled
При установке данного свойства как true перед отображением объекта в каждом кадре будет проверяться, входит ли он в зону видимости камеры (в виде усеченного конуса).
В противном случае, объект будет обрабатываться визуализатором в каждом кадре, даже если он невидим. Значением по умолчанию является true..id
Уникальное число для данного экземпляра объекта, свойство только для чтения..isObject
Используется для проверки, является ли этот класс или классы, производные от него, трехмерными объектами (Object3D). Значением по умолчанию является true.Это свойство нельзя изменять, так как оно используется для оптимизации внутри three.js.
Принадлежность к какому-либо слою. Объект отображается только в том случае, если имеет хотя бы один слой, используемый совместно с камерой.
layers - слои, уровни')" onmouseout="hide()">.layers
Матрица локальных преобразований.
matrix - матрица')" onmouseout="hide()">.matrix
.matrixAutoUpdate
При установке данного свойства как true, рассчитывается матрица положения (поворот или кватернион) и масштаб каждого кадра, а также пересчитывается значение свойства matrixWorld.
Значением по умолчанию является Object3D.DefaultMatrixAutoUpdate (true).Глобальное трансформация объекта. Если Object3D не имеет родителя, то она идентична матрице локального преобразования.
matrix world - матрица мира')" onmouseout="hide()">.matrixWorld
.matrixWorldNeedsUpdate
При установке данного свойства как true, вычисляется matrixWorld в данном кадре и сбрасывается значение этого свойства в false. Значением по умолчанию является false.Это свойство передается шейдеру и используется для вычисления положения объекта.
model view matrix - матрица вида (представления) модели')" onmouseout="hide()">.modelViewMatrix
.name
Дополнительное, необязательное название объекта (оно может быть и не уникальным). Значением по умолчанию является пустая строка ("").Это свойство передается шейдеру и используется для расчета освещения объекта. Представляет собой транспонирование инверсии вложенной верхней левой матрицы 3×3 матрицы modelViewMatrix данного объекта.
normal matrix - матрица нормалей')" onmouseout="hide()">.normalMatrix
Причиной применения такой особой матрицы является то, что простое использование modelViewMatrix может привести к неединичной длине нормалей (при масштабировании) или к неперпендикулярному направлению (при неравномерном масштабировании по осям).
С другой стороны, переставляемая часть modelViewMatrix не имеет отношения к вычислению нормалей. Так что достаточно .трехмерной матрицы.
.onAfterRender
Дополнительная, необязательная функция обратного вызова, которая выполняется сразу после визуализации Object3D.
Эта функция вызывается со следующими параметрами: renderer,
scene, camera,
geometry, material,
group..onBeforeRender
Дополнительная, необязательная функция обратного вызова, которая выполняется непосредственно перед визуализацией Object3D.
Эта функция вызывается со следующими параметрами: renderer,
scene, camera,
geometry, material,
group.Родительский объект в графе сцены. Вот статья Википедии «Граф сцены» на русском языке.
parent - родитель')" onmouseout="hide()">.parent
Трехмерный вектор, представляющий локальную позицию объекта. Значение по умолчанию равно (0, 0, 0).
position - позиция')" onmouseout="hide()">.position
Локальный поворот объекта в виде кватерниона.
quaternion - кватернион')" onmouseout="hide()">.quaternion
.receiveShadow
Свойство определяет, будет ли материал получать тени. Значением по умолчанию является false..renderOrder
Значение этого свойства позволяет переопределить порядок отображения графических объектов на сцене, хотя сортировка прозрачных и непрозрачных объектов остается раздельной.
Сортировка происходит от самого низкого до самого высокого значения renderOrder. Значением по умолчанию является 0.Локальный поворот объекта (смотрите статью «Euler angles»), в радианах.
rotation - вращение, поворот')" onmouseout="hide()">.rotation
Статья «Углы Эйлера» в Википедии на русском языке.
Локальный масштаб объекта. Значением по умолчанию является Vector3( 1, 1, 1 ).
scale - масштаб')" onmouseout="hide()">.scale
Это свойство используется методом lookAt, например для определения ориентации результата.
up - вверх')" onmouseout="hide()">.up
Значением по умолчанию является Object3D.DefaultUp - то есть, ( 0, 1, 0 ).
.userData
Объект, который можно использовать для хранения пользовательских данных об Object3D. Он не должен содержать ссылки на функции, так как они не будут клонированы.
- универсальный уникальный идентификатор')" onmouseout="hide()">.uuid
- универсальный уникальный идентификатор')" onmouseout="hide()">UUID данного экземпляра объекта. Он присваивается автоматически и не должен изменяться.
.visible
Если установлено значение true, объект будет отображен. Значением по умолчанию является true.Статические свойства
Статические свойства и методы устанавливаются для всего класса, а не для экземпляра этого класса. Это означает, что при изменении Object3D.DefaultUp или Object3D.DefaultMatrixAutoUpdate изменятся значения свойств up и matrixAutoUpdate каждого экземпляра Object3D (или производных от него), созданных после внесения изменений (объекты Object3D, уже созданные к этому моменту, не будут затронуты).
Значение по умолчанию направления вверх (свойство up) для объектов, также используемое в качестве положения по умолчанию для DirectionalLight, HemisphereLight и SpotLight (которые создают освещение, направленное сверху вниз).
default up - по умолчанию вверх')" onmouseout="hide()">.DefaultUp
По умолчанию устанавливается как ( 0, 1, 0 ).
Значение по умолчанию для свойства matrixAutoUpdate для вновь созданных объектов Object3D.
default matrix auto update - автоматическое обновление матрицы по умолчанию')" onmouseout="hide()">.DefaultMatrixAutoUpdate
Методы
В данном классе возможно применение методов EventDispatcher..add( object, ... )Метод добавляет заданный объект в качестве дочернего к этому объекту. Можно добавлять произвольное количество объектов.
Посмотрите описание класса Group для получения информации о группировке объектов вручную.
.applyMatrix(Применяет матричное преобразование к объекту и обновляет положение объекта, угол поворота объекта и масштаб объекта.
matrix - матрица')" onmouseout="hide()">matrix )
Примененяет поворот, представленный кватернионом, к объекту.
apply quaternion - применить кватернион')" onmouseout="hide()">.applyQuaternion( quaternion )
clone - клонировать')" onmouseout="hide()">.clone( recursive )
recursive -- если значение установлено как true, то клонируются и потомки объекта. Значением по умолчанию является true.
Возвращает клон данного объекта и опционально клоны всех его потомков.
copy - копировать')" onmouseout="hide()">.copy(
object - объект')" onmouseout="hide()">object, recursive )
recursive -- если значение установлено как true, то клонируются и потомки объекта. Значением по умолчанию является true.
Метод копирует объект, заданный в аргументе object в данный объект.
get object by id - получить объект по идентификатору')" onmouseout="hide()">.getObjectById( id )
id -- уникальное число экземпляра объекта.
Метод проводит поиск среди дочерних элементов объекта и возвращает первый найденный с соответствующим идентификатором.Обратите внимание, что идентификаторы назначаются в хронологическом порядке: 1, 2, 3, ..., увеличиваясь на единицу для каждого нового объекта.
get object by name - получить объект по имени')" onmouseout="hide()">.getObjectByName( name )
name -- строковое значение в соответствии со свойством дочернего элемента Object3D.name.
Метод проводит поиск среди дочерних элементов объекта и возвращает первый найденный с соответствующим именем.Обратите внимание, что для большинства объектов значением свойства name по умолчанию является пустая строка. Так что для того, чтобы этот метод работал, нужно установить их вручную.
get object by property - получить объект по свойству')" onmouseout="hide()">.getObjectByProperty( name, value )
name -- название разыскиваемого свойства.
value -- значение заданного свойства.
Метод проводит поиск среди дочерних элементов объекта и возвращает первое найденное свойство, соответствующее заданному значению.
get world position - получить "мировую" позицию')" onmouseout="hide()">.getWorldPosition(
target - цель')" onmouseout="hide()">target )
target — результат будет скопирован в этот Vector3.
Возвращает вектор, представляющий позицию объекта в "мировом" пространстве.
get world quaternion - получить
кватернион в "мировом"
(пространстве)')" onmouseout="hide()">.getWorldQuaternion(
target - цель')" onmouseout="hide()">target )
target — результат будет скопирован в этот Quaternion.
Возвращает кватернион, представляющий поворот объекта в "мировом" пространстве.
get world scale - получить "мировой" масштаб')" onmouseout="hide()">.getWorldScale(
target - цель')" onmouseout="hide()">target )
target — результат будет скопирован в этот Vector3.
Возвращает вектор коэффициентов масштабирования, примененных к объекту, для каждой оси в "мировом" пространстве.
get world direction - получить "мировое" направление')" onmouseout="hide()">.getWorldDirection(
target - цель')" onmouseout="hide()">target )
target — результат будет скопирован в этот Vector3.
Возвращает вектор, представляющий направление положительной оси координат z в "мировом" пространстве.
local to world - локальные в "мировые"')" onmouseout="hide()">.localToWorld(
vector - вектор')" onmouseout="hide()">vector )
vector - вектор, представляющий позицию в локальном пространстве (в пространстве объекта).
Метод конвертирует вектор из локального пространства в "мировое" пространство..lookAt(
vector - вектор')" onmouseout="hide()">vector ) .lookAt( x, y, z )
vector - вектор, представляющий позицию в "мировом" пространстве.
По желанию, точка может быть представлена координатами x, y и z в "мировом" пространстве.Метод поворачивает объект к заданной точке в "мировом" пространстве.
Этот метод не поддерживает объекты с развернутым и/или перенесенным родительским объектом(ами).
.raycast(Абстрактный (пустой) метод для получения пересечений между брошенным лучом и данным объектом. Такие подклассы, как Mesh, Line и Points применяют этот метод при использовании рейкастинга.
raycaster - излучатель, рейкастер')" onmouseout="hide()">raycaster, intersects )
.remove(Метод удаляет объект как дочерний элемент данного объекта. Может быть удалено произвольное число объектов.
object - объект')" onmouseout="hide()">object, ... )
rotate on axis - повернуть по оси')" onmouseout="hide()">.rotateOnAxis(
axis - ось')" onmouseout="hide()">axis, angle )
axis -- нормализованный вектор в пространстве объекта.
angle -- угол в радианах.
Поворачивает объект по оси в пространстве объекта. Предполагается, что ось нормализована.
rotate on world axis - повернуть по "мировой" оси')" onmouseout="hide()">.rotateOnWorldAxis(
axis - ось')" onmouseout="hide()">axis, angle )
axis -- нормализованный вектор в "мировом" пространстве.
angle -- угол в радианах.
Поворачивает объект по оси в "мировом" пространстве. Предполагается, что ось нормализована. Метод не предполагает поворота родительского объекта..rotateX( rad )
rad - угол поворота, в радианах.
Поворачивает объект вокруг оси x в локальном пространстве..rotateY( rad )
rad - угол поворота, в радианах.
Поворачивает объект вокруг оси y в локальном пространстве..rotateZ( rad )
rad - угол поворота, в радианах.
Поворачивает объект вокруг оси z в локальном пространстве..setRotationFromAxisAngle(
axis - ось')" onmouseout="hide()">axis, angle )
axis -- нормализованный вектор в пространстве объекта.
angle -- угол в радианах.
Вызывает метод setFromAxisAngle( axis - ось')" onmouseout="hide()">axis, angle ) на quaternion.
.setRotationFromEuler(
euler - угол Эйлера')" onmouseout="hide()">euler )
euler -- угол Эйлера, определяющий размер поворота объекта.
Вызывает метод setFromEuler( euler )
на quaternion..setRotationFromMatrix(
m - сокращ. англ. слова matrix - матрица')" onmouseout="hide()">m )
m -- поворот кватерниона по компоненту вращения матрицы.
Вызывает метод setFromRotationMatrix( m )
на quaternion.Обратите внимание на то, что верхняя матрица 3×3 в матрице m - это чистая матрица вращения (т.е. она не масштабирована).
.setRotationFromQuaternion(
q - сокращ. англ. слова quaternion')" onmouseout="hide()">q )
q -- нормализованный кватернион.
Копирует заданный кватернион в quaternion.Конвертирует объект в формат JSON.
Notation, — то есть, в текстовый формат описания
объекта, основанный на JavaScript')" onmouseout="hide()">.toJSON(
q - сокращ. англ. слова quaternion')" onmouseout="hide()">q )
translate on axis - перенос по осям')" onmouseout="hide()">.translateOnAxis(
axis - ось')" onmouseout="hide()">axis, distance )
axis -- нормализованный вектор в пространстве объекта.
distance -- расстояние переноса.
Метод переносит объект на расстояние, указанное в аргументе distance, по осям в пространстве объекта. Предполагается, что оси нормализованы..translateX( distance )Метод переносит объект по оси x на расстояние, указанное в аргументе distance.
.translateY( distance )Метод переносит объект по оси y на расстояние, указанное в аргументе distance.
.translateZ( distance )Метод переносит объект по оси z на расстояние, указанное в аргументе distance.
.traverse( callback )
callback - функция с Object3D в качестве первого аргумента.
Метод выполняет функцию обратного вызова (callback) на данном объекте и всех его потомках..traverseVisible( callback )
callback - функция с Object3D в качестве первого аргумента.
Метод подобен методу traverse, но функция обратного вызова (callback) будет выполняться только для видимых объектов. Потомки невидимых объектов не переносятся..traverseAncestors( callback )
callback - функция с Object3D в качестве первого аргумента.
Метод выполняет функцию обратного вызова (callback) на всех предках данного объекта..updateMatrix( )
Обновление локального преобразования..updateMatrixWorld( force )Обновление глобальных преобразований объекта и его дочерних объектов.
world to local - "мировой" (вектор) к локальному')" onmouseout="hide()">.worldToLocal(
vector - вектор')" onmouseout="hide()">vector )
vector - вектор "мирового" пространства.
Метод обновляет вектор "мирового" пространства на вектор локального пространства.Исходники
Raycaster
Примечание переводчика: Raycasting в переводе на русский - бросание луча (ray - луч, casting - бросание). ... читать далее
Данный класс предназначен для оказания помощи с raycasting. Вот описание рейкастинга в Википедии на русском языке.
Рейкастинг используется для выборки курсором мышки (вычисляет какие из объектов в трехмерном пространстве накрывает курсор мышки) среди других объектов.
This class is designed to assist with raycasting. Raycasting is used for mouse picking (working out what objects in the 3d space the mouse is over) amongst other things.
Этот класс упрощает рейкастинг. Рейкастинг используется для выбора и многого другого.
This class makes raycasting easier. Raycasting is used for picking and more.
Следовательно, raycaster - это тот, кто бросает лучи. В русском языке для перевода слова raycaster есть такие слова как излучатель и облучатель, а для raycasting - излучение, облучение, но прижилась озвучка английский слов - рейкастер, рейкастинг.
В основу рейкастинга положена идея испускать лучи из «глаз» наблюдателя, один луч на пиксель, и находить самый близкий объект, который блокирует путь распространения этого луча. Используя свойства материала и эффект света в сцене, алгоритм рейкастинга может определить затенение данного объекта. Предположение в упрощении основано на том, что если поверхность размещена перед светом, то свет достигнет поверхности и не будет блокирован или находиться в тени. Затенение поверхности вычисляется, используя алгоритмы затенения традиционной компьютерной трёхмерной графики. Одним из преимуществ рейкастинга является способность легко обрабатывать неплоские поверхности и сплошные тела вроде сферы или конуса. Если математическая поверхность может быть пересечена лучом, то она может быть отрендерена, используя рейкастинг. Сложные объекты могут быть созданы с использованием методов моделирования сплошных тел и легко отрендерены.
В основу рейкастинга положена идея испускать лучи из «глаз» наблюдателя, один луч на пиксель, и находить самый близкий объект, который блокирует путь распространения этого луча. Используя свойства материала и эффект света в сцене, алгоритм рейкастинга может определить затенение данного объекта. Предположение в упрощении основано на том, что если поверхность размещена перед светом, то свет достигнет поверхности и не будет блокирован или находиться в тени. Затенение поверхности вычисляется, используя алгоритмы затенения традиционной компьютерной трёхмерной графики. Одним из преимуществ рейкастинга является способность легко обрабатывать неплоские поверхности и сплошные тела вроде сферы или конуса. Если математическая поверхность может быть пересечена лучом, то она может быть отрендерена, используя рейкастинг. Сложные объекты могут быть созданы с использованием методов моделирования сплошных тел и легко отрендерены.
Пример
var raycaster = new THREE.Raycaster(); var mouse = new THREE.Vector2();
function onMouseMove( event ) {
// calculate mouse position in normalized device coordinates // (-1 to +1) for both components // вычисляем положение курсора мышки в нормализованной // системе координат (от -1 до +1) для обоих компонентов
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
}
function render() {
// update the picking ray with the camera and mouse position // обновляем луч выборки с позиций камеры и курсора мышки raycaster.setFromCamera( mouse, camera );
// calculate objects intersecting the picking ray // вычисляем объекты, пересекающие луч выборки var intersects = raycaster.intersectObjects( scene.children );
for ( var i = 0; i < intersects.length; i++ ) {
intersects[ i ].object.material.color.set( 0xff0000 );
}
renderer.render( scene, camera );
}
window.addEventListener( 'mousemove', onMouseMove, false );
window.requestAnimationFrame(render);
Больше примеров:
Raycasting to a Mesh, Raycasting to a Mesh in using an OrthographicCamera, Raycasting to a Mesh with BufferGeometry, Raycasting to a Line, Raycasting to Points, Terrain raycasting, Raycasting using an octree, Raycasting to paint voxels, Raycast to a Texture
Конструктор
Raycaster(
от англ. слова origin - начало, источник')" onmouseout="hide()">origin,
от англ. слова direction - направление')" onmouseout="hide()">direction, near, far ) {
origin -- Начальный вектор, из которого берется луч.
direction — Направляющий вектор, который задает направление лучу. Должен быть нормализован.
near — Все возвращаемые результаты должны быть дальше near. near не может быть отрицательным. Значение по умолчанию равно 0.
far — Все возвращаемые результаты должны быть ближе far. far не может быть меньше near. Значение по умолчанию равно Infinity (бесконечность).
Данный метод создает новый объект raycaster.Свойства
.far
Фактор дальности рейкастера. Это значение показывает какие объекты можно отбросить из-за расстояния (то есть, они не будут отображаться, так как их не видно из-за большого расстояния до них).
Данное значение не должно быть отрицательным, а также быть больше значения свойства near..linePrecision
Фактор точности рейкастера при пересечении объектов Line..near
Фактор близости рейкастера. Это значение показывает какие объекты можно отбросить из-за расстояния (то есть, они не будут отображаться, так как до них слишком близко).
Данное значение не должно быть отрицательным, а также быть меньше значения свойства far..params
Это объект со следующими свойствами:
{
Mesh: {},
Line: {},
LOD: {},
Points: { threshold: 1 },
Sprite: {}
}.rayЛуч, используемый для рейкастинга.
Методы
.set(
от англ. слова origin - начало, источник')" onmouseout="hide()">origin,
от англ. слова direction - направление')" onmouseout="hide()">direction )
origin -- Начальный вектор, из которого берется луч.
direction -- Нормализованный вектор направления, который задает направление луча.
Метод обновляет луч (ray) с новыми значениями origin и direction..setFromCamera(
сокращение англ. слова coordinates - координаты')" onmouseout="hide()">coords,
camera - камера')" onmouseout="hide()">camera )
coords — 2D coordinates of the mouse, in normalized device coordinates (NDC) -- компоненты X и Y должны быть между -1 и 1.
camera - камера')" onmouseout="hide()">camera -- камера, из которой должен исходить луч.
.intersectObject(
object - объект')" onmouseout="hide()">object, recursive )
object - объект')" onmouseout="hide()">object — объект, проверяемый на пересечение данным лучом.
recursive
-- Если установить как true, то будут проверены на пересечение все дочерние элементы данного объекта. В противном случае, метод проверит на пересечение с лучом только сам объект. По умолчанию значение равно false.
Метод проверяет на пересечение лучом объекта, при этом в проверку могут быть включены (или не включены) все потомки объекта. Случаи пересечения возвращаются отсортированными по расстоянию, первым оказывается самое ближайшее пересечение.
Возвращаемый массив пересечений...
[ { distance, point, face, faceIndex, indices, object }, ... ]
distance
-- расстояние между началом луча и точкой пересечения
point - точка')" onmouseout="hide()">point -- точка пересечения, в "мировых" координатах
face - грань')" onmouseout="hide()">face -- пересекаемая грань
faceIndex -- индекс пересекаемой грани
indices -- индексы вершин, включенных в пересекаемую грань
object - объект')" onmouseout="hide()">object -- пересекаемый объект
uv - координаты U и V')" onmouseout="hide()">uv -- координаты U, V точки пересечения
When intersecting a [page:Mesh] with a [page:BufferGeometry], the *faceIndex* will be *undefined*, and *indices* will be set; when intersecting a [page:Mesh] with a [page:Geometry], *indices* will be *undefined*.point - точка')" onmouseout="hide()">point -- точка пересечения, в "мировых" координатах
face - грань')" onmouseout="hide()">face -- пересекаемая грань
faceIndex -- индекс пересекаемой грани
indices -- индексы вершин, включенных в пересекаемую грань
object - объект')" onmouseout="hide()">object -- пересекаемый объект
uv - координаты U и V')" onmouseout="hide()">uv -- координаты U, V точки пересечения
*Raycaster* delegates to the [page:Object3D.raycast raycast] method of the passed object, when evaluating whether the ray intersects the object or not. This allows [page:Mesh meshes] to respond differently to ray casting than [page:Line lines] and [page:Points pointclouds].
*Note* that for meshes, faces must be pointed towards the origin of the [page:.ray ray] in order to be detected; intersections of the ray passing through the back of a face will not be detected. To raycast against both faces of an object, you'll want to set the [page:Mesh.material material]'s [page:Material.side side] property to *THREE.DoubleSide*.
.intersectObjects( objects, recursive )
objects
— объекты, проверяемые на пересечение с данным лучом.
recursive
Если установить как true, то будут проверены на пересечение все дочерние элементы данного объекта. В противном случае, метод проверит на пересечение с лучом только сам объект. По умолчанию значение равно false.
Метод проверяет на пересечение лучом объекты, при этом в проверку могут быть включены (или не включены) все потомки объектов. Случаи пересечения возвращаются отсортированными по расстоянию, первым оказывается самое ближайшее пересечение.
Пересечения возвращаются в том же самом виде, что и у метода intersectObject.Исходники
Uniform
Uniform'ы являются глобальными переменными GLSL. Они передаются в шейдерные программы.Пример
При объявлении uniform из ShaderMaterial, он объявляется по значению или по объекту.uniforms: {
time: { value: 1.0 },
resolution: new THREE.Uniform(new THREE.Vector2())
}
Типы Uniform
Каждый uniform должен иметь свойство value. Тип этого value должен соответствовать типу переменной uniform в коде GLSL, как указано для примитивных типов GLSL в таблице ниже. The type of the value must correspond to the type of the uniform variable in the GLSL code as specified for the primitive GLSL types in the table below. Поддерживаются также структуры и массивы uniform. Массивы примитивных типов GLSL должны либо указываться как массивы соответствующих объектов THREE, либо как двумерный массив, содержащий данные всех объектов. Uniform structures and arrays are also supported. GLSL arrays of primitive type must either be specified as an array of the corresponding THREE objects or as a flat array containing the data of all the objects. Другими словами; примитивы GLSL в массивах не должны быть представлены массивами. Это правило не применяется транзитивно. In other words; GLSL primitives in arrays must not be represented by arrays. This rule does not apply transitively. Массив из массивов vec2, каждый из которых длиной в пять векторов, должен быть массивом массивов либо из пяти объектов Vector2, либо из десяти чисел. An array of vec2 arrays, each with a length of five vectors, must be an array of arrays, of either five Vector2 objects or ten numbers.Типы Uniform
| Типы GLSL | Типы JavaScript |
| int | Number |
| float | Number |
| bool | т.е. либо true, либо false')" onmouseout="hide()">Boolean |
| bool | Number |
| vec2 | двумерный вектор')" onmouseout="hide()">THREE.Vector2 |
| vec2 | Float32Array (*) |
| vec2 | Array (*) |
| vec3 | трехмерный вектор')" onmouseout="hide()">THREE.Vector3 |
| vec3 | color - цвет')" onmouseout="hide()">THREE.Color |
| vec3 | Float32Array (*) |
| vec3 | Array (*) |
| vec4 | четырехмерный вектор')" onmouseout="hide()">THREE.Vector4 |
| vec4 | кватернион')" onmouseout="hide()">THREE.Quaternion |
| vec4 | Float32Array (*) |
| vec4 | Array (*) |
| mat2 | Float32Array (*) |
| mat2 | Array (*) |
| mat3 | матрица 3×3')" onmouseout="hide()">THREE.Matrix3 |
| mat3 | Float32Array (*) |
| mat3 | Array (*) |
| mat4 | матрица 4×4')" onmouseout="hide()">THREE.Matrix4 |
| mat4 | Float32Array (*) |
| mat4 | Array (*) |
| ivec2, bvec2 | Float32Array (*) |
| ivec2, bvec2 | Array (*) |
| ivec3, bvec3 | Int32Array (*) |
| ivec3, bvec3 | Array (*) |
| ivec4, bvec4 | Int32Array (*) |
| ivec4, bvec4 | Array (*) |
| sampler2D | THREE.Texture |
| samplerCube | THREE.CubeTexture |
Конструктор
Uniform( value )
value -- Объект, содержащий значение для установки в uniform. Его тип должен быть одним из типов Uniform описанных выше.
Свойства
.value
Текущее значение uniform.Методы
Возвращает клона данного uniform. Если свойство value uniform является объектом с методом clone(), то это используется, в противном случае, значение копируется по назначению. Значения массива являются общими для клонов Uniform.
clone - клонировать')" onmouseout="hide()">.clone( )
В качестве примера использования данного метода посмотрите WebGL deferred animation.