javascript - 三个 JS 中的动画粒子系统

标签 javascript three.js

我正在使用以下代码为 Three.js 中的粒子系统中的某些粒子设置动画。

for(var i = 0; i < particleSystem.geometry.vertices.length; i++ ){
                        var pX = Math.sin(i + counter) * 100 + Math.random() * 20,
                            pY = Math.cos(i + counter) * 100 + Math.random() * 20,
                            pZ = Math.sin(i + counter) * 100 + Math.random() * 20;
                            particleSystem.geometry.vertices[i] = new THREE.Vector3(pX, pY, pZ);
                        }

它通过改变粒子的顶点来工作。它可以毫无错误地改变它们,但没有更新。我可以四处走动,所有其他动画都运行良好。这是在我的 animate() 函数中,如下所示:

function animate(){


            for(var i = 0; i < particleSystem.geometry.vertices.length; i++ ){
            var pX = Math.sin(i + counter) * 100 + Math.random() * 20,
                pY = Math.cos(i + counter) * 100 + Math.random() * 20,
                pZ = Math.sin(i + counter) * 100 + Math.random() * 20;
                particleSystem.geometry.vertices[i] = new THREE.Vector3(pX, pY, pZ);
            }



        counter += 1;


        requestAnimationFrame(animate); // So it stops when you change window and otherwise repeats
    renderer.render(scene,camera); // Render
    controls.update(clock.getDelta()); // Update control/camera movement information

}

最佳答案

首先,我认为您应该更新顶点,而不是用新实例替换它们:

particleSystem.geometry.vertices[i].set( pX, pY, pZ );

然后,您可能还必须告诉 Three.js 顶点已更改:

particleSystem.geometry.verticesNeedUpdate = true;

这些应该在 update()

期间完成

关于javascript - 三个 JS 中的动画粒子系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331734/

相关文章:

javascript - THREE.js 不使用 .mtl 渲染 .obj - 为 THREE.js 导出文件

javascript - cannon.js 在不发生碰撞的情况下注册碰撞

javascript - Three.js lookat 好像被翻转了

javascript - 哈希安全漏洞 - 如何修复?

javascript - 从特定行加载聊天室.html文档

Javascript - 如何获取复选框组的总和

webgl - Three.js中如何让玩家控件与墙壁碰撞

javascript - 如何提高 three.js 中的阴影质量

javascript - 在 Visual Studio Code 中设置正确的 React 代码突出显示?

c# - 与在 Javascript 中获取 asp 控件的 ClientID 相关的问题