2010-06-03 7 views
9

Ich möchte OpenGL lernen, aber ich möchte nicht wirklich eine andere Sprache dafür lernen müssen. Ich bin bereits sehr gut in Python und genieße die Sprache. Ich möchte nur wissen, wie nah es an der regulären API ist? Kann ich Tutorials und Büchern ohne großen Aufwand folgen?Ist PyOpenGL ein guter Einstieg in das OpenGL-Programmieren?

Ich weiß, C++ gibt bessere Leistung, aber für nur lernen kann ich falsch mit PyOpenGL gehen?

Antwort

12

Mit dem Vorbehalt, dass ich sehr wenig OpenGL-Programmierung selbst gemacht habe, glaube ich, dass zum Zweck des Lernens, PyOpenGL eine gute Wahl ist. Der Hauptgrund ist, dass PyOpenGL, wie die meisten anderen OpenGL Wrapper, genau das ist: ein dünner Wrapper um die OpenGL API.

Ein großer Vorteil von PyOpenGL ist, dass, während in C Sie die richtige zu rufen glVertex3{dfiX} Befehl kümmern, Python ermöglicht es Ihnen, nur glVertex3(x,y,z) zu schreiben, ohne sich Gedanken darüber, Python zu sagen, welche Art von Argument Sie übergeben. Das klingt vielleicht nicht nach eine große Sache, aber es ist oft viel einfacher, Pythons Duck-Typing zu verwenden, anstatt sich zu sehr mit der statischen Typisierung zu beschäftigen.

Die OpenGL-Methoden sind fast vollständig in Python-Methoden eingebettet. Wenn Sie also in Python schreiben, sind die Algorithmen und Methodenaufrufe identisch mit dem Schreiben von OpenGL in einer anderen Sprache. Aber da Sie in Python schreiben, haben Sie viel weniger Möglichkeiten, "dumme" Fehler mit der richtigen Zeigerverwendung, Speicherverwaltung usw. zu machen, die Ihre Zeit nur verschlingen würden, wenn Sie die API in C oder C++ studieren würden , zum Beispiel.

+1

Das gleiche kann über JOGL für Java-Fans gesagt werden. – Ricket

-1

PyOpenGL

Ich glaube nicht, es ist eine gute Wahl. In meiner Meinung in C/C++ ist es einfacher, mit Ihrem OpenGL-Code herumzuspielen - starten Sie mit einer einfachen App, fügen Sie Shader hinzu, fügen Sie dann einige Geometriefunktionen hinzu, erstellen Sie einen Textur-/Geometriegenerator, erstellen Sie eine Szene über CSG usw. Du weißt - Spaß haben, mit Code herumspielen, experimentieren und etwas lernen. Ich sehe mich ehrlich gesagt nicht in Python. Sicher ist es möglich, OpenGL-Programmierung in Python zu machen, aber ich sehe keinen Grund, es tatsächlich zu tun. Plus einige OpenGL Funktionen nehmen Speicher Zeiger als Argumente, und obwohl es wahrscheinlich eine Klasse (oder Dutzend von Alternativen) für diesen Fall, sehe ich keinen Grund, sie zu verwenden, wenn eine traditionelle Art, Dinge zu tun, in C/C++ verfügbar ist, Vor allem, wenn ich über die Menge der Wrapper nachdenke, die der Python-Code verwendet, um einen Vektor oder ein Array davon in die OpenGL-Funktion zu übergeben. Es sieht einfach so aus, als würde es die Dinge komplizierter machen, ohne einen wirklichen Grund dafür zu haben. Außerdem gibt es einen merklichen Leistungsabfall, besonders wenn Sie "RAW" OpenGL verwenden.

Außerdem, wenn Sie Spiele machen werden, ist es sehr wahrscheinlich, dass Sie C++ oder eine andere "non-python" Sprache verwenden müssen.

P.S. Ich habe genug OpenGL-Programmierung gemacht, eine Menge DirectX-Programmierung, aber ich spezialisiere mich auf C++ und verwende Python nur für bestimmte algorithmische Tests, Tools und Skripte.

+3

Hey. Ich habe dich ausgeschrieben, weil das meiner Meinung nach kein guter Rat ist. Ich dachte, ich würde einen Kommentar hinterlassen, der erklärt, warum, anstatt es anonym zu machen und kein Feedback zu hinterlassen. Sie sagen, Sie denken, dass es in C++ einfacher ist, aber sagen Sie nicht warum. Der Python-Code ist kürzer und einfacher, erfordert weniger Parameter und weniger Nachdenken. –

+0

... Ich verbrachte 7 Jahre damit, C und C++ zu schreiben, aber das Python-Äquivalent wäre genau das gleiche wie die C/C++ - Version, aber etwas einfacher zu erstellen, da, wie Mark Rushakoff sagt, keine Pointer- oder Speicherverwaltungsprobleme bestehen Zurecht kommen. PyOpenGL wird automatisch alle OpenGL-Funktionsaufrufe automatisch mit Parameterprüfung und Fehlerprüfung umbrechen, um die Diagnose zu vereinfachen.Mit PyOpenGL können Sie ein Vertex-Array als normale Python-Liste übergeben - es gibt keine Wrapper. Es gibt Auswirkungen auf die Leistung, aber keine Probleme mit der Komplexität. –

+1

Plus, ich kenne viele Leute, die Spiele mit Python machen. Ihre Annahme, dass dies C/C++ erfordert, basiert auf Ihrer Annahme, dass OpenGL in Python schlecht ist, was auf Ihrer Annahme beruht, dass Spiele C/C++ erfordern müssen ... :-) –