I have found the cause of the problem, but not the solution. In my scene, I have some water which uses the SimpleWaterProcessor (see below).
If I remove the line which calls initSimpleWater(), the particles suddenly work just as they should do. However, this is undesirable as I want the water to render!
:arrow: Do you know any way to get around this?
robi1, I have included some code for you!
This is part of the scene class:
[java]
private void initSimpleWater(){
SimpleWaterProcessor waterProcessor = new SimpleWaterProcessor(assetManager);
waterProcessor.setReflectionScene(sceneNode);
Vector3f waterLocation=new Vector3f(0,0,0);
waterProcessor.setPlane(new Plane(Vector3f.UNIT_Y, waterLocation.dot(Vector3f.UNIT_Y)));
waterProcessor.setWaterDepth(20); // transparency of water
waterProcessor.setDistortionScale(0.04f); // strength of waves
waterProcessor.setWaveSpeed(0.04f); // speed of waves
waterProcessor.setLightPosition(lightDir);
//waterProcessor.setWaterTransparency(0.5f);
viewPort.addProcessor(waterProcessor);
Quad quad = new Quad(800,800);
quad.scaleTextureCoordinates(new Vector2f(25f,25f));
Geometry water= new Geometry("water", quad);
water.setLocalRotation(new Quaternion().fromAngleAxis(-FastMath.HALF_PI, Vector3f.UNIT_X));
water.setLocalTranslation(-400, -2, 400);
//water.setShadowMode(ShadowMode.Receive);
Material waterMaterial = waterProcessor.getMaterial();
water.setMaterial(waterMaterial);
rootNode.attachChild(water);
FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
//fpp.addFilter(water);
TranslucentBucketFilter tbf = new TranslucentBucketFilter(true);
fpp.addFilter(tbf);
fpp.addFilter(createFog());
viewPort.addProcessor(fpp);
}
[/java]
This is where the particles are created, in the vehicle class:
[java]
//Import statements and various unused/irrelevant methods have been omitted.
public class PlayerTukTuk extends PlayerVehicle{
Spatial vehicleModel;
VehicleControl control;
CollisionShape carCollisionBox;
Node vehicleNode = new Node("tuktukNode");
Node wheelNode1, wheelNode2, wheelNode3;
Spatial wheel1, wheel2, wheel3;
Material vehicleMaterial;
AssetManager aM;
PhysicsSpace pS;
InputManager gameInputManager;
ParticleEmitter backWheelLParticles, backWheelRParticles, frontWheelParticles, dustCloud, exhaust_1;
final float stiffness = 80f;
float steeringValue = 0;
float steeringAmount = 0.3f;
float accelerationForce = 2000;
float decelerationForce = 20;
float accelerationValue =0;
float brakeForce = 50;
float compValue = 0.1f;
float dampValue = 0.2f;
boolean moving = false;
Vector3f wheel1Vector = new Vector3f(0f, 1f, 4f);
Vector3f wheel2Vector = new Vector3f(1.3f, 1f, -2.4f);
Vector3f wheel3Vector = new Vector3f(-1.3f, 1f, -2.4f);
public PlayerTukTuk(AssetManager a, PhysicsSpace physicsSpace, InputManager i)
{
vehicleNode.setLocalTranslation(new Vector3f(0, 5, 0));
//Setup the main vehicle and physics
aM = a;
gameInputManager = i;
vehicleModel = aM.loadModel("Models/Vehicles/Tuktuk/TukTuk.j3o");
vehicleModel.setLocalScale(0.7f);
CompoundCollisionShape compoundShape = new CompoundCollisionShape();
carCollisionBox = CollisionShapeFactory.createDynamicMeshShape(vehicleModel);
control = new VehicleControl(carCollisionBox, 600f);
vehicleNode.addControl(control);
vehicleNode.attachChild(vehicleModel);
//pS = physicsSpace;
vehicleMaterial = new Material(aM, "Common/MatDefs/Misc/Unshaded.j3md");
vehicleMaterial.setTexture("ColorMap", aM.loadTexture("Models/Vehicles/Tuktuk/baked_tuktuk.png"));
//Setup the wheels
wheelNode1 = new Node("wheel 1 node");
wheel1 = aM.loadModel("Models/Vehicles/Tuktuk/TukTuk Wheel.j3o");
wheel1.setLocalScale(0.7f);
wheelNode1.attachChild(wheel1);
wheel1.rotate(0, FastMath.HALF_PI, 0);
vehicleNode.attachChild(wheelNode1);
wheelNode2 = new Node("wheel 2 node");
wheel2 = aM.loadModel("Models/Vehicles/Tuktuk/TukTuk Wheel.j3o");
wheel2.setLocalScale(0.7f);
wheelNode2.attachChild(wheel2);
wheel2.rotate(0, FastMath.HALF_PI, 0);
vehicleNode.attachChild(wheelNode2);
wheelNode3 = new Node("wheel 3 node");
wheel3 = aM.loadModel("Models/Vehicles/Tuktuk/TukTuk Wheel.j3o");
wheel3.setLocalScale(0.7f);
wheelNode3.attachChild(wheel3);
wheel3.rotate(0, FastMath.HALF_PI, 0);
vehicleNode.attachChild(wheelNode3);
//Setup the physical properties of the vehicle
control.setSuspensionStiffness(stiffness);
control.setMaxSuspensionForce(10000.0f);
control.setSuspensionCompression(compValue * 2.0f * FastMath.sqrt(stiffness));
control.setSuspensionDamping(dampValue * 2.0f * FastMath.sqrt(stiffness));
control.setAngularDamping(0.8f);
control.addWheel(wheelNode1, wheel1Vector, new Vector3f(0, -1, 0), new Vector3f(-1, 0, 0), 0.1f, 0.8f, true);
control.addWheel(wheelNode2, wheel2Vector, new Vector3f(0, -1, 0), new Vector3f(-1, 0, 0), 0.1f, 0.8f, false);
control.addWheel(wheelNode3, wheel3Vector, new Vector3f(0, -1, 0), new Vector3f(-1, 0, 0), 0.1f, 0.8f, false);
Material dustKickParticlesmaterial = new Material(aM, "Common/MatDefs/Misc/Particle.j3md");
dustKickParticlesmaterial.setTexture("Texture", aM.loadTexture("Textures/Particles/ground_dust_kick.png"));
dustKickParticlesmaterial.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha);
dustKickParticlesmaterial.getAdditionalRenderState().setDepthWrite(false);
setUpParticles();
}
@Override
public void setUpParticles()
{
// Wheel Grit
Material dustKickParticlesmaterial = new Material(aM, "Common/MatDefs/Misc/Particle.j3md");
dustKickParticlesmaterial.setTexture("Texture", aM.loadTexture("Textures/Particles/ground_dust_kick.png"));
dustKickParticlesmaterial.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha);
dustKickParticlesmaterial.getAdditionalRenderState().setDepthWrite(false);
backWheelLParticles = new ParticleEmitter("dustKickTwo", ParticleMesh.Type.Triangle, 100);
backWheelLParticles.setMaterial(dustKickParticlesmaterial);
backWheelLParticles.setShape(new EmitterSphereShape(new Vector3f(0,0,0), 1));
backWheelLParticles.setImagesX(3);
backWheelLParticles.setImagesY(3); // 2x2 texture animation
backWheelLParticles.setSelectRandomImage(true);
backWheelLParticles.setStartColor(new ColorRGBA(1f, 1f, 1f, 1f));
backWheelLParticles.setEndColor(new ColorRGBA(1f, 1f, 1f, 0f));
backWheelLParticles.setStartSize(0.3f);
backWheelLParticles.setEndSize(1.2f);
backWheelLParticles.setGravity(0, 40f, 0);
backWheelLParticles.setLowLife(0.3f);
backWheelLParticles.setHighLife(0.6f);
backWheelLParticles.getParticleInfluencer().setInitialVelocity(new Vector3f(0,7,-6));
backWheelLParticles.setParticlesPerSec(60);
backWheelLParticles.setLocalTranslation(wheel2Vector);
vehicleNode.attachChild(backWheelLParticles);
System.out.println("Completed the setup of particles on: "+this.toString());
}
}
[/java]