Frage

Ich suche einige Bastelei mit openGL und Python zu tun und nicht in der Lage gewesen, mit PyOpenGL guten Gründen zu finden, im Vergleich zu Pyglet

Welche würden Sie empfehlen und warum?

War es hilfreich?

Lösung

Wie Tony gesagt, das ist wirklich auf Ihre Ziele gehen hängen. Wenn Sie „basteln“, um zu versuchen zu OpenGL oder 3D lernen in der Regel zu machen, dass ich mit allen Höflichkeiten verzichten würde und beginnen mit PyOpenGL arbeiten, die so nah sind Sie gehen zu bekommen, um „raw“ 3D-Programmierung mit Python .

Auf der anderen Seite, wenn Sie „bastelt“ haft spöttisch ein Spiel oder eine Multimedia-Anwendung, oder versuchen, über die Programmierung Praktiken im Allgemeinen zu lernen, als Pyglet finden Sie viele Upfront-Entwicklungszeit sparen, indem Haken Bereitstellung für Eingabeereignisse, Töne, Text / Billboarding usw. Oft diese vorab-Investitionen sind, was die Leute von Abschluss ihrer Projekte verhindert, so hat es für Sie getan ist nicht etwas, um ignoriert werden. (Es ist auch sehr Pythonic das Rad neu erfinden zu vermeiden.)

Wenn Sie schauen, um jede Art von Schwerlasthebe zu tun (die in der Regel außerhalb meiner Definition fällt der „Bastelei“, aber vielleicht nicht, wenn Sie mit 3D-Engine-Design sind basteln) dann könnten Sie einen Blick nehmen wollen auf Python-Oger, die die Packungen sehr voll funktionsfähige und robuste OGRE 3D Grafiken Motor.

Andere Tipps

Starten Sie mit Pyglet. Es enthält den besten High-Level-API, die ersten Schritte alles, was Sie enthält muß, aus einem Fenster zu öffnen Sprites und OpenGL Primitiven mit ihren freundlichen und leistungsfähigen Spriten und Stapelklassen zeichnen.

Später wollen Sie vielleicht auch Ihren eigenen niedrigere Ebene, Code zu schreiben, die Anrufe direkt an OpenGL-Funktionen wie glDrawArrays macht, etc. Sie können dies tun Pyglet OpenGL Bindungen, oder mit PyOpenGL Jahren. Die gute Nachricht ist, dass je nachdem, was Sie verwenden, können Sie solche Anrufe direkt in die Mitte Ihrer bestehenden Pyglet Anwendung einzufügen, und sie werden ‚einfach funktionieren‘. Umstellen Ihren Code von Pyglet zu PyOpenGL ist ziemlich einfach, so ist dies nicht eine Entscheidung, was Sie über zu viel im Voraus zu kümmern. Die Gewerke-off zwischen den beiden sind:

PyOpenGL Bindungen machen die OpenGL-Schnittstelle freundlicher und pythonic. Zum Beispiel können Sie Vertex Arrays in vielen verschiedenen Formen passieren, ctypes Arrays, numpy Arrays, einfache Listen, usw. und PyOpenGL wird sie in etwas umwandeln OpenGL verwenden können. Dinge wie diese machen PyOpenGL wirklich einfach und bequem.

Pyglet OpenGL Bindungen werden automatisch generiert und sind nicht so freundlich wie PyOpenGL zu verwenden. Zum Beispiel, manchmal müssen Sie manuell ctypes Objekte, um passieren ‚C Zeiger‘ Arten von args zu OpenGL erstellen. Dies kann knifflig sein. Die Plus-Seite aber sind Pyglet Bindungen dazu tendieren deutlich schneller zu sein.

Dies bedeutet, dass es eine optimale Mittelweg: Verwenden Sie Pyglet für Windowing, Mausereignisse, Ton, etc. Dann PyOpenGL freundliche API verwenden, wenn Sie direkte OpenGL-Funktion Anrufe machen wollen. Dann, wenn die Optimierung Ersetzen nur den kleinen Prozentsatz der leistungskritischen PyOpenGL Anrufe, die in Ihrer inneren rendern Schleife mit dem Pyglet Äquivalente liegen. Für mich gibt dies mir zwischen 2 und 4 mal schneller Bildwiederholraten, mit PyOpenGL Bequemlichkeit für 90% meines Code.

Versuchen Sie ModernGL .

pip install ModernGL
  • PyOpenGL ist eine automatisch generierte Version der ursprünglichen OpenGL API (erzeugt mit SWIG). Der ursprünglich OpenGL API ist nicht freundlich Python. Erzeugt Python-Bindungen sind schwer zu bedienen.

  • Pyglet ist vor allem für die Fenstererstellung und Event-Handling, aber Sie können Sie eine PyOpenGL wie API (zum Beispiel pyglet.gl.glClearColor)

  • pygame bietet ein Fenster, in dem Sie PyOpenGL verwenden können das Rendering zu tun.

  • ModernGL ist eine gute Alternative zu PyOpenGL, können Sie geschrieben, um die modernen OpenGL API mit weniger Code verwenden. ModernGL wird kein Fenster von selbst erstellen, aber Sie können es in Pyglet , pygame , < a href = "https://github.com/cprogrammer1994/ModernGL/blob/master/examples/PyQt5/01_hello_world.py" rel = "nofollow noreferrer"> PyQt5 und sogar in GLUT .

In ModernGL können Sie ein einfaches Shader-Programm mit einem einzigen Aufruf erstellen:

prog = ctx.program(
    vertex_shader='''
        #version 330
        in vec2 in_vert;
        void main() {
            gl_Position = vec4(in_vert, 0.0, 1.0);
        }
    ''',
    fragment_shader='''
        #version 330
        out vec4 f_color;
        void main() {
            f_color = vec4(0.3, 0.5, 1.0, 1.0);
        }
    ''',
)

Mit ModernGL haben Sie die volle Kontrolle über den OpenGL-API.

Ich würde sagen, dass Pyglet tatsächlich mehr als PyOpenGL entwickelt wird. Es hat eine schöne API von seinem eigenen, und es hat einen vollen Wrapper um OpenGL durch das pyglet.gl Modul zugreifen! PyOpenGL nicht einmal alle Funktionen wickeln OpenGL hat. Pyglet hat auch eine große Bibliothek für 2D-Rendering mit Hardware-Beschleunigung durch OpenGL, und es ist wirklich gut gemacht.

Wenn Sie eine leistungsstarke fertige 3D-Engine Sie haben Ogre und so

Pyglet hat viele nette Extras mit ihm enthalten (wie Bild Laden und Ton). Wenn Sie anfangen, ich würde versuchen, Pyglet zuerst, und dann zu PyOpenGL wechseln, wenn Sie sich wie Sie an das Metall nähern wollen.

Die wirklich wichtige Frage aber ist: Was Sie versuchen zu erreichen?

ich fördern Pyglet, weil es die schönsten API habe ich noch auf Sachen wie diese gesehen habe.

Pyglet hat OpenGL API als auch. Aber es ist oft schöner die zuletzt hinzugefügten Eckenliste Unterstützung zu verwenden.

pyglet.gl

Hmm, ich würde vorschlagen, Pyglet, es ist wirklich alles von einem Spiel oder einer Anwendung benötigt zur Verfügung stellt.

Wohlgemerkt, können Sie eine Menge Dinge tun Pyglet mit PyOpenGL tut, zum Beispiel ein Fenster zu schaffen alles, was Sie tun müssen, ist:
glutInitWindow (Titel)

Auch wenn ich denke, glutInitDisplayMode vorher genannt werden muss.

Einfache Zusammenfassung: Wenn Sie nicht wollen, Code zu tun, bis Sie weinen, wählen Pyglet, aber wenn Sie ein Master sein wollen, wählen Sie PyOpenGL. Goto http://pyopengl.sourcefourge.net die Dokumentation auf PyOpenGL und auf http://pyglet.org die Dokumentationen zu Pyglet zu lesen. Ich hoffe, das war hilfreich!

Ich würde Pyglet empfehlen, weil es sehr einfach ist, um loszulegen und etwas Grundsätzliches läuft, und dann können Sie fortgeschrittene Techniken in Ihrem eigenen Tempo hinzuzufügen.

Pyglet GL API ist bei weitem nicht so schön wie PyOpenGL der - Pyglet der an der rohen ctypes Schicht ist, die bedeutet, dass Sie ctypes auch lernen müssen. Wenn Sie tun eine Reihe von OpenGL planen Programmierung wollen Sie PyOpenGL verwenden.

Das Schöne daran ist, dass Sie die beiden ganz gut mischen. Verwenden Sie Pyglet den GL Kontext zu schaffen, Töne, Ereignisse, Laden von Bildern und Textur-Management, Text-Rendering, etc, etc. Verwenden PyOpenGL für die aktuelle OpenGL-Programmierung Sie tun müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top