Documentation



Send Feedback | Print | PDF | ePub | Mobi
JavaFX: Working with JavaFX Graphics

A MSAAApp Code

This appendix lists the source code for the MSAAApp.java sample application.

MSAAApp.java demonstrates Multi-sample Anti-Aliasing (MSAA) technique using the JavaFX Shapes3D, Camera, Light, and SubScene APIs.

MSAAApp.java

/*
 * Copyright (c) 2013, 2014 Oracle and/or its affiliates.
 * All rights reserved. Use is subject to license terms.
 *
 * This file is available and licensed under the following license:
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in
 * the documentation and/or other materials provided with the distribution.
 * - Neither the name of Oracle nor the names of its
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
package msaa;
 
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.application.ConditionalFeature;
import javafx.application.Platform;
import javafx.geometry.Point3D;
import javafx.scene.AmbientLight;
import javafx.scene.Camera;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.SceneAntialiasing;
import javafx.scene.SubScene;
import javafx.scene.control.Slider;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
 
public class MSAAApp extends Application {
 
 @Override
 public void start(Stage stage) {
 if (!Platform.isSupported(ConditionalFeature.SCENE3D)) {
 throw new RuntimeException("*** ERROR: common conditional SCENE3D is not supported");
 }
 
 stage.setTitle("JavaFX MSAA demo");
 
 Group root = new Group();
 Scene scene = new Scene(root, 1000, 800);
 scene.setFill(Color.color(0.2, 0.2, 0.2, 1.0));
 
 HBox hbox = new HBox();
 hbox.setLayoutX(75);
 hbox.setLayoutY(200);
 
 PhongMaterial phongMaterial = new PhongMaterial(Color.color(1.0, 0.7, 0.8));
 Cylinder cylinder1 = new Cylinder(100, 200);
 cylinder1.setMaterial(phongMaterial);
 SubScene noMsaa = createSubScene("MSAA = false", cylinder1,
 Color.TRANSPARENT,
 new PerspectiveCamera(), false);
 hbox.getChildren().add(noMsaa);
 
 Cylinder cylinder2 = new Cylinder(100, 200);
 cylinder2.setMaterial(phongMaterial);
 SubScene msaa = createSubScene("MSAA = true", cylinder2,
 Color.TRANSPARENT,
 new PerspectiveCamera(), true);
 hbox.getChildren().add(msaa);
 
 Slider slider = new Slider(0, 360, 0);
 slider.setBlockIncrement(1);
 slider.setTranslateX(425);
 slider.setTranslateY(625);
 cylinder1.rotateProperty().bind(slider.valueProperty());
 cylinder2.rotateProperty().bind(slider.valueProperty());
 root.getChildren().addAll(hbox, slider);
 
 stage.setScene(scene);
 stage.show();
 }
 
 private static Parent setTitle(String str) {
 final VBox vbox = new VBox();
 final Text text = new Text(str);
 text.setFont(Font.font("Times New Roman", 24));
 text.setFill(Color.WHEAT);
 vbox.getChildren().add(text);
 return vbox;
 }
 
 private static SubScene createSubScene(String title, Node node,
 Paint fillPaint, Camera camera, boolean msaa) {
 Group root = new Group();
 
 PointLight light = new PointLight(Color.WHITE);
 light.setTranslateX(50);
 light.setTranslateY(-300);
 light.setTranslateZ(-400);
 PointLight light2 = new PointLight(Color.color(0.6, 0.3, 0.4));
 light2.setTranslateX(400);
 light2.setTranslateY(0);
 light2.setTranslateZ(-400);
 
 AmbientLight ambientLight = new AmbientLight(Color.color(0.2, 0.2, 0.2));
 node.setRotationAxis(new Point3D(2, 1, 0).normalize());
 node.setTranslateX(180);
 node.setTranslateY(180);
 root.getChildren().addAll(setTitle(title), ambientLight, 
 light, light2, node);
 
 SubScene subScene = new SubScene(root, 500, 400, true, 
 msaa ? SceneAntialiasing.BALANCED : SceneAntialiasing.DISABLED);
 subScene.setFill(fillPaint);
 subScene.setCamera(camera);
 
 return subScene;
 }
 
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 launch(args);
 }
}

Facebook Twitter RSS Feeds
Copyright © 2008, 2014, Oracle and/or its affiliates. All rights reserved. Legal Notices

AltStyle によって変換されたページ (->オリジナル) /