use of com.ardor3d.renderer.Camera in project energy3d by concord-consortium.
the class SceneManager method resetCamera.
public void resetCamera(final ViewMode viewMode) {
System.out.println("resetCamera()");
this.viewMode = viewMode;
final Camera camera = getCamera();
cameraControl.setMouseButtonActions(ButtonAction.MOVE, ButtonAction.MOVE);
cameraControl.setMoveSpeed(MOVE_SPEED);
ReadOnlyVector3 loc = new Vector3(0, -100, 25);
ReadOnlyVector3 up = new Vector3(0, 0, 1);
ReadOnlyVector3 lookAt = new Vector3(0, 0, 0);
setCompassVisible(viewMode == ViewMode.NORMAL);
if (viewMode == ViewMode.NORMAL) {
cameraControl.setMouseButtonActions(ButtonAction.ROTATE, ButtonAction.MOVE);
camera.setProjectionMode(ProjectionMode.Perspective);
resizeCamera();
} else if (viewMode == ViewMode.TOP_VIEW) {
camera.setProjectionMode(ProjectionMode.Parallel);
loc = new Vector3(0, 0, 500);
up = new Vector3(0, 1, 0);
lookAt = new Vector3(0, 0, 0);
final double boundLength = Util.findBoundLength(Scene.getRoot().getWorldBound());
cameraControl.setMoveSpeed(boundLength * 2);
resizeCamera(boundLength);
} else if (viewMode == ViewMode.PRINT) {
camera.setProjectionMode(ProjectionMode.Parallel);
/* location will be set in PrintController.print() */
loc = new Vector3(0, -10, 0);
up = new Vector3(0, 0, -1);
} else if (viewMode == ViewMode.PRINT_PREVIEW) {
cameraControl.setMouseButtonActions(ButtonAction.MOVE, ButtonAction.MOVE);
camera.setProjectionMode(ProjectionMode.Perspective);
loc = PrintController.getInstance().getZoomAllCameraLocation();
lookAt = loc.add(0, 1, 0, null);
resizeCamera(PrintController.getInstance().getPageWidth());
}
camera.setLocation(loc);
camera.lookAt(lookAt, up);
camera.update();
cameraNode.updateFromCamera();
Scene.getInstance().updateEditShapes();
}
use of com.ardor3d.renderer.Camera in project energy3d by concord-consortium.
the class CameraControl method zoom.
protected void zoom(final Canvas canvas, final double tpf, final double val) {
if (Camera.getCurrentCamera().getProjectionMode() == ProjectionMode.Parallel) {
final Camera camera = canvas.getCanvasRenderer().getCamera();
if (val > 0 && Math.abs(camera.getProjectionMatrix().determinant()) <= 2 * MathUtils.EPSILON) {
// matrix cannot be inverted at this point
return;
}
final double fac = val > 0 ? 1.1 : 0.9;
camera.setFrustumTop(camera.getFrustumTop() * fac);
camera.setFrustumBottom(camera.getFrustumBottom() * fac);
camera.setFrustumLeft(camera.getFrustumLeft() * fac);
camera.setFrustumRight(camera.getFrustumRight() * fac);
camera.update();
_moveSpeed = 2 * camera.getFrustumTop();
} else {
final Camera camera = canvas.getCanvasRenderer().getCamera();
final Vector3 loc = new Vector3(camera.getDirection()).multiplyLocal(-val * (_moveSpeed * 10) * 2 * tpf).addLocal(camera.getLocation());
if (loc.length() > SceneManager.SKY_RADIUS) {
return;
}
// camera cannot be set below ground when zooming. This has a side effect of not being able to zoom when the camera is already rotated underground, but it is probably OK.
if (loc.getZ() >= 0) {
camera.setLocation(loc);
if (this instanceof OrbitControl) {
((OrbitControl) this).computeNewFrontDistance();
}
}
}
SceneManager.getInstance().getCameraNode().updateFromCamera();
Scene.getInstance().updateEditShapes();
SceneManager.getInstance().refresh();
}
use of com.ardor3d.renderer.Camera in project energy3d by concord-consortium.
the class SolarPanel method updateEditShapes.
@Override
public void updateEditShapes() {
final Vector3 p = Vector3.fetchTempInstance();
try {
for (int i = 0; i < points.size(); i++) {
getAbsPoint(i, p);
final Camera camera = SceneManager.getInstance().getCamera();
if (camera != null && camera.getProjectionMode() != ProjectionMode.Parallel) {
final double distance = camera.getLocation().distance(p);
getEditPointShape(i).setScale(distance > 0.1 ? distance / 10 : 0.01);
} else {
getEditPointShape(i).setScale(camera.getFrustumTop() / 4);
}
if (onFlatSurface()) {
p.setZ(p.getZ() + baseHeight);
}
getEditPointShape(i).setTranslation(p);
}
} finally {
Vector3.releaseTempInstance(p);
}
/* remove remaining edit shapes */
for (int i = points.size(); i < pointsRoot.getNumberOfChildren(); i++) {
pointsRoot.detachChildAt(points.size());
}
}
use of com.ardor3d.renderer.Camera in project energy3d by concord-consortium.
the class TimeSeriesLogger method isCameraChanged.
private boolean isCameraChanged() {
final Camera camera = SceneManager.getInstance().getCamera();
final ReadOnlyVector3 location = camera.getLocation();
final ReadOnlyVector3 direction = camera.getDirection();
cameraPosition = "\"Position\": {\"x\": " + LoggerUtil.FORMAT.format(location.getX());
cameraPosition += ", \"y\": " + LoggerUtil.FORMAT.format(location.getY());
cameraPosition += ", \"z\": " + LoggerUtil.FORMAT.format(location.getZ());
cameraPosition += "}, \"Direction\": {\"x\": " + LoggerUtil.FORMAT.format(direction.getX());
cameraPosition += ", \"y\": " + LoggerUtil.FORMAT.format(direction.getY());
cameraPosition += ", \"z\": " + LoggerUtil.FORMAT.format(direction.getZ()) + "}";
if (cameraPosition.equals(lastCameraPosition)) {
return false;
}
lastCameraPosition = cameraPosition;
return true;
}
Aggregations