我在JavaFX中遇到深度缓冲区问题。 我开始了一个模拟,现在尝试围绕Y轴旋转我的风轮。 通常它只是显示我的窗格与场景,我可以点击我添加到我的场景中的每个按钮和图表。 正如我注意到隐藏风轮不同部分的最佳方法是深度缓冲。如果我把他设置为真我甚至不能点击我的场景并进行更改。
我在这里有一张照片 with depth buffer
没有深度缓冲区 without depth buffer
所以任何人都知道通过激活缓冲区出了什么问题?
这是我的开始方法:
public class Main extends Application {
Stage primaryStage;
Pane region;
Scene simulation;
Group root;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
region = new Pane();
root = new Group();
simulation = new Scene(root, 1200, 1000,true);
simulation.setCamera(new PerspectiveCamera());
primaryStage.setScene(simulation);
simulation.setRoot(region);
new GUI(simulation, region);
primaryStage.show();
}}
这是我从以下各项加载所有内容的GUI类:
public class GUI {
Pane pane;
ComboBox<String> windpark;
ObservableList<String> recordsWindpark;
ObservableList<String> recrodsWindDirection;
Label settings;
Label windDirection;
Label windStrength;
Label birds;
Label bos;
Label fire;
Label totalKW;
Button start;
Button stop;
Button reset;
Button add;
Button delete;
Button x1;
Button x2;
Button x4;
Button chartRenew;
Line bottomLine;
Line sideline;
Line settingLine;
CheckBox birdsYes;
CheckBox birdsNo;
CheckBox fireYes;
CheckBox fireNo;
CheckBox bosYes;
CheckBox bosNo;
ComboBox<String> windDirectionCombo;
TextField windDegree;
Box gamefield;
Scene scene;
Group root;
int scalingForGUI;
Double timeData;
String windStrenghtData;
WindWheel rad;
WindWheel rad2;
WindWheel rad3;
WindWheel rad4;
WindWheel rad5;
WindWheel rad6;
public GUI(Scene scene, Pane pane) {
this.pane = pane;
root = new Group();
this.scene = scene;
recordsWindpark = FXCollections.observableArrayList("Windpark Ostsee", "Windpark Nordsee","Delete");
recrodsWindDirection = FXCollections.observableArrayList("Nord - Nord/Ost", "Ost - Süd/Ost", "Süd - Süd/West",
"West - Nord/West");
settings = new Label("Settings");
settings.setLayoutX(900);
settings.setLayoutY(30 - scalingForGUI);
windpark = new ComboBox<>(recordsWindpark);
windpark.setLayoutX(900);
windpark.setLayoutY(90 - scalingForGUI);
windDirection = new Label("Windrichtung");
windDirection.setLayoutX(900);
windDirection.setLayoutY(200 - scalingForGUI);
windStrength = new Label("Windstaerke");
windStrength.setLayoutX(900);
windStrength.setLayoutY(300 - scalingForGUI);
birds = new Label("Voegel");
birds.setLayoutX(900);
birds.setLayoutY(540 - scalingForGUI);
bos = new Label("Boeen");
bos.setLayoutX(900);
bos.setLayoutY(600 - scalingForGUI);
fire = new Label("Brand");
fire.setLayoutX(900);
fire.setLayoutY(660 - scalingForGUI);
totalKW = new Label("Gesamt KW");
totalKW.setLayoutX(900);
totalKW.setLayoutY(750 - scalingForGUI);
start = new Button("Start");
start.setLayoutX(30);
start.setLayoutY(700);
stop = new Button("Stop");
stop.setLayoutX(80);
stop.setLayoutY(700);
reset = new Button("Reset");
reset.setLayoutX(130);
reset.setLayoutY(700);
add = new Button("Add");
add.setLayoutX(600);
add.setLayoutY(700);
delete = new Button("Delete");
delete.setLayoutX(650);
delete.setLayoutY(700);
x1 = new Button("x1");
x1.setLayoutX(550);
x1.setLayoutY(100);
x2 = new Button("x2");
x2.setLayoutX(600);
x2.setLayoutY(100);
x4 = new Button("x4");
x4.setLayoutX(650);
x4.setLayoutY(100);
gamefield = new Box(600, 40, 600);
gamefield.setMaterial(new PhongMaterial(Color.GREENYELLOW));
gamefield.getTransforms().add(new Rotate(10, 0, 0, 0, Rotate.X_AXIS));
gamefield.getTransforms().add(new Rotate(20, 0, 0, 0, Rotate.Y_AXIS));
gamefield.setLayoutX(400);
gamefield.setLayoutY(500);
gamefield.setTranslateZ(1);
bottomLine = new Line(0, 650, 850, 650);
sideline = new Line(850, 0, 850, 1000);
settingLine = new Line(850, 140, 1500, 140);
birdsYes = new CheckBox("Yes");
birdsYes.setLayoutX(900);
birdsYes.setLayoutY(560 - scalingForGUI);
birdsNo = new CheckBox("No");
birdsNo.setLayoutX(970);
birdsNo.setLayoutY(560 - scalingForGUI);
fireYes = new CheckBox("Yes");
fireYes.setLayoutX(900);
fireYes.setLayoutY(680 - scalingForGUI);
fireNo = new CheckBox("No");
fireNo.setLayoutX(970);
fireNo.setLayoutY(680 - scalingForGUI);
bosYes = new CheckBox("Yes");
bosYes.setLayoutX(900);
bosYes.setLayoutY(620 - scalingForGUI);
bosNo = new CheckBox("No");
bosNo.setLayoutX(970);
bosNo.setLayoutY(620 - scalingForGUI);
chartRenew = new Button("Renew Charts");
chartRenew.setLayoutX(720);
chartRenew.setLayoutY(100);
windDirectionCombo = new ComboBox<>(recrodsWindDirection);
windDirectionCombo.setLayoutX(900);
windDirectionCombo.setLayoutY(230);
windDirectionCombo.setOnAction(e -> {
switchtingWind();
});
windDegree = new TextField("Gradzahl");
windDegree.setLayoutX(900);
windDegree.setLayoutY(260);
windDegree.setEditable(false);
pane.getChildren().addAll(gamefield, settings, windpark, windDirection, windStrength, birds, bos, fire, totalKW,
start, stop, reset, add, delete, x1, x2, x4, bottomLine, sideline, settingLine, birdsYes, birdsNo,
fireYes, fireNo, bosYes, bosNo, windDirectionCombo, windDegree, chartRenew);
scene.setRoot(pane);
String artLeistung = "Leistung";
Chart chartLeistung = new Chart(pane, artLeistung);
chartLeistung.enableEventHandler();
chartLeistung.setLayout(835, 310);
}
我希望有人可以帮助我。
谢谢!