我正在使用Three.js的ShaderParticleEngine库来创建粒子发射器。
我在Internet上挑选了几个代码片段来使发射器正常工作。
首先,我认为那是行不通的。
但实际上,发射器显示在地图上,但屏幕上只有一个静止的粒子。
经过一些调试后,我无法理解粒子在移动,但是移动得非常缓慢。我需要使用tick(delta * 1000)
来查看发射器的运行情况。结果非常丑陋(充满空隙,只有颗粒)。我没有低FPS的问题。
我发现的唯一解决方案是删除tick函数调用中的delta参数:particleGroup.tick()
。
结果更好,但仍在欺骗,请自行判断:
在线发射器编辑器:
我的结果:
我听不懂我使用库示例中建议的相同代码,并使用发射器编辑器中的导出功能。
如果我尝试其他变化(例如,关于粒子寿命/速度),则在游戏中得到的结果会大不相同,也许是因为未提供delta参数而导致粒子寿命计算不正确?
我的游戏循环:
var animate = function () {
requestAnimationFrame( animate );
render();
stats.update();
};
var render = function() {
time = ctx3d.clock.getElapsedTime();
delta = ctx3d.clock.getDelta();
particleGroup.tick(delta);
if(ctx3d.move)
{
ctx3d.ship.position.z += delta * 500 * 3000;
//ctx3d.camera.position.x = ctx3d.ship.position.x;
//ctx3d.camera.position.z = ctx3d.ship.position.z;
}
ctx3d.renderer.render(ctx3d.scene, ctx3d.camera);
}
增量值逐个循环:
30.0000010000003385357559
9.999985195463523e-7
30.0000020000006770715117
0.0000010000003385357559
30.0000020000006770715117
0.0000010000003385357559
0.0000020000006770715117
30.0000010000003385357559
0.000002999999196617864
0.0000010000003385357559
9.999985195463523e-7
0.000002999999196617864
0.0000010000003385357559
0.000001999998858082108108
0.0000010000003385357559
20.0000020000006770715117
9.999985195463523e-7
0.0000010000003385357559
最佳答案
我希望可以将其发布为答案...
我已经将粒子引擎的次要版本提高到了0.7.7,为您的“外观不太光滑”的发射器实现了修复。
之前发生的事情是:
用SPE.Emitter.tick()
值调用的dt
此tick
函数根据传递给它的dt
参数确定应将多少个粒子标记为有效。对于更大的dt
值,更多的粒子被标记为活动的,对于较小的值,更少的粒子被标记为alice。
然后,发射器将重置这些粒子并等待下一个调用。
假设每帧将一个以上的粒子标记为alive
,并且它们都起源于空间中的同一位置,那么所有粒子在被激活时都将位于同一位置。这就是为什么您看到一些“团块”发生的原因。
现在发生的是:
和以前一样,使用SPE.Emitter.tick()
值调用dt
。
现在,tick
函数确定应将多少个粒子标记为活动的,并在对其进行标记的同时,将每个粒子的年龄设置为传入的dt
值的一部分。
因此(!),假设每帧发射100个粒子,并且将dt
值0.016传递到发射器的tick
函数,则将被标记为活动的这100个粒子中的每个粒子的年龄值均指定为,其中(0.016 / 100) * i
是粒子索引(在这种情况下,值为0到100)。
我希望这是有道理的。您可以在此处查看更改:https://github.com/squarefeet/ShaderParticleEngine/blob/master/src/ShaderParticleEmitter.js#L240-L246
Master分支已更新。
关于javascript - Three.js/ShaderParticleEngine — SPE.Group.tick错误的增量参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26723575/