在JavaOne 2012大會上,甲骨文展示了基於JavaFX 3D的貨櫃終端監控項目(演示視頻),讓人眼前一亮。
該項目使用JavaFX最新版本的早期原型構建,並增加了對於3D mesh、3D攝像機和3D燈光的支持。現在JavaFX 8公共版本中已經提供了這些技術的官方支持。
JavaFX 8捆綁在Java 8中,你可以下載最新的Java 8 EA b77版本來體驗。目前僅支持Windows平臺,甲骨文表示,針對其他平臺的OpenGL版本正在開發中。
下載地址:http://jdk8.java.net/download.html
關於JavaFX中最新的3D特性可參閱:wikis.oracle.com – OpenJDK – 3D Features
下面是一個簡單的例子:
import javafx.application.Application; import javafx.scene.*; import javafx.scene.paint.Color; import javafx.scene.paint.PhongMaterial; import javafx.scene.shape.*; import javafx.stage.Stage; public class Shapes3DViewer extends Application { @Override public void start(Stage stage) { PhongMaterial material = new PhongMaterial(); material.setDiffuseColor(Color.LIGHTGRAY); material.setSpecularColor(Color.rgb(30, 30, 30)); Shape3D[] meshView = new Shape3D[] { new Box(200, 200, 200), new Sphere(100), new Cylinder(100, 200), }; for (int i=0; i!=3; ++i) { meshView[i].setMaterial(material); meshView[i].setTranslateX((i + 1) * 220); meshView[i].setTranslateY(500); meshView[i].setTranslateZ(20); meshView[i].setDrawMode(DrawMode.FILL); meshView[i].setCullFace(CullFace.BACK); }; PointLight pointLight = new PointLight(Color.ANTIQUEWHITE); pointLight.setTranslateX(800); pointLight.setTranslateY(-100); pointLight.setTranslateZ(-1000); Group root = new Group(meshView); root.getChildren().add(pointLight); Scene scene = new Scene(root, 800, 800, true); scene.setFill(Color.rgb(10, 10, 40)); scene.setCamera(new PerspectiveCamera(false)); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }
效果如下: