ВЪВЕДЕНИЕ

Three js е JS библиотека и API за различни браузъри, които позволяват създаването на красиви анимации. Three js разчита на WebGL, а не на конвенционалните добавки за браузър.

Чрез своите библиотечни помощни програми разработчиците могат да включват сложни 3D анимации в своите уебсайтове без много усилия.

Three.js включва много функции като геометрия, светлини, материали, шейдъри, ефекти, сцени, зареждащи данни, анимация и много други.

Всеки проект three.js се нуждае от поне един HTML файл, за да дефинира уеб страницата, и JavaScript файл, за да изпълни вашия код three.js.

ИНСТАЛАЦИЯ

Инсталирайте с NPM

Инсталирайте three.js и инструмент за изграждане, Vite, като използвате терминал в папката на вашия проект. Vite ще се използва по време на разработката, но не е отделна част от окончателната уеб страница.

# three.js
npm install --save three

# vite
npm install --save-deb vite

Импортиране от CDN

<script async src="https://unpkg.com/[email protected]/dist/es-module-shims.js"></script>

<script type="importmap">
  {
    "imports": {
      "three": "https://unpkg.com/[email protected]/build/three.module.js",
      "three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
    }
  }
</script>

Поддръжка на браузър

Всички съвременни браузъри на настолен компютър, както и на мобилни устройства, в момента поддържат WebGL. Единственият браузър, за който трябва да се погрижите, е мобилният браузър Opera Mini. За IE 10 и по-стари версии има приставката IEWebGL, която можете да получите от https://github.com/iewebgl/iewebgl./ Можете да намерите подробна информация за поддръжката на браузъра WebGL тук.

Създаване на сцената

За да можем действително да покажем каквото и да било с three.js, имаме нужда от три неща: сцена, камера и рендър, за да можем да изобразим сцената с камера.

import * as THREE from 'three';

const scene = new 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( renderer.domElement );

Вече сме настроили сцената, нашата камера и рендера.

Първият атрибут е field of view е степента на сцената, която се вижда на дисплея във всеки даден момент. Стойността е в градуси.

Вторият е aspect ratio.

Следващите два атрибута са near и far изрязващата равнина. Това означава, че обекти, които са по-далеч от камерата от стойността на far или по-близо от near, няма да бъдат изобразени.

Следващият е рендерът. В допълнение към създаването на екземпляра за изобразяване, ние също трябва да зададем размера, на който искаме да изобразява нашето приложение. Добра идея е да използвате ширината и височината на областта, която искаме да запълним с нашето приложение – в този случай ширината и височината на прозореца на браузъра.

Ако искате да запазите размера на приложението си, но да го изобразите с по-ниска разделителна способност, можете да го направите, като извикате setSize с false като updateStyle (третият аргумент).

добавяме елемента renderer към нашия HTML документ.

BoxGeometry

const geometry = new THREE.BoxGeometry( 1, 1, 1 );
const material = new THREE.MeshBasicMaterial( { color: 0x005E99 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;

За да създадем куб, имаме нужда от BoxGeometry. Това е обект, който съдържа всички точки (vertices) и запълване (faces) на куба.

В допълнение към геометрията ни трябва материал, за да го оцветим. Three.js идва с няколко материала, но засега ще се придържаме към MeshBasicMaterial.

Третото нещо, от което се нуждаем, е Mesh. Мрежата е обект, който взема геометрия и прилага материал към нея, който след това можем да вмъкнем в нашата сцена и да се движим свободно.

По подразбиране, когато извикаме scene.add(), нещото, което добавяме, ще бъде добавено към координатите (0,0,0). Това би накарало камерата и кубът да бъдат един в друг.

Изобразяване на сцената

function animate() {
 requestAnimationFrame( animate );
 renderer.render( scene, camera );
}
animate();

Това ще създаде цикъл, който кара програмата за изобразяване да рисува сцената всеки път, когато екранът се опреснява (на типичен екран това означава 60 пъти в секунда).

Анимиране на куба

cube.rotation.x += 0.01;
cube.rotation.y += 0.01;

Това ще се изпълнява на всеки кадър (обикновено 60 пъти в секунда) и ще даде на куба хубава ротационна анимация.

КРАЕН РЕЗУЛТАТ

import * as THREE from 'three';

const scene = new 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( renderer.domElement );

const geometry = new THREE.BoxGeometry( 1, 1, 1 );
const material = new THREE.MeshBasicMaterial( { color: 0x005E99 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;

function animate() {
 requestAnimationFrame( animate );

 cube.rotation.x += 0.01;
 cube.rotation.y += 0.01;

 renderer.render( scene, camera );
}

animate();

добавки

Извън кутията three.js включва основите на 3D двигател. Други компоненти на three.js — като контроли, зареждащи устройства и ефекти за последваща обработка — са част от директорията addons/. Добавките не е необходимо да се инсталират отделно, но трябва да се импортират отделно.

# three-addons
npm i three-addons
// Addons usage

import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; 
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; 

const controls = new OrbitControls( camera, renderer.domElement ); 
const loader = new GLTFLoader();

Можете да инсталирате три добавки с помощта на npm, както е споменато по-горе.

Приятно кодиране 😊