美文网首页
19 回收粒子

19 回收粒子

作者: skoll | 来源:发表于2021-12-12 23:44 被阅读0次

PCS和SPS这种有粒子总数的粒子系统,就需要回收,因为有总数,当粒子运动到视野外,如果需要在此使用这个粒子,就需要回收

<!DOCTYPE html>
<!-- 添加小人,使用序列图 -->
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="utf-8"/>
    <title>Babylon - Getting Started</title>
    <!-- Link to the last version of BabylonJS -->
    <script src="https://preview.babylonjs.com/babylon.js"></script>
    <!-- Link to the last version of BabylonJS loaders to enable loading filetypes such as .gltf -->
    <script src="https://preview.babylonjs.com/loaders/babylonjs.loaders.min.js"></script>
    <!-- Link to pep.js to ensure pointer events work consistently in all browsers -->
    <script src="https://code.jquery.com/pep/0.4.1/pep.js"></script>
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/cannon.js/0.6.2/cannon.min.js"></script> -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.2/dat.gui.min.js"></script>
    <script src="https://preview.babylonjs.com/gui/babylon.gui.min.js"></script>
</head>
<style>
    html, body {
        overflow: hidden;
        width   : 100%;
        height  : 100%;
        margin  : 0;
        padding : 0;
    }

    #renderCanvas {
        width   : 100%;
        height  : 100%;
        touch-action: none;
    }
</style>
<body>
    <canvas id="renderCanvas" touch-action="none"></canvas>
<script>
        const canvas = document.getElementById("renderCanvas");
        var engine = null;
        // 这里还不能用let,不然就爆炸,获取不到engine
        var scene = null;
        var sceneToRender = null;
        const createDefaultEngine = function() { return new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true,  disableWebGL2Support: false}); };
        let createScene=async function(){
            // 关键函数都写在这个里面

            var scene = new BABYLON.Scene(engine);
            var camera = new BABYLON.ArcRotateCamera("cam", -Math.PI / 2, Math.PI / 2.5,7, BABYLON.Vector3.Zero(), scene);    
            camera.attachControl(canvas, true);
            var light = new BABYLON.HemisphericLight("HemiLight", new BABYLON.Vector3(1, 1, 0), scene);
            light.intensity = 0.5;

            var myTexture = new BABYLON.Texture("https://img0.baidu.com/it/u=1593955789,3403856786&fm=26&fmt=auto", scene);
            // 粒子应用的材质

            let pcs=new BABYLON.PointsCloudSystem('pcs',1,scene)

            pcs.updateParticle=function(particle){
                if(particle.position.y>particle.heightLim){
                    this.recycleParticle(particle)
                }
                particle.position.addInPlace(particle.velocity)
            }
            pcs.recycleParticle = function(particle) {
                particle.position = BABYLON.Vector3.Zero();
                particle.color = new BABYLON.Color4(Math.random(), Math.random(), Math.random(), Math.random());
                particle.velocity = new BABYLON.Vector3(0.2 - 0.4 * Math.random(), 0.25 + 0.25 * Math.random(), 0.2 - 0.4 * Math.random());
                particle.heightLim = 4 + 0.5 * Math.random();
            }

            pcs.addPoints(10000,pcs.recycleParticle)
            pcs.buildMeshAsync()

            scene.registerBeforeRender(() => pcs.setParticles());
            return scene
        }

    window.initFunction=async function(){
        let asyncEngineCreation=async function(){
            try{
                return createDefaultEngine()
            }catch(e){
                return createDefaultEngine()
            }
        }

        window.engine=await asyncEngineCreation()
        if(!engine){
            throw('engine should not be null')
        }
        window.scene=createScene()
        
    }

    initFunction().then(()=>{
        scene.then((returnedScene)=>{
            sceneToRender=returnedScene
        })

        engine.runRenderLoop(function(){
            if(sceneToRender&&sceneToRender.activeCamera){
                sceneToRender.render()
            }
        })

    })

    window.addEventListener('resize',function(){
        engine.resize()
    })

</script>
<body>

相关文章

  • 19 回收粒子

    PCS和SPS这种有粒子总数的粒子系统,就需要回收,因为有总数,当粒子运动到视野外,如果需要在此使用这个粒子,就需要回收

  • 粒子群优化算法(PSO)基础

    粒子群算法 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。CAS理论于19...

  • 第七章 歼灭!

    脱离了海格斯粒子乱流的回收班继续飞速逼近奇居子。奇居子刚才的包衣被反射回的海格斯粒子撕毁不少,即便奇居子试图修复海...

  • 粒子效果-烟花

    //分为3种粒子,子弹粒子,爆炸粒子,散开粒子 CAEmitterLayer *fireworksEmitter ...

  • 41 RS对象标签 曲线和粒子

    曲线 ———————— 粒子 支持原粒子 think-par粒子 和XP粒子

  • C4D TP粒子入门学习笔记-5:呲花炮

    【前言】 AE的粒子插件和XP粒子都有二次粒子设定,就是说,第一次粒子爆发后,每个粒子为粒子源再发射粒子。...

  • iOS-[QuartzCore框架](CAEmitterLaye

    在粒子系统中,CAEmitterLayer负责发射粒子(当然粒子也可以发射粒子),而这些所谓的粒子,就是CAEmi...

  • 塑料打碎机刀片

    塑料打碎机刀片也叫塑料机械刀片,使用在塑料行业机械上的刀片,刀片广泛应用于注塑,塑料粒子,废塑料回收加工等行业。品...

  • 第109节:细胞的良性粒子与恶性粒子

    癌细胞是恶性粒子,细胞是良性粒子,我们健康的时候,整个身体良性粒子较多。一但恶性粒子出现,就会被良性粒子消灭,因而...

  • 粒子引擎使用 ——

    粒子发射器 粒子

网友评论

      本文标题:19 回收粒子

      本文链接:https://www.haomeiwen.com/subject/glkwzltx.html