Bump Maps generieren in DirectX9



  • Wenn ich jetzt in die Textur schreiben möchte, wie mache ich das?

    Habe gerade diese Funktion gefunden:
    D3DXCreateTextureFromFileInMemory()
    Ist das in Ordnung?



  • Nein, damit lädst du aus einer Datei, deren Inhalt du in den Arbeitsspeicher geladen hast.
    Um in Texturen zu schreiben, musst du sie mittels LockRect sperren. Dann kriegst du einen Zeiger für deine Schreiboperationen. Danach mit UnlockRect wieder entsperren.
    (Dokumentation!)




  • Mod

    TomasRiker schrieb:

    Nein, damit lädst du aus einer Datei, deren Inhalt du in den Arbeitsspeicher geladen hast.
    Um in Texturen zu schreiben, musst du sie mittels LockRect sperren. Dann kriegst du einen Zeiger für deine Schreiboperationen. Danach mit UnlockRect wieder entsperren.
    (Dokumentation!)

    vielleicht solltest du die doku als vorwort ins buch einfuegen 😉



  • Okaaaay, ich hab bis jetzt mal mit dem Environment Mapping angefangen. Das geht soweit. Ich hab nur noch ein kleines Problem.

    Erstmal zwei Bilder:

    Hier sieht alles wunderbar aus:
    http://bloody-blades.de/images/envbump1.jpg

    Aber wenn man die Kamera dreht:
    http://bloody-blades.de/images/envbump2.jpg
    Die Skybox bleibt korrekt stehen beim Drehen, aber das Environment Mapping stimmt nicht mehr. Die Env Map Textur wird immer so berechnet, als würde sich die Skybox mitdrehen.

    Das gleiche Phänomen ist mir auch in deinem Environment Mapping Beispiel aufgefallen. Nur da fällt es nicht so auf, weils so kleine Kugeln sind.

    Wie kann ich das Problem lösen? Kann man die Cubemap nicht irgendwie mitrotieren bevor DirectX seine Texturkoordinaten berechnet?

    Dankeschön

    ::edit::
    haha mir kam da grad eine Idee 🙂 Ich kann die Textur ja danach einfach drehen... oki das muss ich doch mal testen

    ::edit 2:
    muhar har har har 😃 es geht

    // Rotate texture with camera
    	D3DXMATRIXA16 texRot;
    	D3DXMatrixRotationY(&texRot, camera.angle);
    	d3dDevice->SetTransform(D3DTS_TEXTURE0, &texRot);
    

    Wunderbar 🙂



  • solche screens verlocken mich dazu das buch nochmal aus dem regal zu kramen. ich habs nach den ersten 100 seiten oder so liegen gelassen weil ich die motivation verloren hatte.



  • Hm, mir wird grad was bewusst. Beim normalen Environment Mapping ohne Bump Mapping wird ja einfach nur für die 3 Vertices die Koordinate auf der Cubemap berechnet und dann über das Dreieck gespannt. So ist es eine detailreiche Spiegelung (siehe meine Screens oben).

    Wenn man Bump Mapping jetzt anmacht, funktioniert das ja gar nicht mehr. Das müsste man ja dann pixelweise machen und daraus eine neue Textur generieren...

    Gibts da nicht noch irgendwelche anderen Möglichkeiten, wo ich eine detailreiche Spiegelung mit Brechung durch die Bump Map kriege?

    TravisG schrieb:

    weil ich die motivation verloren hatte.

    Also soo schlecht is das Buch doch auch nicht... 😃

    Nein Scherz, ich find's echt ziemlich gut.



  • korrekt waere:
    im pixelshader den interpolierten und renormalisierten view-vector (camera->eckpunkt) an der per-pixel-normale der bumpmap (im tangent- oder objectspace) spiegeln und mit der entsprechenden matrix zurueck in den worldspace transformieren und aus der cubemap holen.
    in anbetracht deines einzelnen polygons bieten sich natuerlich diverse vereinfachungen an.



  • Die Bumpmap würd ich nicht komplett für jeden Frame neu Berechnen, sondern einfach zwei oder Drei Teturen erstellen, die sich aufeinander Bewegen und immer zu einer Textur Addieren.



  • Bis jetzt komplett ohne Bumpmapping:

    http://bloody-blades.de/?p=32


Anmelden zum Antworten