【发布时间】:2016-05-21 14:46:27
【问题描述】:
我有一个 THREE.Points 对象,由许多 (10,000+) 个顶点(也称为粒子)组成。
但是,当我尝试对单个粒子的位置进行补间时遇到了性能问题。这是意料之中的,因为我正在使用以下代码循环所有粒子并为每个粒子分配一个补间。
var duration = 500;
for( var i = 0; i < particles.geometry.vertices.length; i++ ){
// http://threejs.org/examples/css3d_sprites.html
var currentVertex = particles.geometry.vertices[i];
new TWEEN.Tween( currentVertex )
.to(
{
x: newVertices[i].x,
y: newVertices[i].y,
z: newVertices[i].z,
},
duration * ( Math.random() + 1 )
)
.easing( TWEEN.Easing.Exponential.InOut )
.onUpdate( function(){
particles.geometry.verticesNeedUpdate = true;
})
.start();
}
有没有更好的方法来解决这个问题?
我不介意是否所有粒子都在一次绘制调用中更新到它们的新中间位置。
【问题讨论】:
-
首先,不要用math.rand,用math.sin比较慢(你可以查一下,这里手机不能链接)。接下来,不要在循环内分配。放置 var 和 new 外部循环并重用。