【问题标题】:There is a delay between the model load using gltfLoader and the scene rendering, how would I know when to hide the loading screen?使用 gltfLoader 加载模型和场景渲染之间存在延迟,我怎么知道何时隐藏加载屏幕?
【发布时间】:2021-05-31 15:12:22
【问题描述】:

我正在使用threejs 106 build 并在我的项目中使用webGLRendererCSS2DRenderer

尝试加载glb 模型并显示基于loaderonProgress 回调的加载进度。我在加载 100% 完成时隐藏加载屏幕并调用渲染器,但几何图形的渲染需要几秒钟才能出现在画布上。

我怎么知道资产已经显示在屏幕上,这样我就可以隐藏加载屏幕而不会使延迟出现在用户面前?

任何帮助将不胜感激。

【问题讨论】:

标签: javascript three.js loader gltf


【解决方案1】:

当您的几何体和纹理完成加载后,它们仅存在于 RAM 中,但尚未传递到 GPU。如果这些元素已添加到场景中,它最终会在您第一次调用 render(scene, cam) 时加载到 GPU。这通常是可能导致延迟的瓶颈。资产越大,延迟越长。我的建议是等到第一次渲染完成后隐藏加载屏幕:

onLoadComplete() {
    update();
}

var firstRender = true;
function update() {
    // This will block for a moment the first time
    renderer.render(scene, camera);

    // Hide loading bar after the first render
    if (firstRender) {
        firstRender = false;
        hideLoadScreen();
    }

    // Subsequent frames should run smoothly afterward
    requestAnimationFrame(update);
}

有一些帮助工具可以帮助您将这些资源预先上传到 GPU,这样您就不必等到第一帧。

【讨论】:

  • 感谢您的回答...我正在做与您所说的相同的事情。加载完成 100% 后,立即从 1onProgress 回调函数调用 renderer.compile()renderer.render(),然后我编写了隐藏覆盖屏幕的代码,但由于某种原因,这似乎不起作用。此外,threejs r106 的渲染器中似乎缺少 initTexture 方法。
  • 我不知道该告诉你什么。如果您使用的是没有该功能的旧版本,则由您决定如何操作。
猜你喜欢
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
相关资源
最近更新 更多