Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

1

20.02.2012, 21:05

Wenn du den low-level Weg einschlagen willst, dann würde ich zu OpenGL also OpenTK raten. ;)
(Bitte nicht böse sein, Dot, aber ich sehe das anders...)

Gerade hier im Forum ist OpenGL eher weniger beliebt.
Obwohl sogar das gut Blocks 5 von Scherfgen mit OpenGL arbeitet.

Sehr gute Tutorials zu OpenGL: (die auch ohne Probleme auf OpenTK übertragbar sind)
http://wiki.delphigl.com/index.php/Tutorial

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

20.02.2012, 21:10

Wenn man sich für .NET entscheidet, dann hat man sich doch so gut wie für Windows entschieden (ja klar gibts mono, aber mal ehrlich: Welche Mac/Linux benutzer hat das schon installiert? Ist doch auch afaik aus ubuntu rausgeflogen).

Und der einzige Grund für OpenGL ist doch die Platformunabhängigkeit.

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

20.02.2012, 21:27

DirectX oder OpenGL für C#?

Zitat

Wenn man sich für .NET entscheidet, dann hat man sich doch so gut wie für Windows entschieden

Ich stimme dir zwar zu, dass man auch mit C# eine Bindung zu Windows herstellt.
Allerdings ist diese bei weiten nicht so gravierend wie die Bindung bei DirectX.

Es muss jeder für sich selbst entscheiden, ob es einmal sinnvoll sein könnte, wwenn sein Programm auch auf den Linux\Mac läuft.
Bei meinen aktuellen Projekt sind laut einer Umfrage 2010 Windowsbenutzer in der Zielgruppe des Programmes nur mit 50% vertretten.

Zitat

Und der einzige Grund für OpenGL ist doch die Platformunabhängigkeit.

Das ist sicher nicht der einzige Grund.

Ich zb. meide DirectX auch wegen dem aus meiner Sicht in die Hose gegangen Versuch, alles Objektorientiert zu gestallten.
Microsoft handelt Gewinnorientiert und schreckt auch nicht davor zurück, die ganze API von einen Tag auf den anderen komplett umzustruktrieren.
Bei OpenGL gibt es sowas nicht.
Des weiteren ist der Einstieg bei OpenGL auch ein wenig leichter, da man nicht wie bei DirectX 10 oder höher immer Shader verwenden muss. Auch existiert der zwar langsame aber am Anfang sehr angenehme immidate mode.

Im Großen und Ganzen ist es natürlich auch Geschmackssache, was man für besser hält. :)

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

20.02.2012, 21:32

Im Großen und Ganzen ist es natürlich auch Geschmackssache, was man für besser hält. :)

Das sowieso :)


Zitat

Und der einzige Grund für OpenGL ist doch die Platformunabhängigkeit.

Das ist sicher nicht der einzige Grund.

Ich zb. meide DirectX auch wegen dem aus meiner Sicht in die Hose gegangen Versuch, alles Objektorientiert zu gestallten.

Ich meide OpenGL zum Beispiel weil es eben nicht objekt-orientiert ist. Ist halt wie schon gesagt eine Geschmacksfrage.


Microsoft handelt Gewinnorientiert und schreckt auch nicht davor zurück, die ganze API von einen Tag auf den anderen komplett umzustruktrieren.


Das ganze wird dann aber als neue Version veröffentlicht und die alte bleibt bestehen.

Des weiteren ist der Einstieg bei OpenGL auch ein wenig leichter, da man nicht wie bei DirectX 10 oder höher immer Shader verwenden muss.


Ja die FFP war in der Tat für den Einstieg einfacher, dafür hat OpenGL das Problem, dass man sogut wie keine zeitgemäßen Tutorials im Internet findet. Eben auch aufgrund der Tatsache, dass sich die API nicht ändert und veraltete Sachen zum großteil eigentlich immer noch funktionieren.


@jonathanZ:
Wie du siehst hat beides seine Vor- und Nachteile, also solltest du dir sowohl OpenTK als auch SlimDX angucken.

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

20.02.2012, 21:44

Zitat

dafür hat OpenGL das Problem, dass man sogut wie keine zeitgemäßen Tutorials im Internet findet.

Ich habe oben bereits einen guten Link gepostet.
Da werden auch alle VBOs oder andere relativ moderne Techniken erläutert.
Es gibt auch ein Tutorial über Partikelsysteme mit dem Geometryshader und Transformfeedback auf der Grafikkarte.

Ein Vorteil von OpenGL wäre noch die Extensions.
Wobei diese Extensions schon gerne eine Chaos verschiedendenster Funktionen sind, da jeder Hersteller sein eigenes Süppchen kocht.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (20.02.2012, 21:57)


David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

20.02.2012, 22:25

Ich zb. meide DirectX auch wegen dem aus meiner Sicht in die Hose gegangen Versuch, alles Objektorientiert zu gestallten.


Was meinst du mit "in die Hose gegangenem Versuch"?

Bei OpenGL gibt es sowas nicht.


Kann man nicht so sagen. Der Sprung von GL 2.1 auf GL 3.0 war mindestens genauso drastisch.

Des weiteren ist der Einstieg bei OpenGL auch ein wenig leichter, da man nicht wie bei DirectX 10 oder höher immer Shader verwenden muss. Auch existiert der zwar langsame aber am Anfang sehr angenehme immidate mode.


FFP & Co sind ab GL 3.0 als deprecated markiert. Es ist daher eher anzuraten die Funktionalität des Kernprofils zu nutzen. Daher ist es für "modernes" GL auch notwendig Shader zu verwenden.

Ein Vorteil von OpenGL wäre noch die Extensions.


Worin siehst du da einen Vorteil? DirectX hat mit den viel schnelleren Iterationen alle Features bereits integriert. Extensions sind für OpenGL ein notwendiges Übel um aktuelle Fuktionalität überhaupt verfügbar zu machen.
@D13_Dreinig

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

20.02.2012, 22:40

Zitat

Was meinst du mit "in die Hose gegangenem Versuch"?

Viele Dinge der Grafikkarte lassen sich einfach nicht glücklich in ein Objektorientiertes Konzept zwängen.
Mir persönlich ist der OO Ansatz von DirectX auf jedenfall zu wider.
Was ist da der Vorteil?
Wer direkt mit DirectX programmieren will(wie ich früher) muss sich nochdazu mit COM und seinen ominösen Referenzzählern auseinandersetzten.

Zitat

Kann man nicht so sagen. Der Sprung von GL 2.1 auf GL 3.0 war mindestens genauso drastisch.

Die Zukunft von OpenGL Funktionen ist trotzdem wesentlich sicherer als die von DirectX.
Ich denke nämlich nicht, das sich die GraKa Hersteller in absehbarer Zukunft trauen, die alten Funktionen rauszuschmeissen.
Bei OpenGL gibt es nicht wie bei DirectX unzählige verschiedene Versionen, damit jedes Spiel noch irgendwie läuft, sondern genau einen OpenGL Treiber.

Zitat

Worin siehst du da einen Vorteil?

Eine Grafikschnittstelle kann überhaupt nicht eine Lösung für alle Funktionen verschiedener Grafikkarten beinhalten.
Jeder Hersteller kann bei OpenGL selber die Funktionen des OpenGL Kernes erweitern. Gut Programmierte Software kann diese Funktionen dann detektieren und zur Leistungs-\Qualitätssteigerung verwenden.

EDIT:
Ganz nebenbei,
wir kommen immer mehr vom Thema ab.

Ich wollte hier keinen Grafikschnittstellenkrieg anzetteln, sondern wollte ledeglich Dots Aussage, dass DirectX (allgemein) besser ist, in Frage stellen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

20.02.2012, 23:00

Wenn du den low-level Weg einschlagen willst, dann würde ich zu OpenGL also OpenTK raten. ;)
(Bitte nicht böse sein, Dot, aber ich sehe das anders...)

Wegen sowas bin ich dir sicherlich nicht böse, ich kanns nur nicht ganz nachvollziehen ;)

Zitat

Und der einzige Grund für OpenGL ist doch die Platformunabhängigkeit.

Das ist sicher nicht der einzige Grund.

Imo schon. Selbst bei einem Projekt das mehrer Plattformen unterstützten soll, würde ich den Renderer unter Windows vermutlich in Direct3D schreiben. Nicht nur aus Geschmackssache, sondern weil die API mir sehr viel mehr Kontrolle über einige Dinge gibt als OpenGL. Z.B. Enumeration und Context Creation, OpenGL an sich deckt diesen Bereich überhaupt nicht ab. Zugegeben, Direct3D direkt genaugenommen auch nicht, aber DXGI, auf dem Direct3D aufbaut.

Microsoft handelt Gewinnorientiert und schreckt auch nicht davor zurück, die ganze API von einen Tag auf den anderen komplett umzustruktrieren.
Bei OpenGL gibt es sowas nicht.

Und genau darum wäre OpenGL auch beinahe in der Versenkung verschwunden. Vielleicht ist es dir nicht aufgefallen, aber sämtliche Innovation der letzten 10 Jahre kam von Direct3D. OpenGL hat es mittlerweile geschafft aufzuholen, allerdings fehlen OpenGL immer noch einige imo wesentliche Dinge.

Des weiteren ist der Einstieg bei OpenGL auch ein wenig leichter, da man nicht wie bei DirectX 10 oder höher immer Shader verwenden muss. Auch existiert der zwar langsame aber am Anfang sehr angenehme immidate mode.

Das stimmt. Nur das Problem ist, dass der leichte Weg in OpenGL nicht sehr weit führt.

Zitat

Was meinst du mit "in die Hose gegangenem Versuch"?

Viele Dinge der Grafikkarte lassen sich einfach nicht glücklich in ein Objektorientiertes Konzept zwängen.
Mir persönlich ist der OO Ansatz von DirectX auf jedenfall zu wider.
Was ist da der Vorteil?

Wo genau liegen da deiner Meinung nach die Probleme? Was genau kann man nicht auf ein objektorientiertes Konzept mappen? Und wenn das so ist, wieso macht OpenGL es dann Direct3D nach anstatt es anders zu machen? (siehe VBOs, Shader, Sampler Objects, VAOs, ...)

Wer direkt mit DirectX programmieren will(wie ich früher) muss sich nochdazu mit COM und seinen ominösen Referenzzählern auseinandersetzten.

Man muss von COM praktisch keine Ahnung haben um Direct3D verwenden zu können.

Zitat

Worin siehst du da einen Vorteil?

Eine Grafikschnittstelle kann überhaupt nicht eine Lösung für alle Funktionen verschiedener Grafikkarten beinhalten.
Jeder Hersteller kann bei OpenGL selber die Funktionen des OpenGL Kernes erweitern. Gut Programmierte Software kann diese Funktionen dann detektieren und zur Leistungs-\Qualitätssteigerung verwenden.

Was irgendwelchen Spezialanwendungen betrifft, die von ganz bestimmten Fähigkeiten ganz bestimmter Hardware abhängig sind und dann auch nur auf genau solchen Karten laufen: Ja. Ansonsten tut das praktisch niemand wenn es sich vermeiden lässt.

Ansonsten hatten wir diese Diskussion gerade erst unlängst hier: C# und OpenGL?
Dort zu finden auch eine genauere Begründung warum ich zu Direct3D rate.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (20.02.2012, 23:17)


  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

20.02.2012, 23:23

Zitat

Selbst bei einem Projekt das mehrer Plattformen unterstützten soll, würde ich den Renderer unter Windows vermutlich in Direct3D schreiben.

Sinn wo bist du?
Wie bitte willst du einen Renderer für Linux mit DirectX schreiben? ^^
Wine hat zwat in diesem Gebiet schon Fortschritte gemacht, spielt aber bei manchen Dingen nicht so ganz mit.

Zitat

allerdings fehlen OpenGL immer noch einige imo wesentliche Dinge.

Was den zb?

Zitat

Das stimmt. Nur das Problem ist, dass der leichte Weg in OpenGL nicht sehr weit führt.

Der leichete Weg führt eigentlich genauso Weit. (Was geht im leichten Weg nicht?)
Er ist bloß ziemlich unperformant.
Gerade bei 2D spielen, ist das aber egal.

Zitat

Wo genau liegen da deiner Meinung nach die Probleme? Was genau kann man nicht auf ein objektorientiertes Konzept mappen? Und wenn das so ist, wieso macht OpenGL es dann Direct3D nach anstatt es anders zu machen? (siehe VBOs, Shader, Sampler Objects, VAOs, ...)

Ich muss gestehen das meine DirectX Erfaghrungen schon ein Weilchen zurück liegen. ;)
Eine Grafikkarte bleibt aber im Grunde immer eine Statemachine.
Da kann ich noch soviel OO drumrum bauen, daran ändert sich nichts.
Besonders in Verbindung mit diesem COM hat es allerdings bei mir zu zahlreichen Speicherlecks geführt.
OpenGL hat übrigend auch OO Ansätze.
Ist aber eher so wie bei der WinAPI mit den Handles.



Wenn du DirectX lieber magst - bleib einfach dabei.
Ich werd dich nicht Zwingen umzusteigen. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

20.02.2012, 23:35

Wie bitte willst du einen Renderer für Linux mit DirectX schreiben? ^^

Wer sagt dass der Renderer auf allen Plattformen die selbe API verwenden muss?
Abgesehen davon gibt es bereits eine Direct3D 11 Implementierung für Linux (Gallium).

Zitat

allerdings fehlen OpenGL immer noch einige imo wesentliche Dinge.

Was den zb?

Mal was mir schnell so einfällt: Die Möglichkeit Shader offline zu kompilieren (gibts in D3D seit mittlerweile über 10 Jahren), Draw ohne Vertex Buffer, Random Memory Access in Shadern (ziemlicher Dealbreaker, im Moment nur mit herstellerspezifischen Extensions machbar, was die Sache praktisch unbrauchbar macht), Multithreaded Rendering, ...

Zitat

Das stimmt. Nur das Problem ist, dass der leichte Weg in OpenGL nicht sehr weit führt.

Der leichete Weg führt eigentlich genauso Weit. (Was geht im leichten Weg nicht?)
Er ist bloß ziemlich unperformant.
Gerade bei 2D spielen, ist das aber egal.

Exakt. Es ist ziemlich unperformant und wenn man es performant haben will, dann muss man es genau so machen, wie man es in Direct3D von Anfang an gemacht hätte.
Bei 2D Spielen ist das bis zu einem gewissen Grad egal. Sobald man irgendwelchen netten Partikeleffekte will, wirds sehr schnell nichtmehr egal sein.

Eine Grafikkarte bleibt aber im Grunde immer eine Statemachine.

Gerade das Statemanagement ist, wo Direct3D OpenGL um Längen voraus ist. OpenGL ist nämlich wirklich nur eine globale State Machine. Abgesehen von all den lustigen Bugs die man sich damit einhandeln kann, macht das beispielsweise multithreaded Rendering zum Alptraum (ich kenne ehrlich gesagt überhaupt keinen Weg wie das mit OpenGL vernünftig möglich ist, wenn du einen kennst: Würd mich sehr interessieren).

Da kann ich noch soviel OO drumrum bauen, daran ändert sich nichts.

Ich hab irgendwie das Gefühl, dass du nicht so ganz auf dem aktuellsten Stand bist, was das angeht. Schau dir mal Direct3D 11 an ;)

Besonders in Verbindung mit diesem COM hat es allerdings bei mir zu zahlreichen Speicherlecks geführt.

Wenn du Speicherlecks erzeugst, dann ist das nicht die Schuld von Direct3D. Direct3D ist, dank COM, perfekter Kandidat für RAII. Mit OpenGL gestaltet sich das, aufgrund des merkwürdigen Objektmodells, meiner Erfahrung nach teilweise schwieriger. Abgesehen davon hast du in Direct3D wenigstens eine Debug Runtime die dir direkt sagt wenn du leakest ;)

OpenGL hat übrigend auch OO Ansätze.

Sag ich doch!?

Wenn du DirectX lieber magst - bleib einfach dabei.
Ich werd dich nicht Zwingen umzusteigen. ;)

Es wär nicht so, dass ich auf irgendeine API "umsteigen" müsste. Ich verwend natürlich OpenGL genauso, ansonsten könnt ich hier doch nicht mitreden ;)

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (21.02.2012, 00:00)


Werbeanzeige