Недавно я разработал базовое веб-приложение с использованием Three.js, которое позволяет отображать файл .stl. Прежде чем я начну делиться своим опытом с Three.js, я хотел бы сначала представить его вам.
Three.js — это легкая и простая в использовании 3D-библиотека JavaScript, которая включает в себя средство визуализации WebGL.
Он используется некоторыми крупными компаниями, такими как GitHub, Pioneer, Oculus и даже NASA, для создания потрясающих графических 3D-анимаций. Есть куча классных примеров, которые вы можете посмотреть здесь; https://threejs.org/.
Несмотря на то, что документы охватывают большую часть библиотеки, а в Интернете есть много общей информации, некоторые непопулярные методы может быть трудно найти. Из-за этого мне потребовалось некоторое исследование, чтобы найти то, что мне было нужно на протяжении всего процесса разработки. Итак, я решил поделиться некоторыми из них здесь. Давайте начнем.
Монтаж
Как видно из установочной части официального сайта, Three.js можно установить с помощью npm и других инструментов сборки или с помощью CDN. Поскольку я работал без сборщика модулей (например, Webpack) в своей локальной среде (я напрямую использовал свой браузер для отображения моего HTML), я не мог использовать голые спецификаторы импорта. Поэтому я решил загружать свои модули непосредственно из node_modules
, но после r127версии Three.JS они удалили поддержку загрузки модулей в веб-приложениях из node_modules
. Вместо этого я использовал метод импорта карты. Если вы не знаете, что такое карта импорта:
Карта импорта – это объект JavaScript, в котором ключом является имя импорта (например,
@lodash/startCase
), а значением – расположение кода.
Он используется так:
// IN HTML
<script type="importmap">
{
"imports": {
"nameOfImport": "location",
"nameOfSecondImport": "secondLocation"
}
}
</script>
Вы можете найти примеры этой установки во многих из этих проектов на официальном сайте.
Локальное использование
Чтобы иметь возможность работать с текстурами или объектами из внешних файлов, вы должны использовать локальный веб-сервер. Если вы используете VSCode, вы можете легко установить расширение для этой цели. В противном случае вы всегда можете использовать что-то вроде Apache или настроить сервер Python. Если вы не планируете работать с внешними файлами, то вы всегда можете дважды щелкнуть по своему HTML-файлу и заставить его работать без проблем.
WebGL
Поскольку Three.JS использует WebGL, ваша рабочая среда также должна его поддерживать. Вы можете проверить, поддерживает ли ваш браузер и устройство эту поддержку, с помощью этого кода здесь.
if ( WebGL.isWebGLAvailable()) { console.log("Available") }
Применение
Вы можете начать с официального шаблона здесь;
Он включает в себя сцену, камеру, средство визуализации и объект, который анимируется. Отсюда вы можете продвинуться вперед и настроить камеру или сцену так, как хотите. Вы можете добавить OrbitControls
в свой проект, если хотите использовать курсор для вращения вокруг целевого объекта. Все эти используемые функции и классы более подробно описаны в их официальных документах.
Загрузка объекта из внешних файлов
Вместо создания геометрической структуры мы собираемся использовать файл .stl для загрузки объекта в наше приложение. Файлы .stl обычно используются с 3D-принтерами. Вместо использования приложений САПР мы могли бы отображать наш объект для печати в нашем повседневно используемом браузере. Сначала нам нужен загрузчик, который подготовит наш объект перед процессом рендеринга. Для этого мы будем использовать STLLoader. Мы могли бы импортировать его вот так;
И реализуйте это так;
Mesh — это базовый класс, который наследуется от Object3d и используется для создания полигональных объектов путем объединения геометрии с материалом.
Измените путь к вашему stl файлу, ./uploads/screw.stl
затем вызовите эту loadObject
функцию в init()
функции, которая выполняется в начале.
В этот момент вы должны увидеть свой объект на экране. Если нет, вы всегда можете проверить наличие ошибок в консоли браузера.
графический интерфейс
В Three.JS также есть модуль GUI, который позволяет создавать пользовательский интерфейс и обработчики кода, прослушивающие эти элементы интерфейса. В моем примере я добавил кнопки, которые будут вращать и перемещать наш объект по всем трем возможным осям.
“gui”: “./node_modules/three/examples/jsm/libs/lil-gui.module.min.js”
Вы можете найти его в файле примера, включенном в модуль three.
Я написал функцию, которая создавала бы новый графический интерфейс с использованием импортированного модуля и создавала обработчики для каждого отдельного объекта конфигурации, который я определил. В массивguiEvents
я добавил действия по событию. Вы можете изменить вид камеры, изменить цвет объекта или сцены, добавить туман или изменить его интенсивность. В этом случае я поменял свою группу на сумму, которую я решил.
Группа почти идентична Object3D. Его цель — сделать работу с группами объектов синтаксически более понятной.
Причина, по которой мне понадобилась группа, заключается в том, что я не мог заставить сетку вращаться, не будучи вовлеченной в группу так, как я хотел. Поэтому я придумал это решение во время поиска в Интернете. Может быть другой способ поворачивать объекты с помощью графического интерфейса без необходимости в группе.
Заключение
Вот некоторые из шагов, которые мне пришлось выполнить, чтобы загрузить объект .stl в мое приложение Three.JS. Как я уже упоминал, некоторые функции и реализации не описаны в официальной документации, и это заставляет вас искать решения в опубликованных примерах. Это крутая библиотека, чтобы учиться и пробовать новые вещи. Я предлагаю вам провести некоторое свободное время, играя с ним.
Спасибо за прочтение.