three.js - 为什么另一个渲染器中的 THREE.js gilt 克隆会减慢帧速率?
问题描述
我在主渲染中添加了一个 gltf 场景:
loader.load( 'models/model.gltf', function ( gltf ) {
...
scenes['game'].add( gltf.scene );
}
这很好用,我可以毫无问题地进行克隆:
loader.load( 'models/model.gltf', function ( gltf ) {
...
scenes['game'].add( gltf.scene );
var myClone = gltf.scene.clone();
scenes['game'].add( myClone );
}
但是当我尝试将克隆添加到第二个渲染器时,事情开始变得棘手:
loader.load( 'models/model.gltf', function ( gltf ) {
...
scenes['game'].add( gltf.scene );
var myClone = gltf.scene.clone();
scenes['inventory'].add( myClone );
}
当两个镀金场景都在两个渲染器的相机视图内时,帧速率会急剧下降。我检查了这两个对象,并且在各个方面看起来都是独一无二的。有谁知道发生了什么?
解决方案
从性能角度来看,拥有两个渲染器是非常糟糕的做法。它生成两个 WebGL 上下文,消耗更多的内存,并且基本上否定了 GPU 可能想要实现的任何效率。您可以有多个场景和多个摄像机,但不要使用多个渲染器。您应该改为共享一个渲染器,如下所示:
var renderer = new THREE.WebGLRenderer();
var scene1 = new THREE.Scene();
var scene2 = new THREE.Scene();
var cam1 = new THREE.PerspectiveCamera();
var cam2 = new THREE.PerspectiveCamera();
update() {
renderer.render(scene1, cam1);
renderer.render(scene2, cam2);
}
推荐阅读
- javascript - html 标记字面上显示在浏览器中
- python - 在 matplotlib 中绘制多个图时出现索引错误
- php - 如何制作通用函数以将嵌套对象减少为 CSV 样式数组?
- c++ - 在类设计中查找外部命名空间中的重载运算符
- javascript - 编写 1 个 JavaScript 语句,该语句将从文本框中获取文本,并在单击按钮时使用它来设置段落的边框
- multiple-monitors - 我想在 2 台显示器上播放视频 uipath
- .net - ASP.NET MVC 5 与 ASP.NET Core
- javascript - 我有两个相同的 html 输入文本 id 但不同的 div 如何在 jquery 中获取两个 id 值
- windows - 如何解决函数 GsDriverEntry 中引用的 LNK2019 未解析的外部符号 DriverEntry?
- javascript - How do I print a reversed times table in Javascript