gpt4 book ai didi

javascript - Three.js 合并几何很慢

转载 作者:行者123 更新时间:2023-12-05 01:14:12 27 4
gpt4 key购买 nike

我刚开始学习 Three.js,发现文档有点难以使用(到处都是“待办事项”)。

我只是想在屏幕上显示 50,000 到 500,000 个红色球体。这段代码有点像 Doob 先生的城市示例 (http://www.mrdoob.com/lab/javascript/webgl/city/01/)。唯一的区别是我的速度非常慢,或者在某些情况下(在 MBP 视网膜上)实际上挂起 Chrome:

moleculeGeometry = new THREE.Geometry()
sphereGeometry = new THREE.SphereGeometry 0.7, 6, 6
sphereMaterial = new THREE.MeshLambertMaterial {color: 'red'}
sphere = new THREE.Mesh sphereGeometry, sphereMaterial

alert 'start merging'

for i in [0...90000]
sphere.position.x = atoms.coords[i][0]
sphere.position.y = atoms.coords[i][1]
sphere.position.z = atoms.coords[i][2]
THREE.GeometryUtils.merge moleculeGeometry, sphere

alert 'finished merging'

mesh = new THREE.Mesh moleculeGeometry, sphereMaterial
scene.add mesh

render()

这里有什么想法吗? “开始合并”警报和“完成合并”警报之间的时间很长,如果它甚至完全完成而不是挂起的话。

可能的想法包括

  • 为几何体预分配一个顶点数组。我想每次我将球体合并到整体几何体中时,都会分配更多内存

  • 一次合并两个球体的集合,然后一次合并其中两个集合,然后重复此过程,直到合并整个“场景”。 (这种技术有一个名称,但我不记得它叫什么了。)这似乎有点矫枉过正。 90,000 次合并不应成为现代计算机上任何事物的瓶颈。

谢谢

最佳答案

从球体中移除 sphereMaterial。像这样:

sphere = new THREE.Mesh sphereGeometry

您不需要它,因为 sphereMaterial 在网格中。

免责声明:我也在学习 Three JS。 ;3

关于javascript - Three.js 合并几何很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com