[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Camera.java, 1.30, 1.31
Status: Pre-Alpha
Brought to you by:
henryml
|
From: Nordholt <nor...@us...> - 2006-12-29 13:32:04
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv28226/src/net/sourceforge/bprocessor/model Modified Files: Camera.java Log Message: added a static focusOn method in the camera Index: Camera.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Camera.java,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** Camera.java 18 Dec 2006 09:11:47 -0000 1.30 --- Camera.java 29 Dec 2006 13:31:55 -0000 1.31 *************** *** 11,14 **** --- 11,15 ---- import java.util.Iterator; import java.util.HashSet; + import java.util.LinkedList; import java.util.List; import java.util.Set; *************** *** 606,608 **** --- 607,645 ---- currentCamera.roll = new double[]{0, 1, 0}; } + + /** + * Static modification of the camera to focus on a given surface + * @param currentCamera The camera to change + * @param s The surface to focus on + */ + public static void focusOn(Camera currentCamera, Surface s) { + Vertex n = (s.normal()); + Vertex cen = s.center(); + double[] center = currentCamera.getCenter(); + double[] cam = currentCamera.getCamera(); + double[] dir = new double[]{cam[0] - center[0], cam[1] - center[1], cam[2] - center[2]}; + Vertex r = new Vertex(dir); + n = r.projectOnto(n); + Iterator iter = s.getEdges().iterator(); + Vertex roll = new Vertex(currentCamera.getRoll()); + Vertex newroll = null; + double angle = 2 * 3.14; + while (iter.hasNext()) { + Edge e = (Edge)iter.next(); + Vertex d = e.getDirection(); + double tmp = d.angle(roll); + if (tmp < angle) { + angle = tmp; + newroll = d; + } + } + newroll.normalize(); + currentCamera.setRoll(new double[]{newroll.getX(), newroll.getY(), newroll.getZ()}); + currentCamera.setCenter(new double[]{cen.getX(), cen.getY(), cen.getZ()}); + currentCamera.setCamera(new double[]{cen.getX() + n.getX(), + cen.getY() + n.getY(), cen.getZ() + n.getZ()}); + Collection < Surface > c = new LinkedList < Surface > (); + c.add(s); + currentCamera.zoomOn(c, 1.0); + } } |