Я уверен, что многие из вас видели веб-сайты, на которых отображаются 3D-изображения. Еще дальше люди создавали с ним игры вроде этих отсюда: https://freefrontend.com/three-js-games/. Что меня удивило, так это то, что эти приложения полностью созданы с помощью кода JavaScript! Чтобы быть более точным, он использовал библиотеку JavaScript под названием Three.JS, которая включает функции, добавляющие трехмерные объекты и изображения и управляющие ими. Сегодня я покажу основы работы этой библиотеки.

Прежде чем начать, убедитесь, что на вашем компьютере установлен Node.js, введя это в консоль:

узел -v

Эта команда в основном покажет вам текущую версию Node.js, которую вы используете. Если вы не получили никаких результатов, как на изображении, это, скорее всего, означает, что у вас не установлен Node.js. Вы можете скачать Node.js с официального сайта: https://nodejs.org/ru/. Если на вашем компьютере установлен Node.js, давайте продолжим!

Есть два способа использовать библиотеку Three.JS: либо установить библиотеку Three.JS, либо создать новый файл с этим кодом внутри: https://threejs.org/build/three.js, а затем импортировать из файла. Для этого примера я просто использую второй вариант. Вот как выглядит моя файловая структура:

Затем я собираюсь записать весь свой код JavaScript в файл index.html.

Строка 14 соединяет мой файл index.html и мой файл three.js, который я создал. Согласно документу, мы должны сначала настроить сцену и камеру. Простая версия из документации выглядит так:

константная сцена = новая THREE.Scene();

const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

const renderer = new THREE.WebGLRenderer();

renderer.setSize(window.innerWidth, window.innerHeight);

document.body.appendChild (рендерер.domElement);

Первая строка создает новый объект под названием «сцена» с помощью функции, встроенной в библиотеку Three.JS. С точки зрения искусства, мы настраиваем холст для рисования 3D-изображений. Затем нам нужно создать перспективу, чтобы установить положение, из которого смотрит наш монитор. Первый аргумент во второй строке представляет собой поле зрения или FOV, и его значение указывается в градусах. В основном это означает, какую степень поля может видеть пользователь, и я уверен, что многие из вас, кто играет в игры FPS, знают, что это такое. Второй аргумент представляет соотношение сторон. Наконец, последние два значения показывают, насколько близко и далеко объект от камеры. Если объект ниже или выше ближнего и дальнего значения, он не будет отображаться на вашем экране. Three.JS, кажется, использует рендерер WebGL для отображения объектов, а последние три строки предназначены для настройки рендерера с его размером и добавления его к телу html.

До сих пор мы создали место для отображения объекта и того, как отображать объект, но мы еще не создали никаких объектов. Есть много объектов, которые вы можете создать с помощью Three.JS, но я просто попытаюсь создать сферу.

var геометрия = новый THREE.SphereGeometry(3, 50, 50, 0, Math.PI * 2, 0, Math.PI * 2);

var material = new THREE.MeshNormalMaterial();

varsphere = new THREE.Mesh(геометрия, материал);

сцена.добавить(сфера);

Three JS имеет различные геометрические формы, которые вы можете попробовать. В моем случае я использовал сферическую геометрию. SphereGeometry следует этому формату, поэтому я пропущу объяснение:

SphereGeometry(radius: Float, widthSegments: Integer, heightSegments: Integer, phiStart: Float, phiLength: Float, thetaStart: Float, thetaLength: Float)

MeshBasicMaterial дает такие свойства объекта, как его цвет. Это похоже на добавление CSS в файл HTML.

Наконец, я собрал их все вместе, чтобы создать сферу, используя функцию Mesh. Затем я добавил немного движения моему объекту:

камера.позиция.z = 10;

функция анимации () {

запросAnimationFrame(анимировать);

сфера.вращение.x += 0,01;

renderer.render(сцена, камера);

}

анимировать();

Я вращаю свою сферу по оси X и постоянно ее визуализирую. В итоге получается вот так:

Three JS достаточно прост для начинающих, и я с нетерпением жду возможности применить его в своих будущих проектах!