个性化阅读
专注于IT技术分析

3D对象属性

本文概述

JavaFX允许我们设置3D对象的各种属性。 JavaFX中为每个属性定义了特殊的类。在本教程的这一部分中, 我们将讨论可以应用于3D对象以获得更好外观的属性类型。

阴暗面

剔除可以简单地定义为删除3D对象在视图区域中不可见的部分的过程。在JavaFX中, 3D形状包含CullFace类型的属性。通过使用以下在3D形状类对象上调用的实例方法, 可以将此属性设置为适当的值。 。

setCullFace(CullFace值)

在CullFace类中定义了三种笔触类型:

  1. 无:不执行剔除
  2. 前:所有面向前的多边形都会被剔除
  3. 背面:所有背面多边形都会被剔除

在下面的示例中, 我们创建了三个球体, 并为每个球体设置了三个剔除面。

package application;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.SubScene;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.Sphere;
import javafx.stage.Stage;
public class SphereTest extends Application{

	@Override
	public void start(Stage primaryStage) throws Exception {
	// TODO Auto-generated method stub
	
	//Creating the first sphere 
	Sphere sphere = new Sphere();
	sphere.setRadius(50);
	sphere.setTranslateX(100);
	sphere.setTranslateY(200);
	
	//Setting cullface for the sphere 1 
	sphere.setCullFace(CullFace.BACK);
	
	//creating second sphere 
	Sphere sphere1 = new Sphere();
	sphere1.setRadius(50);
	sphere1.setTranslateX(250);
	sphere1.setTranslateY(200);
	
	//setting CullFace for the sphere 2
	sphere1.setCullFace(CullFace.FRONT);
	
	//creating third sphere 
	Sphere sphere2 = new Sphere();
	sphere2.setRadius(50);
	sphere2.setTranslateX(400);
	sphere2.setTranslateY(200);
	
	//setting CullFace for the sphere 3
	sphere2.setCullFace(CullFace.NONE);
	
	//Configuring Group and Scene 
	Group root = new Group();
	root.getChildren().addAll(sphere, sphere1, sphere2);
	Scene scene = new Scene(root, 500, 400);
	primaryStage.setScene(scene);
	primaryStage.setTitle("CullFaces");
	primaryStage.show();
	}
	publicstaticvoid main(String[] args) {
		launch(args);
	}

}
JavaFX 3D对象属性

3D对象材质

JavaFX提供了可以应用于3D形状表面的各种材料。包javafx.scene.paint的Material类提供了用于处理3D形状的材料的所有类。 PhongMaterial类是Material类的子类。我们只需要实例化此类即可创建所需的材料。

此类提供了各种类型的材料作为此类的属性, 可以使用setter方法将其设置为特定值。但是, 可以使用以下方法将材料应用于形状。

shape.setMaterial(<material-type>)

物产

下表描述了类javafx.scene.paint.PhongMaterial的属性及其设置方法。

属性 描述 设置方法
bumpMap 此属性的类型为Image。这表示材料的凹凸贴图。 setBumpMap(Image URL)
diffuseColor 这是一种颜色类型属性。这代表了材料的漫反射颜色。 setDiffuseColor(Color color)
diffuseMap 这是图像类型属性​​。这表示材质的DiffuseMap。 setDiffuseMap(Image URL)
selfIlluminationMap 这是图像类型属性​​。这代表了材料的自发光图 setSelfIlluminationMap(Image URL)
specularColor 这是一种颜色类型属性。这代表了材料的镜面颜色。 setSpecularColor(Color value)
specularPower 这是一个双精度类型的属性。这代表了材质的镜面反射能力。 setSpecularPower(Double value)

package application;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.scene.shape.Sphere;
import javafx.stage.Stage;
public class MaterialExample extends Application{
@Override
publicvoid start(Stage primaryStage) throws Exception {
	// TODO Auto-generated method stub
	
	//Creating Cylinder 1
	Cylinder cyn = new Cylinder();
	cyn.setRadius(70);
	cyn.setHeight(200);
	cyn.setTranslateX(180);
	cyn.setTranslateY(150);
	
	//Creating cylinder 2 
	Cylinder cyn1=new Cylinder();
	cyn1.setRadius(70);
	cyn1.setHeight(200);
	cyn1.setTranslateX(380);
	cyn1.setTranslateY(150);
	
	//Creating cylinder 3
	Cylinder cyn2=new Cylinder();
	cyn2.setRadius(70);
	cyn2.setHeight(200);
	cyn2.setTranslateX(580);
	cyn2.setTranslateY(150);
	
	//Creating Sphere 
	Sphere s=new Sphere();
	s.setRadius(70);
	s.setTranslateX(780);
	s.setTranslateY(150);
	

	//Setting Material 1
	Image img1 = new Image("https://www.srcmini02.com/kotlin/images/kotlin-	tutorial.png");
	PhongMaterial mat = new PhongMaterial();
	mat.setDiffuseMap(img1);
	mat.setDiffuseColor(Color.WHITE);
	
	//Setting Material 2
	PhongMaterial mat2 = new PhongMaterial();
	mat2.setSelfIlluminationMap(img1);
	
	//Setting Material 3
	PhongMaterial mat3 = new PhongMaterial();
	mat3.setSpecularMap(img1);
	
	//Setting Material for sphere
	PhongMaterial mat4 = new PhongMaterial();
	mat4.setDiffuseColor(Color.BLUE);
	
	// Applying Material to 	mat4.setBumpMap(img1);the shape 
	cyn.setMaterial(mat);
	cyn1.setMaterial(mat2);
	cyn2.setMaterial(mat3);
	s.setMaterial(mat4);
	
	//Setting Camera 	mat4.setBumpMap(img1);
	PerspectiveCamera camera = new PerspectiveCamera();
	camera.setTranslateX(20);
	camera.setTranslateY(10);
	camera.setTranslateZ(50);
	
	//setting group and stage 
	Group root = new Group();
	root.getChildren().addAll(cyn, cyn1, cyn2, s);
	Scene scene = new Scene(root, 900, 300, Color.WHITE);
	scene.setCamera(camera);
	primaryStage.setScene(scene);
	primaryStage.setTitle("Material Example");
	primaryStage.show();
}
publicstaticvoid main(String[] args) {
	launch(args);
}
}
JavaFX 3D对象属性

绘图模式

JavaFX提供了各种绘制模式来绘制3D形状。此属性的类型为DrawMode。该类中定义了以下DrawMode类型。

  1. 填充:此模式绘制并填充3D形状。它由DrawMode.Fill表示
  2. 线条:此模式仅使用线条绘制3D形状。它由DrawMode.Line表示

使用以下setter方法为3D形状设置绘制模式。

Shape3D.setDrawMode(<DrawMode value>)

在下面的示例中, 我们创建了两个框, 一个是使用DrawMode Fill, 另一个是使用DrawMode Line。

package application;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.stage.Stage;
public class DrawModeExample extends Application{
@Override
publicvoid start(Stage primaryStage) throws Exception {
	// TODO Auto-generated method stub
	//Creating Boxes 
	Box box1 = new Box();
	Box box2 = new Box();
	
	//Setting properties for second box 
	box2.setTranslateX(450);
	box2.setTranslateY(300);
	box2.setTranslateZ(100);
	box2.setHeight(150);
	box2.setWidth(50);
	box2.setDepth(400);
	
	//Setting properties for first box
	box1.setHeight(100);
	box1.setWidth(100);
	box1.setDepth(400);
	box1.setTranslateX(200);
	box1.setTranslateY(200);
	box1.setTranslateZ(200);
	
	//Setting DrawModes for the boxes 
	box1.setDrawMode(DrawMode.FILL);
	box2.setDrawMode(DrawMode.LINE);
	
	//Setting the perspective camera
	PerspectiveCamera camera = new PerspectiveCamera();
	camera.setTranslateX(100);
	camera.setTranslateY(100);
	camera.setTranslateZ(50);
		
	//Configuring Group, Scene and Stage
	Group root = new Group();
	root.getChildren().addAll(box1, box2);
	Scene scene = new Scene(root, 450, 350);
	scene.setCamera(camera);
	primaryStage.setScene(scene);
	primaryStage.setTitle("Setting DrawMode");
	primaryStage.show();
	}
	publicstaticvoid main(String[] args) {
		launch(args);
	}
}
JavaFX 3D对象属性

JavaFX相机

在JavaFX中, 相机被视为可以在3D布局中移动并相应地更改“场景”视图的对象。类javafx.scene.Camera表示相机。但是, 它与2D空间不同, 在2D空间中, 我们不需要在屏幕上移动相机。

在JavaFX中, 相机坐标系的X坐标指向右侧, Y坐标指向下方, Z坐标指向远离查看者或进入屏幕的位置。

为了创建相机并将其添加到场景中, 我们必须使用以下代码行。

//创建javafx.scene.Camera的实例

Camera  camera = new Camera();

//将相机沿正确的X方向设置为50

camera.setTranslateX(50);

camera.setTranslateX(50);

camera.setTranslateY(100);

//将相机设置为20进入屏幕

camera.setTranslateZ(20);

//将相机添加到场景中

scene.setCamera(camera);

JavaFX子场景

子场景节点可以定义为一个容器, 可以容纳场景中需要为其指定摄像机角度的某些节点。用于场景分离。如果需要为场景的一部分设置不同的摄像机, 则可以使用子场景节点。可以在以下情况之一中使用Subscene。

  1. 如果我们需要用于场景的UI控件的静态相机(覆盖)。
  2. 3D对象为Y向上, 而2D UI为Y向下。
  3. 背景底纹

使用以下语法实例化一个子场景。

SubScene <reference> = new SubScene(Parent root, double width, double height, boolean depthbuffer, boolean antiAliasing)
赞(0)
未经允许不得转载:srcmini » 3D对象属性

相关推荐

评论 抢沙发

评论前必须登录!