声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处:http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。
众所周知,3D模块是JavaFX 8中非常重要的组成部分。而在JavaFX 8的目前版本中,JavaFX 3D的各种特性也在陆续添加中。下面,我来对JavaFX 8中现有的3D部分进行简单的介绍。
3D Shapes
JavaFX 3D Graphics目前提供了对3D Shape的创建。其中包括,内置定义的3D物体,和用户自定义的3D物体。
内置的3D物体包括:boxes,cylinders和spheres。其实还是很少的,如下图所示:
其中,类的继承结构如下:
java.lang.Object javafx.scene.Node javafx.scene.shape.Shape3D javafx.scene.shape.MeshView javafx.scene.shape.Box javafx.scene.shape.Cylinder javafx.scene.shape.Sphere
Box,Cylinder,Sphere都是继承与Shape3D,而且还是Node的子类。由此可见,3D的物体可以直接作为普通Node节点来使用。
创建起来,也是非常的简单。
Box myBox = new Box(width, height, depth); Cylinder myCylinder = new Cylinder(radius, height); Cylinder myCylinder2 = new Cylinder(radius, height, divisions); Sphere mySphere = new Sphere(radius); Sphere mySphere2 = new Sphere(radius, divisions);
下面,我们来看看用户定义的3D物体。
用户定义3D物体,主要使用的是TriangleMesh,Triangle mesh 在3D中是最常用和基础的mesh。
Triangle Mesh包含了Points的数组,纹理映射的数组以及由三角元素的mesh组成的面。(如果接触过OpenGL等的
编程的话,对这里应该是很容易理解的。)
接下来,我们来看看如何创建一个TriangleMesh。
1.首先创建一个TriangleMesh的实例。
mesh = new TriangleMesh();
2.定义描述Mesh顶点的数组
float points[] = { ... }; mesh.getPoints().addAll(points);
3.描述每个定点的纹理坐标映射
float texCoords[] = { ... }; mesh.getTexCoords().addAll(texCoords);
4.使用定点数组来创建各个三角形组成的面
int faces[] = { … }; mesh.getFaces().addAll(faces);
5.定义每个面所属的光滑组(Smoothing group)
int smoothingGroups[] = { … }; mesh.getFaceSmoothingGroups().addAll(smoothingGroups);
不论这个面是smooth还是faceted,Smoothing group都会调整上面的顶点的法线。如果,每个单独的面都有一个相同的Smoothing group,那么这个mesh将会变得非常的光滑,否则,则相反。
------------------------------------------------------------------------------------------------------
有一段时间没有写博客了,工作的中心由android转为Unity3D了,所以最近一直在做Unity3D相关的。抽空看了下JavaFX 3D API,在这里就做一点简单的评价,JavaFX 3D API 没有Unity3D方便,但比Unity3D自由一些(例如可以自定义3D物体,自定义顶点数组,纹理映射等),没有OpenGL自由(封装过的必然缺陷),但比OpenGL方便简单些(不用写那么多看得头晕的GL函数),属于折中的情况。大家可以根据自己的情况来使用。
------------------------------------------------------------------------------------------------------
本博客文章原创类别的均为个人原创,版权所有。转载请注明出处:http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。