Mandelbort Menge / Apfelmänchen als OpenGL Shader

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Ich habe heute etwas mit Pyglet experimentiert. Und dabei etwas Programmiert was ich schon lange einmal machen wollte - die Mandelbrot Menge auf der GPU visualisieren. Das ganze hat auch ziemlich toll geklappt. Auch bei 1680x1050 Pixel und bis zu 250 Iterationen pro Pixel komme ich noch auf 75 FPS (Das Limit meines 75 Herz Displays). Das ganze natürlich ohne CPU Last.

Screenshot:
Bild

Source:
http://29a.ch/mandelbrot/mandelbrot.py.txt

Voraussetzungen:
Python, Pyglet, OpenGL 2.0 kompatible Grafikkarte

Bedienung:
Source Code hat geschrieben: Usage:
You can move arround by dragging with the left mouse button
You can zoom in and out with your mouse wheel
You can toggle the fullscreen mode with the F key
You can toggle the fps display with the F1 key
Vielleicht ist die Shader Klasse ja auch noch für jemand anders nützlich.
Über Feedback würde ich mich freuen!

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Wow, sieht sehr klasse aus! Aber:

1) pyglet war bereits per easy_install bei mir installiert, wollte sich aber partout nicht importieren lassen (am PYTHONPATH lag es nicht). Den 'ZipImportError'(?) bin ich durch erneute Installation mittels '-Z' losgeworden, aber dann klappte der Import immer noch nicht.

Das Ei enthielt nur optimierten Bytecode - was ja nichts ungewöhnliches ist. Als ich dann '__init__.py', meckerte er nicht mehr über den generellen Import, aber zumindest darüber, dass er (wenig verwunderlich) den Rest nicht finden.

Ubuntu hat offenbar kein Paket für pyglet im Angebot, also habe ich es letztlich aus dem Source erstellt ("herkömmlich", ohne setuptools dabei zu nutzen) und dann lief's auch.

2) Beim Starten des Progamms begegnet mir ein weißes Fenster und eine ganze Menge von diesen hier:

Code: Alles auswählen

Mesa 7.0.3 implementation error: User called no-op dispatch function (an unsupported extension function?)
Please report at bugzilla.freedesktop.org
Any ideas?
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Y0Gi hat geschrieben:1) pyglet war bereits per easy_install bei mir installiert, wollte sich aber partout nicht importieren lassen (am PYTHONPATH lag es nicht).
Selbes Problem, anderes Betriebssystem: Windows.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Craven hat geschrieben:
Y0Gi hat geschrieben:1) pyglet war bereits per easy_install bei mir installiert, wollte sich aber partout nicht importieren lassen (am PYTHONPATH lag es nicht).
Selbes Problem, anderes Betriebssystem: Windows.
Ja, Pyglet hat sich auch bei mir nicht per Easyinstall installieren lassen. Warum auch immer.

Y0Gi,
Sieht aus als würden Shaderprogramme von deiner Grafikkarte/Treiber nicht unterstützt werden. Was verwendest du? Ich habe den Code nur mit Nvidia Karten getestet.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das sieht ganz toll aus. Aber was hast Du denn für einen Rechner? Ich komme über 10 FPS nur, wenn das Bild ziemlich schwarz ist.
MfG
HWK
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

HWK hat geschrieben:Das sieht ganz toll aus. Aber was hast Du denn für einen Rechner? Ich komme über 10 FPS nur, wenn das Bild ziemlich schwarz ist.
MfG
HWK
Die 60 FPS erreiche ich mit einer Geforce 8800GT. Der Rest dürfte nicht wirklich relevant sein. Was für eine Grafikkarte verwendest du denn?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

In meinem Laptop steckt 'ne schäbige, alte ATI. Gut, viel erwartet hatte ich nicht, aber zumindest, dass es startet ;) Mit den Grafikkarten/-treibern ist das aber ja immer so eine Sache unter Linux, an der die Hersteller nicht unschuldig sind.

Naja, werd's bei Zeiten mal auf ner größeren Maschine testen. Sowas zu programmieren reizt mich jedenfalls sehr.
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Sieht sehr sehr nice aus, werds später ma testen mit meiner GeForce 8600 GS.

Mfg skypa
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Also bei mir läuft es gut (Gentoo & 8600 oder 6600 GS - zu faul nachzugucken). Muß allerdings als root ausgeführt werden.

... ich bin begeistert ...
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

NVIDIA GeForce 7300 LE
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

HWK hat geschrieben:NVIDIA GeForce 7300 LE
Na gut, das ist auch nicht gerade eine schnelle Karte :)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Hmm hinundwieder bekomm ich beim F1-Tastendruck nen Absturz und folgende Meldung:
Floating point exception

Mehr, nicht...

Achja laufen tuts bei mir zwischen 15 und 50 (je nach Zoom) Frames auf nem Laptop mit ner Geforce Go 7700.
Auf jeden Fall steigt die GPU Temperatur an wenn es länger offen ist und man wild hin un her zoomt^^ Mal schaun bei 110 Grad sollte er runter schalten ;)

EDIT:// Keine Chance, der Lüfter schaltet bei 70° einen Deut höher und dann ist die Temperatur gleich wieder unten...
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

apollo13 hat geschrieben:Hmm hinundwieder bekomm ich beim F1-Tastendruck nen Absturz und folgende Meldung:
Floating point exception
Das kann ich mir nicht erklären. Kannst du mir mal einen Stacktrace zukommen lassen?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Also ich habe Pyglet vorhier nicht gekannt. Hab es spontan mal installiert (die entsprechende .msi unter Vista 64bit) und bekam folgenden Backtrace bei der Ausfuehrung deines Programmes:

Code: Alles auswählen

>D:\Programme\Python25\pythonw.exe -u "glslmandelbrot.py"
Traceback (most recent call last):
  File "glslmandelbrot.py", line 229, in <module>
    main()
  File "glslmandelbrot.py", line 226, in main
    MainWindow().run()
  File "glslmandelbrot.py", line 167, in __init__
    self.shader = Shader(vertex_shader, fragment_shader)
  File "glslmandelbrot.py", line 105, in __init__
    gl.GL_VERTEX_SHADER)
  File "glslmandelbrot.py", line 128, in create_shader
    raise ShaderException(message)
__main__.ShaderException: Vertex shader was successfully compiled to run on hardware.
 
>Exit code: 1
...also eine ShaderException die sagt, das es klappt O_o strange :roll:

Btw: Ich bin einer der rar gewordenen ATI-User. ATI HD2900XT
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

In der Tat toll :)
Funktioniert es wenn du die Zeile 128 durch ein pass ersetzt?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

veers hat geschrieben:In der Tat toll :)
Funktioniert es wenn du die Zeile 128 durch ein pass ersetzt?
Nein, dann bekomm ich folgendes:

Code: Alles auswählen

>D:\Programme\Python25\pythonw.exe -u "glslmandelbrot.py"
Traceback (most recent call last):
  File "glslmandelbrot.py", line 229, in <module>
    main()
  File "glslmandelbrot.py", line 226, in main
    MainWindow().run()
  File "glslmandelbrot.py", line 167, in __init__
    self.shader = Shader(vertex_shader, fragment_shader)
  File "glslmandelbrot.py", line 113, in __init__
    raise ShaderException(message)
__main__.ShaderException: Fragment shader(s) linked, vertex shader(s) linked. 

>Exit code: 1
...lasse ich auch diese Exception passieren laeuft es auch bei mir :)
Ich kann allerdings nicht sehr weit zoomen... Es wird schnell pixelig.
Ansonsten hab ich direkt nach dem Start zw 45 und 50 F/s. bei den Anfaengen der Pixeligkeit sind es dann so 25-30. Dabei bleibt es dann in etwa.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Was heisst wenig? Bei mir liegen so ~15 mal drin. Danach ist die Präzision der Floats am Ende. Doubles werden leider nicht unterstützt. Das mit der ShaderException werde ich fixen. Ich brauche wohl einen anderen Weg um herauszufinden ob ein Fehler aufgetreten ist oder nicht. Ich hoffe du wirst es dann noch einmal testen!

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

veers hat geschrieben:
apollo13 hat geschrieben:Hmm hinundwieder bekomm ich beim F1-Tastendruck nen Absturz und folgende Meldung:
Floating point exception
Das kann ich mir nicht erklären. Kannst du mir mal einen Stacktrace zukommen lassen?
Wenn du mit Stacktrace den normalen Backtrace meinst: Gibt es leider nicht, es kommt nur Floating point exception....
Falls du was anderes damit meinst, sag mir wie ich ihn bekomm...

EDIT:
auftreten tut das Problem scheinbar in diesen beiden Zeilen (eher erste..., also direkt in der if abfrage):

Code: Alles auswählen

            if self.show_fps:
                self.fps.draw()
Möglicherweise, wenn das Programm gestartet wird und die Maus außerhalb ist, das Programm selbst aber Fokus hat...
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Hallo,

Ich brauch' mal einen kleinen Tipp: Ich würde die Darstellung gerne etwas anders einfärben - mehr in Richtung warme Farben. Wo muß ich da ansetzen?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Jan-Peer hat geschrieben:Hallo,

Ich brauch' mal einen kleinen Tipp: Ich würde die Darstellung gerne etwas anders einfärben - mehr in Richtung warme Farben. Wo muß ich da ansetzen?

Code: Alles auswählen

    gl_FragColor = vec4 (iter, iter, sin(iter*2.00), 1.0);
Hi Jan,
Da wird die Farbe bestimmt ;)

Gruss,
Jonas :)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Antworten