Search in sources :

Example 1 with Camera

use of net.drewke.tdme.engine.Camera in project tdme by andreasdr.

the class CameraRotationInputHandler method handleInputEvents.

/*
	 * (non-Javadoc)
	 * @see net.drewke.tdme.gui.events.GUIInputEventHandler#handleInputEvents()
	 */
public void handleInputEvents() {
    // handle mouse events
    for (int i = 0; i < engine.getGUI().getMouseEvents().size(); i++) {
        GUIMouseEvent event = engine.getGUI().getMouseEvents().get(i);
        // skip on processed events
        if (event.isProcessed() == true)
            continue;
        // dragging
        if (mouseDragging == true) {
            if (event.getButton() == 1) {
                float xMoved = (event.getX() - mouseLastX) / 5f;
                float yMoved = (event.getY() - mouseLastY) / 5f;
                mouseLastX = event.getX();
                mouseLastY = event.getY();
                Rotation xRotation = lookFromRotations.getRotations().get(0);
                Rotation yRotation = lookFromRotations.getRotations().get(1);
                float xRotationAngle = xRotation.getAngle() + xMoved;
                float yRotationAngle = yRotation.getAngle() + yMoved;
                xRotation.setAngle(xRotationAngle);
                yRotation.setAngle(yRotationAngle);
                lookFromRotations.update();
            } else {
                mouseDragging = false;
            }
        } else {
            if (event.getButton() == 1) {
                mouseDragging = true;
                mouseLastX = event.getX();
                mouseLastY = event.getY();
            }
        }
        // process mouse wheel events
        float mouseWheel = event.getWheelY();
        if (mouseWheel != 0) {
            scale += mouseWheel * 0.05f;
            if (scale < 0.05f)
                scale = 0.05f;
        }
    }
    // handle keyboard events
    for (int i = 0; i < engine.getGUI().getKeyboardEvents().size(); i++) {
        GUIKeyboardEvent event = engine.getGUI().getKeyboardEvents().get(i);
        // skip on processed events
        if (event.isProcessed() == true)
            continue;
        //
        boolean isKeyDown = event.getType() == Type.KEY_PRESSED;
        if (event.getKeyCode() == GUIKeyboardEvent.KEYCODE_LEFT)
            keyLeft = isKeyDown;
        if (event.getKeyCode() == GUIKeyboardEvent.KEYCODE_RIGHT)
            keyRight = isKeyDown;
        if (event.getKeyCode() == GUIKeyboardEvent.KEYCODE_UP)
            keyUp = isKeyDown;
        if (event.getKeyCode() == GUIKeyboardEvent.KEYCODE_DOWN)
            keyDown = isKeyDown;
        if (Character.toLowerCase(event.getKeyChar()) == '.')
            keyPeriod = isKeyDown;
        if (Character.toLowerCase(event.getKeyChar()) == ',')
            keyComma = isKeyDown;
        if (Character.toLowerCase(event.getKeyChar()) == '+')
            keyPlus = isKeyDown;
        if (Character.toLowerCase(event.getKeyChar()) == '-')
            keyMinus = isKeyDown;
        if (Character.toLowerCase(event.getKeyChar()) == 'r')
            keyR = isKeyDown;
    }
    //
    // handle keyboard input
    //	get rotations
    Rotation rotationX = lookFromRotations.getRotations().get(0);
    Rotation rotationY = lookFromRotations.getRotations().get(1);
    Rotation rotationZ = lookFromRotations.getRotations().get(2);
    // 	transfer keyboard inputs to rotations
    if (keyLeft)
        rotationX.setAngle(rotationX.getAngle() - 1f);
    if (keyRight)
        rotationX.setAngle(rotationX.getAngle() + 1f);
    if (keyUp)
        rotationY.setAngle(rotationY.getAngle() + 1f);
    if (keyDown)
        rotationY.setAngle(rotationY.getAngle() - 1f);
    if (keyComma)
        rotationZ.setAngle(rotationZ.getAngle() - 1f);
    if (keyPeriod)
        rotationZ.setAngle(rotationZ.getAngle() + 1f);
    if (keyMinus)
        scale += 0.05f;
    if (keyPlus && scale > 0.05f)
        scale -= 0.05f;
    if (keyR == true || resetRequested == true) {
        rotationY.setAngle(-45f);
        rotationZ.setAngle(0f);
        scale = 1.0f;
    }
    // 	update transformations if key was pressed
    if (keyLeft || keyRight || keyUp || keyDown || keyComma || keyPeriod || keyR || resetRequested) {
        lookFromRotations.update();
        resetRequested = false;
    }
    // set up cam
    Camera cam = engine.getCamera();
    // we have a fixed look at
    Vector3 lookAt = cam.getLookAt();
    // look at -> look to vector
    Vector3 lookAtToFromVector = new Vector3(0f, 0f, +(maxAxisDimension * 1.2f));
    // apply look from rotations
    // apply look from rotations
    Vector3 lookAtToFromVectorTransformed = new Vector3();
    Vector3 lookAtToFromVectorScaled = new Vector3();
    Vector3 upVector = new Vector3();
    lookFromRotations.getTransformationsMatrix().multiply(lookAtToFromVector, lookAtToFromVectorTransformed);
    lookAtToFromVectorScaled.set(lookAtToFromVectorTransformed).scale(scale);
    lookFromRotations.getRotations().get(2).getQuaternion().multiply(new Vector3(0f, 1f, 0f), upVector);
    /*
		Vector3 forwardVector = lookAtToFromVectorTransformed.clone().scale(-1f);
		Vector3 sideVector = Vector3.computeCrossProduct(forwardVector, upVector);

		if (keyA) camLookAt.sub(sideVector.clone().scale(0.05f));
		if (keyD) camLookAt.add(sideVector.clone().scale(0.05f));
		if (keyW) camLookAt.add(upVector.clone().scale(0.05f * forwardVector.computeLength()));
		if (keyS) camLookAt.sub(upVector.clone().scale(0.05f * forwardVector.computeLength()));
		*/
    // look from with rotations
    Vector3 lookFrom = lookAt.clone().add(lookAtToFromVectorScaled);
    cam.getLookFrom().set(lookFrom);
    // up vector
    cam.getUpVector().set(upVector);
}
Also used : GUIKeyboardEvent(net.drewke.tdme.gui.events.GUIKeyboardEvent) Vector3(net.drewke.tdme.math.Vector3) Camera(net.drewke.tdme.engine.Camera) Rotation(net.drewke.tdme.engine.Rotation) GUIMouseEvent(net.drewke.tdme.gui.events.GUIMouseEvent)

Example 2 with Camera

use of net.drewke.tdme.engine.Camera 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 Camera

use of net.drewke.tdme.engine.Camera in project tdme by andreasdr.

the class PhysicsTest1 method init.

/*
	 * (non-Javadoc)
	 * @see com.jogamp.opengl.GLEventListener#init(com.jogamp.opengl.GLAutoDrawable)
	 */
public void init(GLAutoDrawable drawable) {
    drawable.getGL().setSwapInterval(0);
    engine.init(drawable);
    Object3D entity;
    // cam
    Camera cam = engine.getCamera();
    cam.setZNear(0.10f);
    cam.setZFar(50.00f);
    cam.getLookFrom().set(0f, 4f * 2.5f, -6f * 2.5f);
    cam.getLookAt().set(0f, 0.0f, 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);
    // ground
    OrientedBoundingBox ground = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(8f, 1f, 8f));
    Model groundModel = PrimitiveModel.createModel(ground, "ground_model");
    groundModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
    groundModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
    entity = new Object3D("ground", groundModel);
    // entity.getRotations().add(new Rotation(10f, OrientedBoundingBox.AABB_AXIS_Z.clone()));
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("ground", true, RIGID_TYPEID_STANDARD, entity, ground, 0.5f);
    // side
    OrientedBoundingBox side = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(1f, 16f, 8f));
    Model sideModel = PrimitiveModel.createModel(side, "side_model");
    sideModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
    sideModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
    // far
    OrientedBoundingBox nearFar = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(8f, 16f, 1f));
    Model nearFarModel = PrimitiveModel.createModel(nearFar, "far_model");
    nearFarModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
    nearFarModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
    // far
    entity = new Object3D("far", nearFarModel);
    entity.getTranslation().addZ(+9f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("far", true, RIGID_TYPEID_STANDARD, entity, nearFar, 0.5f);
    // near
    entity = new Object3D("near", nearFarModel);
    entity.getTranslation().addZ(-9f);
    entity.getEffectColorMul().set(1f, 1f, 1f, 0f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("near", true, RIGID_TYPEID_STANDARD, entity, nearFar, 0.5f);
    // side left
    entity = new Object3D("sideright", sideModel);
    entity.getTranslation().addX(-9f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("sideright", true, RIGID_TYPEID_STANDARD, entity, side, 0.5f);
    // side right
    entity = new Object3D("sideleft", sideModel);
    entity.getTranslation().addX(9f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("sideleft", true, RIGID_TYPEID_STANDARD, entity, side, 0.5f);
    // box
    OrientedBoundingBox box = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(0.6f, 0.6f, 0.6f));
    Model boxModel = PrimitiveModel.createModel(box, "box_model");
    boxModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.5f, 0.5f, 1f);
    boxModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
    // boxes
    for (int i = 0; i < BOX_COUNT; i++) {
        entity = new Object3D("box" + i, boxModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(10f + i * 3.0f);
        entity.getTranslation().addX(-2f + i * 0.1f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("box" + i, true, RIGID_TYPEID_STANDARD, entity, box, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
    }
    // stack
    for (int i = 0; i < BOXSTACK_COUNT; i++) {
        entity = new Object3D("box" + (BOX_COUNT + i), boxModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(1.6f + (i * 1.2f));
        entity.getTranslation().addX(+3f);
        entity.getTranslation().addZ(-5f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("box" + (BOX_COUNT + i), true, RIGID_TYPEID_STANDARD, entity, box, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
    }
    // sphere
    Sphere sphere = new Sphere(new Vector3(0f, 0f, 0f), 0.4f);
    Model sphereModel = PrimitiveModel.createModel(sphere, "sphere_model");
    sphereModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.5f, 0.8f, 0.8f, 1f);
    sphereModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(0f, 1f, 1f, 1f);
    // spheres
    for (int i = 0; i < SPHERE_COUNT; i++) {
        entity = new Object3D("sphere" + i, sphereModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(12f + (i * 1f));
        entity.getTranslation().addX(0.45f * i - 3f);
        entity.getTranslation().addZ(0.1f * i - 3f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("sphere" + i, true, RIGID_TYPEID_STANDARD, entity, sphere, 0.75f, 0.4f, 10f, RigidBody.computeInertiaMatrix(sphere, 10f, 1f, 1f, 1f));
    }
    // sphere
    Capsule capsule = new Capsule(new Vector3(0f, 0.5f, 0f), new Vector3(0f, -0.5f, 0f), 0.25f);
    Model capsuleModel = PrimitiveModel.createModel(capsule, "capsule_model");
    capsuleModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.0f, 0.8f, 1f);
    capsuleModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 1f, 1f);
    //
    for (int i = 0; i < CAPSULE_COUNT; i++) {
        entity = new Object3D("capsule" + i, capsuleModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(14f + (i * 2f));
        entity.getTranslation().addX((i * 0.5f));
        // entity.getPivot().set(capsule.getCenter());
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("capsule" + i, true, RIGID_TYPEID_STANDARD, entity, capsule, 0.0f, 0.4f, 3f, RigidBody.computeInertiaMatrix(capsule, 3f, 1f, 1f, 1f));
    }
    // sphere
    //Capsule capsuleBig = new Capsule(
    //	new Vector3(0f,+1f,0f),
    //	new Vector3(0f,-1f,0f),
    //	0.5f
    //);
    OrientedBoundingBox capsuleBig = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(0.5f, 1f, 0.5f));
    Model capsuleBigModel = PrimitiveModel.createModel(capsuleBig, "capsulebig_model");
    capsuleBigModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(1f, 0.8f, 0.8f, 1f);
    capsuleBigModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
    System.out.println(capsuleBig.getCenter());
    //
    entity = new Object3D("capsulebig1", capsuleBigModel);
    entity.setDynamicShadowingEnabled(true);
    entity.getTranslation().addY(5f);
    entity.getTranslation().addX(-2f);
    entity.update();
    engine.addEntity(entity);
    world.addRigidBody("capsulebig1", true, RIGID_TYPEID_STANDARD, entity, capsuleBig, 0f, 1f, 80f, RigidBody.getNoRotationInertiaMatrix());
    //
    entity = new Object3D("capsulebig2", capsuleBigModel);
    entity.setDynamicShadowingEnabled(true);
    entity.getTranslation().addY(5f);
    entity.getTranslation().addX(+2f);
    entity.update();
    engine.addEntity(entity);
    world.addRigidBody("capsulebig2", true, RIGID_TYPEID_STANDARD, entity, capsuleBig, 0f, 1f, 100f, RigidBody.getNoRotationInertiaMatrix());
    try {
        // load barrel, set up bounding volume
        Model _barrel = DAEReader.read("resources/tests/models/barrel", "barrel.dae");
        // _barrel.getImportTransformationsMatrix().scale(2f);
        ConvexMesh barrelBoundingVolume = new ConvexMesh(new Object3DModel(_barrel));
        // set up barrel 1 in 3d engine
        entity = new Object3D("barrel1", _barrel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(+4f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("barrel1", true, RIGID_TYPEID_STANDARD, entity, barrelBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(barrelBoundingVolume, 100f, 1f, 1f, 1f));
        // set up barrel 2 in 3d engine
        entity = new Object3D("barrel2", _barrel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(+6f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("barrel2", true, RIGID_TYPEID_STANDARD, entity, barrelBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(barrelBoundingVolume, 100f, 1f, 1f, 1f));
        // load cone, set up bounding volume
        Model _cone = DAEReader.read("resources/tests/models/cone", "cone.dae");
        // _barrel.getImportTransformationsMatrix().scale(2f);
        ConvexMesh coneBoundingVolume = new ConvexMesh(new Object3DModel(_cone));
        // set up cone 1 in 3d engine
        entity = new Object3D("cone1", _cone);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-4f);
        entity.getScale().set(3f, 3f, 3f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("cone1", true, RIGID_TYPEID_STANDARD, entity, coneBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(coneBoundingVolume, 100f, 1f, 1f, 1f));
        // set up cone 1 in 3d engine
        entity = new Object3D("cone2", _cone);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-5f);
        entity.getScale().set(3f, 3f, 3f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("cone2", true, RIGID_TYPEID_STANDARD, entity, coneBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(coneBoundingVolume, 100f, 1f, 1f, 1f));
        // load cone, set up bounding volume
        Model _tire = DAEReader.read("resources/tests/models/tire", "tire.dae");
        // _barrel.getImportTransformationsMatrix().scale(2f);
        ConvexMesh tireBoundingVolume = new ConvexMesh(new Object3DModel(_tire));
        // set up tire 1 in 3d engine
        entity = new Object3D("tire1", _tire);
        entity.setDynamicShadowingEnabled(true);
        entity.getRotations().add(new Rotation(90f, new Vector3(1f, 0f, 0f)));
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-4f);
        entity.getTranslation().addZ(-2f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("tire1", true, RIGID_TYPEID_STANDARD, entity, tireBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(tireBoundingVolume, 100f, 1f, 1f, 1f));
        // set up tire 1 in 3d engine
        entity = new Object3D("tire2", _tire);
        entity.setDynamicShadowingEnabled(true);
        entity.getRotations().add(new Rotation(90f, new Vector3(1f, 0f, 0f)));
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-6f);
        entity.getTranslation().addZ(-2f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("tire2", true, RIGID_TYPEID_STANDARD, entity, tireBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(tireBoundingVolume, 100f, 1f, 1f, 1f));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : Vector3(net.drewke.tdme.math.Vector3) Capsule(net.drewke.tdme.engine.primitives.Capsule) ConvexMesh(net.drewke.tdme.engine.primitives.ConvexMesh) Object3DModel(net.drewke.tdme.engine.Object3DModel) Rotation(net.drewke.tdme.engine.Rotation) Object3D(net.drewke.tdme.engine.Object3D) Sphere(net.drewke.tdme.engine.primitives.Sphere) OrientedBoundingBox(net.drewke.tdme.engine.primitives.OrientedBoundingBox) Light(net.drewke.tdme.engine.Light) Model(net.drewke.tdme.engine.model.Model) PrimitiveModel(net.drewke.tdme.engine.primitives.PrimitiveModel) Object3DModel(net.drewke.tdme.engine.Object3DModel) Camera(net.drewke.tdme.engine.Camera)

Example 4 with Camera

use of net.drewke.tdme.engine.Camera in project tdme by andreasdr.

the class LevelEditorView method display.

/**
	 * Renders the scene 
	 */
public void display(GLAutoDrawable drawable) {
    // camera
    Camera cam = engine.getCamera();
    // reload entity library
    if (reloadEntityLibrary == true) {
        LevelEditorEntityLibrary entityLibrary = TDMELevelEditor.getInstance().getEntityLibrary();
        for (int i = 0; i < entityLibrary.getEntityCount(); i++) {
            selectedEntity = entityLibrary.getEntityAt(i);
            Tools.oseThumbnail(drawable, selectedEntity);
        }
        reloadEntityLibrary = false;
        TDMELevelEditor.getInstance().getLevelEditorEntityLibraryScreenController().setEntityLibrary();
    }
    // do camera rotation by middle mouse button
    if (mouseRotationX != MOUSE_ROTATION_NONE) {
        camLookRotationY.setAngle(camLookRotationY.getAngle() + mouseRotationX);
        camLookRotationY.update();
        mouseRotationX = 0;
    }
    if (mouseRotationY != MOUSE_ROTATION_NONE) {
        camLookRotationX.setAngle(camLookRotationX.getAngle() + mouseRotationY);
        camLookRotationX.update();
        mouseRotationY = 0;
    }
    // 	transfer keyboard inputs to rotations
    if (keyA)
        camLookRotationY.setAngle(camLookRotationY.getAngle() + 1.0f);
    if (keyD)
        camLookRotationY.setAngle(camLookRotationY.getAngle() - 1.0f);
    if (keyW)
        camLookRotationX.setAngle(camLookRotationX.getAngle() + 1.0f);
    if (keyS)
        camLookRotationX.setAngle(camLookRotationX.getAngle() - 1.0f);
    if (keyMinus)
        camScale += 0.05f;
    if (keyPlus)
        camScale -= 0.05f;
    if (camScale < camScaleMin)
        camScale = camScaleMin;
    if (camScale > camScaleMax)
        camScale = camScaleMax;
    if (keyR) {
        camLookRotationX.setAngle(-45.0f);
        camLookRotationX.update();
        camLookRotationY.setAngle(0.0f);
        camLookRotationY.update();
        cam.getLookAt().set(level.computeCenter());
        camScale = 1.0f;
    }
    // update cam look from rotations if changed
    if (keyA || keyD)
        camLookRotationY.update();
    if (keyW || keyS) {
        if (camLookRotationX.getAngle() > 89.99f)
            camLookRotationX.setAngle(89.99f);
        if (camLookRotationX.getAngle() < -89.99f)
            camLookRotationX.setAngle(-89.99f);
        camLookRotationX.update();
    }
    // look at -> look to vector
    camLookRotationX.getQuaternion().multiply(FORWARD_VECTOR, tmpVector3);
    camLookRotationY.getQuaternion().multiply(tmpVector3, tmpVector3);
    // apply look from rotations
    camLookAtToFromVector.set(tmpVector3).scale(camScale * 10.0f);
    // timing
    Timing timing = engine.getTiming();
    // do camera movement with arrow keys
    camLookRotationY.getQuaternion().multiply(FORWARD_VECTOR, camForwardVector).scale(timing.getDeltaTime() / 1000f * 60f);
    camLookRotationY.getQuaternion().multiply(SIDE_VECTOR, camSideVector).scale(timing.getDeltaTime() / 1000f * 60f);
    if (keyUp)
        cam.getLookAt().sub(tmpVector3.set(camForwardVector).scale(0.1f));
    if (keyDown)
        cam.getLookAt().add(tmpVector3.set(camForwardVector).scale(0.1f));
    if (keyLeft)
        cam.getLookAt().sub(tmpVector3.set(camSideVector).scale(0.1f));
    if (keyRight)
        cam.getLookAt().add(tmpVector3.set(camSideVector).scale(0.1f));
    // mouse panning
    if (mousePanningForward != MOUSE_PANNING_NONE) {
        cam.getLookAt().sub(tmpVector3.set(camForwardVector).scale(mousePanningForward / 30f * camScale));
        mousePanningForward = MOUSE_PANNING_NONE;
    }
    if (mousePanningSide != MOUSE_PANNING_NONE) {
        cam.getLookAt().sub(tmpVector3.set(camSideVector).scale(mousePanningSide / 30f * camScale));
        mousePanningSide = MOUSE_PANNING_NONE;
    }
    // look from with rotations
    cam.getLookFrom().set(cam.getLookAt()).add(camLookAtToFromVector);
    // up vector
    cam.computeUpVector(cam.getLookFrom(), cam.getLookAt(), cam.getUpVector());
    // update grid
    gridCenter.set(cam.getLookAt());
    updateGrid();
    // do GUI
    engine.getGUI().render();
    engine.getGUI().handleEvents();
}
Also used : LevelEditorEntityLibrary(net.drewke.tdme.tools.shared.model.LevelEditorEntityLibrary) Camera(net.drewke.tdme.engine.Camera) Timing(net.drewke.tdme.engine.Timing)

Example 5 with Camera

use of net.drewke.tdme.engine.Camera in project tdme by andreasdr.

the class LevelEditorView method init.

/*
	 * (non-Javadoc)
	 * @see net.drewke.tdme.tools.shared.views.View#init()
	 */
public void init() {
    // reset engine and partition
    engine.reset();
    engine.setPartition(new PartitionQuadTree());
    //
    try {
        levelEditorScreenController = new LevelEditorScreenController(this);
        levelEditorScreenController.init();
        levelEditorScreenController.getScreenNode().setInputEventHandler(this);
        engine.getGUI().addScreen(levelEditorScreenController.getScreenNode().getId(), levelEditorScreenController.getScreenNode());
    } catch (Exception e) {
        e.printStackTrace();
    }
    // load settings
    loadSettings();
    // set up grid
    levelEditorScreenController.setGrid(gridEnabled, gridY);
    // set up map properties
    levelEditorScreenController.setMapProperties(level.getProperties(), null);
    // set up object properties presets
    levelEditorScreenController.setObjectPresetIds(LevelPropertyPresets.getInstance().getObjectPropertiesPresets().keySet());
    // set up ligh presets
    levelEditorScreenController.setLightPresetsIds(LevelPropertyPresets.getInstance().getLightPresets().keySet());
    //
    updateGUIElements();
    // lights
    Light light0 = engine.getLightAt(0);
    light0.getAmbient().set(1.0f, 1.0f, 1.0f, 1.0f);
    light0.getDiffuse().set(1.0f, 1.0f, 1.0f, 1.0f);
    light0.getPosition().set(0f, 20f, 0f, 1.0f);
    light0.setEnabled(true);
    // cam
    Camera cam = engine.getCamera();
    cam.setZNear(1f);
    cam.setZFar(1000f);
    cam.getLookAt().set(level.computeCenter());
    gridCenter.set(cam.getLookAt());
    // store cam look at
    camLookAt.set(engine.getCamera().getLookAt());
}
Also used : LevelEditorScreenController(net.drewke.tdme.tools.leveleditor.controller.LevelEditorScreenController) Light(net.drewke.tdme.engine.Light) Camera(net.drewke.tdme.engine.Camera) IOException(java.io.IOException) PartitionQuadTree(net.drewke.tdme.engine.PartitionQuadTree)

Aggregations

Camera (net.drewke.tdme.engine.Camera)9 Light (net.drewke.tdme.engine.Light)6 Object3D (net.drewke.tdme.engine.Object3D)6 Vector3 (net.drewke.tdme.math.Vector3)6 Model (net.drewke.tdme.engine.model.Model)5 Rotation (net.drewke.tdme.engine.Rotation)4 OrientedBoundingBox (net.drewke.tdme.engine.primitives.OrientedBoundingBox)4 PrimitiveModel (net.drewke.tdme.engine.primitives.PrimitiveModel)4 Object3DModel (net.drewke.tdme.engine.Object3DModel)3 ConvexMesh (net.drewke.tdme.engine.primitives.ConvexMesh)3 Sphere (net.drewke.tdme.engine.primitives.Sphere)3 Entity (net.drewke.tdme.engine.Entity)2 Capsule (net.drewke.tdme.engine.primitives.Capsule)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 ObjectParticleSystemEntity (net.drewke.tdme.engine.ObjectParticleSystemEntity)1 PartitionQuadTree (net.drewke.tdme.engine.PartitionQuadTree)1 PointsParticleSystemEntity (net.drewke.tdme.engine.PointsParticleSystemEntity)1 Timing (net.drewke.tdme.engine.Timing)1 Transformations (net.drewke.tdme.engine.Transformations)1