PyOpenGL - wie sollte man es lernen?

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Hallo zusammen,

ich würde gerne OpenGL lernen und wollte das Ganze jetzt über Python angehen.

Habe mir PyOpenGL installiert, wie auf der PyOpenGL-Seite erklärt, und wollte nun ein paar
Beispiele suchen, um es mal zu testen.

Habe dies hier gefunden:

Code: Alles auswählen

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
  
glutInit("Hello, World")
  
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB |GLUT_DEPTH)
 
glutInitWindowSize(400,400)
  
glutCreateWindow("Hello, World")
  
glClearColor(0.,0.,0.,1.)
  
glutSetDisplayFuncCallback(display)
glutDisplayFunc()
glutMainLoop()
Bekomme aber den Fehler, das "glutSetDisplayFuncCallback(display)" nicht definiert ist.
"NameError: 'glutSetDisplayFuncCallback(display)' is not defined

Jetzt dachte ich zunächst, dass ich PyOpenGL nicht richtig installiert hätte, aber es kam keine
Fehlermeldung und scheint auf neuester Version zu sein.

Kann es sein, dass der Code bereits veraltet ist? Und deswegen nicht läuft?

Wie würdet ihr mir den empfehlen PyOpenGL zu lernen?
Anhand von Beispielen? (weiß jemand woher?) Buch?

Danke für alle Antworten! :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Mit einem Blick in die Dokumentation findet man das hier:

Code: Alles auswählen

try:
    glutSetDisplayFuncCallback(self.OnRedisplay)
    glutDisplayFunc()
except NameError:
    glutDisplayFunc(self.OnRedisplay)
Das Leben ist wie ein Tennisball.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Zum lernen, kauf dir ein Buch, oder gleich mehrere.

Das Redbook ist mehr oder weniger eine pflicht Lektüre, auch wenn es etwas mehr auf OpenGL 3 eingehen könnte. Die Super Bible wird auch relativ oft empfohlen. Hat mir aber weniger zugesagt. Für eine Moderne OpenGL Anwendung brauchst du Shader, also noch diese Buch. Für allgemeine Informationen bezüglich Realtime Rendering kann ich dir das gleichnamige Buch nahe legen.

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

EyDu hat geschrieben:Hallo.

Mit einem Blick in die Dokumentation findet man das hier:

Code: Alles auswählen

try:
    glutSetDisplayFuncCallback(self.OnRedisplay)
    glutDisplayFunc()
except NameError:
    glutDisplayFunc(self.OnRedisplay)
Danke, hat jetzt geklappt. :)
Ist der Befehl "glutSetDisplayFuncCallback()" veraltet?
Oder warum kommt es zu einem NameError?
Wo hast du das oben denn nachgeschlagen? In der Glut-API? Seh' das da gar nicht... :?
Zuletzt geändert von Barcellona am Dienstag 1. Juni 2010, 09:04, insgesamt 1-mal geändert.
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

veers hat geschrieben:Zum lernen, kauf dir ein Buch, oder gleich mehrere.

Das Redbook ist mehr oder weniger eine pflicht Lektüre, auch wenn es etwas mehr auf OpenGL 3 eingehen könnte. Die Super Bible wird auch relativ oft empfohlen. Hat mir aber weniger zugesagt. Für eine Moderne OpenGL Anwendung brauchst du Shader, also noch diese Buch. Für allgemeine Informationen bezüglich Realtime Rendering kann ich dir das gleichnamige Buch nahe legen.

Gruss,
Jonas
Danke Jonas, habe mir dieses Buch hier schon besorgt http://www.amazon.de/Beginning-Opengl-G ... 21&sr=8-14.
Habe mir die neueste OpenGL in Python installiert, arbeite mich aber zurzeit größtenteils durch Beispiel-Code, wie zB von der NeHe-Seite. Der Code ist oft schon älter und in OpenGl hat sich ja soweit ich weiß kürzlich recht viel geändert.
Ist OpenGL denn komplett abwärtskompatibel? Also nur alter Stil, wenn man älteren Code verwendet? Oder laufen die veralteten Befehle unter OpenGl 3.0 teils gar nicht mehr?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Zum frust vieler OpenGL Programmierer, ja. Ich würde trotzdem versuchen die Fixed Pipeline zu vermeiden.

Im allgemeinen empfehle ich dir Pyglet an stelle von PyOpenGL zu verwenden. Wenn du dann noch mit ctypes halbwegs klar kommst dürftest du kein Problem haben den Beispielen zu folgen.

Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

veers hat geschrieben:Zum frust vieler OpenGL Programmierer, ja. Ich würde trotzdem versuchen die Fixed Pipeline zu vermeiden.
Also in dem Buch mit dem ich lerne wird auch nur kurz auf Immediate Mode und Vertex Arrays eingegangen, weil diese wohl als 'deprectaed' markiert sind, und dann wird anscheinend alles nur noch mit Vertex Buffer Objects gemacht.
Immediate Mode und Vertex Arrays hab' ich allerdings gut verstanden und mein Code klappt damit auch, würde es noch Sinn machen erstmal nur damit zu lernen? Oder fliegen die beiden Methoden demnächst komplett aus OpenGL und sind nicht mehr nutzbar?
Weiß man da schon näheres?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

GL_ARB_compatibility wird von Nvidia und afaik auch ATI unterstützt. Damit kannst du Immediate Mode & co auch später noch verwenden. Ich würde dir aber trotzdem VBOs empfehlen. Gerade wenn du mit Python arbeitest kannst du die Performance Vorteile gut brauchen.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Hmm, das Problem ist, dass ich am besten mit gutem (gut kommentierten) Beispiel-Code lerne.
Die NeHe-Seite ist dafür zum Beispiel echt super.
Jedoch ist der Großteil des Codes wohl schon etwas älter und erklärt somit sehr gut die Funktionen, die als
deprecated markiert sind.
Aktuellen Beispiel-Code in Python habe ich bisher kaum gefunden... (also mit VBOs und Shaders) :|
Antworten