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

来源:互联网 发布:成飞杨伟被排挤 知乎 编辑:程序博客网 时间:2024/05/16 09:21

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

  


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

  

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


原创粉丝点击