modules/graphics/src/test/java/test/javafx/scene/CameraTest.java

Print this page
rev 9250 : 8134762: Refactor Javafx graphics module tests for clear separation of tests
Reviewed-by:


   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.scene;
  27 
  28 import com.sun.javafx.geom.Vec3d;
  29 import com.sun.javafx.geom.transform.Affine3D;
  30 import com.sun.javafx.geom.transform.GeneralTransform3D;
  31 import com.sun.javafx.sg.prism.NGNode;
  32 import com.sun.javafx.sg.prism.NGParallelCamera;
  33 import com.sun.javafx.sg.prism.NGPerspectiveCamera;
  34 import com.sun.javafx.test.TransformHelper;
  35 import com.sun.javafx.tk.Toolkit;










  36 import javafx.scene.transform.NonInvertibleTransformException;
  37 import javafx.stage.Stage;
  38 import org.junit.Test;
  39 
  40 import static org.junit.Assert.*;
  41 
  42 public class CameraTest {
  43 
  44     static final GeneralTransform3D DEFAULT_PROJVIEW_TX;
  45     static {
  46         GeneralTransform3D expected = new GeneralTransform3D();
  47         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
  48         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
  49         Affine3D view = new Affine3D();
  50         final double scale = 2.0 * tanOfHalfFOV / 200;
  51         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
  52         view.translate(0, 0, -1);
  53         view.rotate(Math.PI, 1, 0, 0);
  54         view.scale(scale, scale, scale);
  55         expected.mul(view);
  56         DEFAULT_PROJVIEW_TX = expected;
  57     }
  58 
  59     /**
  60      * Test of setNearClip method, of class Camera.
  61      */
  62     @Test
  63     public void testSetNearClip() {
  64         Camera camera = new PerspectiveCamera();
  65         camera.setTranslateZ(-10);
  66         camera.setNearClip(10);
  67 
  68         assertEquals(10, camera.getNearClip(), 1e-3);
  69         assertEquals(90, camera.getFarClipInScene(), 1e-3);
  70         assertEquals(0, camera.getNearClipInScene(), 1e-3);
  71     }
  72 
  73     /**
  74      * Test of getNearClipInScene method, of class Camera.
  75      */
  76     @Test
  77     public void testGetNearClipInScene() {
  78         Camera camera = new PerspectiveCamera();
  79         camera.setTranslateZ(-10);
  80 
  81         assertEquals(-9.9, camera.getNearClipInScene(), 1e-3);
  82     }
  83 
  84     /**
  85      * Test of setFarClip method, of class Camera.
  86      */
  87     @Test
  88     public void testSetFarClip() {
  89         Camera camera = new PerspectiveCamera();
  90         camera.setTranslateZ(-10);
  91         camera.setFarClip(200);
  92 
  93         assertEquals(200, camera.getFarClip(), 1e-3);
  94         assertEquals(-9.9, camera.getNearClipInScene(), 1e-3);
  95         assertEquals(190, camera.getFarClipInScene(), 1e-3);
  96     }
  97 
  98     /**
  99      * Test of getFarClipInScene method, of class Camera.
 100      */
 101     @Test
 102     public void testGetFarClipInScene() {
 103         Camera camera = new PerspectiveCamera();
 104         camera.setTranslateZ(-10);
 105         camera.setFarClip(60);
 106 
 107         assertEquals(50, camera.getFarClipInScene(), 1e-3);
 108     }
 109 
 110     @Test
 111     public void testLocalToSceneTxChange() {
 112         Camera camera = new PerspectiveCamera();
 113         camera.setTranslateZ(-10);
 114         assertEquals(0.1, camera.getNearClip(), 1e-3);
 115         assertEquals(100, camera.getFarClip(), 1e-3);
 116         assertEquals(-9.9, camera.getNearClipInScene(), 1e-3);
 117         assertEquals(90, camera.getFarClipInScene(), 1e-3);
 118 
 119         camera.setTranslateZ(100);
 120         assertEquals(0.1, camera.getNearClip(), 1e-3);
 121         assertEquals(100, camera.getFarClip(), 1e-3);
 122         assertEquals(100.1, camera.getNearClipInScene(), 1e-3);
 123         assertEquals(200, camera.getFarClipInScene(), 1e-3);
 124     }
 125 
 126     /**
 127      * Test of getSceneToLocalTransform method, of class Camera.
 128      */
 129     @Test
 130     public void testGetSceneToLocalTransform() {
 131         Camera camera = new PerspectiveCamera();
 132         new Scene(new Group(camera));
 133         camera.setTranslateX(300);
 134         camera.getParent().setTranslateY(100);
 135         Affine3D expected = new Affine3D();
 136         try {
 137             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 138         } catch (NonInvertibleTransformException ex) {
 139             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 140         }
 141         assertEquals(expected, camera.getSceneToLocalTransform());
 142 
 143         camera.setTranslateZ(-10);
 144         camera.setScaleX(10);
 145         expected.setToIdentity();
 146         try {
 147             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 148         } catch (NonInvertibleTransformException ex) {
 149             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 150         }
 151         assertEquals(expected, camera.getSceneToLocalTransform());
 152     }
 153 
 154     /**
 155      * Test of getSceneToLocalTransform method when camera is not in scene.
 156      */
 157     @Test
 158     public void testGetSceneToLocalTransformWhenNotInScene() {
 159         Camera camera = new PerspectiveCamera();
 160         Affine3D expected = new Affine3D();
 161         assertEquals(expected, camera.getSceneToLocalTransform());
 162 
 163         try {
 164             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 165         } catch (NonInvertibleTransformException ex) {
 166             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 167         }
 168         assertEquals(expected, camera.getSceneToLocalTransform());
 169 
 170         camera.setTranslateZ(-10);
 171         camera.setScaleX(10);
 172         expected.setToIdentity();
 173         try {
 174             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 175         } catch (NonInvertibleTransformException ex) {
 176             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 177         }
 178         assertEquals(expected, camera.getSceneToLocalTransform());
 179     }
 180 
 181     @Test
 182     public void testViewSize() {
 183         final Scene scene = new Scene(new Group(), 300, 200);
 184         Camera camera = new PerspectiveCamera();
 185         scene.setCamera(camera);
 186         assertEquals(300.0, camera.getViewWidth(), 1.0e-20);
 187         assertEquals(200.0, camera.getViewHeight(), 1.0e-20);
 188     }
 189 
 190     @Test
 191     public void testDefaultCamera() {
 192         final Scene scene = new Scene(new Group(), 300, 200);
 193         Camera camera = scene.getEffectiveCamera();
 194 
 195         assertTrue(camera instanceof ParallelCamera);
 196         assertEquals(300.0, camera.getViewWidth(), 1.0e-20);
 197         assertEquals(200.0, camera.getViewHeight(), 1.0e-20);
 198     }
 199 
 200     @Test
 201     public void testParallelProjViewTx() {
 202         final Scene scene = new Scene(new Group(), 300, 200);
 203         Camera camera = new ParallelCamera();
 204         scene.setCamera(camera);
 205 
 206         GeneralTransform3D expected = new GeneralTransform3D();
 207         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 208 
 209         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 210     }
 211 
 212     @Test
 213     public void testParallelProjViewTxWithMovedCamera() {
 214         final Scene scene = new Scene(new Group(), 300, 200);
 215         Camera camera = new ParallelCamera();
 216         scene.setCamera(camera);
 217         scene.getRoot().getChildren().add(camera);
 218         scene.getRoot().setTranslateX(50);
 219         camera.setTranslateY(60);
 220 
 221         GeneralTransform3D expected = new GeneralTransform3D();
 222         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 223         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 224 
 225         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 226     }
 227 
 228     @Test
 229     public void testParallelProjViewTxWithMovedCameraNotInScene() {
 230         final Scene scene = new Scene(new Group(), 300, 200);
 231         Camera camera = new ParallelCamera();
 232         scene.setCamera(camera);
 233         scene.getRoot().setTranslateX(50);
 234         camera.setTranslateX(50);
 235         camera.setTranslateY(60);
 236 
 237         GeneralTransform3D expected = new GeneralTransform3D();
 238         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 239         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 240 
 241         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 242     }
 243 
 244     @Test
 245     public void testParallelProjViewTxWithMovedCameraNotInScene2() {
 246         final Scene scene = new Scene(new Group(), 300, 200);
 247         Camera camera = new ParallelCamera();
 248         scene.setCamera(camera);
 249         scene.getRoot().setTranslateX(50);
 250         new Group(camera);
 251         camera.getParent().setTranslateX(50);
 252         camera.setTranslateY(60);
 253 
 254         GeneralTransform3D expected = new GeneralTransform3D();
 255         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 256         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 257 
 258         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 259     }
 260 
 261     @Test
 262     public void testPerspectiveProjViewTx() {
 263         final Scene scene = new Scene(new Group(), 300, 200);
 264         PerspectiveCamera camera = new PerspectiveCamera();
 265         scene.setCamera(camera);
 266 
 267         TransformHelper.assertMatrix(camera.getProjViewTransform(), DEFAULT_PROJVIEW_TX);
 268     }
 269 
 270     @Test
 271     public void testPerspectiveProjViewTxWithModifiedParams() {
 272         final Scene scene = new Scene(new Group(), 300, 200);
 273         PerspectiveCamera camera = new PerspectiveCamera();
 274         camera.setVerticalFieldOfView(false);
 275         camera.setFieldOfView(40);
 276         camera.setNearClip(1);
 277         camera.setFarClip(200);
 278         scene.setCamera(camera);
 279 
 280         GeneralTransform3D expected = new GeneralTransform3D();
 281         expected.perspective(false, Math.toRadians(40), 1.5, 1.0, 200);
 282 
 283         final double tanOfHalfFOV = Math.tan(Math.toRadians(40) / 2.0);
 284 
 285         Affine3D view = new Affine3D();
 286         final double scale = 2.0 * tanOfHalfFOV / 300;
 287 
 288         view.setToTranslation(-tanOfHalfFOV, tanOfHalfFOV / 1.5, 0.0);
 289         view.translate(0, 0, -1);
 290         view.rotate(Math.PI, 1, 0, 0);
 291         view.scale(scale, scale, scale);
 292 
 293         expected.mul(view);
 294 
 295         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 296     }
 297 
 298     @Test
 299     public void testPerspectiveProjViewTxWithMovedCamera() {
 300         final Scene scene = new Scene(new Group(), 300, 200);
 301         PerspectiveCamera camera = new PerspectiveCamera();
 302         scene.setCamera(camera);
 303         scene.getRoot().getChildren().add(camera);
 304         scene.getRoot().setTranslateX(50);
 305         camera.setTranslateY(60);
 306 
 307         GeneralTransform3D expected = new GeneralTransform3D();
 308         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 309 
 310         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
 311 
 312         Affine3D view = new Affine3D();
 313         final double scale = 2.0 * tanOfHalfFOV / 200;
 314 
 315         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
 316         view.translate(0, 0, -1);
 317         view.rotate(Math.PI, 1, 0, 0);
 318         view.scale(scale, scale, scale);
 319 
 320         expected.mul(view);
 321         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 322 
 323         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 324     }
 325 
 326     @Test
 327     public void testPerspectiveProjViewTxWithMovedCameraNotInScene() {
 328         final Scene scene = new Scene(new Group(), 300, 200);
 329         PerspectiveCamera camera = new PerspectiveCamera();
 330         scene.setCamera(camera);
 331         scene.getRoot().setTranslateX(50);
 332         camera.setTranslateX(50);
 333         camera.setTranslateY(60);
 334 
 335         GeneralTransform3D expected = new GeneralTransform3D();
 336         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 337 
 338         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
 339 
 340         Affine3D view = new Affine3D();
 341         final double scale = 2.0 * tanOfHalfFOV / 200;
 342 
 343         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
 344         view.translate(0, 0, -1);
 345         view.rotate(Math.PI, 1, 0, 0);
 346         view.scale(scale, scale, scale);
 347 
 348         expected.mul(view);
 349         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 350 
 351         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 352     }
 353 
 354     @Test
 355     public void testPerspectiveProjViewTxWithMovedCameraNotInScene2() {
 356         final Scene scene = new Scene(new Group(), 300, 200);
 357         PerspectiveCamera camera = new PerspectiveCamera();
 358         scene.setCamera(camera);
 359         scene.getRoot().setTranslateX(50);
 360         new Group(camera);
 361         camera.getParent().setTranslateX(50);
 362         camera.setTranslateY(60);
 363 
 364         GeneralTransform3D expected = new GeneralTransform3D();
 365         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 366 
 367         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
 368 
 369         Affine3D view = new Affine3D();
 370         final double scale = 2.0 * tanOfHalfFOV / 200;
 371 
 372         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
 373         view.translate(0, 0, -1);
 374         view.rotate(Math.PI, 1, 0, 0);
 375         view.scale(scale, scale, scale);
 376 
 377         expected.mul(view);
 378         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 379 
 380         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 381     }
 382 
 383     @Test
 384     public void testPerspectiveProjViewTxWithFixedEye() {
 385         final Scene scene = new Scene(new Group(), 300, 200);
 386         PerspectiveCamera camera = new PerspectiveCamera(true);
 387         scene.setCamera(camera);
 388 
 389         GeneralTransform3D expected = new GeneralTransform3D();
 390         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 391 
 392         Affine3D view = new Affine3D();
 393         view.rotate(Math.PI, 1, 0, 0);
 394 
 395         expected.mul(view);
 396 
 397         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 398     }
 399 
 400     @Test
 401     public void testPerspectiveProjViewTxWithFixedEyeAndModifiedParams() {
 402         final Scene scene = new Scene(new Group(), 300, 200);
 403         PerspectiveCamera camera = new PerspectiveCamera(true);
 404         camera.setVerticalFieldOfView(false);
 405         camera.setFieldOfView(40);
 406         camera.setNearClip(1);
 407         camera.setFarClip(200);
 408         scene.setCamera(camera);
 409 
 410         GeneralTransform3D expected = new GeneralTransform3D();
 411         expected.perspective(false, Math.toRadians(40), 1.5, 1.0, 200);
 412 
 413         Affine3D view = new Affine3D();
 414         view.rotate(Math.PI, 1, 0, 0);
 415 
 416         expected.mul(view);
 417 
 418         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 419     }
 420 
 421     @Test
 422     public void testPerspectiveProjViewTxWithFixedEyeAndMovedCamera() {
 423         final Scene scene = new Scene(new Group(), 300, 200);
 424         PerspectiveCamera camera = new PerspectiveCamera(true);
 425         scene.setCamera(camera);
 426         scene.getRoot().getChildren().add(camera);
 427         scene.getRoot().setTranslateX(50);
 428         camera.setTranslateY(60);
 429 
 430         GeneralTransform3D expected = new GeneralTransform3D();
 431         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 432 
 433         Affine3D view = new Affine3D();
 434         view.rotate(Math.PI, 1, 0, 0);
 435 
 436         expected.mul(view);
 437         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 438 
 439         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 440     }
 441 
 442     @Test
 443     public void testPerspectiveProjViewTxWithFixedEyeAndMovedCameraNotInScene() {
 444         final Scene scene = new Scene(new Group(), 300, 200);
 445         PerspectiveCamera camera = new PerspectiveCamera(true);
 446         scene.setCamera(camera);
 447         scene.getRoot().setTranslateX(50);
 448         camera.setTranslateX(50);
 449         camera.setTranslateY(60);
 450 
 451         GeneralTransform3D expected = new GeneralTransform3D();
 452         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 453 
 454         Affine3D view = new Affine3D();
 455         view.rotate(Math.PI, 1, 0, 0);
 456 
 457         expected.mul(view);
 458         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 459 
 460         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 461     }
 462 
 463     @Test
 464     public void testPerspectiveProjViewTxWithFixedEyeAndMovedCameraNotInScene2() {
 465         final Scene scene = new Scene(new Group(), 300, 200);
 466         PerspectiveCamera camera = new PerspectiveCamera(true);
 467         scene.setCamera(camera);
 468         scene.getRoot().setTranslateX(50);
 469         new Group(camera);
 470         camera.getParent().setTranslateX(50);
 471         camera.setTranslateY(60);
 472 
 473         GeneralTransform3D expected = new GeneralTransform3D();
 474         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 475 
 476         Affine3D view = new Affine3D();
 477         view.rotate(Math.PI, 1, 0, 0);
 478 
 479         expected.mul(view);
 480         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 481 
 482         TransformHelper.assertMatrix(camera.getProjViewTransform(), expected);
 483     }
 484 
 485     @Test
 486     public void testParallelCameraPosition() {
 487         Scene scene = new Scene(new Group(), 300, 200);
 488         Camera cam = new ParallelCamera();
 489         scene.setCamera(cam);
 490         Vec3d v = cam.computePosition(null);
 491         assertEquals(150.0, v.x, 0.000001);
 492         assertEquals(100.0, v.y, 0.000001);
 493         assertEquals(-373.205080, v.z, 0.000001);
 494     }
 495 
 496     @Test
 497     public void testPerspectiveCameraPositionWithFixedEye() {
 498         Scene scene = new Scene(new Group(), 300, 200);
 499         Camera cam = new PerspectiveCamera(true);
 500         scene.setCamera(cam);
 501         Vec3d v = cam.computePosition(null);
 502         assertEquals(0.0, v.x, 0.000001);
 503         assertEquals(0.0, v.y, 0.000001);
 504         assertEquals(0.0, v.z, 0.000001);
 505     }
 506 
 507     @Test
 508     public void testPerspectiveCameraPosition() {
 509         Scene scene = new Scene(new Group(), 300, 200);
 510         Camera cam = new PerspectiveCamera();
 511         scene.setCamera(cam);
 512         Vec3d v = cam.computePosition(null);
 513         assertEquals(150.0, v.x, 0.000001);
 514         assertEquals(100.0, v.y, 0.000001);
 515         assertEquals(-373.205080, v.z, 0.000001);
 516     }
 517 
 518     @Test
 519     public void perspectiveCameraShouldSyncWhenAssignedToScene() {
 520         final Scene scene = new Scene(new Group(), 300, 200);
 521         PerspectiveCamera camera = new StubPerspectiveCamera();
 522         scene.setCamera(camera);
 523         Stage stage = new Stage();
 524         stage.setScene(scene);
 525         stage.show();
 526 
 527         Toolkit.getToolkit().firePulse();
 528 
 529         StubNGPerspectiveCamera pc = camera.impl_getPeer();
 530 
 531         assertEquals(300, pc.getViewWidth(), 0.00001);
 532         assertEquals(200, pc.getViewHeight(), 0.00001);


 609         GeneralTransform3D expected = new GeneralTransform3D();
 610         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 611 
 612         TransformHelper.assertMatrix(pc.getProjViewTx(), expected);
 613         assertEquals(150.0, pc.getPosition().x, 0.000001);
 614         assertEquals(100.0, pc.getPosition().y, 0.000001);
 615         assertEquals(-373.205080, pc.getPosition().z, 0.000001);
 616     }
 617 
 618     @Test
 619     public void sceneDefaultCameraShouldSyncInTheBeginning() {
 620         final Scene scene = new Scene(new Group(), 300, 200);
 621         ParallelCamera camera = new StubParallelCamera();
 622         scene.setCamera(camera);
 623         Stage stage = new Stage();
 624         stage.setScene(scene);
 625         stage.show();
 626 
 627         Toolkit.getToolkit().firePulse();
 628 
 629         StubNGParallelCamera pc = scene.getEffectiveCamera().impl_getPeer();
 630 
 631         assertEquals(300, pc.getViewWidth(), 0.00001);
 632         assertEquals(200, pc.getViewHeight(), 0.00001);
 633 
 634         GeneralTransform3D expected = new GeneralTransform3D();
 635         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 636 
 637         TransformHelper.assertMatrix(pc.getProjViewTx(), expected);
 638         assertEquals(150.0, pc.getPosition().x, 0.000001);
 639         assertEquals(100.0, pc.getPosition().y, 0.000001);
 640         assertEquals(-373.205080, pc.getPosition().z, 0.000001);
 641     }
 642 
 643     @Test
 644     public void subSceneDefaultCameraShouldSyncInTheBeginning() {
 645         SubScene sub = new SubScene(new Group(), 300, 200);
 646         final Scene scene = new Scene(new Group(sub), 600, 300);
 647         ParallelCamera camera = new StubParallelCamera();
 648         sub.setCamera(camera);
 649         Stage stage = new Stage();
 650         stage.setScene(scene);
 651         stage.show();
 652 
 653         Toolkit.getToolkit().firePulse();
 654 
 655         StubNGParallelCamera pc = sub.getEffectiveCamera().impl_getPeer();
 656 
 657         assertEquals(300, pc.getViewWidth(), 0.00001);
 658         assertEquals(200, pc.getViewHeight(), 0.00001);
 659 
 660         GeneralTransform3D expected = new GeneralTransform3D();
 661         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 662 
 663         TransformHelper.assertMatrix(pc.getProjViewTx(), expected);
 664         assertEquals(150.0, pc.getPosition().x, 0.000001);
 665         assertEquals(100.0, pc.getPosition().y, 0.000001);
 666         assertEquals(-373.205080, pc.getPosition().z, 0.000001);
 667     }
 668 
 669     @Test
 670     public void resizeShouldTriggerSync() {
 671         SubScene sub = new SubScene(new Group(), 400, 300);
 672         final Scene scene = new Scene(new Group(sub), 600, 300);
 673         PerspectiveCamera camera = new StubPerspectiveCamera();
 674         sub.setCamera(camera);
 675         Stage stage = new Stage();




   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package test.javafx.scene;
  27 
  28 import com.sun.javafx.geom.Vec3d;
  29 import com.sun.javafx.geom.transform.Affine3D;
  30 import com.sun.javafx.geom.transform.GeneralTransform3D;
  31 import com.sun.javafx.sg.prism.NGNode;
  32 import com.sun.javafx.sg.prism.NGParallelCamera;
  33 import com.sun.javafx.sg.prism.NGPerspectiveCamera;
  34 import test.com.sun.javafx.test.TransformHelper;
  35 import com.sun.javafx.tk.Toolkit;
  36 import javafx.scene.Camera;
  37 import javafx.scene.CameraShim;
  38 import javafx.scene.Group;
  39 import javafx.scene.ParallelCamera;
  40 import javafx.scene.ParentShim;
  41 import javafx.scene.PerspectiveCamera;
  42 import javafx.scene.Scene;
  43 import javafx.scene.SceneShim;
  44 import javafx.scene.SubScene;
  45 import javafx.scene.SubSceneShim;
  46 import javafx.scene.transform.NonInvertibleTransformException;
  47 import javafx.stage.Stage;
  48 import org.junit.Test;
  49 
  50 import static org.junit.Assert.*;
  51 
  52 public class CameraTest {
  53 
  54     static final GeneralTransform3D DEFAULT_PROJVIEW_TX;
  55     static {
  56         GeneralTransform3D expected = new GeneralTransform3D();
  57         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
  58         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
  59         Affine3D view = new Affine3D();
  60         final double scale = 2.0 * tanOfHalfFOV / 200;
  61         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
  62         view.translate(0, 0, -1);
  63         view.rotate(Math.PI, 1, 0, 0);
  64         view.scale(scale, scale, scale);
  65         expected.mul(view);
  66         DEFAULT_PROJVIEW_TX = expected;
  67     }
  68 
  69     /**
  70      * Test of setNearClip method, of class Camera.
  71      */
  72     @Test
  73     public void testSetNearClip() {
  74         Camera camera = new PerspectiveCamera();
  75         camera.setTranslateZ(-10);
  76         camera.setNearClip(10);
  77 
  78         assertEquals(10, camera.getNearClip(), 1e-3);
  79         assertEquals(90, CameraShim.getFarClipInScene(camera), 1e-3);
  80         assertEquals(0, CameraShim.getNearClipInScene(camera), 1e-3);
  81     }
  82 
  83     /**
  84      * Test of getNearClipInScene method, of class Camera.
  85      */
  86     @Test
  87     public void testGetNearClipInScene() {
  88         Camera camera = new PerspectiveCamera();
  89         camera.setTranslateZ(-10);
  90 
  91         assertEquals(-9.9, CameraShim.getNearClipInScene(camera), 1e-3);
  92     }
  93 
  94     /**
  95      * Test of setFarClip method, of class Camera.
  96      */
  97     @Test
  98     public void testSetFarClip() {
  99         Camera camera = new PerspectiveCamera();
 100         camera.setTranslateZ(-10);
 101         camera.setFarClip(200);
 102 
 103         assertEquals(200, camera.getFarClip(), 1e-3);
 104         assertEquals(-9.9, CameraShim.getNearClipInScene(camera), 1e-3);
 105         assertEquals(190, CameraShim.getFarClipInScene(camera), 1e-3);
 106     }
 107 
 108     /**
 109      * Test of getFarClipInScene method, of class Camera.
 110      */
 111     @Test
 112     public void testGetFarClipInScene() {
 113         Camera camera = new PerspectiveCamera();
 114         camera.setTranslateZ(-10);
 115         camera.setFarClip(60);
 116 
 117         assertEquals(50, CameraShim.getFarClipInScene(camera), 1e-3);
 118     }
 119 
 120     @Test
 121     public void testLocalToSceneTxChange() {
 122         Camera camera = new PerspectiveCamera();
 123         camera.setTranslateZ(-10);
 124         assertEquals(0.1, camera.getNearClip(), 1e-3);
 125         assertEquals(100, camera.getFarClip(), 1e-3);
 126         assertEquals(-9.9, CameraShim.getNearClipInScene(camera), 1e-3);
 127         assertEquals(90, CameraShim.getFarClipInScene(camera), 1e-3);
 128 
 129         camera.setTranslateZ(100);
 130         assertEquals(0.1, camera.getNearClip(), 1e-3);
 131         assertEquals(100, camera.getFarClip(), 1e-3);
 132         assertEquals(100.1, CameraShim.getNearClipInScene(camera), 1e-3);
 133         assertEquals(200, CameraShim.getFarClipInScene(camera), 1e-3);
 134     }
 135 
 136     /**
 137      * Test of getSceneToLocalTransform method, of class Camera.
 138      */
 139     @Test
 140     public void testGetSceneToLocalTransform() {
 141         Camera camera = new PerspectiveCamera();
 142         new Scene(new Group(camera));
 143         camera.setTranslateX(300);
 144         camera.getParent().setTranslateY(100);
 145         Affine3D expected = new Affine3D();
 146         try {
 147             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 148         } catch (NonInvertibleTransformException ex) {
 149             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 150         }
 151         assertEquals(expected, CameraShim.getSceneToLocalTransform(camera));
 152 
 153         camera.setTranslateZ(-10);
 154         camera.setScaleX(10);
 155         expected.setToIdentity();
 156         try {
 157             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 158         } catch (NonInvertibleTransformException ex) {
 159             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 160         }
 161         assertEquals(expected, CameraShim.getSceneToLocalTransform(camera));
 162     }
 163 
 164     /**
 165      * Test of getSceneToLocalTransform method when camera is not in scene.
 166      */
 167     @Test
 168     public void testGetSceneToLocalTransformWhenNotInScene() {
 169         Camera camera = new PerspectiveCamera();
 170         Affine3D expected = new Affine3D();
 171         assertEquals(expected, CameraShim.getSceneToLocalTransform(camera));
 172 
 173         try {
 174             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 175         } catch (NonInvertibleTransformException ex) {
 176             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 177         }
 178         assertEquals(expected, CameraShim.getSceneToLocalTransform(camera));
 179 
 180         camera.setTranslateZ(-10);
 181         camera.setScaleX(10);
 182         expected.setToIdentity();
 183         try {
 184             camera.getLocalToSceneTransform().createInverse().impl_apply(expected);
 185         } catch (NonInvertibleTransformException ex) {
 186             fail("NonInvertibleTransformException when compute sceneToLocalTx.");
 187         }
 188         assertEquals(expected, CameraShim.getSceneToLocalTransform(camera));
 189     }
 190 
 191     @Test
 192     public void testViewSize() {
 193         final Scene scene = new Scene(new Group(), 300, 200);
 194         Camera camera = new PerspectiveCamera();
 195         scene.setCamera(camera);
 196         assertEquals(300.0, CameraShim.getViewWidth(camera), 1.0e-20);
 197         assertEquals(200.0, CameraShim.getViewHeight(camera), 1.0e-20);
 198     }
 199 
 200     @Test
 201     public void testDefaultCamera() {
 202         final Scene scene = new Scene(new Group(), 300, 200);
 203         Camera camera = SceneShim.getEffectiveCamera(scene);
 204 
 205         assertTrue(camera instanceof ParallelCamera);
 206         assertEquals(300.0, CameraShim.getViewWidth(camera), 1.0e-20);
 207         assertEquals(200.0, CameraShim.getViewHeight(camera), 1.0e-20);
 208     }
 209 
 210     @Test
 211     public void testParallelProjViewTx() {
 212         final Scene scene = new Scene(new Group(), 300, 200);
 213         Camera camera = new ParallelCamera();
 214         scene.setCamera(camera);
 215 
 216         GeneralTransform3D expected = new GeneralTransform3D();
 217         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 218 
 219         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 220     }
 221 
 222     @Test
 223     public void testParallelProjViewTxWithMovedCamera() {
 224         final Scene scene = new Scene(new Group(), 300, 200);
 225         Camera camera = new ParallelCamera();
 226         scene.setCamera(camera);
 227         ParentShim.getChildren(scene.getRoot()).add(camera);
 228         scene.getRoot().setTranslateX(50);
 229         camera.setTranslateY(60);
 230 
 231         GeneralTransform3D expected = new GeneralTransform3D();
 232         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 233         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 234 
 235         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 236     }
 237 
 238     @Test
 239     public void testParallelProjViewTxWithMovedCameraNotInScene() {
 240         final Scene scene = new Scene(new Group(), 300, 200);
 241         Camera camera = new ParallelCamera();
 242         scene.setCamera(camera);
 243         scene.getRoot().setTranslateX(50);
 244         camera.setTranslateX(50);
 245         camera.setTranslateY(60);
 246 
 247         GeneralTransform3D expected = new GeneralTransform3D();
 248         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 249         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 250 
 251         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 252     }
 253 
 254     @Test
 255     public void testParallelProjViewTxWithMovedCameraNotInScene2() {
 256         final Scene scene = new Scene(new Group(), 300, 200);
 257         Camera camera = new ParallelCamera();
 258         scene.setCamera(camera);
 259         scene.getRoot().setTranslateX(50);
 260         new Group(camera);
 261         camera.getParent().setTranslateX(50);
 262         camera.setTranslateY(60);
 263 
 264         GeneralTransform3D expected = new GeneralTransform3D();
 265         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 266         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 267 
 268         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 269     }
 270 
 271     @Test
 272     public void testPerspectiveProjViewTx() {
 273         final Scene scene = new Scene(new Group(), 300, 200);
 274         PerspectiveCamera camera = new PerspectiveCamera();
 275         scene.setCamera(camera);
 276 
 277         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), DEFAULT_PROJVIEW_TX);
 278     }
 279 
 280     @Test
 281     public void testPerspectiveProjViewTxWithModifiedParams() {
 282         final Scene scene = new Scene(new Group(), 300, 200);
 283         PerspectiveCamera camera = new PerspectiveCamera();
 284         camera.setVerticalFieldOfView(false);
 285         camera.setFieldOfView(40);
 286         camera.setNearClip(1);
 287         camera.setFarClip(200);
 288         scene.setCamera(camera);
 289 
 290         GeneralTransform3D expected = new GeneralTransform3D();
 291         expected.perspective(false, Math.toRadians(40), 1.5, 1.0, 200);
 292 
 293         final double tanOfHalfFOV = Math.tan(Math.toRadians(40) / 2.0);
 294 
 295         Affine3D view = new Affine3D();
 296         final double scale = 2.0 * tanOfHalfFOV / 300;
 297 
 298         view.setToTranslation(-tanOfHalfFOV, tanOfHalfFOV / 1.5, 0.0);
 299         view.translate(0, 0, -1);
 300         view.rotate(Math.PI, 1, 0, 0);
 301         view.scale(scale, scale, scale);
 302 
 303         expected.mul(view);
 304 
 305         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 306     }
 307 
 308     @Test
 309     public void testPerspectiveProjViewTxWithMovedCamera() {
 310         final Scene scene = new Scene(new Group(), 300, 200);
 311         PerspectiveCamera camera = new PerspectiveCamera();
 312         scene.setCamera(camera);
 313         ParentShim.getChildren(scene.getRoot()).add(camera);
 314         scene.getRoot().setTranslateX(50);
 315         camera.setTranslateY(60);
 316 
 317         GeneralTransform3D expected = new GeneralTransform3D();
 318         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 319 
 320         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
 321 
 322         Affine3D view = new Affine3D();
 323         final double scale = 2.0 * tanOfHalfFOV / 200;
 324 
 325         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
 326         view.translate(0, 0, -1);
 327         view.rotate(Math.PI, 1, 0, 0);
 328         view.scale(scale, scale, scale);
 329 
 330         expected.mul(view);
 331         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 332 
 333         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 334     }
 335 
 336     @Test
 337     public void testPerspectiveProjViewTxWithMovedCameraNotInScene() {
 338         final Scene scene = new Scene(new Group(), 300, 200);
 339         PerspectiveCamera camera = new PerspectiveCamera();
 340         scene.setCamera(camera);
 341         scene.getRoot().setTranslateX(50);
 342         camera.setTranslateX(50);
 343         camera.setTranslateY(60);
 344 
 345         GeneralTransform3D expected = new GeneralTransform3D();
 346         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 347 
 348         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
 349 
 350         Affine3D view = new Affine3D();
 351         final double scale = 2.0 * tanOfHalfFOV / 200;
 352 
 353         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
 354         view.translate(0, 0, -1);
 355         view.rotate(Math.PI, 1, 0, 0);
 356         view.scale(scale, scale, scale);
 357 
 358         expected.mul(view);
 359         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 360 
 361         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 362     }
 363 
 364     @Test
 365     public void testPerspectiveProjViewTxWithMovedCameraNotInScene2() {
 366         final Scene scene = new Scene(new Group(), 300, 200);
 367         PerspectiveCamera camera = new PerspectiveCamera();
 368         scene.setCamera(camera);
 369         scene.getRoot().setTranslateX(50);
 370         new Group(camera);
 371         camera.getParent().setTranslateX(50);
 372         camera.setTranslateY(60);
 373 
 374         GeneralTransform3D expected = new GeneralTransform3D();
 375         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 376 
 377         final double tanOfHalfFOV = Math.tan(Math.toRadians(30) / 2.0);
 378 
 379         Affine3D view = new Affine3D();
 380         final double scale = 2.0 * tanOfHalfFOV / 200;
 381 
 382         view.setToTranslation(-tanOfHalfFOV * 1.5, tanOfHalfFOV, 0.0);
 383         view.translate(0, 0, -1);
 384         view.rotate(Math.PI, 1, 0, 0);
 385         view.scale(scale, scale, scale);
 386 
 387         expected.mul(view);
 388         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 389 
 390         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 391     }
 392 
 393     @Test
 394     public void testPerspectiveProjViewTxWithFixedEye() {
 395         final Scene scene = new Scene(new Group(), 300, 200);
 396         PerspectiveCamera camera = new PerspectiveCamera(true);
 397         scene.setCamera(camera);
 398 
 399         GeneralTransform3D expected = new GeneralTransform3D();
 400         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 401 
 402         Affine3D view = new Affine3D();
 403         view.rotate(Math.PI, 1, 0, 0);
 404 
 405         expected.mul(view);
 406 
 407         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 408     }
 409 
 410     @Test
 411     public void testPerspectiveProjViewTxWithFixedEyeAndModifiedParams() {
 412         final Scene scene = new Scene(new Group(), 300, 200);
 413         PerspectiveCamera camera = new PerspectiveCamera(true);
 414         camera.setVerticalFieldOfView(false);
 415         camera.setFieldOfView(40);
 416         camera.setNearClip(1);
 417         camera.setFarClip(200);
 418         scene.setCamera(camera);
 419 
 420         GeneralTransform3D expected = new GeneralTransform3D();
 421         expected.perspective(false, Math.toRadians(40), 1.5, 1.0, 200);
 422 
 423         Affine3D view = new Affine3D();
 424         view.rotate(Math.PI, 1, 0, 0);
 425 
 426         expected.mul(view);
 427 
 428         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 429     }
 430 
 431     @Test
 432     public void testPerspectiveProjViewTxWithFixedEyeAndMovedCamera() {
 433         final Scene scene = new Scene(new Group(), 300, 200);
 434         PerspectiveCamera camera = new PerspectiveCamera(true);
 435         scene.setCamera(camera);
 436         ParentShim.getChildren(scene.getRoot()).add(camera);
 437         scene.getRoot().setTranslateX(50);
 438         camera.setTranslateY(60);
 439 
 440         GeneralTransform3D expected = new GeneralTransform3D();
 441         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 442 
 443         Affine3D view = new Affine3D();
 444         view.rotate(Math.PI, 1, 0, 0);
 445 
 446         expected.mul(view);
 447         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 448 
 449         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 450     }
 451 
 452     @Test
 453     public void testPerspectiveProjViewTxWithFixedEyeAndMovedCameraNotInScene() {
 454         final Scene scene = new Scene(new Group(), 300, 200);
 455         PerspectiveCamera camera = new PerspectiveCamera(true);
 456         scene.setCamera(camera);
 457         scene.getRoot().setTranslateX(50);
 458         camera.setTranslateX(50);
 459         camera.setTranslateY(60);
 460 
 461         GeneralTransform3D expected = new GeneralTransform3D();
 462         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 463 
 464         Affine3D view = new Affine3D();
 465         view.rotate(Math.PI, 1, 0, 0);
 466 
 467         expected.mul(view);
 468         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 469 
 470         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 471     }
 472 
 473     @Test
 474     public void testPerspectiveProjViewTxWithFixedEyeAndMovedCameraNotInScene2() {
 475         final Scene scene = new Scene(new Group(), 300, 200);
 476         PerspectiveCamera camera = new PerspectiveCamera(true);
 477         scene.setCamera(camera);
 478         scene.getRoot().setTranslateX(50);
 479         new Group(camera);
 480         camera.getParent().setTranslateX(50);
 481         camera.setTranslateY(60);
 482 
 483         GeneralTransform3D expected = new GeneralTransform3D();
 484         expected.perspective(true, Math.toRadians(30), 1.5, 0.1, 100);
 485 
 486         Affine3D view = new Affine3D();
 487         view.rotate(Math.PI, 1, 0, 0);
 488 
 489         expected.mul(view);
 490         expected.mul(Affine3D.getTranslateInstance(-50, -60));
 491 
 492         TransformHelper.assertMatrix(CameraShim.getProjViewTransform(camera), expected);
 493     }
 494 
 495     @Test
 496     public void testParallelCameraPosition() {
 497         Scene scene = new Scene(new Group(), 300, 200);
 498         Camera cam = new ParallelCamera();
 499         scene.setCamera(cam);
 500         Vec3d v = CameraShim.computePosition(cam,null);
 501         assertEquals(150.0, v.x, 0.000001);
 502         assertEquals(100.0, v.y, 0.000001);
 503         assertEquals(-373.205080, v.z, 0.000001);
 504     }
 505 
 506     @Test
 507     public void testPerspectiveCameraPositionWithFixedEye() {
 508         Scene scene = new Scene(new Group(), 300, 200);
 509         Camera cam = new PerspectiveCamera(true);
 510         scene.setCamera(cam);
 511         Vec3d v = CameraShim.computePosition(cam,null);
 512         assertEquals(0.0, v.x, 0.000001);
 513         assertEquals(0.0, v.y, 0.000001);
 514         assertEquals(0.0, v.z, 0.000001);
 515     }
 516 
 517     @Test
 518     public void testPerspectiveCameraPosition() {
 519         Scene scene = new Scene(new Group(), 300, 200);
 520         Camera cam = new PerspectiveCamera();
 521         scene.setCamera(cam);
 522         Vec3d v = CameraShim.computePosition(cam,null);
 523         assertEquals(150.0, v.x, 0.000001);
 524         assertEquals(100.0, v.y, 0.000001);
 525         assertEquals(-373.205080, v.z, 0.000001);
 526     }
 527 
 528     @Test
 529     public void perspectiveCameraShouldSyncWhenAssignedToScene() {
 530         final Scene scene = new Scene(new Group(), 300, 200);
 531         PerspectiveCamera camera = new StubPerspectiveCamera();
 532         scene.setCamera(camera);
 533         Stage stage = new Stage();
 534         stage.setScene(scene);
 535         stage.show();
 536 
 537         Toolkit.getToolkit().firePulse();
 538 
 539         StubNGPerspectiveCamera pc = camera.impl_getPeer();
 540 
 541         assertEquals(300, pc.getViewWidth(), 0.00001);
 542         assertEquals(200, pc.getViewHeight(), 0.00001);


 619         GeneralTransform3D expected = new GeneralTransform3D();
 620         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 621 
 622         TransformHelper.assertMatrix(pc.getProjViewTx(), expected);
 623         assertEquals(150.0, pc.getPosition().x, 0.000001);
 624         assertEquals(100.0, pc.getPosition().y, 0.000001);
 625         assertEquals(-373.205080, pc.getPosition().z, 0.000001);
 626     }
 627 
 628     @Test
 629     public void sceneDefaultCameraShouldSyncInTheBeginning() {
 630         final Scene scene = new Scene(new Group(), 300, 200);
 631         ParallelCamera camera = new StubParallelCamera();
 632         scene.setCamera(camera);
 633         Stage stage = new Stage();
 634         stage.setScene(scene);
 635         stage.show();
 636 
 637         Toolkit.getToolkit().firePulse();
 638 
 639         StubNGParallelCamera pc = SceneShim.getEffectiveCamera(scene).impl_getPeer();
 640 
 641         assertEquals(300, pc.getViewWidth(), 0.00001);
 642         assertEquals(200, pc.getViewHeight(), 0.00001);
 643 
 644         GeneralTransform3D expected = new GeneralTransform3D();
 645         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 646 
 647         TransformHelper.assertMatrix(pc.getProjViewTx(), expected);
 648         assertEquals(150.0, pc.getPosition().x, 0.000001);
 649         assertEquals(100.0, pc.getPosition().y, 0.000001);
 650         assertEquals(-373.205080, pc.getPosition().z, 0.000001);
 651     }
 652 
 653     @Test
 654     public void subSceneDefaultCameraShouldSyncInTheBeginning() {
 655         SubScene sub = new SubScene(new Group(), 300, 200);
 656         final Scene scene = new Scene(new Group(sub), 600, 300);
 657         ParallelCamera camera = new StubParallelCamera();
 658         sub.setCamera(camera);
 659         Stage stage = new Stage();
 660         stage.setScene(scene);
 661         stage.show();
 662 
 663         Toolkit.getToolkit().firePulse();
 664 
 665         StubNGParallelCamera pc = SubSceneShim.getEffectiveCamera(sub).impl_getPeer();
 666 
 667         assertEquals(300, pc.getViewWidth(), 0.00001);
 668         assertEquals(200, pc.getViewHeight(), 0.00001);
 669 
 670         GeneralTransform3D expected = new GeneralTransform3D();
 671         expected.ortho(0.0, 300, 200, 0.0, -150, 150);
 672 
 673         TransformHelper.assertMatrix(pc.getProjViewTx(), expected);
 674         assertEquals(150.0, pc.getPosition().x, 0.000001);
 675         assertEquals(100.0, pc.getPosition().y, 0.000001);
 676         assertEquals(-373.205080, pc.getPosition().z, 0.000001);
 677     }
 678 
 679     @Test
 680     public void resizeShouldTriggerSync() {
 681         SubScene sub = new SubScene(new Group(), 400, 300);
 682         final Scene scene = new Scene(new Group(sub), 600, 300);
 683         PerspectiveCamera camera = new StubPerspectiveCamera();
 684         sub.setCamera(camera);
 685         Stage stage = new Stage();