[Projekt] Mandelbrot

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Jiba
Beiträge: 31
Registriert: 16.01.2010, 17:42

[Projekt] Mandelbrot

Beitrag von Jiba »

Hallo,
Ich habe mich mal in Shaderprogrammierung versucht.
Dabei ist ein Pixelshader entstanden der ein Mandelbrot Fraktal berechnet.
Mandelbrot.rar
(121 KiB) 217-mal heruntergeladen
Steuerung:
Cursortasten - x-y Bewegung auf der Ebenen
W - Hineinzoomen
S - Rauszoomen
Q - Erhöht die Iterationen-Durchläufe
A - Verkleinert die Iterationen-Durchläufe
F1 - Speichert die aktuelle Position in einer Textdatei-Liste
Bild Hoch - Lädt aus der Textdatei die nächste Position
Bild Runter - Lädt aus der Textdatei die vorherige Position

Ich hoffe es läuft bei allen.
scr00.png
scr01.png
scr02.png
Mandelbrot.rar
(121 KiB) 217-mal heruntergeladen
Mal zwei Fragen zu Pixelshader (HLSL):
1. Kommt man an die States die man mit SetRenderState setzt oder ist diese Funktion nur für die Fixed Pipe?
2. Kommt man an die x-y Koordinaten eines Pixels?

Viel Spass beim erfoschen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8250
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mandelbrot

Beitrag von Krishty »

Funktioniert und sieht hübsch aus.
Jiba hat geschrieben:Mal zwei Fragen zu Pixelshader (HLSL):
1. Kommt man an die States die man mit SetRenderState setzt oder ist diese Funktion nur für die Fixed Pipe?
Garnicht. Auch in anderen APIs kommst du nicht an die States ran, weil sie da sind um das zu steuern, was mit Shadern nicht programmierbar ist.
Jiba hat geschrieben:2. Kommt man an die x-y Koordinaten eines Pixels?
In D3D9 nur, wenn du ein Rechteck über den Bildschirm zeichnest und seinen Vertices ihre Positionen mit auf den Weg gibst, damit sie im Pixel-Shader interpoliert ankommen.

Shader vor 4.0 sind für Fraktalrenderer eigentlich völlig ungeeignet, weil dir nur 24-Bit-Rechenpräzision garantiert wird – dass, wie auf den Screenshots, was 32-Bit-Genaues rauskommt, ist schon ein Glücksfall. Erst ab Shader Model 4 (also Direct3D 10 oder höher) hat man volle 32-Bit-Gleitkommapräzision und kann, wie bei „echten“ Fraktalrenderern, quasi-unendliche Präzision durch eigene Gleitkommaklassen emulieren. Nur, falls du mit dem Gedanken spielst, das weiter zu verfolgen.

Als Übung ist es aber ganz nett, obwohl du mehr mit Texturen arbeiten solltest. Kein Shader, den du je schreibst, wird bloß eine mathematische Funktion ausführen sondern es wird immer darauf hinauslaufen, Texturen miteinander zu verrechnen und Vektoren miteinander zu transformieren.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Frekl
Beiträge: 38
Registriert: 09.02.2010, 21:47
Echter Name: Malte
Wohnort: München
Kontaktdaten:

Re: [Projekt] Mandelbrot

Beitrag von Frekl »

sieht ja echt gut aus :)
gute Arbeit...
Ist es eigentlich schwer bzw zeitaufwendig,
so ein, durch rekursive Funktionen enstandenes, Mandelbrot nachzuprogrammiern?
Ganz simpel mein ich, hab mich mit dem Thema noch nie so richtig beschäftigt
Rote Glut schmeckt blau.

http://frekl.de.tl/
Jiba
Beiträge: 31
Registriert: 16.01.2010, 17:42

Re: [Projekt] Mandelbrot

Beitrag von Jiba »

Hallo,

es ging eigendlich recht flott. Das drumherum hat am längsten Zeit gefressen. Also die Benutzereingabe, wie wähle ich hübsche Farben aus oder wie funktioniert HLSL.
Ich hatte es schonmal mit SDL und OpenGL 1 gemacht. Das war mir zu langsam, weil kein zoomen in echtzeit möglich war. In OpenGL kenn ich mich auch kaum aus um es zu optimieren. Und der Algorithmus ist in wikipedia sehr gut beschrieben.

Ich hab ungefähr 3 Abende gebraucht dafür.
1. Abend - Quick and Dirty den Algorithmus reingehackt
2. Abend - Auf Direct3D mit Pixelshader umgeschrieben
3. Abend - Steuerung, Farben und ein wenig Feinschliff

Der Shader wird vom Programm aus einer Datei geladen. Kannst ja an der Formel Experimentieren, wenn du lust hast.

zb ist auch folgender Code ganz hübsch.
Zneu=Zalt³+C statt Zneu=Zalt²+C

Code: Alles auswählen

COMPLEX Mandelbrot(COMPLEX c, float n)
{
    float i;
	COMPLEX Z = {0, 0};

	for(i=0; i<n; ++i)
	{
		Z = Add(Multiply(Z, Multiply(Z, Z)), c);
	}

	return Z;
}
Nur schade das recht schnell Genauigkeitgrenzen auftauchen.
Slin
Beiträge: 44
Registriert: 15.05.2010, 01:21
Echter Name: Nils Daumann
Wohnort: Lübeck
Kontaktdaten:

Re: [Projekt] Mandelbrot

Beitrag von Slin »

Sieht nett aus :)
Ich habe sowas auch mal gemacht. Nur wie hier ja schon festgestellt kommt man doch ziemlich schnell an die Grenzen der Präzision.
Antworten