Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.02.2010, 16:58

Probleme mit Shadowmapping

Hallo erstmal,

ich integriere gerade Shadowmapping in meine Engine.
Allerdings gibt es ein Problem, und zwar glaube ich das das Programm die Texturkoordinaten falsch ausrechnet.
Hier ein Screensshot der Szene:
http://dl.dropbox.com/u/4251611/Neue%20Bitmap.bmp
Die Shadowmap ist 1024x1024 Pixel groß, die Lichtquelle ein Spotlicht
und befindet sich rechts an der Seite des Bildes.

Hier der Code zum errechnen der Texturkoordinaten:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
float2 Tex = float2(0, 0);

// Mit der Welt/Sichtmatrix multiplizieren

float3 LightWVPos = mul (vInPosUntransformed, (float4x3)(LightWV));

// Jetzt noch mit der Projektionsmatrix

float4 LightWVPPos = mul(float4(LightWVPos, 1), LightP);

// In Texturkoordinaten umrechnen

Tex.x        = 0.5f * LightWVPPos.x + 0.5f; 
Tex.y        = 0.5f - 0.5f * LightWVPPos.y;


Daber ist vInPosUntransformed die völlig untransformierte Position,
LightWV die Welt/Sichtmatrix des Lichtes und LightP die Projektionsmatrix des Lichtes.

Es wäre nett, wenn ihr mir mit euren Tipps helfen würdet.
Danke schoneinmal im voraus,
comp.

2

14.02.2010, 09:50

Die untransformierte Vertexposition muss mit der Weltmatrix des Objektes multipliziert werden, zu der der Vertex gehört. Damit wird er in den Worldspace gebracht. Danach muss er mit der Sicht- und Projektionsmatrix des Lichts transformiert werden. Nach einer Division der daraus resultierenden xy-Koordinaten durch die w-Koordinate kannst du die Formeln anwenden, die in den letzten beiden Zeilen deines Quelltextes stehen.

3

14.02.2010, 17:58

Danke sehr für deine schnelle Antwort, es klappt jetzt.
Ich hatte
a) Die Division vergessen, und
b) beim Vergleich noch den falschen Vektor genommen :oops:

Danke nochmal!

Werbeanzeige