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.htm

    Das 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:
    BILD

    Ich 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*


Anmelden zum Antworten