Видео+код: #1 С чего начать изучать ThreeJS? Canvas-sketch, установка через npm

Статья создана: Видео+код: #1 С чего начать изучать ThreeJS? Canvas-sketch, установка через npm

Видео: Что необходимо сделать, чтобы стартануть в ThreeJS?

Друзья, начиная с урока #2-6 Планета (6 урок), я использую эту стартовую сцену: GitHUB

Если Вы не понимаете о чём идёт речь, то посмотрите урок, я всё поясняю.

Список воспроизведения со всеми видео по ThreeJS)

Официальная справка по ThreeJS

GitHUB репозиторий с готовой планетой:

исходный код на GitHUB

Codepen c готовой планетой:

Codepen просмотр готового результата

GitHUB с вариантами планеты (Таков путь!):

GitHUB

Файлы из урока (стартовая сцена)

01-intro.zip

Для запуска будет достаточно установить NodeJS + выполнить команду:

npm i

А также выполнить всё, что ниже (установить canvas-sketch + three)...

Статья:

Друзья, чтобы начать разрабатывать приложение с использованием JavaScript библиотеки ThreeJS, вам необходимо выполнить следующие действия...

Установка NodeJS.

Просто возьмите и поставить себе NodeJS. Как это сделать, если вы не знаете, посмотрите на YouTube или перейдите на официальный сайт и скачайте её, затем установите, как обычную программу, если вы используете Windows.

Официальный сайт: nodejs.org

Если Вы — тот самый счастливчик и используете Linux, то сами знаете, что делать =)

Для мако-ов — затрудняюсь советовать...

Проверка версии NodeJS. Введите в консоли (терминал): node -v && npm -v Если после этого, у Вас появились какие-то версии, то значит — всё хорошо.

Установка canvas-sketch

Можно перейти на официальный адрес пакета: canvas sketch на NPM

https://www.npmjs.com/package/canvas-sketch

и следовать инструкциям...

npm install canvas-sketch-cli -g *если Вы на Linux'е, то данную операцию необходимо выполнить из-под sudo.

Далее. Создайте папку и перейдите в неё:

mkdir my-sketches && cd my-sketches

Далее, чтобы начать писать, используя авто-генерацию, просто введите:

npx canvas-sketch-cli sketch.js --new --open

Внимание! Команда ThreeJS удалила папку с JS и теперь доступны только JSM (JS модули), поэтому код сразу может выдавать ошибку, что не найден OrbitControls. Его необходимо экспортировать из папки `jsm` : `require('three/examples/jsm/controls/OrbitControls');`
И/или поменяйте версию ThreeJS на 126

Стартовая сцена выглядит так для canvas-sketch:

//A basic ThreeJS cube scene.
//@author Matt DesLauriers (@mattdesl)

const canvasSketch = require('canvas-sketch');

// Ensure ThreeJS is in global scope for the 'examples/'
global.THREE = require('three');

// Include any additional ThreeJS examples below
// ВНИМАНИЕ! ПУТЬ ТЕПЕРЬ ИЗМЕНЁН И ДАННАЯ ФУНКЦИЯ БЕРЁТСЯ ИЗ ПАПКИ JSM! ПРОВЕРЬТЕ ОШИБКИ В КОНСОЛИ
require('three/examples/js/controls/OrbitControls');

const settings = {
  // Make the loop animated
  animate: true,
  // Get a WebGL canvas rather than 2D
  context: 'webgl',
  // Turn on MSAA
  attributes: { antialias: true }
};

const sketch = ({ context }) => {
  // Create a renderer
  const renderer = new THREE.WebGLRenderer({
    context
  });

  // WebGL background color
  renderer.setClearColor('#000', 1);

  // Setup a camera
  const camera = new THREE.PerspectiveCamera(45, 1, 0.01, 100);
  camera.position.set(2, 2, -4);
  camera.lookAt(new THREE.Vector3());

  // Setup camera controller
  const controls = new THREE.OrbitControls(camera, context.canvas);

  // Setup your scene
  const scene = new THREE.Scene();

  const mesh = new THREE.Mesh(
    new THREE.BoxGeometry(1, 1, 1),
    new THREE.MeshPhysicalMaterial({
      color: 'white',
      roughness: 0.75,
      flatShading: true
    })
  );
  scene.add(mesh);

  // Specify an ambient/unlit colour
  scene.add(new THREE.AmbientLight('#59314f'));

  // Add some light
  const light = new THREE.PointLight('#45caf7', 1, 15.5);
  light.position.set(2, 2, -4).multiplyScalar(1.5);
  scene.add(light);

  // draw each frame
  return {
    // Handle resize events here
    resize ({ pixelRatio, viewportWidth, viewportHeight }) {
      renderer.setPixelRatio(pixelRatio);
      renderer.setSize(viewportWidth, viewportHeight);
      camera.aspect = viewportWidth / viewportHeight;
      camera.updateProjectionMatrix();
    },
    // And render events here
    render ({ time, deltaTime }) {
      mesh.rotation.y = time * (10 * Math.PI / 180);
      controls.update();
      renderer.render(scene, camera);
    },
    // Dispose of WebGL context (optional)
    unload () {
      renderer.dispose();
    }
  };
};

canvasSketch(sketch, settings);

Друзья, кроме canvas-sketch...

... существуют и другие стартовые сцены, одну из которых (и она самая популярная в ваших интернетах) мы и будем использовать...

Стартовая примитивная сцена на Three.JS

подробнее об этом в уроке #2/6

Возможно, вам следуем изначально понять, насколько хорошо Ваше железо для создания сцен на Three.JS

К примеру, на моём стареньком компьютере тормозит даже самая примитивная сцена на Three.JS...

Для запуска проверки нагрузки на видео карту nvidia в Linux, используйте watch -n 0.5 nvidia-smi

подробнее на стаке

также можно использовать

gpustat для Linux (Git)

gpustat для Linux (archlinux)

и ввести (после установки) gpustat --watch

Расшифровка временных меток видео (вверху которое):

00:00 Как стартануть, чтобы удобно и быстро писать код ThreeJS?
00:33 Сайтик, где я буду выкладывать всю инфу
01:14 Установка и проверка NodeJS
02:04 Установка canvas-sketch
04:17 Создание первого пустого проекта
05:32 Установка ThreeJS (добавление библиотеки)
05:47 Первая сцена на ThreeJS — стартовая
07:40 Подвожу итог, что делать дальше?
09:10 Пройдёмся по коду и посмотрим, что там?
09:58 const sketch
10:18 Понятие камеры в Three JS
10:40 threejs.org
12:18 Камера, смотри так! camera.lookAt(new THREE.Vector3())
13:23 3D — это всегда описание X,Y,Z позиции для одной точки
14:09 THREE.OrbitControls — управление 3D-объектами на сцене
14:41 Mesh в ThreeJS
15:52 ThreeJS BoxGeometry
16:09 В мире WebGL (~ThreeJS) нет понятия размера (как бы)
18:31 THREE.MeshPhysicalMaterial — материал для Mesh
20:17 Три составляющие для того, чтобы увидеть что-то в браузере: камера, сцена, объект
21:54 Чистый WebGL — Oo @@@!
22:52 Добавление источника света на сцену ThreeJS (AmbientLight + PointLight)
26:06 Понятие увеличения объекта (ThreeJS multiplyScalar)
26:43 Возвращение значения функции — отрисовка кадров
27:09 Анимация в ThreeJS — её же возможностями
27:20 ThreeJS render + setPixelRatio
28:19 render.setSize в ThreeJS
28:22 camera.aspect в ThreeJS
29:31 Функция render в ThreeJS
33:17 А напоследок я скажу...

Подготовка 3D модели в Blender для сцены в ThreeJS (glb compressed)

ThreeJS смена версии со 126 на 151 для стекла transmission. смена версии пакета yarn add,yarn remove

ThreeJS Shadow — тени на сцене. Как включить?

Как починить ThreeJS DracoLoader и то, что нельзя починить (debug three.js)

Blender decimate — автоматическая ретопология (2) (модификатор)

За что можно ненавидеть ThreeJS?

copyleft 2023. we use: GatsbyJS, React, Google Analytics. Source code