虽然工作在进行Android开发,但是在项目业余的时间里,我都在进行Unity3d的学习。也制作了一个联机的坦克对战游戏。而在晚上有时间的时候,也只是在Mac mini上学习IOS的开发,所以没怎么写博客。
JavaFX,之前还是对它很感兴趣,不过后来发现JavaFX还是只适合开发小游戏,对于大一点的游戏来说,效率不够。所以有一段时间没有研究JavaFX了。
不过JavaFX也有一个好消息,在JDK 8中,JavaFX即将支持3D了。包括3d mesh,Camera和灯光等。
JDK 8的下载地址:http://jdk8.java.net/download.html
下面是一个小示例:
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);
}
}
不过目前,只支持Windows平台,可以在其他平台使用的OpenGL的版本正在开发中。
有兴趣的可以下载JDK 8尝试一下效果。
补充一个网址 计划在JDK 8中添加的JavaFX 3D的相关内容:
https://wikis.oracle.com/display/OpenJDK/3D+Features
可以看到包括摄像机,3D几何元素,灯光,材质,3D拾取和3D模型加载等内容。