Search in sources :

Example 11 with Camera

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();
}
Also used : ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) Vector3(com.ardor3d.math.Vector3) Camera(com.ardor3d.renderer.Camera)

Example 12 with Camera

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();
}
Also used : ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) Vector3(com.ardor3d.math.Vector3) Camera(com.ardor3d.renderer.Camera)

Example 13 with Camera

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());
    }
}
Also used : ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) Vector3(com.ardor3d.math.Vector3) Camera(com.ardor3d.renderer.Camera) CullHint(com.ardor3d.scenegraph.hint.CullHint)

Example 14 with Camera

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;
}
Also used : ReadOnlyVector3(com.ardor3d.math.type.ReadOnlyVector3) Camera(com.ardor3d.renderer.Camera)

Aggregations

Camera (com.ardor3d.renderer.Camera)14 ReadOnlyVector3 (com.ardor3d.math.type.ReadOnlyVector3)6 Vector3 (com.ardor3d.math.Vector3)5 CullHint (com.ardor3d.scenegraph.hint.CullHint)2 Matrix3 (com.ardor3d.math.Matrix3)1 Spatial (com.ardor3d.scenegraph.Spatial)1 CameraNode (com.ardor3d.scenegraph.extension.CameraNode)1 Component (java.awt.Component)1 Dimension (java.awt.Dimension)1 BufferedImage (java.awt.image.BufferedImage)1 IOException (java.io.IOException)1 ByteBuffer (java.nio.ByteBuffer)1 FresnelReflector (org.concord.energy3d.model.FresnelReflector)1 HousePart (org.concord.energy3d.model.HousePart)1 Mirror (org.concord.energy3d.model.Mirror)1 ParabolicDish (org.concord.energy3d.model.ParabolicDish)1 ParabolicTrough (org.concord.energy3d.model.ParabolicTrough)1 PickedHousePart (org.concord.energy3d.model.PickedHousePart)1 Rack (org.concord.energy3d.model.Rack)1 SolarPanel (org.concord.energy3d.model.SolarPanel)1