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
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Zitat
Wär das nicht komisch, wenn du's bei der orthogonalen plötzlich müsstest!?
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
@Jonathan: Danke, bis zu deinen Matrizen kenn ich alles und hab es auch in etwa so. Das Tutorial hat keinen expliziten Shader für die Shadowmap.
Darf ich fragen wie du genau auf
C-/C++-Quelltext
1 glOrtho(-ShadowMapSize, ShadowMapSize, -ShadowMapSize, ShadowMapSize, -4*ShadowMapSize, 4*ShadowMapSize);
kommst? Vor allem das 4*... verwirrt mich etwas.
Community-Fossil
Zitat
Hm, vermutlich wollte ich es symmetrisch haben, so genau weiß ich das gar nicht mehr. Die 4 kommt wohl einfach daher, dass zu viel Geometrie geclippt wurde.
Zitat
Sobald das, was du siehst, dem entspricht, was dein Licht sehen soll, macht es Sinn, mit den Schatten weiterzumachen.
Ich habe genau das getan, was dot sagt: Render die Szene normal mit deinen Shadowmapping Matrizen, dann siehst du ob sie stimmen und ob alles was rein muss in der Textur gelandet ist. Dann projiziere am besten diee Shadowmap auf die Szene anstatt direkt den Test auszuführen, dann siehst du, ob du die Texturkoordinaten richtig berechnest. Wenn das alles richtig funktioniert, kannst du den Schattentest machen.
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void mat4::ortho(int left, int right, int bottom, int top, float nearp, float farp){ mat4 m = mat4(); if(left != right && bottom != top && nearp != farp){ m.values[0] = 2/(float(right-left)); m.values[5] = 2/(float(top-bottom)); m.values[10] = -2/(farp-nearp); m.values[12] = -(float(right+left))/(float(right-left)); m.values[13] = -(float(top+bottom))/(float(top-bottom)); m.values[14] = -(farp+nearp)/(farp-nearp); m.values[15] = 1; *this *= m; } } |
Werbeanzeige