[DX9] Allgemeine Anfängerfragen zu D3D9/10/11 & D3DX

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
SchodMC
Beiträge: 2
Registriert: 06.06.2009, 02:30

[DX9] Allgemeine Anfängerfragen zu D3D9/10/11 & D3DX

Beitrag von SchodMC »

Hallöchen,

ich bin neu hier im Forum und dachte mir, ihr könnt mir bestimmt weiterhelfen. Aber zuerst zur Vorgeschichte:

Ich bin im 3D Bereich nicht ganz neu. Habe früher einiges mit Delphi & OpenGL experimentiert und war eine Zeitlang in der DelphiGL-Community aktiv. Nach einigen Jahren Abszinenz hat mich die 3D Grafik jetzt doch wieder eingeholt. ;) Allerdings bin ich mittlerweile bei C++ und DirectX gelandet. DirectX hat m. E. den Vorteil, dass ziemlich viel mitgeliefert wird, was mich zu meinen Fragen bringt

D3DX Lib
- Die Lib ist ja recht umfangreich, aber kann man die bedenkenlos nutzen oder "beschränkt" man sich in irgend einer weise? Habe meist die Erfahrung gemacht, das solche Libs mehr was für die einfach Dinge sind. Wenn man ein wenig mehr machen will (z. B. ein gesamtes 3D-Level Rendern), geht die Performance in die Knie oder man ist vor lauter Easy-To-Use beschränkt, so dass manches nicht geht.
- Kann ich mich darauf verlassen, dass die DLL der Lib auf jedem System existiert, auf welchem auch Direct3D Runtime installiert ist, oder muss ich die DLL immer selber mitliefern?
- Die X-Files sehen auf den ersten Blick ja ganz praktisch aus. Hier hab ich die gleiche Frage wie bei der D3DX Lib ansich. Sind das Fileformat und die damit verbundenen Funktionen auch nur für einfache Objekte geeignet ist, oder oder können auch komplexere Objekte / Levels damit realisiert werden?

D3D9 vs. D3D 10 / 11
- Ist es überhaupt noch sinnvoll, mit D3D9 "anzufangen", oder sollte man gleich auf D3D 10 / 11 wechseln?
- Ist D3D 10 / 11 so unterschiedlich, dass man von einem Wechsel von D3D9 quasi wieder von 0 anfangen muss? Die Meinungen dazu gehen ja zum Teil ein wenig auseinander.
- Unterscheiden sich D3D 10 / 11 intern so stark dass ein Renderpfad per DLL (einmal für 9, einmal für 10) nicht zu realisieren ist? Mir fiel nämlich auf, dass diverse Games (z. B. Assassins Creed, Call of Juarez, H.A.W.X) für D3D9 und D3D10 unterschiedliche Execvutables haben, und nicht einfach nur DLLs um zwischen den Schnittstellen zu wechseln.

Soveil mal dazu. Wird im laufe der Zeit bestimmt noch einiges kommen. Wäre nett, wenn ihr mir weiterhelfen könnten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8246
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [DX9] Allgemeine Anfängerfragen zu D3D9/10/11 & D3DX

Beitrag von Krishty »

Hi und willkommen :)

Zu D3DX kann ich nicht viel sagen, dafür aber zum Rest:
SchodMC hat geschrieben:D3D9 vs. D3D 10 / 11
- Ist es überhaupt noch sinnvoll, mit D3D9 "anzufangen", oder sollte man gleich auf D3D 10 / 11 wechseln?
D3D9 ist immernoch weit verbreitet. Soll es ein Casual Game oder innerhalb dieses Jahres released werden, benutz D3D9. Setzt du starke Hardware voraus, stehst vor langer Entwicklungszeit, möchtest anspruchsvolle Grafikprobleme lösen oder konzentrierst dich eh nur auf Hardcore-Gamer als Zielpublikum, fang direkt mit 11 an.
SchodMC hat geschrieben:- Ist D3D 10 / 11 so unterschiedlich, dass man von einem Wechsel von D3D9 quasi wieder von 0 anfangen muss? Die Meinungen dazu gehen ja zum Teil ein wenig auseinander.
- Unterscheiden sich D3D 10 / 11 intern so stark dass ein Renderpfad per DLL (einmal für 9, einmal für 10) nicht zu realisieren ist?
D3D10/11 unterscheiden sich stark von D3D9, was das API-Layout angeht. Rein theoretisch kann man auch mit D3D9-Wissen ein D3D10-Game auf die Beine stellen, dann profitiert man aber so gut wie garnicht von den neuen Features.

Die Art und Weise, wie man in D3D10/11 mit Ressourcen und der GPU umgeht, unterscheidet sich fundamental von D3D9, das ist auch der Grund, warum es so wenige „echte“ D3D10-Games gibt (Wie es mit H.A.W.X und Assassins Creed aussieht weiß ich nicht, Crysis aber war auch nach Aussage der Entwickler nur ein D3D9-Spiel mit D3D10-Funktionalität). Möchte man mit D3D10/11 anfangen und es wirklich optimal ausnutzen, kann man fast alles, das man von D3D9 weiß, getrost vergessen.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4859
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [DX9] Allgemeine Anfängerfragen zu D3D9/10/11 & D3DX

Beitrag von Schrompf »

Zum Thema D3DX: da steckt ne Menge nützlicher Sachen drin. Mir fallen da primär drei wichtige Komponenten ein:

a) Die Mathe-Bibliothek. Also Vektoren, Matrizen, Quaternions. Schnell, bequem und fehlerfrei. Unter C++ dürfte es auch ordentliche Operator-Überladungen geben, so dass Du Dir nicht die Finger wundtippst mit D3DXMatrixMultiply() und Konsorten. Wenn Du auf die aber verzichten willst, gibt es auch ne Menge guter Mathe-Libs im Netz. Und einmal nachfragen hier im Forum würde wahrscheinlich auch dafür sorgen, dass Dir jeder den Mathe-Code aus seiner Engine aufdrängen will. Und ganz am Ende gibt es da draußen auch genug OpenSource-Projekte, deren Mathelibs Du einfach nehmen und für Deine Zwecke bearbeiten kannst.

b) D3DXCreateTextureFromFile() und Artverwandte. Ist im Endeffekt ein Multi-Format-Bildlader - sehr nützlich und allein nur schwer nachzuprogrammieren. Dass das Ganze dann auch gleich mit der Texturerzeugung vermengt wurde, finde ich sehr unschön, aber Du kannst ja durch Angabe von D3DPOOL_SCRATCH oder so das Erzeugung im VideoRAM umgehen, wenn Du es brauchst. Hat ein paar Eigenheiten, z.B. beim Umgang mit Nicht-Zweierpotenz-Texturen. Wenn Du auf den Teil verzichten willst, kannst Du aber auch allgemeine Bildlade-Libs wie z.B. Devil benutzen oder für ein paar wenige Formate eigene Loader schreiben. TGA geht recht schnell, BMP auch halbwegs, DDS wäre auch ne Maßnahme.

c) D3DCreateMeshFromFile() und Artverwandte. Lädt XFiles und gibt Dir einen D3DXMesh davon zurück. Eine schöne Sache für den Anfang, um schnell Modelle und Anims auf den Bildschirm zu bekommen, aber wenn Du eine eigene Engine bauen willst, wirst Du früher oder später davon wegmüssen. Außerdem ist der XFile-Loader von D3DX ein bisschen eigen... er lehnt gern auch Modelle ab, die andere Loader für akzeptabel halten. Wenn Du von der Lib weg willst, gibt es da draußen auch allgemeine 3DFiles-Ladelibs wie z.B. Assimp - die wurde hier auf dem ZFX geboren und ist inzwischen ziemlich vielseitig und fehlertolerant. Oder Du schreibst Dir Loader für die benötigten Formate selbst. XFiles wären dafür geeignet, oder die Formate der großen OS-Engines wie z.B. Ogre, oder MS3D, oder 3DS oder obj oderoderoder. Je nach Format ist das ein Nachmittag oder richtig viel Arbeit - letzteres vor allem bei komplexeren Formaten, die auch Bones und Animationen unterstützen.

Ist im Endeffekt also eine Geschmackssache. Ich würde Dir aber ganz allgemein gesprochen empfehlen, soviel Code wie möglich fertig zu verwenden. Nutze also D3DX, soweit es geht, und wenn nicht, dann OpenSource-Libs für die entsprechenden Zwecke. Es mag anfangs eine Menge Spaß machen und auch einen Lerneffekt haben, einen eigenen Bildlader und die entsprechende Infrastruktur dahinter zu erfinden, aber hintendran hängt immer auch noch eine Menge Pflegearbeit und Bugfix-Arbeit, um die Du nicht drumrum kommst. Und die macht dann keinen Spaß mehr.

Bye, Thomas
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

Re: [DX9] Allgemeine Anfängerfragen zu D3D9/10/11 & D3DX

Beitrag von DomiOh »

Zu b)

Was für eigenheiten mit nicht-2er-Potenz-Texturen? Da gibt es doch keine Probleme.
SchodMC
Beiträge: 2
Registriert: 06.06.2009, 02:30

Re: [DX9] Allgemeine Anfängerfragen zu D3D9/10/11 & D3DX

Beitrag von SchodMC »

Vielen Dank für die Antworten. Das hat mir zumindest mal weiter geholfen. Ich werd einfach mal die fertigen Libs verwenden um mich dann auf die wesentliche Grundlagen konzentrieren. Wenn ich dann doch was anderes brauch, kann ich's immer noch selber machen. Und, btw, die Matthe Funktionen D3DX scheinen auf den ersten Blick wirklich alles zu liefern, was man für die Anfänge benötigt... ;)
Antworten