2-02 3D形状(Shape3D)
javaFx中文文档     发布于 6/3/2020 11:45:22 PM   228次围观  0条评论
javaFx中文文档    发表于 6/3/2020 11:45:22 PM   228人围观  0条评论
本章给出了在JavaFX 3D 图形库中可用的Shape3D API的相关信息。 这里有两种类型的3D形状: - 预定义形状 - 用户自定义形状 预定义形状 预定义3D形状用于简化快速创建3D对象。这些形状包括盒子、圆柱和球体。样例用法如图2-1所示。 图2-1 预定义形状 ![预定义形状](https://www.morenote.top/api/file/getImage?fileId=0000000011ae1ade40021000) 例2-1展示了Shape3D类的层级结构。其中包括MeshView类,它用于使用指定的3D网格数据来定义一个表面。其中还包括Box、Cylinder和Sphere子类。 例2-1 Shape3D类层级结构 ```java 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对象,指定宽度、高度和深度的大小。 ```java Box myBox=New Box(width,height,depth); ``` ● 创建一个Sphere对象,指定半径 ```java Java Cylinder myCylinder = new Cylinder(radius, height); Cylinder myCylinder2 = new Cylinder(radius, height, divisions); ``` ● 创建一个Sphere对象,指定半径 ```java Sphere mySphere = new Sphere(radius); Sphere mySphere2 = new Sphere(radius, divisions); ``` 例2-2的代码行演示了预定义3D形状的用法。 例2-2 预定义3D形状的样例用法 ```java ... final PhongMaterial redMaterial = new PhongMaterial(); redMaterial.setSpecularColor(Color.ORANGE); redMaterial.setDiffuseColor(Color.RED); final PhongMaterial blueMaterial = new PhongMaterial(); blueMaterial.setDiffuseColor(Color.BLUE); blueMaterial.setSpecularColor(Color.LIGHTBLUE); final PhongMaterial greyMaterial = new PhongMaterial(); greyMaterial.setDiffuseColor(Color.DARKGREY); greyMaterial.setSpecularColor(Color.GREY); final Box red = new Box(400, 400, 400); red.setMaterial(redMaterial); final Sphere blue = new Sphere(200); blue.setMaterial(blueMaterial); final Cylinder grey = new Cylinder(5, 100); grey.setMaterial(greyMaterial); ... ``` 用户自定义形状 例2-3展示了JavaFX Mesh类的层级结构,其中包括了TriangleMesh子类。在3D布局中三角形网格(Triangle Mesh)是最典型的网格类型。 例2-3 Mesh类层级结构 ```java java.lang.Object javafx.scene.shape.Mesh (abstract) javafx.scene.shape.TriangleMesh ``` TriangleMesh中包括了独立的点数组、纹理坐标以及描述三角形构成几何网格的面。光滑组(Smoothing Group)用于对曲面中的三角形进行分组管理。在不同的Smoothiing Group中的三角形组成了硬边(Hard Edge)。 使用下面的步骤来创建一个TriangleMesh实例: 1、 创建一个新的TriangleMesh实例 ``` Mesh=new TriangleMesh(); ``` 2、 定义点集合,它们表示网格的定点。 ``` float points[]={…}; mesh.getPoints().addAll(points); ``` 3、 为每个顶点描述纹理坐标 ```java float texCoords[]={…}; mesh.getTexCoords().addAll(texCoords); ``` 4、 使用顶点来构造面,这些面使用三角形来描述其拓扑结构。 ```java Int faces[]={…}; mesh.getFaces().addAll(faces); ``` 5、 定义每个面所属的Smothing Group。 ```java int smoothingGroups[]={…}; mesh.getFaceSmoothingGroups().addAll(smoothingGroups); ``` Smoothing Group可以调整各个面的顶点使其变得光滑或碎片化。如果每个面都有不同的Smoothing Group,那么网格会变得非常碎片化。如果所有的面都在同一个Smoothing Group中,则网格会看起来非常平滑。
立即登录,发表评论
没有帐号?立即注册
{{$.post.CommentNum}} 条评论