[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Camera.java,1.1,1.2
Status: Pre-Alpha
Brought to you by:
henryml
From: rimestad <rim...@us...> - 2005-12-13 12:37:23
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3644/src/net/sourceforge/bprocessor/model Modified Files: Camera.java Log Message: Refactored all the rotation from cameratool to the camera in the model as static methods. Fixed small bug with tilting when rotating. There is still a bug when rotation about the eye point though Index: Camera.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Camera.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Camera.java 12 Dec 2005 14:17:12 -0000 1.1 --- Camera.java 13 Dec 2005 12:37:15 -0000 1.2 *************** *** 229,231 **** --- 229,330 ---- camera[2] += (camera[2] - center[2]) * 0.1; } + + /** + * Rotate the camera horizontal about eye position + * @param c the camera to rotate + * @param angle the angle to rotate + */ + public static void rotateHorizontallyEye(Camera c, double angle) { + Vertex up = new Vertex("", c.roll[0], c.roll[1], c.roll[2]); + up.scale(1 / up.length()); + double x = c.center[0] - c.camera[0]; + double y = c.center[1] - c.camera[1]; + double z = c.center[2] - c.camera[2]; + Vertex forward = new Vertex("", x, y, z); + forward.scale(1 / forward.length()); + double turn = 1; + if (c.roll[2] < 0) { + turn = -1; + } + Geometry.rotate(angle, up.getX(), up.getY(), up.getZ(), c.center, c.camera); + Geometry.rotate(angle, 0, 0, turn, c.roll, new double[]{0, 0, 0}); + } + + /** + * Rotate the camera vertical about eye position + * @param c the camera to rotate + * @param angle the angle to rotate + */ + public static void rotateVerticallyEye(Camera c, double angle) { + Vertex up = new Vertex("", c.roll[0], c.roll[1], c.roll[2]); + up.scale(1 / up.length()); + double x = c.center[0] - c.camera[0]; + double y = c.center[1] - c.camera[1]; + double z = c.center[2] - c.camera[2]; + Vertex forward = new Vertex("", x, y, z); + forward.scale(1 / forward.length()); + Vertex sidewards = up.cross(forward); + sidewards.scale(1 / sidewards.length()); + + Geometry.rotate(angle, sidewards.getX(), sidewards.getY(), sidewards.getZ(), + c.center, c.camera); + Geometry.rotate(angle, sidewards.getX(), sidewards.getY(), sidewards.getZ(), + c.roll, new double[]{0, 0, 0}); + } + + /** + * Rotate the camera horizontal about the given center + * @param c the camera to rotate + * @param angle the angle to rotate + * @param center the rotation center + */ + public static void rotateHorizontally(Camera c, double angle, double[] center) { + double turn = 1; + if (c.roll[2] < 0) { + turn = -1; + } + Geometry.rotate(angle, 0, 0, turn, c.camera, center); + Geometry.rotate(angle, 0, 0, turn, c.center, center); + Geometry.rotate(angle, 0, 0, turn, c.roll, new double[]{0, 0, 0}); + } + + /** + * Rotate the camera vertical about the given center + * @param c the camera to rotate + * @param angle the angle to rotate + * @param center the rotation center + */ + public static void rotateVertically(Camera c, double angle, double[] center) { + Vertex up = new Vertex("", c.roll[0], c.roll[1], c.roll[2]); + //up.scale(1 / up.length()); + double x = c.center[0] - c.camera[0]; + double y = c.center[1] - c.camera[1]; + double z = c.center[2] - c.camera[2]; + Vertex forward = new Vertex("", x, y, z); + //forward.scale(1 / forward.length()); + Vertex sidewards = up.cross(forward); + sidewards.scale(1 / sidewards.length()); + + Geometry.rotate(angle, sidewards.getX(), sidewards.getY(), sidewards.getZ(), + c.camera, center); + Geometry.rotate(angle, sidewards.getX(), sidewards.getY(), sidewards.getZ(), + c.center, center); + Geometry.rotate(angle, sidewards.getX(), sidewards.getY(), sidewards.getZ(), + c.roll, new double[]{0, 0, 0}); + } + + /** + * Rotate the tip of the camera + * @param c The camera + * @param angle The angle of tip + */ + public static void rollCamera(Camera c, double angle) { + double x = c.center[0] - c.camera[0]; + double y = c.center[1] - c.camera[1]; + double z = c.center[2] - c.camera[2]; + Vertex forward = new Vertex("", x, y, z); + forward.scale(1 / forward.length()); + Geometry.rotate(angle / 2, forward.getX(), + forward.getY(), forward.getZ(), c.roll, new double[] {0, 0, 0}); + } } |