Search in sources :

Example 26 with Entity

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

the class LevelEditorView method objectTranslationApply.

/**
	 * Apply object translation
	 * @param x
	 * @param y
	 * @param z
	 */
public void objectTranslationApply(float x, float y, float z) {
    if (selectedObjects.size() == 0)
        return;
    // handle single object
    if (selectedObjects.size() == 1) {
        Entity selectedObject = selectedObjects.get(0);
        LevelEditorObject currentEntity = level.getObjectById(selectedObject.getId());
        if (currentEntity == null)
            return;
        currentEntity.getTransformations().getTranslation().set(x, y, z);
        currentEntity.getTransformations().update();
        selectedObject.fromTransformations(currentEntity.getTransformations());
    } else if (selectedObjects.size() > 1) {
        // multiple objects
        for (Entity selectedObject : selectedObjects) {
            LevelEditorObject currentEntity = level.getObjectById(selectedObject.getId());
            if (currentEntity == null)
                continue;
            currentEntity.getTransformations().getTranslation().add(new Vector3(x, y, z));
            currentEntity.getTransformations().update();
            selectedObject.fromTransformations(currentEntity.getTransformations());
        }
        // reset controller object properties
        levelEditorScreenController.setObject(new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 1f), 0f, 0f, 0f);
    }
    level.computeDimension();
    updateGUIElements();
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) Vector3(net.drewke.tdme.math.Vector3) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject)

Example 27 with Entity

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

the class ShadowMap method render.

/**
	 * Renders given objects to shadow map
	 * @param gl
	 * @param objects
	 */
protected void render(Light light, ArrayList<Object3D> objects) {
    // clear visible objects
    visibleObjects.clear();
    // TODO: Spotlights are different!
    // viewers camera
    Camera camera = shadowMapping.engine.getCamera();
    float lightEyeDistance = lightDirection.set(camera.getLookAt()).sub(camera.getLookFrom()).computeLength() * shadowMapping.lightEyeDistanceScale;
    // compute camera from view of light 
    lightDirection.set(light.getSpotDirection()).normalize();
    lightLookAt.set(camera.getLookAt());
    lightLookFrom.set(lightLookAt).sub(lightDirection.scale(lightEyeDistance));
    // determine light camera z far
    float lightCameraZFar = lightEyeDistance * 2.0f;
    if (camera.getZFar() > lightCameraZFar)
        lightCameraZFar = camera.getZFar();
    // set up light camera from view of light
    lightCamera.setZNear(camera.getZNear());
    lightCamera.setZFar(lightCameraZFar);
    lightCamera.getLookFrom().set(lightLookFrom);
    lightCamera.getLookAt().set(lightLookAt);
    lightCamera.computeUpVector(lightCamera.getLookFrom(), lightCamera.getLookAt(), lightCamera.getUpVector());
    lightCamera.update(frameBuffer.getWidth(), frameBuffer.getHeight());
    // Bind frame buffer to shadow map fbo id
    frameBuffer.enableFrameBuffer();
    // clear depth buffer
    shadowMapping.renderer.clear(shadowMapping.renderer.CLEAR_DEPTH_BUFFER_BIT);
    // determine visible objects and objects that should generate a shadow
    for (Entity entity : shadowMapping.engine.getPartition().getVisibleEntities(lightCamera.getFrustum())) {
        if (entity instanceof Object3D) {
            Object3D object = (Object3D) entity;
            if (object.isDynamicShadowingEnabled() == false)
                continue;
            visibleObjects.add(object);
        } else if (entity instanceof ObjectParticleSystemEntity) {
            ObjectParticleSystemEntity opse = (ObjectParticleSystemEntity) entity;
            if (opse.isDynamicShadowingEnabled() == false)
                continue;
            visibleObjects.addAll(opse.getEnabledObjects());
        }
    }
    // generate shadow map texture matrix
    computeDepthBiasMVPMatrix();
    // only draw opaque face entities as shadows will not be produced from transparent objects
    shadowMapping.object3DVBORenderer.render(visibleObjects, true, Object3DVBORenderer.DepthBufferMode.FORCE, null);
}
Also used : ObjectParticleSystemEntity(net.drewke.tdme.engine.ObjectParticleSystemEntity) Entity(net.drewke.tdme.engine.Entity) ObjectParticleSystemEntity(net.drewke.tdme.engine.ObjectParticleSystemEntity) Camera(net.drewke.tdme.engine.Camera) Object3D(net.drewke.tdme.engine.Object3D)

Example 28 with Entity

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

the class EntityDisplayView method display.

/**
	 * Display
	 * @param entity
	 */
public void display(LevelEditorEntity entity) {
    // apply settings from gui
    if (entity != null) {
        // get model
        Entity model = engine.getEntity("model");
        // skip if no model yet
        if (model == null)
            return;
        // apply display settings
        Entity ground = engine.getEntity("ground");
        model.setDynamicShadowingEnabled(displayShadowing);
        ground.setEnabled(displayGroundPlate);
        for (int i = 0; i < MODEL_BOUNDINGVOLUME_IDS.length; i++) {
            Entity modelBoundingVolume = engine.getEntity(MODEL_BOUNDINGVOLUME_IDS[i]);
            if (modelBoundingVolume != null) {
                modelBoundingVolume.setEnabled(displayBoundingVolume);
            }
        }
    }
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity)

Example 29 with Entity

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

Example 30 with Entity

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

the class LevelEditorView method placeObject.

/**
	 * Places selected model on given object
	 */
public void placeObject(Entity selectedObject) {
    if (selectedEntity != null && selectedObject != null) {
        // get selected level entity if it is one
        LevelEditorObject selectedLevelEditorObject = level.getObjectById(selectedObject.getId());
        // create level entity
        Transformations levelEditorObjectTransformations = new Transformations();
        // take translation of selected object as base
        levelEditorObjectTransformations.getTranslation().set(selectedObject.getTranslation());
        Vector3 centerSelectedObject = selectedObject.getBoundingBox().getMin().clone().add(selectedObject.getBoundingBox().getMax()).scale(0.5f);
        // compute center of selected model
        Vector3 centerNewObject = selectedEntity.getModel() != null ? selectedEntity.getModel().getBoundingBox().getCenter().clone() : new Vector3(0f, 0f, 0f);
        // put new object on middle of selected object
        levelEditorObjectTransformations.getTranslation().add(centerNewObject.clone().add(centerSelectedObject));
        // set on selected object / y
        if (selectedLevelEditorObject == null || selectedLevelEditorObject.getEntity().getType() == EntityType.PARTICLESYSTEM || selectedEntity.getType() == EntityType.PARTICLESYSTEM) {
            levelEditorObjectTransformations.getTranslation().setY(gridY + (selectedEntity.getModel() != null ? -selectedEntity.getModel().getBoundingBox().getMin().getY() : 0f));
        } else {
            // create transformed level editor object bounding box
            BoundingVolume bv = selectedLevelEditorObject.getEntity().getModel().getBoundingBox().clone();
            bv.fromBoundingVolumeWithTransformations(selectedLevelEditorObject.getEntity().getModel().getBoundingBox(), selectedLevelEditorObject.getTransformations());
            //
            levelEditorObjectTransformations.getTranslation().setY(bv.computeDimensionOnAxis(new Vector3(0f, 1f, 0f)) / 2 + bv.getCenter().getY() + -selectedEntity.getModel().getBoundingBox().getMin().getY());
        }
        // standard scale
        levelEditorObjectTransformations.getScale().set(new Vector3(1f, 1f, 1f));
        // standard rotations
        levelEditorObjectTransformations.getPivot().set(selectedEntity.getPivot());
        levelEditorObjectTransformations.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis0()));
        levelEditorObjectTransformations.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis1()));
        levelEditorObjectTransformations.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis2()));
        levelEditorObjectTransformations.update();
        // check if entity already exists
        for (int i = 0; i < level.getObjectCount(); i++) {
            LevelEditorObject levelEditorObject = level.getObjectAt(i);
            if (levelEditorObject.getEntity() == selectedEntity && levelEditorObject.getTransformations().getTranslation().equals(levelEditorObjectTransformations.getTranslation())) {
                // we already have a object with selected model on this translation
                return;
            }
        }
        // create new level editor object
        LevelEditorObject levelEditorObject = new LevelEditorObject(selectedEntity.getName() + "_" + level.allocateObjectId(), "", levelEditorObjectTransformations, selectedEntity);
        //	add to level
        level.addObject(levelEditorObject);
        // add model to 3d engine
        if (levelEditorObject.getEntity().getModel() != null) {
            Object3D object = new Object3D(levelEditorObject.getId(), levelEditorObject.getEntity().getModel());
            object.fromTransformations(levelEditorObjectTransformations);
            object.setPickable(true);
            engine.addEntity(object);
        }
        // add particle system to 3d engine
        if (levelEditorObject.getEntity().getType() == EntityType.PARTICLESYSTEM) {
            Entity object = Level.createParticleSystem(levelEditorObject.getEntity().getParticleSystem(), levelEditorObject.getId(), false);
            object.fromTransformations(levelEditorObjectTransformations);
            object.setPickable(true);
            engine.addEntity(object);
        }
        // add to objects listbox
        levelEditorScreenController.setObjectListbox(level.getObjectIdsIterator());
    }
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) BoundingVolume(net.drewke.tdme.engine.primitives.BoundingVolume) Transformations(net.drewke.tdme.engine.Transformations) Vector3(net.drewke.tdme.math.Vector3) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject) Rotation(net.drewke.tdme.engine.Rotation) Object3D(net.drewke.tdme.engine.Object3D)

Aggregations

Entity (net.drewke.tdme.engine.Entity)32 LevelEditorEntity (net.drewke.tdme.tools.shared.model.LevelEditorEntity)25 FacesEntity (net.drewke.tdme.engine.model.FacesEntity)22 LevelEditorObject (net.drewke.tdme.tools.shared.model.LevelEditorObject)17 Object3D (net.drewke.tdme.engine.Object3D)8 Vector3 (net.drewke.tdme.math.Vector3)8 PropertyModelClass (net.drewke.tdme.tools.shared.model.PropertyModelClass)6 ArrayList (java.util.ArrayList)4 ObjectParticleSystemEntity (net.drewke.tdme.engine.ObjectParticleSystemEntity)4 PointsParticleSystemEntity (net.drewke.tdme.engine.PointsParticleSystemEntity)4 BoundingVolume (net.drewke.tdme.engine.primitives.BoundingVolume)3 Camera (net.drewke.tdme.engine.Camera)2 Rotation (net.drewke.tdme.engine.Rotation)2 Transformations (net.drewke.tdme.engine.Transformations)2 LevelEditorEntityBoundingVolume (net.drewke.tdme.tools.shared.model.LevelEditorEntityBoundingVolume)2 Light (net.drewke.tdme.engine.Light)1 Model (net.drewke.tdme.engine.model.Model)1 BoundingBox (net.drewke.tdme.engine.primitives.BoundingBox)1 ParticleSystemEntity (net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity)1 GUIKeyboardEvent (net.drewke.tdme.gui.events.GUIKeyboardEvent)1