【发布时间】:2012-05-12 09:53:54
【问题描述】:
我正在尝试使用 json 文件渲染一个非常复杂的模型。 json文件大小为40MB,数据量很大,我可以在canvas上渲染模型。
现在的问题是渲染非常缓慢。如果我尝试旋转模型或放大,整个浏览器都会挂起,这太慢了。
由于我是 webgl 的新手,我不知道是什么导致了这个问题。看了一圈也没找到。
是影响渲染的json文件的大小吗?我怎样才能使性能更好?应该提一下,这不是显卡的问题。身体浏览器之类的东西非常快。
我正在为这个方法使用three.js jason loader
loader = new THREE.JSONLoader();
loader.load( 'file.js', function ( geometry ) {
geometry.computeVertexNormals();
mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( ) );
scene.add( mesh );
} );
为了渲染,我在 init 里面做这个
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
在 animate() 中调用渲染函数
function animate() {
requestAnimationFrame( animate );
render();
stats.update();
}
在渲染函数中像这样旋转网格
function render() {
mesh.rotation.x += ( targetXRotation - mesh.rotation.x ) * 0.05;
mesh.rotation.y += ( targetYRotation - mesh.rotation.y ) * 0.05;
renderer.render( scene, camera );
}
【问题讨论】:
-
很有可能是IO的原因。读取 40MB 文件的 IO 延迟会高到足以导致渲染缓慢。此外,它是 JSON,而不是 jason。
-
能否给我们看一些代码,尤其是渲染方法?您是否使用缓冲区来存储数据?
-
感谢您的快速回复,在这种情况下,加载 json 文件的有效过程是什么?连body浏览器都是一个庞大的数据,背后的原理是什么?感谢 @Corbin 进行 Json 校正(不眠不休的工作效果)。
-
@Matthias 我没有使用缓冲区。我正在使用three.js 渲染器来渲染模型。
-
这只是一个技巧,而不是答案。尝试减少模型的多边形数量。 Blender 有一个名为 decimate 的选项。根据我的经验,大多数 3D 模型对于您的普通 Web 应用来说都包含太多细节。
标签: javascript webgl three.js