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();
}
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);
}
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);
}
}
}
}
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;
}
}
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());
}
}
Aggregations