Direct3D Initialisierung
-
Ah. Dank deiner umfassenden Hilfe verstehe ich jetzt den kompletten Initialisierungsablauf. Vielen Dank!
-
Was du wissen willst, damit könnte ein Prof mehrere Vorlesungen halten. Du wirst also glaub ich, keinen finden, der dir schnell ein paar Tutorials schreibt, die du auch so finden kannst (u.a. auch in der MSDN).
Deine Frage war nicht konkret genug
-
Das bezweifle ich, kenne keinen Prof, der dazu annäherend eine Vorlesung halten könnte.
Bye, TGGC (Der Held ist zurück)
-
Ok, ich will versuchen etwas konkreter zu werden. Ich skizziere mal schnell den groben Ablauf der Direct3D-Initialisierung (mit konfortabler Auswahl für den Benutzer). Wäre nett von euch, wenn ihr mir sagen könntet, ob meine Skizze stimmt oder was alles falsch ist.
Vorgehensweise (so wie ich es mir im Moment vorstelle):-
Mit g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) Pointer auf die IDirect3D Schnittstelle besorgen
-
Mittels pD3D->GetAdapterCount() und pD3D->GetAdapterIdentifier() allgemeine Infos zu allen installierten Adaptern holen und durch pD3D->GetAdapterModeCount() sowie pD3D->EnumAdapterModes() alle möglichen VIDEO-Modi für jeweils ein entsprechendes Format abfragen.
-
Dem Benutzer die verhandenen Adapter + ihrer Video-Modi (samt Format und Refreshzahl) auflisten. Der Benutzer wählt dann einen Adapter, einen Videomodus (samt Format), ob Hardwarebeschleunigt oder nicht und z.B. ob Vollbildmodus oder nicht.
-
Erzeugung eines Devices mittels pD3D->CreateDevice()
Der 1. Parameter ist der gewählte Adapter. Den 2. Parameter erfahre ich durch die Wahl ob Software oder Hardwarebeschleunigung. Der 3. und 4. Parameter ist auch klar. Ich muss jetzt also noch per Hand für den 5. Parameter eine Struktur vom Typ D3DPRESENT_PARAMETERS füllen und zwar wie folgt:
UINT BackBufferWidth,BackBufferHeight: Setze ich auf die Werte des vom Benutzer gewählten Videomodus (hier bin ich mir nicht ganz sicher, da Videomodus und Bildmodus ja 2 unterschiedliche Dinge sind)
D3DFORMAT BackBufferFormat: Setze ich auf das Format des gewählten Videomodus (z.B: R5G6B5)
blabla
D3DFORMAT AutoDepthStencialFormat: Hier setze ich das Format des Z-Stencil-Buffers.
So wie ich das sehe, muss ich jetzt prüfen, ob eine Kombination aus Videomodusformat, Bildpufferformat(backbuffer) und z-stencilbufferformat zusammenpasst. Ob ein Bildpuffer bzw. Z-Stencilbuffer für ein bestimmtes Videomodusformat verfügbar ist, prüfe ich mit IDirect3D9::CheckDeviceFormat(). Wenn die Methode auf SUCCEEDED anschlägt, teste ich noch das Bildpufferformat mit IDirect3D9::CheckDeviceType() und das Z-Stencilbuffer-Format mit IDirect3D9::CheckDepthStencil().
Für die Multisamplingparameter benutze ich zum Test IDirect3D9::CheckDeviceMultiSampleType().
Nach den ganzen Tests kann ich mir dann endlich mit IDirect3D9::CreateDevice() ein Device holen und anfangen zu rendern etc.Ich weiß, dass das ziemlich viel Text ist aber ihr würdet mir enorm helfen, wenn ihr mir sagt, wo ich noch genau falsch liege.
-
-
Also, ich weiß ja nicht was Du mit Format meinst, aber wenn meine Schwester ein gar lustiges Spielchen starten will, dann will sie dazu allerhöchstens noch die Auflösung wählen. 3D-Spiele sollten generell hardwarebeschleunigt (damit Händler nicht so viele Umtauschaktionen der Marke "Hab' nur 10 fps bei Pong mit dieser GeForceFX!" erleben müssen) und im Vollbild ablaufen (kein Mensch schreibt während eines Quake-Turniers Mahnungen!). Und bei Sachen wie "X8R8G8B8" fährt sie vor Schreck den PC wohl sicherheitshalber runter...
-
Jo, is mir klar.
Den User lässt man Auflösung und Farbtiefe aussuchen. Ich muss halt dann in meinem Programm ein Format passend zu der Farbtiefe finden.
-
Also, was ist das Problem?
Bye, TGGC (Der Held ist zurück)
-
http://www.zfx.info/Tutorials.php?ID=78 sollte genau das sein, was
du suchst.
-
Sgt. Nukem hat es schon gesagt. Überfordere den Anwender nicht. Stelle eine kleine Auswahl von gängigen Auflösungen zur Auswahl.
z.B.
640x480 800x600 1024x768 Dazu noch 16 und 32Bit Farbtiefe.
Am Amfang startest du das Spiel mit 800x600x16Bit. Sollte der Anwender eine andere Auflösung wünschen kann er sich das über ein Menü einstellen. Die Einstellungen solltest du in einer Datei speichern.
Auf der Seite von TGGC kannst du das Spiel OSR runterladen. Es ist OpenSource. Schau dir dort die Initialisierung an. Ist ganz gut gemacht finde ich.
cu
HLTO
-
Also, was ist das Problem?
Bye, TGGC (Der Held ist zurück)
Ehrlich gesagt gehen mir TGGCs provokante Beiträge langsam auf den Sack.
Wenn du keine Lust hast Anfängern zu helfen, dann lass es einfach komplett bleiben.
-
hallo.
wenn du beim lernen oder entwickeln eines spiels bist reicht es ertmal wenn du die einstellungen ohne auswahlmenü einstellst.
wenn du aber dein spiel dann der öffentlichkeit zeigen willst solltest du schon eins reinbasteln.
unter www.x-tutorials.de
findest du ein tutorial über initalisierung von dx es ist in dx8 aber es in dx9 umzuschreiben ist leicht.
hoffe ich habe etwas geholfen
MFG
-
wenn du beim lernen oder entwickeln eines spiels bist reicht es ertmal wenn du die einstellungen ohne auswahlmenü einstellst.
wenn du aber dein spiel dann der öffentlichkeit zeigen willst solltest du schon eins reinbasteln.Japp, genau so mach ich jetzt auch. Die wichtigen Einstellungen code ich hart in den Source rein. Hab jetzt erstmal keine Lust, mich tiefergehend mit der WinAPI oder MFC/VCL etc. zu beschäftigen.
-
interpreter schrieb:
Ehrlich gesagt gehen mir TGGCs provokante Beiträge langsam auf den Sack.
Wenn du keine Lust hast Anfängern zu helfen, dann lass es einfach komplett bleiben.Und wie wär es wenn du mal dein Hirn einschaltest und (deinem Namen entsprechend) zu erkennen versuchst, was hinter diesen "provokanten" Beiträgen steht?
Bye, TGGC (Der Held ist zurück)
-
Und wie wär es wenn du mal dein Hirn einschaltest und (deinem Namen entsprechend) zu erkennen versuchst, was hinter diesen "provokanten" Beiträgen steht?
Du meinst abgesehen von Selbstprofilierung und dem Ausleben deiner leicht arroganten Art? Mir ist einfach aufgefallen, dass du in zahlreichen Threads (und einem anderen Forum) provokante und meist völlig überflüssige Kommentare ablässt. Wenn jeder immer sofort auf die Lösung all seiner Probleme käme, dann bräuchten wir keine Foren...
Schon mal drüber nachgedacht, was der SInn eines solchen Forums ist?
-
interpreter schrieb:
Du meinst abgesehen von Selbstprofilierung und dem Ausleben deiner leicht arroganten Art? Mir ist einfach aufgefallen, dass du in zahlreichen Threads (und einem anderen Forum) provokante und meist völlig überflüssige Kommentare ablässt. Wenn jeder immer sofort auf die Lösung all seiner Probleme käme, dann bräuchten wir keine Foren...
Schon mal drüber nachgedacht, was der SInn eines solchen Forums ist?Jo, aber schon mal darüber nachgedacht, was denn mit
TGGC schrieb:
Also, was ist das Problem?
gemeint sein könnte?!
Als Antwort davor hast Du geschrieben
interpreter schrieb:
Jo, is mir klar.
Den User lässt man Auflösung und Farbtiefe aussuchen. Ich muss halt dann in meinem Programm ein Format passend zu der Farbtiefe finden.!
Das sieht so aus, als wären all' Deine Probleme beseitigt... :pWeltfrieden!
-
ich würde die auswahl der farbtiefe ebenfalls weglassen, da 32bit einfach besser aussieht und den nichtallzugroßen performanceunterschied nicht wirklich rechtfertigt.
Λ
-
interpreter schrieb:
Und wie wär es wenn du mal dein Hirn einschaltest und (deinem Namen entsprechend) zu erkennen versuchst, was hinter diesen "provokanten" Beiträgen steht?
Du meinst abgesehen von Selbstprofilierung und dem Ausleben deiner leicht arroganten Art? Mir ist einfach aufgefallen, dass du in zahlreichen Threads (und einem anderen Forum) provokante und meist völlig überflüssige Kommentare ablässt. Wenn jeder immer sofort auf die Lösung all seiner Probleme käme, dann bräuchten wir keine Foren...
Schon mal drüber nachgedacht, was der SInn eines solchen Forums ist?Lern coden, ähhh...: quoten.
Bye, TGGC (Der Held ist zurück)
-