JavaFX 3D部分介绍(1) 3D Shape

声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: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,cylindersspheres。其实还是很少的,如下图所示:

JavaFX 3D部分介绍(1) 3D Shape


其中,类的继承结构如下:

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物体,主要使用的是TriangleMeshTriangle 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


你可能感兴趣的:(JavaFX)