🇷🇺
MyWebAR Knowledge Base
Язык Ру
Язык Ру
  • База знаний для разработчиков MyWebAR
  • С ЧЕГО НАЧАТЬ
    • Регистрация
    • Обзор страницы Dashboard
    • Обзор редактора
    • Создание проекта в MyWebAR
  • ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ MYWEBAR
    • Создание сцены с трекингом на изогнутых изображениях
    • Создание AR-визитки
    • Создание портала в MyWebAR
    • Оживающая фотография
    • Интерактив с 3D-моделью
  • ПЛАНЫ И ПОДПИСКИ
    • Бесплатная пробная подписка
    • Обновление вашего плана
    • Коммерческие планы
    • Планы для образования
  • СОЗДАНИЕ ПРОЕКТОВ WEBAR
    • Типы проектов
    • Проекты с мультимаркерным трекингом (книги)
    • Добавление объектов
    • Как добавить 3D-модель из библиотеки моделей
    • Как добавить 3D-модель из Sketchfab
    • Свойства объекта
    • Кнопки и действия
    • Поведения объектов
    • Воспроизведение видео
    • 3D Анимации
    • Аналитика проектов
    • Как сделать хорошее отслеживаемое изображение для дополненной реальности
    • Оптимизация и подготовка 3D-моделей к загрузке
    • Брендирование проекта и его настройки
    • Работа с доступными плагинами
    • Существующие плагины и как с ними работать
    • Видео инструкции
  • КАСТОМИЗАЦИЯ WEBAR
    • Кастомный домен
    • Использование внешнего хранилища
    • Встраивание WebAR
  • Pro Editor
    • Как устроен Pro Editor
      • Описание интерфейса
      • Основные возможности
    • Требования по размещению кода
      • Пример интеграции готового скрипта
      • Создание частиц в Pro Editor
      • Работа с видео
      • Работа с анимациями 3D-объектов
    • Текущие ограничения
      • Работа с камерой
      • Создание UI
      • Загрузка объектов с помощью класса loader
      • Импорт частей кода
    • Кейсы
      • Добавление изображений
      • Эффект бликов на объективе (Lens Flare)
      • Пошаговое создание мини-игры
      • Переключение содержимого по нажатию
      • Пошаговое создание квеста
Powered by GitBook
On this page
  • Создание проекта
  • Добавление объектов
  • Добавление источника света
  • Добавление частицы (спрайта)
  • Импорт скрипта
  • Импорт проекта в простой редактор
  1. Pro Editor
  2. Требования по размещению кода

Пример интеграции готового скрипта

PreviousТребования по размещению кодаNextСоздание частиц в Pro Editor

Last updated 2 years ago

В данной статье я расскажу как перенести данный скрипт, сделанный на чистом THREE.js, в продвинутый редактор.

Создание проекта

Первым делом нужно перейти в продвинутый редактор.

Далее, нужно создать новую сцену (для того, чтобы на сцене не было лишних объектов), нажатием на File → New.

Добавление объектов

Для начала стоит взглянуть на приведенный выше код примера. Вы заметите, что в сцену добавляется два объекта: частица спрайта и источник света.

Добавление источника света

Первым делом нужно добавить точечный источник света. Для его добавления, на верхней панели нажмите Add → Point Light.

Далее вы можете немного поднять источник, как в приведенном скрипте сверху.

Добавление частицы (спрайта)

Для добавления спрайта, нужно нажать Add → Sprite.

Затем добавленный спрайт следует уменьшить в размере, изменив параметр Scale.

Импорт скрипта

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

let renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
document.body.appendChild(renderer.domElement);

let scene = new THREE.Scene();

let camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);
camera.position.z = 10;
camera.position.y = 5;
camera.lookAt(0, 0, 0);
scene.add(camera);

let light = new THREE.PointLight(0xffffff);
light.position.set(-100, 200, 100);
scene.add(light);

const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array([-0.05, -0.05, 0.05,
    0.05, -0.05, 0.05,
    0.05, 0.05, 0.05,
    0.05, 0.05, 0.05, -0.05, 0.05, 0.05, -0.05, -0.05, 0.05
]);
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));
const material = new THREE.MeshBasicMaterial({ color: 0xffffff });
const original = new THREE.Mesh(geometry, material);

let particles = [];
for (let i = 0; i < 100; i++) {
    let particle = original.clone();
    particle.userData.velocity = new THREE.Vector3();
    scene.add(particle);
    particles.push(particle);
}

animate();

function animate() {
    let particle = particles.shift();
    particles.push(particle);
    
    let velocity = particle.userData.velocity;
    velocity.x = Math.random() * 0.1 - 0.05;
    velocity.y = Math.random() * 0.1 + 0.1;
    velocity.z = Math.random() * 0.1 - 0.05;
    for (let i = 0; i < particles.length; i++) {
        let particle = particles[i];
        let velocity = particle.userData.velocity;
        velocity.y -= 0.0098;
        particle.position.add(velocity);
        if (particle.position.y < 0) {
            particle.position.y = 0;
            velocity.y = -velocity.y;
            velocity.multiplyScalar(0.6);
        }
    }

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

Первое, что нужно сделать, это добавить сценарий, привязав его к сцене.

Далее, нажав Edit, откройте код скрипта и вставьте код, который нужно импортировать (в данном случае это код, показанный выше).

Первым делом нужно переименовать функцию анимирования animate() → update() (строка 37) и удалить вызов этой функции (строка 35), а так же, удалить метод requestAnimationFrame(animate); (строка 58).

let renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
document.body.appendChild(renderer.domElement);

let scene = new THREE.Scene();

let camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);
camera.position.z = 10;
camera.position.y = 5;
camera.lookAt(0, 0, 0);
scene.add(camera);

let light = new THREE.PointLight(0xffffff);
light.position.set(-100, 200, 100);
scene.add(light);

const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array([-0.05, -0.05, 0.05,
    0.05, -0.05, 0.05,
    0.05, 0.05, 0.05,
    0.05, 0.05, 0.05, -0.05, 0.05, 0.05, -0.05, -0.05, 0.05
]);
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));
const material = new THREE.MeshBasicMaterial({ color: 0xffffff });
const original = new THREE.Mesh(geometry, material);

let particles = [];
for (let i = 0; i < 100; i++) {
    let particle = original.clone();
    particle.userData.velocity = new THREE.Vector3();
    scene.add(particle);
    particles.push(particle);
}

function update() {
    let particle = particles.shift();
    particles.push(particle);
    
    let velocity = particle.userData.velocity;
    velocity.x = Math.random() * 0.1 - 0.05;
    velocity.y = Math.random() * 0.1 + 0.1;
    velocity.z = Math.random() * 0.1 - 0.05;
    for (let i = 0; i < particles.length; i++) {
        let particle = particles[i];
        let velocity = particle.userData.velocity;
        velocity.y -= 0.0098;
        particle.position.add(velocity);
        if (particle.position.y < 0) {
            particle.position.y = 0;
            velocity.y = -velocity.y;
            velocity.multiplyScalar(0.6);
        }
    }

    renderer.render(scene, camera);
}

В продвинутом редакторе используется вшитая в него функция update(), которая работает таким же образом, как и функция animate() вызывается каждый кадр.

Так же, вызов функции осуществляется самим редактором при запуске сцены, именно поэтому, вызовать функций init() и update() не нужно.

Далее, нужно удалить создание renderer (в том числе его настройку и вызов в функции animate() → update()) (строки 1-3, 55), camera (строки 7-11) и scene (строка 5).

let light = new THREE.PointLight(0xffffff);
light.position.set(-100, 200, 100);
scene.add(light);

const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array([-0.05, -0.05, 0.05,
    0.05, -0.05, 0.05,
    0.05, 0.05, 0.05,
    0.05, 0.05, 0.05, -0.05, 0.05, 0.05, -0.05, -0.05, 0.05
]);
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));
const material = new THREE.MeshBasicMaterial({ color: 0xffffff });
const original = new THREE.Mesh(geometry, material);

let particles = [];
for (let i = 0; i < 100; i++) {
    let particle = original.clone();
    particle.userData.velocity = new THREE.Vector3();
    scene.add(particle);
    particles.push(particle);
}

function update() {
    let particle = particles.shift();
    particles.push(particle);
    
    let velocity = particle.userData.velocity;
    velocity.x = Math.random() * 0.1 - 0.05;
    velocity.y = Math.random() * 0.1 + 0.1;
    velocity.z = Math.random() * 0.1 - 0.05;
    for (let i = 0; i < particles.length; i++) {
        let particle = particles[i];
        let velocity = particle.userData.velocity;
        velocity.y -= 0.0098;
        particle.position.add(velocity);
        if (particle.position.y < 0) {
            particle.position.y = 0;
            velocity.y = -velocity.y;
            velocity.multiplyScalar(0.6);
        }
    }
}

ВАЖНО: Инициализация таких элементов, как camera, renderer и scene выполняется автоматически при запуске сцены. Именно поэтому их присутствие в коде не будет выполнено и выдаст ошибку.

В пункте Добавление объектов мы добавили частицу (строки 5-13) и свет (строки 1-3), поэтому их так же нужно удалить.

let particles = [];
for (let i = 0; i < 100; i++) {
    let particle = original.clone();
    particle.userData.velocity = new THREE.Vector3();
    scene.add(particle);
    particles.push(particle);
}

function update() {
    let particle = particles.shift();
    particles.push(particle);
    
    let velocity = particle.userData.velocity;
    velocity.x = Math.random() * 0.1 - 0.05;
    velocity.y = Math.random() * 0.1 + 0.1;
    velocity.z = Math.random() * 0.1 - 0.05;
    for (let i = 0; i < particles.length; i++) {
        let particle = particles[i];
        let velocity = particle.userData.velocity;
        velocity.y -= 0.0098;
        particle.position.add(velocity);
        if (particle.position.y < 0) {
            particle.position.y = 0;
            velocity.y = -velocity.y;
            velocity.multiplyScalar(0.6);
        }
    }
}

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

let original = this.getObjectByName( 'Sprite' );

let particles = [];
for (let i = 0; i < 100; i++) {
    let particle = original.clone();
    particle.userData.velocity = new THREE.Vector3();
    scene.add(particle);
    particles.push(particle);
}

function update() {
    let particle = particles.shift();
    particles.push(particle);
    
    let velocity = particle.userData.velocity;
    velocity.x = Math.random() * 0.1 - 0.05;
    velocity.y = Math.random() * 0.1 + 0.1;
    velocity.z = Math.random() * 0.1 - 0.05;
    for (let i = 0; i < particles.length; i++) {
        let particle = particles[i];
        let velocity = particle.userData.velocity;
        velocity.y -= 0.0098;
        particle.position.add(velocity);
        if (particle.position.y < 0) {
            particle.position.y = 0;
            velocity.y = -velocity.y;
            velocity.multiplyScalar(0.6);
        }
    }
}

Импорт проекта в простой редактор

Для импорта сцены, нажмите File → Publish.

После этого начнется загрузка архива.

Данный архив нужно разархивировать. После, зайти в папку.

Здесь нам нужен файл app.js.

ВАЖНО: Для того, чтобы не возникало конфликта, переименуйте файл app.js, на любой другое название. Например, mySceneInProEditor.js.

При каждом импорте старайтесь делать уникальное название для файла, для избежать возникновения ошибок.

Далее, нужно пройти в простой редактор и создать проект, где будет использоваться данная сцена.

Далее, нужно добавить сделанную сцену в редактор. Нам нужен пункт Json MAE.

Добавляем созданный json-файл.

Последним шагом является правильное масштабирование сцены с продвинутого редактора (она может быть слишком большой, поэтому нужно просто уменьшить Scale).

Проект готов, ниже представлен json-файл сделанной сцены.

Все готово! Теперь нужно импортировать сцену в .

Так же, обязательно удалите все элементы освещения в простом редакторе, так как мы уже настроили освещение в .

простой редактор
продвинутом редакторе
3KB
mySceneInProEditor.json