【问题标题】:Threejs switch sceneThreejs切换场景
【发布时间】:2017-10-21 22:17:25
【问题描述】:

我有一个项目在网站的三个不同区域实际加载和渲染 3 个不同的场景。 目前,每次我需要更改场景时,我都会删除画布(所有 Threejs 侦听器和迭代器)并从头开始渲染新场景。

用它的渲染器创建一个独特的场景并在其中加载来自三个不同场景的不同网格、灯光和相机是一种好的做法还是有性能优势?

有人已经测试过类似的场景吗?

【问题讨论】:

  • 您能否详细说明“站点的三个不同区域中的三个不同场景”是什么意思?听起来您试图让三个不同的画布显示三个不同的场景,但我可能错了。
  • 场景没有一起显示,一次只显示一个场景。假设您有三个包含三个场景的网站页面(但浏览器没有重新加载)
  • 在这种情况下,为什么不直接清空“page1”数据场景,然后用“page2”数据重新填充它呢? (或者,如果内存允许,保留多个场景,并在页面更改时将它们单独传递给渲染器?)

标签: three.js scene renderer


【解决方案1】:

在性能方面,使用单个渲染器实例和传递给它的 render() 调用的不同场景/相机对象可能会稍微好一些,并且(如有必要)在您的站点上重新定位 renderer.domElement。这样你就不需要有多个画布和渲染上下文,渲染器可能能够缓存一些与 webgl 相关的东西。这种方法也有可能在场景中重复使用材质等东西。

但是,性能差异应该是最小的,并且只有(或至少大部分)初始化成本在最大值范围内。 100 毫秒(当然取决于你到底在做什么,但这是我的猜测)。

因此,如果将所有内容都隔离起来感觉更好(这也可能有充分的理由,具体取决于您的应用程序的构建方式):保持这种状态并衡量它是否有任何负面影响(我的猜测:它可能不会)。

【讨论】:

    【解决方案2】:

    您在寻找类似this 的东西吗?

    如果您希望一次显示一个场景,我认为最好的选择是创建场景并仅渲染选定的场景。见THREE.WebGLRenderer.render()

    【讨论】:

    • 所以你说的解决方案可能是创建一个“顶级”类,它只创建渲染器,并通过一些方法加载其他三个包含场景、网格、灯光、ecc 的类。比切换场景传递给渲染器??将场景保留在内存中而不进行渲染不会影响性能吗?谢谢
    • 是的,这可能是一种可能的方法。将场景保存在内存中不会影响性能(在渲染方面,例如 FPS);这只会影响您应用的内存使用情况。
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2014-04-29
    • 2014-02-22
    相关资源
    最近更新 更多