Brauche Hilfe zum Einstieg in "Direct3D9"



  • Hallo Leute,

    ich habe jetzt seit gut einem Jahr OpenGL Applikationen geschrieben.
    Jetzt habe ich schon etwas Erfahrung in Sachen 3D Grafikprogrammierung, Statemachines und 3D Renderern. Ich möchte OpenGL auch beibehalten aber trotzdem möchte ich mein Wissen nun um Direct3D erweitern.
    Und weil ich kein Windows Vista habe und Direct3D9 noch nicht veraltet ist will ich mit Direct3D9 anfangen.
    Ein paar kleinere Tutorials habe ich schon zum Laufen gebracht, weiß also in etwa wie man mit D3D einen Devicecontext usw. erstellt (sofern dass da so heißt)

    Aber nun meine Frage:

    Wie kann man mit D3D am bessten 2D Objekte zeichnen, oder besser gesagt wie kann man, ohne einen VertexBuffer anzulegen usw. ein Dreieck zeichnen.

    Mit OpenGL ist das ja ganz einfach mit "glBegin(GL_TRIANGLES oder halt GL_QUADS)", "glVertex3f" usw.

    Aber wie macht man das mit D3D? Da muss man doch nicht etwa immer einen VertexBuffer anlefen, oder?!

    Danke schon mal 🙂



  • Für den Anfang oder zu Testzwecken reicht es, wenn du die Vertices aus dem Systemspeicher mit IDirect3DDevice9::DrawPrimitiveUP renderst.



  • Muss die Strukture, welche man an "DrawPrimitiveUP" übergeben muss, eine bestimmt Form haben?
    Ich meine: woher soll Direct3D denn wissen welche Member der Struktur die 3D Koordinaten sind und welche die Farben?

    EDIT:

    Ich breuchte vielleicht auch noch die neusten C++ Header files für das gesammte Direct3D9 SDK. Aber nur die Header.

    Kennt da jemand einen Link (außer Google, da bin ich selbst schon am gucken ^^)

    Danke


  • Mod

    in der doku steht deine erste frage beantwortet.

    zum edit:
    du wirst auch die libs brauchen
    und die dlls
    und die doku
    also quasi das sdk.



  • Ich hab die libs und die dlls.
    Nur bei der Datei "d3dx9math.inl" kommt dauernd so ne nervige Warnung:

    "
    In static member function static void* \_D3DXMATRIXA16::operator new [](size\_t)': [Warning] \operator new' must not return NULL unless it is declared `throw' (or -fcheck -new is in effect)
    "

    Und das an zwei stellen.
    Ich hab halt GCC und nicht VisualStudio.

    EDIT:

    Was soll bei D3D eigentlich "RHW" und "FVF" bedeuten??


  • Mod

    LukasBanana schrieb:

    Ich hab halt GCC und nicht VisualStudio.

    nicht der compiler wofuer dx gemacht wurde, was erwartest du dir von einem neueren haeder? 😕

    EDIT:

    Was soll bei D3D eigentlich "RHW" und "FVF" bedeuten??

    wenn du das deine docu fragst, hast du sofort die antwort.



  • 1. Wie rapso schon gesagt hat: Nimm VS.

    2. Alle anderen Fragen beantwortet die Doku. RHW = Reciprocal homogeneous w. Soll andeuten, dass die Koordinaten bereits durch w geteilt wurden (= mit Kehrwert multipliziert) und sich im Clipping Space befinden.
    FVF = Flexible Vertex Format; Format das den Aufbau eines Vertex beschreibt



  • Also ich hab's jetzt immer hin schon mal geschaft mit D3D9 einen Bildschirm zu öffnen (auch Vollbilsmodus ist möglich).
    Ich habe einen LPDIRECT3D9, LPDIRECT3DDEVICE9 und LPDIRECT3DVERTEXBUFFER9 angelegt. Allerdings scheint sich D3D in meinem Programm überhaupt nicht für "pDirect3DDevice_->Clear", "pDirect3DDevice_->BeginScene" usw. zu interessieren.
    Ich sehe nämlich immer nur den zuletzt genutzen Video-puffer des zuletzt gestarteten D3D Programms. Wenn ich eines der Tutorials starte, wieder beende und dann mein Programm sehe ich das selbe Bild.

    Was muss man machen damit der Bildschirm immer gelöscht wird? Eigentlich nur "pDirect3DDevice_->Clear" aufrufen, oder?! Die pointer sind bei mir auch nicht leer, das habe cih getestet, außerdem würde das Programm sonst abstürtzen.


  • Mod

    also als erstes, und das ist ganz wichtig, must du das tutorial aus dem sdk durchlesen, denn einmal lesen dauert weniger als jeder einzelne fehle dich kostet den du hast, weil du es noch nicht gelesen hast 😛


Anmelden zum Antworten