【发布时间】:2014-07-25 14:50:19
【问题描述】:
我使用的是 Three.js 版本 65。
我正在使用ParticleSystem 在 3D 空间中显示一组点@时间 t=0。而且我在时间 t=1 有下一组点。现在我想像JSONLoader morphTarget 动画一样对其进行动画处理?有人可以建议我实现这一目标的最佳方法吗?
(或)
我可以更喜欢 WebGL 着色器编程吗?请提出建议。
提前致谢。
【问题讨论】:
我使用的是 Three.js 版本 65。
我正在使用ParticleSystem 在 3D 空间中显示一组点@时间 t=0。而且我在时间 t=1 有下一组点。现在我想像JSONLoader morphTarget 动画一样对其进行动画处理?有人可以建议我实现这一目标的最佳方法吗?
(或)
我可以更喜欢 WebGL 着色器编程吗?请提出建议。
提前致谢。
【问题讨论】:
是的,你可以用着色器做到这一点。你会例如使用属性vec3 position、vec3 nextPosition 和统一的float scale 为您的粒子系统创建一个自定义着色器,从 0 到 1。
然后,您可以将一些逻辑添加到计算新位置的着色器中,例如vec3 pos = position * scale + nextPosition * (1.0 - scale)(以及通常的广告牌/GL_Point 代码 ofc)。当你达到第 1 级时,你将 position 与 nextPosition 交换,并用相对的追随者填充 nextPosition。
祝你玩得开心:)
PS:我提到的代码仅用于线性插值。在您的情况下,您可能会考虑其他插值。甚至可以添加另外两个属性向量来指示前导点和后点,以便使用贝塞尔曲线计算新位置。
最后,您迟早要考虑性能。如果您有 10k 个粒子和 1k 个“状态”,您可能会遇到性能问题。
【讨论】: