@James Hi und erstmal Herzlich Willkommen in der
DP
Wie Du hier schon siehst, gibt es sehr viele verschiedene Techniken/Sprachen/Möglichkeiten, die für Dich in Frage kommen. Wichtig ist (was auch schon gesagt wurde!), dass es nicht die eine Sprache/Komponente gibt, die alles toll macht und der Rest ist Mist. Das geht ja schon aus der Anzahl der unterschiedlichen Vorlieben vor.
An sich ist die entscheidende Frage wirklich, was Du eigentlich machen möchtest. Für 2D und 3D gibt es vielleicht unterschiedliche Empfehlungen, was die Komponenten angeht.
An sich gibt es hier gleich mehrere Dinge, zwischen den Du wählen kannst. An erster Stelle natürlich die Programmiersprache. Hier findest Du in der Regel imperative oder Objekt orientierte Sprachen, die sich kaum in der eigentlichen Herangehensweise unterscheiden. Die wichtigsten Unterschiede liegen in der Syntax und in den verfügbaren Modulen/Paketen/Komponenten/Bibliotheken (allgemein Erweiterungen).
Je verbreiteter die Sprache ist, desto wahrscheinlicher findest Du auch unzählige Erweiterungen, Foren usw. Das sagt aber nichts über die Sprache an sich aus! Der klare Fokus sollte für Dich darauf liegen, wie gut Du denkst mit dem Angebotenen klar zu kommen. So gibt es sicherlich Leute, die werden Dir erzählen wie toll Haskell für die Grafikprogrammierung ist, da Du keine Seiteneffekte hast und Lazy-Evaluation für das Rendern perfekt ist, ... Wenn Du aber mit funktionaler Programmierung nichts anfangen kannst, Dich Monaden nur verwirren und Dir einfach Zustände fehlen (gut, gibt es dank Monaden, aber auch egal!), dann wirst Du vielleicht wissen dass die Sprache toll ist, es aber nie nachempfinden.
Nur in einer Sprache, mit der Du klar kommst kannst Du überhaupt sinnvoll arbeiten. Ob die Arbeit dann ein paar Zeilen länger ist oder weniger elegant, solange das rauskommt was Du willst ist das egal!
Zusätzlich zur Sprache kannst Du dann noch zwischen der Grafikschnittstelle wählen. Grafikschnittstellen abstrahieren von der eigentlichen Hardware und ihrer Ansteuerung. Hier wären für den 3D-Bereich auf jeden Fall
OpenGL und
DirectX zu nennen, für 2D kommen diese Schnittstellen auch in Frage, zusätzlich aber auch
GDI(+), GTK(+/#), ...
Ich werde hier nicht alle aufzählen!
OpenGL und
DirectX setzen immer entsprechende Treiber vorraus. Wird ein Feature nicht unterstützt, wird es per Software gerendert (und das ist nicht sehr perfomant). Moderne Grafikkarten sollten beides Unterstützen, in welcher Version ist eine andere Sache. So wirst Du im Moment kaum eine Karte finden, die alle Feature von
DirectX 10 unterstützt, dass Du diese brauchst zweifel ich aber auch an!
Bei
OpenGL hast Du den Vorteil, dass diese Schnittstelle auch unter anderen Betriebssystemen häufig genutzt wird. Allerdings wird die von Microsoft unter Vista nicht mehr so ganz gerne verwendet. Greift ein Programm auf
OpenGL zu, so muss (soweit aktiviert) die Glass-Oberfläche (oder wie die heißt) deaktiviert werden (passiert afaik automatisch, ist aber natürlich sichtbar).
GDI ist die "normale" Windows-Schnittstelle, sie unterstützt nur einfache 2D Funktionen, GTK ist ein Toolkit, dass z.B. auch für Gimp verwendet wird. Auch dieses bietet (afaik) nur 2D Funktionen an (bin ich aber null sicher) und ist zudem auch für andere Betriebssysteme (z.B. Linux) verfügbar. Für GTK muss jedoch auch das GTK-Toolkit installiert sein (entspricht einer Laufzeitumgebung).
Je nachdem was Du machen möchtest kann jede dieser Schnittstellen (und es gibt sicherlich noch viele weitere) in Frage kommen und besser oder schlechter geeignet sein. Hier müsstest Du erst die Frage beantworten, wo es hingehen soll, damit man Dir weiterhelfen kann.
Hast Du Dich für eine Schnittstelle und Programmiersprache entschieden, so wäre der nächste Schritt i.d.R., dass Du Dir die Kapselungen anschaust. Häufig findest Du zu einer Schnittstelle fertige Kapselungen, die Dir besitmmte Aufgaben einfach abnehmen. Da musst Du Dich dann nicht mehr selbst um alles kümmern, sondern greifst einfach auf fertige Lösungen zurück. Natürlich bindest Du Dich mit der Kapselung und wirst ggf. nicht mehr alles aus einer Karte rausholen, was möglich ist, aber die wenigsten Menschen schreiben noch direkt in Assembler sondern verwenden eine Hochsprache. Selbes Problem, man kann einfach komplexe Lösungen leichter aus solchen fertigen Bausteinen zusammensetzen (weniger mögliche Fehler, ggf. Optimierungen die man selbst gar nicht geschafft hätte usw).
Gruß Der Unwissende