X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fproconf%2Fg3d%2Fcommon%2FOrbitalCamera.java;fp=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fproconf%2Fg3d%2Fcommon%2FOrbitalCamera.java;h=0000000000000000000000000000000000000000;hb=6b6fcff5d6c326feef07ccf8401f97911778fffe;hp=6b38bef39ada6e6e1c44aa6b274eec4992ff671e;hpb=504c111db40d78f4913badddd126b283b5504dbb;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/proconf/g3d/common/OrbitalCamera.java b/org.simantics.g3d/src/org/simantics/proconf/g3d/common/OrbitalCamera.java deleted file mode 100644 index 6b38bef3..00000000 --- a/org.simantics.g3d/src/org/simantics/proconf/g3d/common/OrbitalCamera.java +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007- VTT Technical Research Centre of Finland. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.proconf.g3d.common; - -import javax.vecmath.AxisAngle4d; -import javax.vecmath.Matrix3d; -import javax.vecmath.Vector3d; - -import org.simantics.proconf.g3d.base.VecmathJmeTools; - -import com.jme.renderer.Camera; - - -/** - * Orbital camera - *

- * Modified version of fi.vtt.proconf.webmon.graphics3d.utils.OrbitalCamera
- * Using floats instead of double
- *

- * - * - * @author Marko Luukkainen - * - */ -public class OrbitalCamera { - - private Vector3d up = new Vector3d(0.0,1.0,0.0); - private static Vector3d up2 = new Vector3d(0.0,0.0,-1.0); - private static double minDistance = 0.5; - private Vector3d target = new Vector3d(); - private Vector3d cameraPos = new Vector3d(10.0,0.0,0.0); - - - public void translate(Vector3d v) { - target.add(v); - cameraPos.add(v); - } - - public void rotateAroundTarget(Vector3d axis, double angle) { - Vector3d temp = new Vector3d(cameraPos); - temp.sub(target); - Matrix3d rotation = new Matrix3d(); - rotation.set(new AxisAngle4d(axis,angle)); - rotation.transform(temp); - temp.add(target); - cameraPos.set(temp); - } - - public Vector3d getUnNormalizedHeading() { - Vector3d heading = new Vector3d(target); - heading.sub(cameraPos); - return heading; - } - - public Vector3d getUnNormalizedRight() { - Vector3d heading = getUnNormalizedHeading(); - Vector3d right = new Vector3d(); - right.cross(heading,up); - if (right.lengthSquared() < 0.01) - right.cross(heading,up2); - return right; - } - - public double getDistanceToTarget() { - Vector3d t = new Vector3d(target); - t.sub(cameraPos); - return t.length(); - } - - public void moveToTarget(double distance) { - Vector3d heading = getUnNormalizedHeading(); - double length = heading.length(); - if (length + distance < minDistance) { - // cannot move closer - return; - } - heading.scale(distance / length); //normalizing and scaling by distance - cameraPos.add(heading); - } - - public void moveScaledToTarget(double s) { - Vector3d heading = getUnNormalizedHeading(); - double currentLength = heading.length(); - double length = currentLength * (1.0 - s);// heading.length(); - if (length < minDistance) { - s = -minDistance / currentLength + 1.0; - } - heading.scale(s); - //normalizing and scaling by distance - cameraPos.add(heading); - } - - public void rotateUp(double angle) { - Vector3d right = getUnNormalizedRight(); - double length = right.length(); - // TODO : better handling of singular cases - if (length > 0.01) - right.scale(1.0/length); - else - right.set(-1.0,0.0,0.0); - rotateAroundTarget(right,angle); - } - - public void rotateRight(double angle) { - rotateAroundTarget(up,angle); - } - - public void moveRight(double length) { - Vector3d right = getUnNormalizedRight(); - right.normalize(); - right.scale(length); - translate(right); - } - - public void moveUp(double length) { - Vector3d u = new Vector3d(up); - u.scale(length); - translate(u); - } - - public void moveFront(double length) { - Vector3d right = getUnNormalizedRight(); - Vector3d front = new Vector3d(); - front.cross(up,right); - front.normalize(); - front.scale(length); - translate(front); - } - - public void updateCamera() { - Vector3d t = new Vector3d(cameraPos); - t.sub(target); - t.normalize(); - cam.setLocation(VecmathJmeTools.get(cameraPos)); - - if (Math.abs(t.dot(up)) > 0.99) { - cam.lookAt(VecmathJmeTools.get(target), VecmathJmeTools.get(up2)); - } else { - cam.lookAt(VecmathJmeTools.get(target), VecmathJmeTools.get(up)); - } - cam.update(); - cam.apply(); - - } - - /** - * @return Returns the cameraPos. - */ - public Vector3d getCameraPos() { - return cameraPos; - } - - /** - * @param cameraPos The cameraPos to set. - */ - public void setCameraPos(Vector3d cameraPos) { - this.cameraPos = cameraPos; - } - - /** - * @return Returns the target. - */ - public Vector3d getTarget() { - return target; - } - - /** - * @param target The target to set. - */ - public void setTarget(Vector3d target) { - this.target = target; - } - - public void setCameraPosRelativeToTarget(Vector3d targetToCam) { - targetToCam.add(target); - setCameraPos(targetToCam); - } - - public void setUp(Vector3d v) { - up.set(v); - } - - public Vector3d getUp() { - return up; - } - - public void setDefaultUp() { - up.set(0.0,1.0,0.0); - } - - private Camera cam; - - public void setCamera(Camera cam) { - this.cam = cam; - } - -}