Класс App позволяет упростить настройку 3Д-приложения. Он включает код для инициализации ВебГЛ рендерера, загрузки ГЛТФ сцен, автоматического запуска анимации, а также логику для основных элементов управления камерой.
// загружаемый ГЛТФ-ассет
const url = 'template.gltf';
// создать приложение с простым крутящимся прелоадером
const app = new v3d.App('v3d-container', null, new v3d.SimplePreloader({ container: 'v3d-container' }));
// загрузить главную сцену
app.loadScene(url, function() {
app.enableControls();
app.run();
runCode();
});
function runCode() {
// поместите ваш код здесь
}
container - идентификатор ХТМЛ-элемента или сам ХТМЛ-элемент для размещения канваса.
ctxSettings - атрибуты контекста ВебГЛ, которые должны быть переданы в методе canvas.getContext() .
preloader - экземпляр класса Preloader приложения.
Этот конструктор делает следующее:
Массив animation actions, используемых для планирования анимаций приложения. Вместо прямого доступа к этому списку можно также использовать метод getAnimationActionByName для поиска действия по имени клипа.
Устанавливает фон сцены на null после загрузки сцены ГЛТФ. По умолчанию false.
Элемент контейнера. Это родительский элемент для 3D Canvas, используемый для операций рендеринга.
Главная сцена приложения.
Главная камера приложения.
Объект часов приложения.
Массив функций, которые будут вызваны непосредственно перед компиляцией шейдера. Компиляция шейдеров происходит во время загрузки сцены, сразу после того, как все ассеты (метаданные ГЛТФ, бинарные файлы, текстуры) были получены.
Используйте обратный вызов компиляции для включения постобработки или добавления тумана, поскольку добавление этих эффектов во время выполнения может негативно сказаться на производительности.
function initFog(appInstance) {
appInstance.scene.fog = new v3d.FogExp2('green', 0.01);
}
// загружаемый ГЛТФ 2.0 ассет
const url = 'my_scene.gltf';
// создать приложение с простым крутящимся прелоадером
const app = new v3d.App('v3d-container', null, new v3d.SimplePreloader({ container: 'v3d-container' }));
// инициализировать туман перед загрузкой сцены
app.compileCallbacks.push(initFog);
// загрузить главную сцену
app.loadScene(url, function() {
app.enableControls();
app.run();
});
Объект управления главной камерой приложения.
Текущий кадр рендеринга приложения.
Делитель FPS приложения. Используйте setFrameDivider для установки этого значения.
Микшер, используемый для воспроизведения анимации, загруженной из данных ГЛТФ.
Элемент предзагрузки приложения (существует только во время загрузки сцены)
Рендерер ВебГЛ приложения.
Массив функций, которые будут вызываться каждый раз, когда начинается рендеринг.
Загрузчик ГЛТФ приложения.
Разрешение текстуры cubemap, представляющей материал мира. По умолчанию - 1024.
Устаревшее. Вместо этого, используйте Scene.worldMaterial. Это материал, используемый для создания окружения мира.
Массив объектов контроллера для активной сессии WebXR.
Активная сессия WebXR.
Обработчик обновлений сцены: рендеринга, анимации и управления камерой. Не стоит вносить изменения, если не знаете за что отвечают эти параметры.
Добавляет сцену из указанного файла ГЛТФ к текущей сцене. loadCb
получит загруженную сцену в качестве параметра после завершения загрузки.
Если в приложении нет активной сцены, то ничего не будет добавлено.
Такие параметры, как loadCameras и loadLights, используются для указания того, будут ли камеры и освещение добавлены из загруженной сцены. По умолчанию оба параметра имеют значение true.
Устаревший. Вместо этого используйте dispose или unload.
Отключить все эффекты постобработки (кроме контура, когда keepOutline=true).
Отключает обновление графики в цикле анимации после заданного количества кадров (укажите 0, чтобы отключить сразу). Элементы управления и микшер анимации будут продолжать обновляться, а обратные вызовы рендеринга - вызываться.
Отключить сглаживание.
Выгружает сцену (вызывая unload) и утилизирует все приложение, что включает очистку renderer приложения и удаление элемента canvas из DOM.
После утилизации приложение больше не может использоваться. Этот способ лучше всего
подходит для случаев, когда требуется полная очистка.
Включает элементы управления для главной камеры приложения. В зависимости от типа управления, указанного для камеры, этот метод предоставит вам 'ORBIT', 'FLYING' или статичную камеру.
Включает заданные эффекты постобработки.
Включает обновление графики в цикле анимации.
Включить сглаживание. Количество выборок рассчитывается как 2^sampleLevel (например, укажите 4, чтобы включить 16x SSAA).
Возвращает главную камеру приложения.
Возвращает рассчитанную высоту элемента контейнера.
Возвращает рассчитанную ширину элемента контейнера.
Скрывает счетчик частоты кадров.
Устаревший. Вместо этого используйте loadScene.
Загрузите сцену ГЛТФ. Обратный вызов loadOkCb получит загруженную сцену в качестве параметра после завершения загрузки.
Если уже существует активная сцена (например, загруженная ранее с помощью метода load), то сначала используйте unload, чтобы избежать конфликтов между существующей и загруженной сценами.
Загружает сцену ГЛТФ. Обратный вызов loadCb получит загруженную сцену в качестве
параметра после завершения загрузки.
Если уже существует активная сцена (например, загруженная ранее с помощью метода load), то сначала используйте unload, чтобы избежать конфликтов между существующей и загруженной сценами.
Обработчик события изменения размера canvas. Не изменяйте его, если не знаете, что делаете.
Оценивает и распечатывает профиль производительности рендеринга. delta - опциональный период оценки (по умолчанию 1).
Обработчик для рендеринга сцены. Не изменяйте его, если не знаете, что делаете.
Запускает приложение, удаляя прелоадер и запуская цикл рендеринга.
Уменьшает максимальный кадр, деля его на заданное целое число. По умолчанию движок пытается рендерить сцены со скоростью 60 кадров в секунду. Если делитель установлен, например, на 2, FPS будет снижен до 30.
Показать счетчик частоты кадров.
rootObj — (опционально) объект для выгрузки вместе с его дочерними объектами; если объект не задан или заданный объект является основной сценой приложения, то метод выполняет полную очистку сцены.
Выгружает либо часть, либо всю сцену в зависимости от параметров.
Если заданный rootObj является одним из объектов сцены, то этот метод удаляет данный объект и его преемников из сцены, а также освобождает связанные с ним ресурсы (геометрии, материалы, текстуры и т.д...). Если данный rootObj является самим экземпляром сцены, то этот метод выполняет полную очистку сцены, которая включает удаление всех объектов, окружения сцены, камер и элементов управления камерами, анимации, постпроцессинга, внутренних объектов ВебГЛ и т.д....
После того как сцена приложения была полностью выгружена, метод loadScene может быть использован для загрузки совершенно новой сцены. Этот подход лучше всего подходит для загрузки/выгрузки нескольких сцен без выгрузки всего приложения.
Обновление окружения мира из указанного материала. Такой материал обычно хранится в свойстве Scene.worldMaterial.
object3d - объект или сцена для поиска объектов-зондов среди его преемников.
Обновить все объекты CubeReflectionProbe, которые являются преемниками
данного объекта object3d.
О том как получить исходный код этого модуля читайте тут.