我正在寻找Three.js
中正确使用对象的指导,这将允许我从流中读取大量数据并进行渲染,而无需在整个应用程序生命周期内将数据存储在内存中。
根据我的理解,在WebGL
中,这可以通过gl_drawArray
完成,但Three.js
对象代表了这种行为?
使用ParticleSystem
对象时,数据会被放入内存中,因为我需要将所有点放入Geometry
节点,然后再将其传递给ParticleSystem
,所以我不会认为这是合适的。
感谢您提供的任何帮助。
修改
为了澄清,我需要阅读几百万个x,y,z
条目并将每个条目显示为空格中的点。我现在正在使用的过程是(简而言之):
var geometry = new THREE.Geometry();
while( hasMoreData ){
var vertex = new THREE.Vector3(x,y,z);
geometry.vertices.push( vertex );
}
sphere = new THREE.ParticleSystem( geometry, shaderMaterial );
scene.add(sphere);
使用此过程,由于数据在构建几何对象时仍然存在,因此我的内存消耗大约增加1GB。无论如何都要从文件中读取这些数据而不将其保留在内存中吗?
答案 0 :(得分:3)
如果此线程无法获得更多答案的可能性,我已经恢复的解决方案是使用THREE.BufferGeometry
而不是THREE.Geometry
,以便使用GPU内存代替。使用这种方法,GPU使用了大约300MB的额外内存,这比RAM中使用的1GB更为可取。
其他输入非常受欢迎,因为与其他方法相比,GPU性能会受到FPS的影响。