Hallo zusammen,
ich erstelle gerade eine JavaFX application zur Darstellung von Molekülen und habe das Problem, dass die 3D-Grafik der Camera bei sich überschneidenen Spheres in Abhängigkeit des Scalings der world-Koordinaten einmal ein gutes und einmal ein schlechtes Bild ergibt.
Ich benutze folgende JavaFX version: javafx.runtime.version: 8.0.161-b12
Ich habe den Problemfall auf folgenden Java-Code reduziert:
Als Ergebnis sehe ich bei sc = 1.0 eine gute Grafik und bei sc = 6000.0 eine absolut miese Darstellung des Kugelausschnitts:
Kann man das verbessern?
Ich danke schon mal für die Hilfe.
EmilErlenmeyer
ich erstelle gerade eine JavaFX application zur Darstellung von Molekülen und habe das Problem, dass die 3D-Grafik der Camera bei sich überschneidenen Spheres in Abhängigkeit des Scalings der world-Koordinaten einmal ein gutes und einmal ein schlechtes Bild ergibt.
Ich benutze folgende JavaFX version: javafx.runtime.version: 8.0.161-b12
Ich habe den Problemfall auf folgenden Java-Code reduziert:
Java:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.SceneAntialiasing;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.stage.Stage;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
public class Test extends Application {
@Override
public void start(Stage stage) {
// Scaling factor
// double sc = 6000.0;
double sc = 1.0;
// Sphere 1
Sphere sphere1 = new Sphere (0.4*sc);
sphere1.setTranslateX ( 0.20*sc);
sphere1.setTranslateY ( 0.30*sc);
sphere1.setTranslateZ (-0.50*sc);
sphere1.setMaterial (new PhongMaterial(Color.RED));
// Sphere 2
Sphere sphere2 = new Sphere (1.0*sc);
sphere2.setTranslateX ( 0.80*sc);
sphere2.setTranslateY ( 0.15*sc);
sphere2.setTranslateZ ( 0.00*sc);
sphere2.setMaterial (new PhongMaterial(Color.BLUE));
// Group
Group root = new Group (sphere1, sphere2);
// Camera
final PerspectiveCamera camera = new PerspectiveCamera (true);
camera.setTranslateZ (-6.0*sc);
camera.setNearClip ( 0.1);
camera.setFarClip (100000.0);
// Scene
Scene scene = new Scene (root, 800.0, 600.0, true, SceneAntialiasing.BALANCED);
scene.setCamera (camera);
// Stage
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Als Ergebnis sehe ich bei sc = 1.0 eine gute Grafik und bei sc = 6000.0 eine absolut miese Darstellung des Kugelausschnitts:
Kann man das verbessern?
Ich danke schon mal für die Hilfe.
EmilErlenmeyer