请使用JavaFX 8(3D)绘制3D图形。我已经知道一些像绘制球体一样的3D基础知识,首先着色球体并添加阴影,然后对球体进行一些光照和初始化。我的问题是我想通过使用一个圆柱来加入这个球体,但是如果在两个球体之间有两个圆柱体,它必须是一个圆弧或者圆柱体(我不知道这是否可能)。我已经试过,但没有出现,即使出现某种东西,它只是一个圆柱体(不像一条线很小)。使用JavaFX8加入两个带圆柱体的球体3D
另一个问题,我想知道如何旋转可以帮助在这种情况下。
最后一个问题,有可能使一个滚动条或只使用缩放事件?谢谢。
的图片摘自:Here
这是我的代码:
import java.util.ArrayList;
import java.util.Random;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.Sphere;
import javafx.stage.Stage;
public class Graphe3D extends Application {
Group root;
PhongMaterial material;
ArrayList<Sphere> sphere;
@Override
public void start(Stage primaryStage) {
sphere=new ArrayList<>();
root=new Group();
material= new PhongMaterial();
for(int i=0;i<3;i++){
sphere.add(new Sphere(50));
//Sphere Color
material.setDiffuseColor(Color.RED);
//Shadow Color
material.setSpecularColor(Color.rgb(30, 30, 30));
//Init Sphere
sphere.get(i).setMaterial(material);
sphere.get(i).setTranslateX(new Random().nextInt(600));//set location X,Y and Z
sphere.get(i).setTranslateY(new Random().nextInt(600));
sphere.get(i).setTranslateZ(50); // ?
sphere.get(i).setDrawMode(DrawMode.FILL);
sphere.get(i).setCullFace(CullFace.BACK);// ?
//Create Light
PointLight pointLight = new PointLight(Color.ANTIQUEWHITE);
pointLight.setTranslateX(800);
pointLight.setTranslateY(-100);
pointLight.setTranslateZ(-1000);
root.getChildren().add(pointLight); //ajout de lumiere
root.getChildren().add(sphere.get(i)); //ajout des spheres au scene(root)
}
//Display
Scene scene = new Scene(root);
scene.setFill(Color.rgb(10, 10, 40));
scene.setCamera(new PerspectiveCamera(false));
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
好的谢谢你很多的链接和代码信息 –
,我测试了缩放,但它没有工作(与触摸板),但感谢代码是完美的 –