Objekte in weiter Entfernung flimmern / flackern

Daniel.S

Mitglied
Hallo!

Ich arbeite z.Z. an einem 3D Universium. Dabei habe ich mich für das normale SI-Einheiten System entschieden - die Distanzen zwischen den Planeten sind also groß. (~ E11 für Erde). Nun werden meine Planeten wenn ich von weitem auf sie zufliege nicht sauber dargestellt, sie sind pixelig,flimmern und flackern. Double-Buffering verwende ich dabei. Vielleicht weiß ja jemand einen Rat. Eventuell liegts auch an falschen zNear, zFar in gluPerspective. Ich verwende JOGL 2.0

Initalisierungsdatei in einer Main-Klasse
Java:
public void init() {
               this.capabilities = new GLCapabilities(this.profile);
		this.capabilities.setDoubleBuffered(true);
		this.canvas = new GLCanvas(this.capabilities);
		this.orbit = new OrbitSimulator(this);
		this.animator = new FPSAnimator(this.canvas, 25);
		this.canvas.addGLEventListener(this.orbit);
		this.frame.add(canvas);
		this.frame.setSize(1280, 800);
		Container con = this.frame.getContentPane();
		con.setBackground(Color.gray);
		this.frame.setLayout(null);
		this.canvas.setBounds(0, 0, 800, 700);
		this.canvas.addMouseMotionListener(orbit);
		this.canvas.addMouseListener(orbit);
		this.canvas.addKeyListener(orbit);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                new Thread(new Runnable() {
                    public void run() {
                        animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });
        frame.setVisible(true);
        animator.start();	
        this.initLabels();
        this.initProgressBars();
}

in der zentralen Renderingklasse:
Java:
public class OrbitSimulator extends JFrame implements GLEventListener, MouseMotionListener, KeyListener, MouseListener {
 /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public GLU glu = new GLU();
	public GL2 gl;
	public ArrayList<AOrbitObject> objects  = new ArrayList<AOrbitObject>();	/** Array-list of AOrbitOjects*/
	public Daten daten = new Daten();
  
  float[] colorBlack  = {0.0f,0.0f,0.0f,1.0f};
  float[] colorWhite  = {1.0f,1.0f,1.0f,1.0f};
  float[] colorGray   = {0.6f,0.6f,0.6f,1.0f};
  float[] colorRed    = {1.0f,0.0f,0.0f,1.0f};
  float[] colorBlue   = {0.0f,0.0f,0.1f,1.0f};
  float[] colorYellow = {1.0f,1.0f,0.0f,1.0f};
  float[] colorLightYellow = {.5f,.5f,0.0f,1.0f};
  
  private float lightPos[] = {0.0f, 0.0f, 0.0f, 1.0f};
  private int _width;
  private int _height;
  public boolean reset = false; 
  public Point lastMousePoint = new Point();
  public Point currentMousePoint = new Point();
  public KeyHandler keyHandler;
  public MouseHandler mouseHandler;
  public TextRenderer textRenderer = null;
  public Camera camera = new Camera();
  public Main b = null;
  public Time t = new Time();
  public GUIUpdater updater;

  OrbitSimulator(Main b) {
	this.b = b;
    this.keyHandler = new KeyHandler(this);
    this.mouseHandler = new MouseHandler(this);
 }

  public void init(GLAutoDrawable drawable) {
     gl = drawable.getGL().getGL2();
    gl.glEnable(GL.GL_DEPTH_TEST);
    gl.glEnable(GLLightingFunc.GL_LIGHTING);
    gl.glEnable(GLLightingFunc.GL_LIGHT0);
    gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_DIFFUSE, colorWhite, 0);
    gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_AMBIENT, colorBlack, 0);
    textRenderer = new TextRenderer(new Font("SansSerif", Font.BOLD, (int)32),true,true);
    this.objects.add(0, new Sun(this));
    this.objects.add(1, new Earth(this));
    this.objects.add(2, new Viewer(this));
    this.objects.get(0).init();
    this.objects.get(1).init();
    this.objects.get(2).init();
  	this.objects.get(1).start();
  	this.objects.get(2).start();
    this.keyHandler.init();  
    this.keyHandler.start();
    this.updater = new GUIUpdater(this);
    this.updater.start();

  }

  public void display(GLAutoDrawable drawable) {
    if (reset) {
      int width = _width;
      int height = _height;
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL2.GL_PROJECTION);
      gl.glLoadIdentity();
      glu.gluPerspective(60.0, (double) width / (double) height, 0.001 , 100);
      gl.glMatrixMode(GL2.GL_MODELVIEW);
      gl.glLoadIdentity();
      reset = false;
    }
    

    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();
    updateView(gl);  
    //Sonnenlicht
    gl.glPushMatrix();
    	gl.glTranslatef(0.0f, 0.0f, 0.0f);
    	gl.glLightf(GL2.GL_LIGHT0, GL2.GL_CONSTANT_ATTENUATION, 0.01f);
    	gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPos, 0);
    	gl.glDisable(GL2.GL_LIGHT0);
   gl.glPopMatrix();
   
    this.objects.get(0).render(gl, glu);
    this.objects.get(1).render(gl, glu);
    t.run();  


  }


  public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

    if (height <= 0) {
      height = 1;
    }

    this._height = height;
    this._width = width;
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL2.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluPerspective(45.0, (double) width / (double) height, 10000 ,  5E15);
    gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();
  }

Vielleicht weiß ja jemand einen Tipp?
Ein KSKB ist in dem fortgeschrittenem Status des Projektes schwierig zu extrahieren, es sind mittlerweile über 40 Klassen.
Danke, Daniel.S
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Schwer zu sagen woran das liegt, nur anhand des Codes und ohne es zu sehen (und selbst WENN man es sehen würde...). Vermutlich wird Fancy's Kristallkugel da klarere Bilder liefern (meine flackert und flimmert, als würde was mit dem Z-Buffer nicht stimmen :D ) aber .... vielleicht liegt's am Z-Buffer :D Der ist AFAIK üblicherweise nur 24bittig, und so ein flackern kann dann das sein, was Z-fighting - Wikipedia, the free encyclopedia genannt wird - sieht das bei dir so aus?
Die Parameter für zNear/zFar sind schon recht weit auseinander, aber eigentlich noch im Rahmen (soweit ich das beurteilen kann, und falls da nicht noch andere Faktoren Einfluß nehmen). Schonmal statt 0.001 , 100 sowas wie 1.0, 100 probiert?
 

Daniel.S

Mitglied
ich glaube es lag eher an dem gluPerspective in der reshape-Methode:D

glu.gluPerspective(45.0, (double) width / (double) height, 10000 , 5E15);

Ich denke, dass liegt definitv zuweit auseinander, und das was in dem Wikipedia-Artikel beschrieben wird, sieht dem ziemlich ähnlich. Ich hab mal ein paar 0-en zu den 10000 dazugetan, und es ist fast weg. Muss jetzt nur mal ausprobieren was passiert wenn ich nahe an die Objekte ranfliege...
aber danke! Hab wohl den Wald vor lauter Bäumen nicht mehr gesehen:D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
Kim_Dotcom Objekte synchronisieren Variablen Spiele- und Multimedia-Programmierung 19
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
N Helden: Verschiedene Objekte oder konkrete Unterklassen Spiele- und Multimedia-Programmierung 1
gamebreiti Wie Objekte versenden und empfangen Spiele- und Multimedia-Programmierung 4
J Objekte übereinander lagern Spiele- und Multimedia-Programmierung 1
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
Q Mehr objekte darstellen als Pixel vorhanden Spiele- und Multimedia-Programmierung 6
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
Z Objekte animieren mit Threads Spiele- und Multimedia-Programmierung 4
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
A JME3 will Blender/j3o Objekte nicht einladen Spiele- und Multimedia-Programmierung 3
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
G 3D-Objekte / Grafiken gesucht Spiele- und Multimedia-Programmierung 6
S Klickbare Objekte im Spiel Spiele- und Multimedia-Programmierung 8
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
L 3D Objekte in Java importieren Spiele- und Multimedia-Programmierung 2
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
T Selbst-handelnde Objekte im Client-Server Betrieb Spiele- und Multimedia-Programmierung 9
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
aze Java 3d Objekte überdecken 2d Komponenten Spiele- und Multimedia-Programmierung 7
aze Java 3D : 3D Objekte speichern und später wieder einlesen Spiele- und Multimedia-Programmierung 9
D Halbdurchsichtige Objekte Spiele- und Multimedia-Programmierung 17
F zu viele Objekte, Problem mit neuzeichnen. Spiele- und Multimedia-Programmierung 5
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
B Isometrischer KartenEditor mit Animierten Objekte Spiele- und Multimedia-Programmierung 3
J 1x Punktlicht auf 5 Objekte benutzen Spiele- und Multimedia-Programmierung 17
F Maussteuerung-gezeichnete Objekte Spiele- und Multimedia-Programmierung 4
B Objekte zur Laufzeit verändern Spiele- und Multimedia-Programmierung 3
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
J Zu viele Objekte - OutOfMemoryError Spiele- und Multimedia-Programmierung 3
L Objekte zentrieren Spiele- und Multimedia-Programmierung 2
G zur laufzeit objekte einfügen Spiele- und Multimedia-Programmierung 3
G 2D-Objekte werden nicht vollständig gezeichnet Spiele- und Multimedia-Programmierung 4
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
A Objekte nacheinander zeitgesteuert rotieren lassen Spiele- und Multimedia-Programmierung 4
H 3D Objekte ausfüllen Spiele- und Multimedia-Programmierung 3
T 3D-Objekte Laden Spiele- und Multimedia-Programmierung 3
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
G Zugriff auf einzelne Objekte Spiele- und Multimedia-Programmierung 12
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
N Schlieren und Ruckeln, weiss nicht mehr weiter.... Spiele- und Multimedia-Programmierung 5
M weiter gucken Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben