#three.js
#three.js
Вопрос:
У меня большая сетка. Для полного отображения на экране требуется 3-4 секунды. Есть ли three.js функция обратного вызова, которая может быть вызвана при рендеринге сетки?
const fbxLoader = new FBXLoader();
const model = await fbxLoader.load('xxx.fbx');
scene.add(model);
//
model.onRenderedCallback = () => { // do something } // callback like this ?
Ответ №1:
FBXLoader имеет встроенный обратный вызов при загрузке ресурса. Посмотрите на исходный код этой демонстрации
loader.load(
'models/fbx/Samba Dancing.fbx',
function ( object ) {
// This is your callback, add actions here
scene.add( object );
}
);
Однако разбор и загрузка данных FBX и текстурных ресурсов на ваш графический процессор также могут занять некоторое время, и, к сожалению, нет обратного вызова, когда эти данные будут загружены в графический процессор. Есть несколько способов уменьшить эту задержку, вы можете предварительно скомпилировать материалы и текстуры, а не ждать до первого кадра:
WebGLRenderer.compile()
Компилирует все материалы в сцене с помощью камеры. Это полезно для предварительной компиляции шейдеров перед первым рендерингом.WebGLRenderer.initTexture()
Инициализирует заданную текстуру. Полезно для предварительной загрузки текстуры, а не для ожидания первого рендеринга
Комментарии:
1. Я нахожусь в аналогичной ситуации. Я думаю, что единственный реальный способ справиться с этим — проверить время рендеринга кадра и эвристически определить, когда граница свободна. Таким образом, мы можем делать такие вещи, как очистка загрузочных блесен. Было бы хорошо иметь что-то подобное, но, похоже, WebGL не дает нам никаких полезных API для этого.