2017-01-15 2 views
0

Ich möchte versuchen, das Mandelbrot-Set mit libGDX auf AIDE zu rendern (ich habe nur mein Telefon zum coden). Also habe ich den Algorithmus studiert und versucht, ihn zu implementieren.Zeichnen des Mandelbrot-Sets mit libGDX

Diese Funktion wird für jedes Pixel auf dem Bildschirm-

public int calcFract(int x, int y, int maxiter) 
{ 
    zx = zy = 0; 
    cx = (x - width/2)/zoom; 
    cy = (y - height/2)/zoom; 

    while(zx * zx + zy * zy < 4.0 && iter < maxiter) 
    { 
     tmp = zx * zx - zy * zy + cx; 
     zy = 2.0 * zx * zy + cy; 
     zx = tmp; 
     iter++; 
    } 

    return iter | iter << 8; 
} 

genannt wird, und hier ist die create() Callback

public void create() 
{ 
    width = Gdx.graphics.getWidth(); 
    height = Gdx.graphics.getHeight(); 
    Gdx.input.setInputProcessor(this); 
    fractal = new Pixmap(width, height, Pixmap.Format.RGB888); 
    for (int i = 0; i < width; ++i) 
     for (int j = 0; j < height; ++j) 
     { 
      int c = mandelbrot.calcFract(i, j, maxiter); 
      fractal.drawPixel(i, j, Color.toIntBits(0xff, c, c, c)); 
     } 

    fracTex = new Texture(fractal); 
    batch = new SpriteBatch(); 
} 

Die App ohne Fehler kompiliert wird, aber wenn ich es laufen, es zeigt mir this-

notice the left side of the screen

Hier der render() Callback auch -

public void render() 
{ 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    batch.draw(fracTex, 0, 0); 
    batch.end(); 
} 

Bitte sagen Sie mir, wenn irgendetwas mit meinem Code nicht stimmt. Vielen Dank im Voraus!

+0

Bitte helfen Sie mir herauszufinden, ppl. –

+0

Das Bild ist schwarz für mich. Was meinst du mit "beachte die linke Seite des Bildschirms"? – Moira

+0

Es gibt eine einzelne Pixel breite Linie mit einem Verlaufsmuster auf der linken Seite des Bildschirms. –

Antwort

0

Ich machte einen sehr nooby Fehler.

Wenn Sie sich meinen Code ansehen, werden Sie feststellen, dass nach dem Rendern des ersten Pixels der Pixmap der Algorithmus aufhört zu arbeiten, da iter immer bei Maxiter bleibt, weil ich vergaß, Iter für jedes Pixel zurückzusetzen. Die while-Schleife wird seit iter = maxiter für alle Pixel nach dem ersten übersprungen. Dies bedeutet, dass alle Pixel nach dem ersten die gleiche Farbe annehmen und alles ruinieren.

Ich habe es durch Setzen von Iter auf 0 vor der While-Schleife in CalcFract() behoben.

Verwandte Themen