标签: particle-system

libgdx粒子系统Z坐标

我想使用Z坐标在3D中渲染粒子效果.我试图使用Decals而不是Sprites来实现自己的ParticleEffect而没有成功.

有没有其他方法使用Z坐标渲染ParticleEffect?也许通过操纵SpriteBatch的转换矩阵?

更新:

工作代码

// update projection each frame since my camera is moving
spriteBatch.setProjectionMatrix(camera3d.projection);

for (ParticleEffect effect : effects){
    spriteBatch.setTransformMatrix(camera3d.view);
    spriteBatch.getTransformMatrix().translate(x,y,z); // different for each effect
    spriteBatch.getTransformMatrix().scale(0.1f,0.1f,0.1f); //optional
    spriteBatch.begin();

    effect.draw(spriteBatch, delta);

    spriteBatch.end();
    spriteBatch.getTransformMatrix().idt();
}
Run Code Online (Sandbox Code Playgroud)

java transformation particle-system libgdx

6
推荐指数
1
解决办法
2433
查看次数

libgdx particleEffect旋转

我用libgdx在我的android设备上画火:

ParticleEffect effect;
ParticleEffectPool fireEffectPool;
Array<PooledEffect> effects = new Array<PooledEffect>();

@Override
public void create() 
{
    ...
    effect = new ParticleEffect();
    effect.load(Gdx.files.internal("particles/fire01.p"), Gdx.files.internal("image"));
    effect.setFlip(true, false);
    fireEffectPool = new ParticleEffectPool(effect, 1000, 3000);

    PooledEffect myEffect = fireEffectPool.obtain();
    myEffect.setPosition(200, 400);
    effects.add(myEffect);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以通过编程方式旋转,设置速度或缩放效果吗?

android particle-system libgdx

6
推荐指数
2
解决办法
2903
查看次数

在libgdx中的3D空间中渲染SpriteBatch + ParticleEffect?

我使用的是libgdx 0.9.9版.我想在3D空间中使用ParticleEffect以及其他3D模型渲染火焰效果.

我的代码的逻辑流程:

  1. ModelBatch开始
  2. 使用ModelBatch在Bullet World中渲染所有3D模型
  3. ModelBatch结束
  4. SpriteBatch开始
  5. 使用SpriteBatch使用ParticleEffect(effect.draw)渲染火焰效果
  6. SpriteBatch结束
  7. 使用Stage绘制HUD

问题:火焰效果在3D空间中的某个点上呈现正常.但是当我旋转相机以使3D模型位于相机和火焰效果之间时,火焰效果会渲染3D模型,而不是隐藏在3D模型后面.

我尝试过的事情:

  1. 我先尝试渲染SpriteBatch然后再渲染3D模型:在这种情况下,火焰效果不可见.我猜测3D模型(图层)正在渲染火焰效果(图层),因此效果不可见.
  2. 我尝试在步骤1和3之间渲染SpriteBatch,即在modelbatch.begin和modelbatch.end之间渲染SpriteBatch.在这种情况下,根本看不到火焰效果.
  3. 我尝试将粒子效果渲染为Actor(添加到HUD Stage).正如预期的那样,火焰效果呈现为最顶层HUD层的一部分,同样的问题仍然存在.
  4. 我尝试过探索贴花,但发现粒子效果不适用于DebcalBatch.我不想在贴花上显示动画火.gif,因此没有尝试.

有没有人遇到类似的问题?任何建议的解决方法都可以使ParticleEffect成为3D世界的一部分,以便在被其他3D模型阻挡时隐藏它?我看过Xoppa在youtube上发布了关于libgdx中3D粒子的视频,但没有提到步骤/解决方案.任何帮助将受到高度赞赏.

3d particle-system libgdx spritebatch

6
推荐指数
1
解决办法
1308
查看次数

在spriteKit中有粒子发射器跟踪跟随手指路径

我在Xcode中创建了一个具有相当长的路径的粒子发射器.当我在粒子生成器内移动它时,它会沿着我的鼠标路径留下一条线索.

关于我的目标的一些背景信息: 在我的spriteKit游戏中,用户在屏幕上拖动手指来拍摄移动的物体.我试图创建一个"子弹时间"效果,其中对象减速并在当前手指位置接触它们时突出显示.当手指停止移动或者弹药耗尽时,会触发touchesEnded方法拍摄所有突出显示的对象.目前我有他们旅行的路径显示为使用SKShapeNode和CGPath绘制到屏幕的线,但我希望使用发射器路径突出显示路径.

在触摸开始的方法中,我创建了一个圆形SpriteNode,它可以在手指移动到的任何地方移动(物理碰撞附加到圆而不是路径).我已经将粒子轨迹发射器连接到这个圆圈,当我在屏幕上移动它时它随着圆圈移动,但是没有留下痕迹.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self];

    pathToDraw = CGPathCreateMutable();
    startPoint = touchLocation;
    CGPathMoveToPoint(pathToDraw, NULL, touchLocation.x, touchLocation.y);

    lineNode = [SKShapeNode node];
    lineNode.path = pathToDraw;
    lineNode.lineWidth = 2;
    lineNode.zPosition = 110;
    lineNode.strokeColor = [SKColor whiteColor];
    [self addChild:lineNode];

    circle = [SKSpriteNode spriteNodeWithTexture:[animationsAtlas textureNamed:@"anim_countdown_9"]];
    circle.name = @"circle";
    circle.scale = 0.3;
    circle.alpha = 0.5;
    circle.zPosition = 110;
    circle.position = touchLocation;

    circle.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:20];
    circle.physicsBody.categoryBitMask = weaponCategory;
    circle.physicsBody.dynamic = NO; …
Run Code Online (Sandbox Code Playgroud)

ios particle-system ios7 sprite-kit skemitternode

6
推荐指数
1
解决办法
3467
查看次数

如何在粒子系统处理中制作滑动构件

我在Processing中模拟粒子系统.基于丹尼尔希夫曼的"本质的代码"一书,我做了一个弹簧,然后我开始尝试使用滑块做一个基于滑块的长度更长或更短的滑块.

现在,我试图制作一个滑块滑动,两个粒子移动到两个粒子的相同方向.我使用PVector添加,找到新位置并绘制节点,但是当我有多个成员且一个受其他成员影响时它不起作用.我需要使用一个force来执行此操作:请参阅applyForce()函数.

void update(float distance) {
  PVector force = PVector.sub(b.location, a.location); 
  float d = force.mag();
  float x = d - distance;
 //direction of the force
  force.normalize();
  force.mult(-1 * k* x/mass);
 //apply to one node
  b.applyForce(force); 
  force.mult(-1);
 //apply opposite to the other node
  a.applyForce(force);
}

//Newton's law: F = M * A
void applyForce(PVector force) {
  PVector f = force.get();
  f.div(mass);
  acceleration.add(f);
}
Run Code Online (Sandbox Code Playgroud)

检查下图:

图

(a)是我想要的,(b)它现在是怎么做的.

在第一个例子中,长度相同,成员滑动(两个粒子).

在第二个中,长度更大并且不会滑动

如果您知道如何施加滑动构件的力,请告诉我.

谢谢

simulation processing spring particle-system

6
推荐指数
1
解决办法
253
查看次数

统一确保已启用读/写

我是Unity新手。

有人可以告诉我这个错误是什么意思

Ensure Read/Write is enabled on the Particle System's Texture 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

粒子系统需要在开始时播放,但有时不需要工作(播放效果)。谢谢

unity-game-engine particle-system

6
推荐指数
2
解决办法
5900
查看次数

落沙模拟中的水

奇异水物理演示

我目前正在使用 C++ 和 SDL2 开发一个非常简单的“落沙”模拟游戏,并且在让水以更逼真的方式流动方面遇到了问题。我基本上有一个单元格网格,我从下到上,从左到右迭代,如果我找到一个水单元格,我只需检查下面,从下到左,下到右,左然后右的空单元格它移动到它找到的第一个(如果两个对角线单元格或两个水平单元格都是空闲的,它会随机选择)。然后我将它移动到的单元格标记为已处理,以便在该循环的其余部分不会再次检查它。

我的问题是粒子如何移动的一种“左偏”;如果我在屏障上方生成一个正方形的水细胞,一旦粒子开始到达屏障,它们基本上都会向左移动而不移动,而右侧的细胞将以正确的方式向下运行。所以不是形成一个漂亮的三角形,均匀地流向两边,整个形状只会向左移动。每当我从左到右迭代时,这种效果就会逆转,所以我知道这与此有关,但到目前为止我一直在努力修复它。我最初认为这是我如何将单元格标记为已处理的问题,但在数小时的测试中我没有发现该系统有明显的错误。有没有人在开发这样的模拟时遇到过任何类似的挑战,或者知道一些我' 我失踪了?任何帮助将不胜感激。

编辑: 好的,所以我取得了一些进展,但是我遇到了另一个似乎与迭代无关的错误,因为现在我保存了旧单元格的副本并从中读取以决定更新,然后更新原始单元格并显示它。这已经使沙子更好地工作,但是水平检查游离细胞的水现在在水平移动时“消失”。我整个上午都在测试它,但还没有找到解决方案,我认为这可能与我复制数组的方式有关,但据我所知,它似乎有效。

新片段:

模拟.cpp

void Simulation::update()
{
    copyStates(m_cells, m_oldCells); // so now oldcells is the last new state

    for(int y = m_height - 1; y>= 0; y--)
    for(int x = 0; x < m_width; x++)
        {
            Cell* c = getOldCell(x, y); // check in the old state for possible updates
            switch(c->m_type)
            {
                case EMPTY:
                    break;
                case SAND:
                    if(c->m_visited == false) update_sand(x, y);
                    break;
                case WATER:
                    if(c->m_visited == false) update_water(x, y);
                    break;
                default:
                    break; …
Run Code Online (Sandbox Code Playgroud)

c++ simulation cellular-automata game-physics particle-system

6
推荐指数
1
解决办法
269
查看次数

用于粒子系统的GLSL PointSprite

我正在使用带有PointSprites的ParticleSystem(受Cocos2D Source的启发).但我想知道如何重建OpenGL ES 2.0的功能

glEnable(GL_POINT_SPRITE_OES);
glEnableClientState(GL_POINT_SIZE_ARRAY_OES);
glPointSizePointerOES(GL_FLOAT,sizeof(PointSprite),(GLvoid*) (sizeof(GL_FLOAT)*2));
glDisableClientState(GL_POINT_SIZE_ARRAY_OES);
glDisable(GL_POINT_SPRITE_OES);
Run Code Online (Sandbox Code Playgroud)

这些在使用OpenGL ES 2.0上下文时生成BAD_ACCESS.我应该每个PointSprite只使用2个TRIANGLES吗?但那可能不是很有效(额外顶点的开销).

编辑:所以,我的建议解决方案的新问题来自:https: //gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528

可以在批量调用中传递许多不同的大小.我想过使用Attribute而不是Uniform,但是我需要总是将PointSize传递给我的着色器 - 即使我没有绘制GL_POINTS.那么,也许是第二个着色器(仅用于GL_POINTS的着色器)?!我不知道在绘制例程中每一帧切换着色器的开销(因为如果使用粒子系统,我自然也想渲染没有pointSize的常规GL_TRIANGLES)......有什么想法吗?

opengl-es glsl point-sprites particle-system

5
推荐指数
1
解决办法
2312
查看次数

使用粒子系统爆炸3D文本(Swift - SceneKit)

我正在使用Swift SceneKit制作一些爆炸的3D文本.这是文字:

let text = SCNText(string: "Exploding Text", extrusionDepth: 5)
let node = SCNNode(geometry: SCNText)
scene.rootNode.addChildNode(node)
Run Code Online (Sandbox Code Playgroud)

这是我的粒子系统:

let exp = SCNParticleSystem()
exp.loops = false
exp.birthRate = 5000
exp.emissionDuration = 0.01
exp.spreadingAngle = 180
exp.particleDiesOnCollision = true
exp.particleLifeSpan = 0.5
exp.particleLifeSpanVariation = 0.3
exp.particleVelocity = 500
exp.particleVelocityVariation = 3
exp.particleSize = 0.05
exp.stretchFactor = 0.05
exp.particleColor = UIColor.blueColor()
scene.addParticleSystem(exp, withTransform: SCNMatrix4MakeRotation(0, 0, 0, 0))
Run Code Online (Sandbox Code Playgroud)

现在,粒子从文本中心的单个点发出.有没有办法将粒子锁定到文本的表面,然后运行系统来模拟爆炸文本?

如果没有,这可以用任何其他几何对象如立方体完成吗?

particle-system scenekit swift

5
推荐指数
1
解决办法
3519
查看次数

如何修复:NullReferenceException:不要创建自己的模块实例,从 ParticleSystem 实例获取它们

我正在尝试制作一个脚本,以便在按下按钮时粒子系统会更改为某种颜色,除了更改粒子颜色之外,它一切正常,当我尝试时会出现以下错误:

NullReferenceException:不要创建自己的模块实例,而是从 ParticleSystem 实例获取它们

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Attack : MonoBehaviour
{
    public int MovementDirection = 0;
    public int State = 0;

    public GameObject attackOrb; //The prefab for our attack hitbox
    public Transform Player;        //Where the player is

    public float R = 0.0F;
    public float G = 0.0F;
    public float B = 0.0F;
    public float A = 1.0F;

    private ParticleSystem attackEffect;

    // Start is called before the first frame update
    void Start()
    {
        attackEffect = gameObject.GetComponent<ParticleSystem>(); …
Run Code Online (Sandbox Code Playgroud)

c# particles unity-game-engine particle-system

5
推荐指数
1
解决办法
1万
查看次数