Muss ich veraltetes DirectX 9 lernen?



  • Flashgott schrieb:

    ok danke dir.
    Und bei dem Buch mache ich nix falsch oder?
    Weil ich will mich nicht an irgendein genre wie weltraumspiele oder so binden...

    Ich kenne das Buch nicht, jedoch empfehlen viele dieses Buch.



  • Flashgott schrieb:

    das BUch 3D-Spieleprogrammierung mit DirectX 9 und C++ von David Scherfgen(auf Deutsch)
    Danke

    🙄



  • Kóyaánasqatsi schrieb:

    DirectX 10 bietet im Gegensatz zu DirectX9 Shader 4.0, der für dich aber sowieso erstmal nicht interessant sein wird. Außerdem ist es ja nicht so, dass der komplette Code der Bibliothek geupdated wird

    DirectX 10 hat schon ein paar einschneidende Änderungen die auch Anfänger betreffen. Das Wegfallen der fixed function pipeline und der Caps Bits lässt vor allem den Initalisierungscode aus den Büchern nicht 1:1 auf DirectX 10 umsetzen.

    Das ist aber trotzdem kein Problem, da zum einen DirectX abwärtskompatibel ist, dass heißt man kann weiter ohne Probleme DirectX 9 nutzen selbst wenn man eine höhere Version installiert hat oder ein aktuelleres SDK nutzt. Zum anderen sollte man aus diesen Büchern vor allem ein allgemeines Verständniss für Spiele-/Grafikprogrammierung bekommen. Wie man das ganze dann in irgendeiner DirectX Version oder sogar in OpenGL umsetzt kann man meistens auch aus der Dokumentation oder Tutorials rauslesen.



  • Ich hab das Buch selbst gelesen es ist nicht schlecht. Allerdings soltle man das Design nicht gerade übernehmen, einige Klassen sind nicht gerade so toll designed. Wenn man davon aber absieht ist das Buch wirklich gut, alles gut erklärt und die Teile die einem evtl noch Fehlen kann man sich ja aus der Doku angeln.



  • ok, ich hab das Buch jetzt und es gefällt mir sehr gut!
    Nur befinde ich mich jetzt in einer Zwickmühle:
    Ich will nicht mit der TriBase Engine programmieren, da ich ja DirectX lernen will und später vielleicht mal selber eine schreiben. (Natürlich auch keine andere Engine) für eine eigene Engine bin ich aber noch nicht reif genug.
    Ich will aber auch nicht 5000 Zeilen unsortierten DirectX Code hinknallen.
    Was meint ihr dazu?
    Vielleicht einfach paar Klassen im Spiel-Projekt machen (keine Engine) die ähnlich sind wie die Klassen in einer Engine? Diese könnte ich später sogar zu einer Engine zusammensetzen 😛



  • Flashgott schrieb:

    Vielleicht einfach paar Klassen im Spiel-Projekt machen (keine Engine) die ähnlich sind wie die Klassen in einer Engine? Diese könnte ich später sogar zu einer Engine zusammensetzen 😛

    👍



  • Überlege gerade dasselbe wie der Threadsteller...

    Steige bald auf Windows 7 um und möchte in der nächsten Zeit auch mit der 3D-Programmierung anfangen. Bin auch auf selbiges Buch gestoßen zur 3D-Spieleprogrammierung mit Directx 9.

    Macht es denn im Moment überhaupt noch Sinn dieses Buch zu Directx 9 zu kaufen?
    Oder sollte ich besser auf einen Nachfolger warten?

    Zu OpenGL gibt es kein aktuelles vergleichbares Buch, oder?



  • Wenn ich dann in nem Jahr auf Windows 7 umrüste war ja wieder alles umsonst.

    Wenn das deine Einstellung ist, dann verabschiede dich ganz schnell davon, programmieren zu wollen. Seis nun beruflich oder nur hobbymässig.



  • Barcellona schrieb:

    Macht es denn im Moment überhaupt noch Sinn dieses Buch zu Directx 9 zu kaufen?
    Oder sollte ich besser auf einen Nachfolger warten?

    Es gibt im Moment sehr viel zu DX9, sehr wenig zu DX10 (hab da selebr nur 3 Bücher gefudnen) und garnichts zu DX11. Ich selbst hab auch mit DX9 angefangen. Davon hat man durchaus etwas, weil man 1. ein Grundverständniss für Funktionsweisen bekommt und 2. erstmal Grundsätzlich besser im Programmieren. Der Umstieg ist auch nicht so schwer, das SDK verfügt über einige Seiten Informationen was sich von 9 auf 10 und 10 auf 11 geändert hat, was weggefallen udn was neu ist. Ich hab selbst erst D9 gemacht und bind ann mit nem DX10 Buch und einigen tutorials (und viel rumprobieren da einiges nicht 1:1 passt) auf DX11 umgestiegen. Da muß man selbst etwas Flexibel sein sonst wird das nichts.



  • Wenn ich mir das aktuelle SDK zu Directx 11 herunterlade, dann kann ich trotzdem damit die Beispiele zu Directx 9 probieren, oder geht das nicht mehr wegen Änderungen in der Syntax?

    Also wenn ich mir das Buch "3D Spieleprogrammierung mit DirectX 9" kaufe, müsste ich dann den SDK für Directx 9 benutzen oder kann ich auch den aktuellen downloaden?



  • Im aktuellen SDK ist DX9 10 und 11 drin, die nutzen jeweils eigene Dateien.



  • Ok, danke Xebov! Dann werd' ich mich die Tage mal ans Werk machen 🙂



  • Sorry wenn ich einen veralteten Thread aufgreife aber ich hab da mal ne wichtige Frage?

    Und Zwar habe ich mir ein Buch gekauft, was nicht DirectX9.0c vermittelt wie David Scherfgens Buch sondern 9.0 ohne a , b oder c . Ich habe nach dieser Antwort lange gegoogelt und bis jetzt nur herausgefunden das DirectX 9.0c Shader Version 3.0 im Unterschied zu Direct X9.0 Shader Version 2.0 verwendet. Ist das vom Quellcode her tragisch muss ich das Buch jetzt wegwerfen, oder kann ich das 1:1 übernehmen?

    Ich würde mich auf ne Antwort freuen.

    Vielen Dank im Voraus



  • Bis auf die Shader ändert sich ja nix.

    Shader Model 2 vs 3 macht allerdings schon nen Unterschied. 2 kann viele praktische Dinge nicht, kein dynamisches Branching, keine Integer Register etc.

    Den Shader-Code in deinem Buch würde ich also ignorieren. Such dir statt dessen lieber online Beispiele/Tutorials zur Shader-Programmierung.

    Und verwende am besten gleich Shader für alles - sich noch in die Fixed-Function Pipeline einzuarbeiten macht glaube ich wirklich keinen Sinn mehr.



  • was heisst das genau ich kann das buch zumlernen verwenden? sorry ich bin in directx ein blutiger anfänger wie meinst du das mit der pipeline? was ist das überhaupt?



  • Werri schrieb:

    was heisst das genau ich kann das buch zumlernen verwenden?

    Ja.

    Nur wie gesagt: die Shader-Programme die da drinnen vorkommen sind "veraltet". Das heisst nicht dass sie nicht mehr funktionieren. Es heisst nur dass sie u.U. zu kompliziert sind, bzw. dass die im Buch beschriebenen Limitierungen z.T. nicht mehr existieren bzw. diverse Grenzen (max. so-und-so-viele Befehle pro Shader) sich verändert haben.

    Falls du nicht weisst was Shader-Programme sind google es einfach mal. Bzw. wenn du das Buch liest wirst du schon draufkommen. (Es sei denn in dem Buch kommt nichts z.T. Shader vor, das wäre dann doof.)

    sorry ich bin in directx ein blutiger anfänger wie meinst du das mit der pipeline? was ist das überhaupt?

    Als "Fixed Function Pipeline" bezeichnet man das was Grafikkarten hatten bevor sie "frei programmierbar" wurden. Da konnte man dann für die zu zeichnenden Flächen mehrere Texturen einstellen, jeweils einen eigenen Blending-Mode "zwischen" zwei Textur-Layer, pro Eckpunkt eine Farbe, Lichtquellen definieren etc. Aber alles nur in einem fix vorgegebenen System. Man konnte z.B. jedem Licht eine eigene Farbe und intensität verpassen. Man konnte aber z.B. nicht erreichen dass das Licht je nach Winkel unter dem es auf die Fläche trifft die Farbe ändert, damit das Objekt "schillert" wie ein Fliegenpanzer oder sowas. Man konnte auch nicht beliebig viele Lichtquellen verwenden, und auch nur ganz bestimmte vorgegebene Beleuchtungsmodelle verwenden.

    Bzw. halt einfach überhaupt nichts machen was das vorgegebene System nicht angeboten hat.

    Dann kamen die neueren 3D Karten die eben frei programmierbare Shader hatten. Und anstatt eben das vorgegebene System zu verwenden, konnte man denen das Programm das sie verwenden sollen um die Farbe eines Pixels zu bestimmen frei vorgeben. Anfangs noch mit argen Limits (keine Schleifen, keine "ifs", sehr kurze Programme etc.), dann mit weniger Limits (kurze Schleifen mit fixer Durchlaufzahl, "simulierte ifs", etwas längere Programme) und mittlerweile gibt es seit in paar Jahren Karten die quasi gar keine Limitierungen mehr haben (beliebige Programme).

    (Genau das ist auch der Unterschied zwischen D3D 9 und 9c: D3D 9 bietet nur Support für Shader Model 2 (kurze Schleifen mit fixer Durchlaufzahl, "simulierte ifs", ...) und 9c bietet schon Support für Shader Model 3 (echte Schleifen, echte "ifs", deutlich längere Programme, allgemein weniger lästige Limits).)

    Damit diese weiterhin kompatibel zu älteren Programmen bleiben, muss natürlich die Fixed-Function-Pipeline mit ihrem fix vorgegebenen System irgendwie "simuliert" werden. Das macht Direct3D auch ganz toll -- bzw. die Treiber der Karten - weiss nicht wo das genau passiert, auf jeden Fall muss sich das Programm nicht selbst darum kümmern.

    In Direct3D 10 wurde Support für die Fixed-Function-Pipeline allerdings schon komplett entfernt, d.h. man kann dort NUR mehr über Shader-Programme arbeiten.

    Aus diesem Grund, und da Shader sowieso viel cooler sind, würde ich empfehlen die Fixed-Function-Pipeline in D3D 9 einfach zu ignorieren, und gleich alles mit Shadern zu machen. Und da D3D 9c eben "mächtigere" Shader-Programme kann als D3D 9, ist anzunehmen dass die Shader-Programme in deinem Buch auch etwas veraltet sind.

    Der ganze Rest, also wie man mit Texturen, Vertex-Buffern, Index-Buffern umgeht, wie man die ganzen Matrizen verwenden muss etc. ist aber bei D3D 9c genau so wie bei D3D 9. -> kannst du verwenden



  • ich hab leider nicht alles verstanden was du geschrieben wahrscheinlich weil mir die grundlagen zu der 3D Programmierung fehlen. Aber erstmal danke für die ausführliche Auskunft. Du hast wahrscheinlich sehr viel Erfahrung in diesen Bereich und bestimmt eigene Spiele programmiert. Davor habe ich sehr viel respekt und ich hoffe , es ist mein Traum das ich mit viel Gedult, Arbeit und Mühe auch mal dahin komme! Ich hab 2 Bücher einmal das von Scherfgen und eins von Markt und Technik das Dx9 verwendet , Denn ich finde das Buch besser vom Eindruck als wie das von Scherfgen(nichts gegen ihn) . Nur ich finde Bücher besser die sich herantasten und komplett von Null anfangen... . Also könnte ich doch so machen ich nimm das veraltete Buch zum lernen und wenn ich bei Shader angekommen bin dann könnte ich mir die nötigen Infos ja von Scherfgens Buch holen er behandelt ja DirectX9.0c.



  • D3D9 bietet rein prinzipiell einen wesentlich sanfteren Einstieg als aktuelle Versionen und ist zum Anfangen damit potentiell sowieso besser geeignet. Wenn du auch schon Bücher dazu hast, würd ich einfach mal damit anfangen. Schau nur, dass du dich bald an Shader heranwagst und dich nicht zu lange mit der FFP aufhältst. Die alte FFP ist nett, um für den Anfang mal schnell was auf den Schirm zu zaubern, einige Grundlagen zu lernen und sich mit dem ganzen System mal etwas vertraut zu machen. Und es schadet nicht, auch mal gesehen zu haben, wie man das früher so gemacht hat. Heutzutage läuft aber alles über Shader. Auch wenn der ganze Shaderkram zuerst mal etwas einschüchternd wirken kann: In Wirklichkeit ist das alles nicht so kompliziert, wie es aussieht und Shader machen die Dinge am Ende des Tages nicht nur wesentlich flexibler, sondern tatsächlich auch sehr viel einfacher, wenn man sie mal verstanden hat...

    D3D10 kannst du vergessen; wenn du mit D3D9 soweit bist, dass du etwas Erfahrung mit Shadern gesammelt hast, kannst du auf D3D11 umsteigen. D3D10 zu benutzen, wäre sinnlos, da D3D11 alles hat, was D3D10 hat (die API sieht auch praktisch gleich aus, nur dass alle 10er durch 11er ersetzt wurden) und noch viel mehr und zusätzlich noch abwärtskompatibel zu schwächerer Hardware ist. Aus heutiger Sicht, könnte man D3D10 als ein halbfertiges D3D11 betrachten...

    Der Link dürfte dich interessieren: http://www.spieleprogrammierer.de/11-buch-3d-spieleprogrammierung/16038-software-update-alle-projekte-aus-dem-buch-3d-spieleprogrammierung-für-visual-cplusplus-2010-neues-directx-sdk/



  • @dot
    OK, stimmt auch wieder, zum Einstieg ist die Fixed-Function-Pipeline gut.
    Halt nicht all-zu-lange damit aufhalten, macht keinen Sinn FFP-Experte zu werden.

    ----

    @Werri

    ich hab leider nicht alles verstanden was du geschrieben wahrscheinlich weil mir die grundlagen zu der 3D Programmierung fehlen.

    Vermutlich. Macht aber nix, fang einfach mal an. Dann lernst du die Sachen Schritt für Schritt kennen. Das wird schon.

    Du hast wahrscheinlich sehr viel Erfahrung in diesen Bereich

    Ich würde sagen "ein wenig". "Viel" haben andere.

    und bestimmt eigene Spiele programmiert.

    Ja, allerdings keine wirklich tollen, und auch keines mit D3D. Dafür aber eine schöne GUI mit D3D. dot ist da glaub' ich wesentlich fitter als ich, sowie auch einige andere hier.

    Also könnte ich doch so machen ich nimm das veraltete Buch zum lernen und wenn ich bei Shader angekommen bin dann könnte ich mir die nötigen Infos ja von Scherfgens Buch holen er behandelt ja DirectX9.0c.

    Ja, könntest du. Oder du fängst dann an zu googeln. Oder beides. Muss nicht immer ALLES aus einem Buch kommen.

    Auf jeden Fall ... sei auf der Hut. Viele Bücher eignen sich zwar gut zum Anfangen, sind aber genaugenommen voll von schlechtem Code.
    Sei also offen für neues wenn du das Buch durch hast, und geh nicht davon aus dass das was du im Buch gelesen hast unbedingt "good practice" ist.

    Besorg' dir vielleicht zusätzlich 1-2 wirklich gute C++ Bücher zum Thema Stil/Best-Practices/etc.
    Mein Vorschlag: C++ Coding Standards (Sutter) und Effective C++ (Meyers)
    (BTW: weiss jemand wie gut die deutschen Übersetzungen von denen sind? Ich hab' nur die englischen...)

    Muss nicht gleich sein, aber wenn du das Buch durch hast, und an einem Punkt angekommen bist, wo du weisst dass du die Sache mittelfristig fortsetzen willst (im Gegensatz zu aufhören weil es dir keinen Spass mehr macht) ... dann wären die angesagt.

    Da drinnen findest du nämlich viele gute Hinweise und Erklärungen zu Sachen die leider viele Authoren von Spieleprogrammierungsbüchern ... sagen wir mal freundlich: nicht so genau nehmen 🙂



  • danke dot und huasbaer , jetzt kann ich endlich die beispiele nutzen aber bei mein veraltetes buch habe ich probleme ich habs so gelöst das ich Visual 2008 und DIrectX August 2007 SDK hab fünf verschiendene SDKs um ein kompatibeles zu finden ich frag mich wie ich es update so das die vc6 projekte bzw die konvertierten projekte zu 2008 zu 2010 laufen. Ich will euch jetzt nicht mit fragen nerven wo ihr denkt kennt der Junge kein googl, nur wenn man mal die Chance jmd kennenzulernen der sich schon gut auskennt, neigt man dazu ihn mit fragen zu löchern, aber okay noch eine frage und zwar wisst ihr was sich gegenüber den neuen sdk juni2010 geändert hat bei den projekten findet er die dmusici.h und dmusicc.h nicht. Ich weiss das durch googlen es was mit DirectMusic zutun haben muss. Aber ich versteh es nicht das sind doch Dx9 Projekte? Ich meine dinput8.lib und einige andere existieren nicht mehr in Juni 2010 SDK aber wie mach ich die kompitabel oder soll mir das erstmal scheiss igeal sein und ich bei den August SDK bleiben und mit Visual 2008 weitermachen?


Anmelden zum Antworten