Search in sources :

Example 1 with ParticleSystemEntity

use of net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity in project tdme by andreasdr.

the class Engine method computeTransformations.

/**
	 * Computes visibility and transformations
	 * @param drawable
	 */
public void computeTransformations(GLAutoDrawable drawable) {
    // init rendering if not yet done
    if (renderingInitiated == false)
        initRendering(drawable);
    // do particle systems auto emit
    for (Entity entity : entitiesById.getValuesIterator()) {
        // skip on disabled entities
        if (entity.isEnabled() == false)
            continue;
        // object particle system entity
        if (entity instanceof ParticleSystemEntity) {
            ParticleSystemEntity pse = (ParticleSystemEntity) entity;
            // do auto emit
            if (pse.isAutoEmit() == true) {
                pse.emitParticles();
                pse.updateParticles();
            }
        }
    }
    // add visible entities to related lists 
    for (Entity entity : partition.getVisibleEntities(camera.getFrustum())) {
        // object 3d
        if (entity instanceof Object3D) {
            Object3D object = (Object3D) entity;
            // compute transformations
            object.computeTransformations();
            // add to visible objects
            visibleObjects.add(object);
        } else // object particle system entity
        if (entity instanceof ObjectParticleSystemEntity) {
            ObjectParticleSystemEntity opse = (ObjectParticleSystemEntity) entity;
            visibleObjects.addAll(opse.getEnabledObjects());
            visibleOpses.add(opse);
        } else // points particle system entity
        if (entity instanceof PointsParticleSystemEntity) {
            PointsParticleSystemEntity ppse = (PointsParticleSystemEntity) entity;
            visiblePpses.add(ppse);
        }
    }
    //
    renderingComputedTransformations = true;
}
Also used : ParticleSystemEntity(net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity) ParticleSystemEntity(net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity)

Example 2 with ParticleSystemEntity

use of net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity in project tdme by andreasdr.

the class EngineTest method init.

/*
	 * (non-Javadoc)
	 * @see com.jogamp.opengl.GLEventListener#init(com.jogamp.opengl.GLAutoDrawable)
	 */
public void init(GLAutoDrawable drawable) {
    engine.init(drawable);
    if (osEngine == null) {
        osEngine = Engine.createOffScreenInstance(drawable, 512, 512);
        //
        Light osLight0 = osEngine.getLightAt(0);
        osLight0.getAmbient().set(1.0f, 1.0f, 1.0f, 1.0f);
        osLight0.getDiffuse().set(1.0f, 1.0f, 1.0f, 1.0f);
        osLight0.getPosition().set(0.0f, -4f, -4f, 1.0f);
        osLight0.getSpotDirection().set(new Vector3(osLight0.getPosition().getArray())).sub(new Vector3(0f, 0f, 0f));
        osLight0.setEnabled(true);
        // cam
        Camera osCam = osEngine.getCamera();
        osCam.setZNear(0.10f);
        osCam.setZFar(50.00f);
        osCam.getLookFrom().set(0f, 4f, -4f);
        osCam.getLookAt().set(0f, 0.50f, 0f);
        osCam.computeUpVector(osCam.getLookFrom(), osCam.getLookAt(), osCam.getUpVector());
        // scene color
        osEngine.getSceneColor().set(0.5f, 0.0f, 0.0f, 1.0f);
    }
    // cam
    Camera cam = engine.getCamera();
    cam.setZNear(0.10f);
    cam.setZFar(50.00f);
    cam.getLookFrom().set(0f, 3f, -8f);
    cam.getLookAt().set(0f, 0.50f, 0f);
    cam.computeUpVector(cam.getLookFrom(), cam.getLookAt(), cam.getUpVector());
    // lights
    Light light0 = engine.getLightAt(0);
    light0.getAmbient().set(1.0f, 1.0f, 1.0f, 1.0f);
    light0.getDiffuse().set(0.5f, 0.5f, 0.5f, 1f);
    light0.getSpecular().set(1f, 1f, 1f, 1f);
    light0.getPosition().set(0f, 20000f, 0f, 1f);
    light0.getSpotDirection().set(0f, 0f, 0f).sub(new Vector3(light0.getPosition().getArray()));
    light0.setConstantAttenuation(0.5f);
    light0.setLinearAttenuation(0f);
    light0.setQuadraticAttenuation(0f);
    light0.setSpotExponent(0f);
    light0.setSpotCutOff(180f);
    light0.setEnabled(true);
    Light light1 = engine.getLightAt(1);
    light1.getDiffuse().set(1.0f, 0.0f, 0.0f, 1.0f);
    light1.getPosition().set(-4.0f, 5.0f, -5.0f, 1.0f);
    light1.getSpotDirection().set(0f, 0f, 0f).sub(new Vector3(light1.getPosition().getArray()));
    light1.setEnabled(true);
    Light light2 = engine.getLightAt(2);
    light2.getDiffuse().set(0.0f, 1.0f, 0.0f, 1.0f);
    light2.getPosition().set(+4.0f, 5.0f, 0.0f, 1.0f);
    light2.getSpotDirection().set(0f, 0f, 0f).sub(new Vector3(light2.getPosition().getArray()));
    light2.setEnabled(true);
    // scene
    players = new ArrayList<Object3D>();
    playersBoundingVolumeModel = new ArrayList<Object3D>();
    playerBoundingVolumesTransformed = new ArrayList<BoundingVolume>();
    try {
        Model _barrel = DAEReader.read("resources/tests/models/barrel", "barrel.dae");
        Object3D barrel = new Object3D("barrel", _barrel);
        barrelBoundingVolume = new ConvexMesh(new Object3DModel(_barrel));
        barrel.getTranslation().set(1.5f, 0.35f, -2f);
        barrel.setDynamicShadowingEnabled(true);
        barrel.setEnabled(true);
        barrel.update();
        barrelBoundingVolumeTransformed = barrelBoundingVolume.clone();
        barrelBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(barrelBoundingVolume, barrel);
        engine.addEntity(barrel);
        // wall
        Model _farPlane = createWallModel();
        Object3D farPlane = new Object3D("wall", _farPlane);
        farPlane.bindDiffuseTexture("wall", "wall", osEngine.getFrameBuffer());
        engine.addEntity(farPlane);
        //
        Model _grass = DAEReader.read("resources/tests/models/grass", "grass.dae");
        Object3D grass = new Object3D("ground", _grass);
        grass.setEnabled(true);
        grass.getScale().set(8f, 1f, 8f);
        grass.update();
        engine.addEntity(grass);
        // players
        Model _player = DAEReader.read("resources/tests/models/dummy", "testDummy_textured.DAE");
        _player.addAnimationSetup("still", 3, 3, true);
        _player.addAnimationSetup("walk", 0, 18, true);
        // player bounding volume
        // playerBoundingVolume = Sphere.createBoundingVolume(new Vector3(0,90f/130f,0), 90f/130f);
        playerBoundingVolume = Capsule.createBoundingVolume(new Vector3(0, 30f / 130f, 0), new Vector3(0, 230f / 130f, 0), 25 / 130f);
        // playerBoundingVolume = BoundingBox.createBoundingVolume(new Vector3(-25f/130f, 0, -25f/130f), new Vector3(+25f/130f, 180f/130f, +25f/130f));
        /*
			playerBoundingVolume = OrientedBoundingBox.createBoundingVolume(
				new Vector3(0f, 90f/130f, 0f),
				new Vector3(1f, 0f, 0f),
				new Vector3(0f, 1f, 0f),
				new Vector3(0f, 0f, 1f),
				new Vector3(25f/130f, 90f/130f, 25f/130f)
			);
			*/
        playerBoundingVolumeModel = PrimitiveModel.createModel(playerBoundingVolume, "player_bv");
        // add player 1
        //	player
        Object3D player1 = new Object3D("player1", _player);
        player1.getTranslation().add(new Vector3(-1.50f, 0f, 0f));
        player1.setAnimation("still");
        player1.getRotations().add(new Rotation(0f, new Vector3(0f, 1f, 0f)));
        player1.update();
        player1.setEnabled(true);
        player1.setPickable(true);
        player1.setDynamicShadowingEnabled(true);
        engine.addEntity(player1);
        //	bounding volume transformed
        BoundingVolume player1BoundingVolumeTransformed = playerBoundingVolume.clone();
        player1BoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player1);
        playerBoundingVolumesTransformed.add(player1BoundingVolumeTransformed);
        //	add to engine
        players.add(player1);
        //	bounding volume
        Object3D player1BoundingVolume = new Object3D("player1_bv", playerBoundingVolumeModel);
        player1BoundingVolume.fromTransformations(player1);
        player1BoundingVolume.setEnabled(true);
        playersBoundingVolumeModel.add(player1BoundingVolume);
        // engine.addEntity(player1BoundingVolume);
        // add player 2
        //	player
        Object3D player2 = new Object3D("player2", _player);
        player2.getTranslation().add(new Vector3(1.50f, 0f, 0f));
        player2.setAnimation("still");
        player2.getRotations().add(new Rotation(0f, new Vector3(0f, 1f, 0f)));
        player2.update();
        player2.setEnabled(true);
        player2.setPickable(true);
        player2.setDynamicShadowingEnabled(true);
        players.add(player2);
        //	bounding volume transformed
        BoundingVolume player2BoundingVolumeTransformed = playerBoundingVolume.clone();
        player2BoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player2);
        playerBoundingVolumesTransformed.add(player2BoundingVolumeTransformed);
        //	add to engine
        engine.addEntity(player2);
        //	bounding volume
        Object3D player2BoundingVolume = new Object3D("player2_bv", playerBoundingVolumeModel);
        player2BoundingVolume.fromTransformations(player2);
        player2BoundingVolume.setEnabled(true);
        playersBoundingVolumeModel.add(player2BoundingVolume);
        // engine.addEntity(player2BoundingVolume);
        // add cube
        Model _cube = DAEReader.read("resources/tests/models/test", "cube.dae");
        cube = new Object3D("cube", _cube);
        cube.getTranslation().add(new Vector3(0f, 0f, 0f));
        cube.getScale().set(2f, 2f, 2f);
        cube.update();
        cube.setPickable(true);
        cube.setDynamicShadowingEnabled(true);
        cube.setEnabled(true);
        cubeBoundingVolume = cube.getBoundingBox();
        cubeBoundingVolumeTransformed = cubeBoundingVolume.clone();
        cubeBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(cubeBoundingVolume, cube);
        engine.addEntity(cube);
        //
        cubeBoundingVolumeModel = PrimitiveModel.createModel(cubeBoundingVolume, "cube_bv");
        //	bounding volume
        Object3D cubeBoundingVolumeObject3D = new Object3D("cube_bv", cubeBoundingVolumeModel);
        cubeBoundingVolumeObject3D.fromTransformations(cube);
        cubeBoundingVolumeObject3D.setEnabled(true);
        engine.addEntity(cubeBoundingVolumeObject3D);
        // wall
        Model _wall = DAEReader.read("resources/tests/models/wall", "wall.dae");
        Object3D wall0 = new Object3D("wall0", _wall);
        wall0.getTranslation().add(new Vector3(-1.00f, 0f, 3.00f));
        wall0.update();
        wall0.setPickable(true);
        wall0.setEnabled(true);
        engine.addEntity(wall0);
        Object3D wall1 = new Object3D("wall1", _wall);
        wall1.getTranslation().add(new Vector3(0f, 0f, 3.00f));
        wall1.update();
        wall1.setPickable(true);
        wall1.setEnabled(true);
        engine.addEntity(wall1);
        // os engine test
        Object3D osCube = new Object3D("cube", _cube);
        osCube.getTranslation().add(new Vector3(0f, 0f, 0f));
        osCube.getScale().set(2f, 2f, 2f);
        osCube.update();
        osEngine.addEntity(osCube);
        //
        circleTransformations = new Transformations();
        engine.addEntity(new PointsParticleSystemEntity("circle", false, new CircleParticleEmitter(3000, 50, 50, new Vector3(1f, 0f, 0f), new Vector3(0f, 0f, 1f), new Vector3(0f, 0f, 0f), 0.4f, 0f, 0f, new Vector3(0f, 0.2f, 0f), new Vector3(0f, 0.2f, 0f), new Color4(1f, 1f, 1f, 0.3f), new Color4(1f, 1f, 1f, 0.3f)), 1000, true));
        engine.getEntity("circle").setEnabled(true);
        engine.addEntity(new PointsParticleSystemEntity("water", true, new SphereParticleEmitter(4000, 1000, 0, 0.1f, 0.0f, new Sphere(new Vector3(-1f, 1f, 0f), 0.05f), new Vector3(-4f, 0f, 1f), new Vector3(-1f, 0f, 0f), new Color4(0.8f, 0.8f, 1f, 0.25f), new Color4(0.8f, 0.8f, 1f, 0.25f)), 4000, true));
        engine.getEntity("water").setEnabled(true);
        engine.addEntity(new PointsParticleSystemEntity("snow", false, new BoundingBoxParticleEmitter(15, 15000, 1000, 0, 0, new OrientedBoundingBox(new Vector3(0f, 4f, 0f), new Vector3(1f, 0f, 0f), new Vector3(0f, 1f, 0f), new Vector3(0f, 0f, 1f), new Vector3(4f, 0f, 4f)), new Vector3(0f, -0.5f, 0f), new Vector3(0f, -0.1f, 0f), new Color4(0.8f, 0.8f, 1f, 0.5f), new Color4(0.8f, 0.8f, 1f, 0.5f)), 1024, true));
        engine.getEntity("snow").setEnabled(true);
        engine.addEntity(new PointsParticleSystemEntity("firebase", false, new SphereParticleEmitter(2048, 1024, 2048, 0, 0, new Sphere(new Vector3(2.5f, 0.2f, 0f), 0.2f), new Vector3(0f, 0.1f, 0f), new Vector3(0f, 0.1f, 0f), new Color4(0.0f, 0f, 0f, 0.5f), new Color4(0.4f, 0f, 0f, 0.5f)), 2048, true));
        engine.getEntity("firebase").setEnabled(true);
        //
        engine.addEntity(new PointsParticleSystemEntity("firetop", false, new SphereParticleEmitter(2048, 1024, 2048, 0, 0, new Sphere(new Vector3(2.5f, 0.7f, 0f), 0.1f), new Vector3(0f, 0.06f, 0f), new Vector3(0f, 0.12f, 0f), new Color4(0.75f, 0.0f, 0f, 0.5f), new Color4(1f, 1f, 0f, 0.5f)), 2048, true));
        engine.getEntity("firetop").setEnabled(true);
        //
        engine.addEntity(new PointsParticleSystemEntity("firesmoke", false, new SphereParticleEmitter(2048, 1024, 2048, 0, 0, new Sphere(new Vector3(2.5f, 0.7f, 0f), 0.1f), new Vector3(0f, 0.2f, 0f), new Vector3(0f, 0.4f, 0f), new Color4(0.8f, 0.8f, 0.8f, 0.1f), new Color4(0.8f, 0.8f, 0.8f, 0.1f)), 2048, true));
        engine.getEntity("firesmoke").setEnabled(true);
        ((ParticleSystemEntity) engine.getEntity("circle")).setPickable(false);
        ((ParticleSystemEntity) engine.getEntity("snow")).setPickable(false);
        ((ParticleSystemEntity) engine.getEntity("firebase")).setPickable(true);
        ((ParticleSystemEntity) engine.getEntity("firetop")).setPickable(true);
        ((ParticleSystemEntity) engine.getEntity("firesmoke")).setPickable(true);
    } catch (Exception exception) {
        exception.printStackTrace();
        System.out.println("Could not load object: " + exception.getMessage());
    }
}
Also used : CircleParticleEmitter(net.drewke.tdme.engine.subsystems.particlesystem.CircleParticleEmitter) Vector3(net.drewke.tdme.math.Vector3) ConvexMesh(net.drewke.tdme.engine.primitives.ConvexMesh) Object3DModel(net.drewke.tdme.engine.Object3DModel) PointsParticleSystemEntity(net.drewke.tdme.engine.PointsParticleSystemEntity) PointsParticleSystemEntity(net.drewke.tdme.engine.PointsParticleSystemEntity) ParticleSystemEntity(net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity) Rotation(net.drewke.tdme.engine.Rotation) Object3D(net.drewke.tdme.engine.Object3D) Sphere(net.drewke.tdme.engine.primitives.Sphere) Color4(net.drewke.tdme.engine.model.Color4) OrientedBoundingBox(net.drewke.tdme.engine.primitives.OrientedBoundingBox) Light(net.drewke.tdme.engine.Light) Model(net.drewke.tdme.engine.model.Model) Object3DModel(net.drewke.tdme.engine.Object3DModel) PrimitiveModel(net.drewke.tdme.engine.primitives.PrimitiveModel) BoundingVolume(net.drewke.tdme.engine.primitives.BoundingVolume) Transformations(net.drewke.tdme.engine.Transformations) BoundingBoxParticleEmitter(net.drewke.tdme.engine.subsystems.particlesystem.BoundingBoxParticleEmitter) Camera(net.drewke.tdme.engine.Camera) SphereParticleEmitter(net.drewke.tdme.engine.subsystems.particlesystem.SphereParticleEmitter)

Example 3 with ParticleSystemEntity

use of net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity in project tdme by andreasdr.

the class ParticleSystemView method display.

/**
	 * Renders the scene 
	 */
public void display(GLAutoDrawable drawable) {
    // load model
    if (loadParticleSystemRequested == true) {
        initParticleSystemRequested = true;
        loadParticleSystemRequested = false;
        loadParticleSystem();
        cameraRotationInputHandler.reset();
    }
    // init model
    if (initParticleSystemRequested == true) {
        engine.reset();
        initParticleSystem(drawable);
        particleSystemScreenController.setParticleSystemType();
        particleSystemScreenController.setParticleSystemEmitter();
        initParticleSystemRequested = false;
    }
    // emit and update
    ParticleSystemEntity particleSystemEntity = (ParticleSystemEntity) engine.getEntity("model");
    if (particleSystemEntity != null && particleSystemEntity.isAutoEmit() == false) {
        particleSystemEntity.emitParticles();
        particleSystemEntity.updateParticles();
    }
    // delegate to entity display view
    entityDisplayView.display(entity);
    // do GUI
    engine.getGUI().render();
    engine.getGUI().handleEvents();
}
Also used : ParticleSystemEntity(net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity)

Example 4 with ParticleSystemEntity

use of net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity in project tdme by andreasdr.

the class EngineTest method display.

/*
	 * (non-Javadoc)
	 * @see com.jogamp.opengl.GLEventListener#display(com.jogamp.opengl.GLAutoDrawable)
	 */
public void display(GLAutoDrawable drawable) {
    circleTransformations.getTranslation().setX(players.get(0).getTranslation().getX());
    circleTransformations.getTranslation().setZ(players.get(0).getTranslation().getZ());
    circleTransformations.getTranslation().addY(0.1f);
    if (circleTransformations.getTranslation().getY() > 1.5f) {
        circleTransformations.getTranslation().setY(0f);
    }
    circleTransformations.update();
    ((ParticleSystemEntity) engine.getEntity("circle")).getParticleEmitter().fromTransformations(circleTransformations);
    // player control
    doPlayerControl(0, keyLeft, keyRight, keyUp);
    doPlayerControl(1, keyA, keyD, keyW);
    // update bounding boxes
    for (int i = 0; i < players.size(); i++) {
        playersBoundingVolumeModel.get(i).fromTransformations(players.get(i));
    }
    // render
    osEngine.display(drawable);
    engine.display(drawable);
    // handle mouse clicked
    if (mouseClicked != null) {
        if (entityClicked != null) {
            entityClicked.getEffectColorMul().setRed(1.0f);
            entityClicked.getEffectColorMul().setGreen(1.0f);
            entityClicked.getEffectColorMul().setBlue(1.0f);
        }
        Entity _object3DClicked = engine.getObjectByMousePosition(mouseClicked[0], mouseClicked[1]);
        if (_object3DClicked != null) {
            _object3DClicked.getEffectColorMul().setRed(2.0f);
            _object3DClicked.getEffectColorMul().setGreen(2.0f);
            _object3DClicked.getEffectColorMul().setBlue(2.0f);
        }
        entityClicked = _object3DClicked;
        mouseClicked = null;
    }
}
Also used : Entity(net.drewke.tdme.engine.Entity) PointsParticleSystemEntity(net.drewke.tdme.engine.PointsParticleSystemEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) ParticleSystemEntity(net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity)

Aggregations

ParticleSystemEntity (net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity)4 PointsParticleSystemEntity (net.drewke.tdme.engine.PointsParticleSystemEntity)2 Camera (net.drewke.tdme.engine.Camera)1 Entity (net.drewke.tdme.engine.Entity)1 Light (net.drewke.tdme.engine.Light)1 Object3D (net.drewke.tdme.engine.Object3D)1 Object3DModel (net.drewke.tdme.engine.Object3DModel)1 Rotation (net.drewke.tdme.engine.Rotation)1 Transformations (net.drewke.tdme.engine.Transformations)1 Color4 (net.drewke.tdme.engine.model.Color4)1 FacesEntity (net.drewke.tdme.engine.model.FacesEntity)1 Model (net.drewke.tdme.engine.model.Model)1 BoundingVolume (net.drewke.tdme.engine.primitives.BoundingVolume)1 ConvexMesh (net.drewke.tdme.engine.primitives.ConvexMesh)1 OrientedBoundingBox (net.drewke.tdme.engine.primitives.OrientedBoundingBox)1 PrimitiveModel (net.drewke.tdme.engine.primitives.PrimitiveModel)1 Sphere (net.drewke.tdme.engine.primitives.Sphere)1 BoundingBoxParticleEmitter (net.drewke.tdme.engine.subsystems.particlesystem.BoundingBoxParticleEmitter)1 CircleParticleEmitter (net.drewke.tdme.engine.subsystems.particlesystem.CircleParticleEmitter)1 SphereParticleEmitter (net.drewke.tdme.engine.subsystems.particlesystem.SphereParticleEmitter)1