three.js 创建粒子系统的问题?

发布于 2022-09-05 19:46:54 字数 2333 浏览 29 评论 0

我初始化创建粒子系统的代码如下:

`var scene,camera,points,geom,render;

    scene=new THREE.Scene();

    camera=new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,3000);
    camera.position.z=200;

    render=new THREE.WebGLRenderer();
    render.setSize(window.innerWidth,window.innerHeight);
    render.setClearColor(0xffffff);
    document.body.appendChild(render.domElement);
    
    function generateSprite() {
        var PI2 = Math.PI * 2;
        var canvas=document.createElement("canvas");
        canvas.width=32;
        canvas.height=32;
        var context2=canvas.getContext('2d');
        context2.beginPath();
        context2.arc( 16, 16, 16, 0, 2*Math.PI, true );
        context2.fillStyle="0x888888";
        context2.fill();
        var texture=new THREE.Texture(canvas);
        texture.needsUpdate=true;
        return texture;
    }
    function creatCloud(){
        var geom=new THREE.Geometry();
        var material=new THREE.PointsMaterial(
            {
                size:10,
                transparent:true,
                opacity:.5,
                map:generateSprite(),
                color:0xffffff
            }
        )
        var rang=40;
        for(var i=0;i<5;i++){
            var ptr=new THREE.Vector3(
                Math.random()*rang-rang/2,
                Math.random()*rang-rang/2,
                Math.random()*rang-rang/2
            );
            geom.vertices.push(ptr);
        }
        points=new THREE.Points(geom,material);
        points.matrixAutoUpdate=true;
        points.name="cloud";
        scene.add(points);

        renderer();
    }
    creatCloud();
    function renderer(){
        render.render(scene,camera);
        requestAnimationFrame(renderer);
    }

`

这样是可以创建一个粒子系统的。

但是我如何在当前的粒子系统里面 动态的增加几个新的粒子产生呢?

for(var i=0;i<5;i++){
                var target= new THREE.Vector3(
                    (0.5-Math.random())*40,
                    (0.5-Math.random())*40,
                    Math.random()*40
                )
                points.geometry.vertices.push(target)
            }

这段代码只能动态的增加顶点的粒子位置。如何能实现在当前的粒子系统动态增加或者删除某几个粒子呢?????
谢谢。

我最终想实现的效果就是粒子之间的变换,比如一个粒子组成的球体,点击
一个按钮后,变化成一个圆柱体。但是球体和圆柱体的顶点数目不同,所以我的方法是动态的删减顶点的数目和更新订单的位置进行渲染。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月寒剑心 2022-09-12 19:46:54

可以用gui.js这个UI控件来写。

不知所踪 2022-09-12 19:46:54

粒子后期渲染一般是通过着色器实现,语法上应该不支持对数组进行动态添加吧,可以重新渲染一个粒子系统

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文