【问题标题】:Android.LibGDX. 3d Particle System not working (Billboard)Android.LibGDX。 3d 粒子系统不工作(广告牌)
【发布时间】:2023-04-03 13:20:04
【问题描述】:

我正在使用 LibGDX 博客中描述的 3d 粒子系统(Billboards ar 粒子):https://github.com/libgdx/libgdx/wiki/3D-Particle-Effects 它不起作用。它不会崩溃。它只是没有出现在屏幕上。

这是我的代码:

初始化:

private void createParticles3d() {
    particleSystem3d = ParticleSystem.get();
    particleBatch = new BillboardParticleBatch();
    particleBatch.setCamera(cam);
    particleSystem3d.add(particleBatch);

    ParticleEffectLoader.ParticleEffectLoadParameter loadParam = new ParticleEffectLoader.ParticleEffectLoadParameter(particleSystem3d.getBatches());
    ParticleEffectLoader loader = new ParticleEffectLoader(new InternalFileHandleResolver());
    assets.setLoader(com.badlogic.gdx.graphics.g3d.particles.ParticleEffect.class, loader);
    assets.load("data/test3dparticles.pfx", com.badlogic.gdx.graphics.g3d.particles.ParticleEffect.class, loadParam);

    assets.finishLoading();

    originalBubblesEffect3d = assets.get("data/test3dparticles.pfx");
    bubblesEffect3d = originalBubblesEffect3d.copy();
    bubblesEffect3d.init();
    bubblesEffect3d.start();  
    particleSystem3d.add(bubblesEffect3d);
}

渲染:

    modelBatch.begin(cam);
    //Also tried to set some matrix transform here
    particleSystem3d.update();
    particleSystem3d.begin();
    particleSystem3d.draw();
    particleSystem3d.end();
    modelBatch.render(particleSystem3d);
    modelBatch.end();

粒子文件:

{unique:{billboardBatch:{class:com.badlogic.gdx.graphics.g3d.particles.ResourceData$SaveData,data:{cfg:{class:com.badlogic.gdx.graphics.g3d.particles.batches.BillboardParticleBatch$Config,mode:Screen}},indices:[0]}},data:[],assets:[{filename:C:/Users/tte/Desktop/temp/_FISHES/bubbles/bubbles1.png,type:com.badlogic.gdx.graphics.Texture}],resource:{class:com.badlogic.gdx.graphics.g3d.particles.ParticleEffect,controllers:[{name:"Billboard Controller",emitter:{class:com.badlogic.gdx.graphics.g3d.particles.emitters.RegularEmitter,minParticleCount:0,maxParticleCount:200,continous:true,emission:{active:true,lowMin:0,lowMax:0,highMin:250,highMax:250,relative:false,scaling:[1],timeline:[0]},delay:{active:false,lowMin:0,lowMax:0},duration:{active:true,lowMin:3000,lowMax:3000},life:{active:true,lowMin:0,lowMax:0,highMin:500,highMax:1000,relative:false,scaling:[1,1,0.3],timeline:[0,0.66,1]},lifeOffset:{active:false,lowMin:0,lowMax:0,highMin:0,highMax:0,relative:false,scaling:[1],timeline:[0]}},influencers:[{class:com.badlogic.gdx.graphics.g3d.particles.influencers.RegionInfluencer$Single,regions:[{halfInvAspectRatio:0.5,v2:1,u2:1}]},{class:com.badlogic.gdx.graphics.g3d.particles.influencers.SpawnInfluencer,spawnShape:{class:com.badlogic.gdx.graphics.g3d.particles.values.PointSpawnShapeValue,active:false,xOffsetValue:{active:false,lowMin:0,lowMax:0},yOffsetValue:{active:false,lowMin:0,lowMax:0},zOffsetValue:{active:false,lowMin:0,lowMax:0},spawnWidthValue:{active:false,lowMin:0,lowMax:0,highMin:0,highMax:0,relative:false,scaling:[1],timeline:[0]},spawnHeightValue:{active:false,lowMin:0,lowMax:0,highMin:0,highMax:0,relative:false,scaling:[1],timeline:[0]},spawnDepthValue:{active:false,lowMin:0,lowMax:0,highMin:0,highMax:0,relative:false,scaling:[1],timeline:[0]},edges:false}},{class:com.badlogic.gdx.graphics.g3d.particles.influencers.ColorInfluencer$Single,alpha:{active:false,lowMin:0,lowMax:0,highMin:1,highMax:1,relative:false,scaling:[0,0.15,0.5,0],timeline:[0,0.5,0.8,1]},color:{active:false,colors:[1,0.12156863,0.047058824,0,0,0],timeline:[0,1]}},{class:com.badlogic.gdx.graphics.g3d.particles.influencers.DynamicsInfluencer,velocities:[{class:com.badlogic.gdx.graphics.g3d.particles.influencers.DynamicsModifier$PolarAcceleration,isGlobal:false,strengthValue:{active:false,lowMin:0,lowMax:0,highMin:5,highMax:10,relative:false,scaling:[1],timeline:[0]},thetaValue:{active:false,lowMin:0,lowMax:0,highMin:0,highMax:360,relative:false,scaling:[1],timeline:[0]},phiValue:{active:true,lowMin:0,lowMax:0,highMin:-35,highMax:35,relative:false,scaling:[1,0,0],timeline:[0,0.5,1]}}]}],renderer:{class:com.badlogic.gdx.graphics.g3d.particles.renderers.BillboardRenderer}}]}}

也许我应该以某种方式指定从哪里获取粒子效果等的纹理。在我使用 2d 粒子之前,我可以提供一个可以找到粒子纹理的目录。

【问题讨论】:

    标签: java android opengl-es 3d libgdx


    【解决方案1】:

    你会在渲染方法的开头输入下面的GL命令吗?

        Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1.f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    

    【讨论】:

    • 会尝试并通知您
    【解决方案2】:

    嗨 taras 看我的帖子 here

    如果您想要 Billboard 粒子,只需更改 MyParticles.java 上的第 53/63 行:

    private final PointSpriteParticleBatch particleBatch;
    
    // by
    
    private final BillboardParticleBatch particleBatch;
    

    【讨论】:

    • 谢谢!会尝试并让您知道!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多