Hallo,
Ich habe mich mal in Shaderprogrammierung versucht.
Dabei ist ein Pixelshader entstanden der ein Mandelbrot Fraktal berechnet.
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.
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.
[Projekt] Mandelbrot
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.
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.
- Krishty
- Establishment
- Beiträge: 8250
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mandelbrot
Funktioniert und sieht hübsch aus.
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
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: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?
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.Jiba hat geschrieben:2. Kommt man an die x-y Koordinaten eines Pixels?
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
Re: [Projekt] Mandelbrot
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
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
Re: [Projekt] Mandelbrot
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
Nur schade das recht schnell Genauigkeitgrenzen auftauchen.
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;
}
-
- Beiträge: 44
- Registriert: 15.05.2010, 01:21
- Echter Name: Nils Daumann
- Wohnort: Lübeck
- Kontaktdaten:
Re: [Projekt] Mandelbrot
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.
Ich habe sowas auch mal gemacht. Nur wie hier ja schon festgestellt kommt man doch ziemlich schnell an die Grenzen der Präzision.