Punklicht
-
Edit: Frage komplett geändert.
Hi,
ich hab große Probleme Per-Pixel Beleuchtung zu implementieren
Ich habe mich 1 zu 1 an folgendes Tutorial gehalten:
http://personal.telefonica.terra.es/web/codegarrofi/perPixelLighting/perPixelLighting.htmDas komische ist, dass bei mir der Lichtbereich nicht kugel- sondern quaderförmig ist.
Ich benutze aber die selbe Attenuation map wie in dem Tutorial, also ein weißer Kreis auf schwarzem Hintergrund.Hier ein Bild:
BILDIch kann mir absolut nicht erklären wie das zustande kommt. Seit Wochen suche ich nach dem Fehler, in allen möglichen Ecken des Programms, finde aber keinen. Ich vermute also mal dass der Algorithmus falsch ist, warum weiß ich aber auch nicht.
Um Fehler auszuschließen habe ich die Texturkoordinaten mal nicht in einem Shader berechnet sondern schon beim Laden der Geometrie, hier der Code:D3DXVECTOR3 posLicht( 0, 15.0f, 0 ); // ein Licht an konstanter Position for( Jedes Vertex ) { D3DXVECTOR3 vAbstand = Vertex.vPos - posLicht; // Abstand Vertex-Licht vAbstand /= 20.0f; // Abstand geteilt durch Lichtreichweite vAbstand *= 0.5f; // in den 0-1 Bereich transformieren vAbstand += D3DXVECTOR3( 0.5f, 0.5f, 0.5f ); // Vertex.vTexCoord1 = D3DXVECTOR2( vAbstand.x, vAbstand.y ); // Abstände als Texturkoordinaten speichern. Vertex.vTexCoord2 = D3DXVECTOR2( vAbstand.z, 0.5f ); }
Dann
pDevice->SetTexture( 1, pAttenTexture ); pDevice->SetTexture( 2, pAttenTexture );
Die beiden werden dann miteinander multipliziert und auf den Bildschirm ausgegeben. Das Ergebnis hab ich ja schon oben verlinkt.
Hat wer ne Idee was da falsch läuft?
-
Habe die Frage komplett umgebaut, also *push*