В настоящее время я использую библиотеку Java JCSG для создания конструктивных Solid объектов геометрии, таких как пересечения, объединения и различие между трехмерными объектами. Используя библиотеку JCSG , у меня есть следующий код для создания объектов (в данном случае куб)
private static CSG createCube(double w, double h, double d) {
return new Cube(w, h, d).toCSG();
}
и всякий раз, когда я хочу установить цвет этого указанного c объекта CSG Я использую следующее
private static CSG color(CSG shape, Color c) {
return shape.color(c);
}
Однако, когда я преобразовываю эти объекты в MeshView и передаю их в javafx.scene.Group, цвет по умолчанию (красный):
Group world = new Group();
System.out.println(this.objects.size());
for (CSG p : this.objects) {
var x = p.toJavaFXMesh().getAsMeshViews().get(0);
for(Material m: p.toJavaFXMesh().getMaterials()){
System.out.println(m.toString());
// System.out.println(m1.getDiffuseColor().toString());
x.setMaterial((PhongMaterial)m);
}
world.getChildren().add(x);
}
Scene scene = new Scene(world, WIDTH, HEIGHT, true);
scene.setFill(Color.PALETURQUOISE);
scene.setCamera(camera);
// initMouseControl(world, scene, primaryStage);
addEventHandlers(scene, camera);
primaryStage.setTitle("Pane");
primaryStage.setScene(scene);
primaryStage.show();
Где this.objects
содержит все объекты, которые я создал в другом классе.
package me.emil;
import javafx.scene.paint.Color;
import me.emil.helpers.Pane;
public class App {
public static void main(String[] args) {
CSGStorage singleton = CSGStorage.getInstance();
var x = singleton.sphere(50);
x = singleton.translate(x, 100, 0, 0);
x = singleton.color(x, Color.YELLOW);
singleton.addPrimitive(x);
Pane p = new Pane();
p.launchPane();
}
}