Muss ich veraltetes DirectX 9 lernen?



  • Ü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?



  • Ich verwende für D3D9 das August 2008 SDK: http://www.microsoft.com/en-us/download/details.aspx?id=22508
    (Frag mich nicht wieso, hab einfach seit damals nimmer upgedated)

    Geht mit VS 2005 und VS 2008 super. dinput8.lib ist da auch noch dabei. dinput8.lib findet sich ansonsten aber auch in den neuen Windows SDKs (DirectInput wurde vom DX SDK ins Windows SDK übersiedelt).

    Neuere SDKs müssten aber genau so gut gehen, nur dann eben kombiniert mit einem ebenso neuen Windows SDK.

    Das letzte SDK mit DirectMusic Support scheint wohl das Summer 2004 Update zu sein (=das "DirectX 9.0c SDK"): http://www.microsoft.com/en-us/download/details.aspx?id=21416

    DirectMusic wurde von MS abgewürgt, keinerlei Support mehr. Ab besten nicht mehr verwenden. Sonst würde ich empfehlen trotzdem ein neueres SDK zu verwenden und einfach nur die paar benötigten DirectMusic Files aus dem Summer 2004 Update zu kopieren.
    (Einfachste Möglichkeit dranzukommen: Summer 2004 Update runterladen & installieren, DirectMusic Files suchen & rauskopieren, Summer 2004 Update wieder de-installieren)

    ps: nicht vom "Update" im Namen verwirren lassen, das ist schon ein vollständiges SDK



  • Direct3D ist so ziemlich das einzige, was von den historischen Teilen von DirectX noch üblich ist. DirectDraw, DirectPlay, DirectInput, DirectSound, DirectMusic, ... gibts alles nicht mehr (bzw. sind bestenfalls deprecated). Verwend ein aktuelles SDK, konzentrier dich auf Direct3D und vergiss den anderen Kram einfach.



  • mach ich was ich eig wissen wollte wie ersetz ich die dmusicii so das die auf den aktuellen sdk laufen ich hab gelesen das DirectXAudio die header enthält aber das neue sdk hat die header nicht wie ersetz ich die, mit was ? Wer enthält jetzt die funktionalität?

    LOL wartet mal wenn das letzte SDK 2004 DirectMusic enthält... Warum kann ich es mit August 2007 kompilieren und warum sind die dmusicii.h und dmusic.h da noch vorhanden?



  • Hi Leute,

    ich möchte mich jetzt in meiner Ausbildung zum Fachinformatiker
    mit der 3D-Programmierung in C++ beschäftigen und suche seit Tagen
    ein gutes Buch zu DirectX 9 oder 11. Aber zu DirectX 11 finde ich
    kein gutes Lesewerk (das Buch zu DirectX 11 von Susanne W. soll laut
    den Rezessionen nur eine schlechte Kopie der Doku sein...), jedenfalls
    habe ich mich bisher auf das Buch (http://goo.gl/N6GHU) von
    David S. fixiert, da viele sagen, es sei gut. Nur hätte ich ein paar
    Fragen zum Buch, bevor ich es mir kaufe.

    1. Lohnt sich der Einstieg in DirectX 9 im Jahre 2012 noch?
    2. Sie Beschreibung zum Buch ist auf einigen Seiten unterschiedlich,
    mitunter ist die Rede vom Bau einer eigenen Game-Engine "TriBase" oder
    es wird beschrieben das man die "TriBase" Game-Engine nutzt und somit
    von dieser abhängig ist. Programmiert man nun im Buch eine eigene
    Game-Engine oder lehrt der Autor stattdessen seine eigene (was für mich
    ein No-Go wäre)?

    P.S.: Sorry, dass ich mich hier einfach einmische und euch mit Fragen löchere.



  • Werri schrieb:

    LOL wartet mal wenn das letzte SDK 2004 DirectMusic enthält... Warum kann ich es mit August 2007 kompilieren und warum sind die dmusicii.h und dmusic.h da noch vorhanden?

    Vermutlich weil ich mich getäuscht habe, und das Summer 2004 Update doch nicht das letzte SDK ist wo DirectMusic drin ist 😃

    Werri schrieb:

    mach ich was ich eig wissen wollte wie ersetz ich die dmusicii so das die auf den aktuellen sdk laufen ich hab gelesen das DirectXAudio die header enthält aber das neue sdk hat die header nicht wie ersetz ich die, mit was ? Wer enthält jetzt die funktionalität?

    Die Funktionalität von DirectMusic gibt's soweit ich weiss gar nirgends mehr. MS hat wohl entschieden dass es ein Schuss ins Ofenrohr war.



  • dot schrieb:

    Direct3D ist so ziemlich das einzige, was von den historischen Teilen von DirectX noch üblich ist. DirectDraw, DirectPlay, DirectInput, DirectSound, DirectMusic, ... gibts alles nicht mehr (bzw. sind bestenfalls deprecated). Verwend ein aktuelles SDK, konzentrier dich auf Direct3D und vergiss den anderen Kram einfach.

    Ach geh so kann man das net sagen.

    Mag sein dass DirectDraw, DirectSound und DirectInput deprecated sind, aber es gibt sie auf jeden Fall noch, und zwar als Teil des Windows SDK.
    Bei den dreien sehe ich auch keine Gefahr dass MS den Runtime-Support in absehbarer Zeit einstellen wird, die sind einfach immer noch viel zu weit verbreitet.

    Bei DirectPlay und DirectMusic sieht die Sache dagegen etwas düster aus.


Anmelden zum Antworten