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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

23.09.2012, 23:26

Ok, dann hab ich noch was zu denken für dich: Wenn du stattdessen eine perspektivische Projektionsmatrix verwendest, musst du nirgendwo irgendeine Bildauflösung oder sonst was angeben. Wär das nicht komisch, wenn du's bei der orthogonalen plötzlich müsstest!?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

24.09.2012, 06:52

Na ja, bei glOrtho gibt man alle 6 Clipping-Planes des untransformierten Frustums an. Also gibt er damit schon irgendwie auf eine Art und Weise die Auflösung an ;) Die hängt aber natürlich trotzdem noch von anderweitigen Transformationen ab, wie Position, Rotation, Skalierung, etc.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

13

24.09.2012, 12:33

Zitat

Wär das nicht komisch, wenn du's bei der orthogonalen plötzlich müsstest!?


Stimmt, ich hab auch selbst schon gesagt das das unlogisch ist.
Ich weiß es ehrlich gesagt nicht da ich mich das noch nie gefragt habe, aber ist es nicht so das sich die Fläche auf die die Szene projiziert wird über das near plane definiert und die Auflösung dann vom Viewport abhängt?

Ich muss halt nur wissen wie ich an die Planes für ein Viewfrustum komme das gerade Außenplanes hat. Könnt ihr mir vielleicht mal eine Erklärung geben in dem der Aufbau und der Verhältnisse aller Matrizen einmal erklärt ist (Link)? Ich find da immer nur Erklärungen wie man es machen soll, aber nicht warum. Und eigentlich glaube ich das für die meisten Dinge zu wissen... aber der Zusammenhang^^

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

24.09.2012, 12:44

Die Doku zu glOrtho erklärt genau, was es macht. Von Prinzip her eine Identität mit Skalierung.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

24.09.2012, 12:48

Alles, was du beim Shadowmapping machst, ist doch einfach nur, die Szene aus Sicht der Lichtquelle zu rendern. Also verwend einfach mal für die normale Ansicht deine Licht Matrizen und schau was rauskommt, spiel damit rum, denk drüber nach. Sobald das, was du siehst, dem entspricht, was dein Licht sehen soll, macht es Sinn, mit den Schatten weiterzumachen. Solange dem nicht so ist, sind deine Matrizen daneben und es kann schonmal nur Mist rauskommen...

16

24.09.2012, 14:55

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

Du brauchst auch keinen. Einfach ganz normal Rendern, du musst halt nur am Ende irgendwie deinen Z-Wert im Framebuffer haben.
Am besten natürlich einen möglichst einfachen Shader, der keine Farben berechnet, weil es schneller geht. Vertextransformation brauchst du natürlich, damit die Ergebnisse korrekt sind. Der Rest ist ansich egal.

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.

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.

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.
Lieber dumm fragen, als dumm bleiben!

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

17

24.09.2012, 21:31

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.

Und das funktioniert bei dir? Ich dachte man gibt mit den ersten 4 Parametern die Koordinaten für die äußeren clipping planes an. Wenn ich das bei mir probiere sieht man nichts (mit 4096), was ja auch irgendwie logisch ist ^^

Zitat

Sobald das, was du siehst, dem entspricht, was dein Licht sehen soll, macht es Sinn, mit den Schatten weiterzumachen.


Mit perspektivischer Projektionsmatrix passt es ja, also wenn ich es rendere sieht es richtig aus. Nur welche Parameter soll ich glOrtho()/ortho() übergeben? Wie bekomme ich die Planes richtig? Mit -1, 1, -1, 1, 10, 10 wird z.B. die ganze Szene auf das volle Fenster skaliert. Ich hab auch schon gegooglet, aber wirklich, ich verstehs einfach nicht. Hat jemand mal eine Grafik davon? Wie so ein paralleles Frustum aussieht und wie ich evt. an die Koordinaten für die Planes komme?
Ich hab ein wenig rumprobiert und mit 3.1 passt es etwa, solange die Lichtquelle bleibt wo sie ist...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

24.09.2012, 21:43

Was passt mit 3.1 etwa? Vergiss erstmal die Schatten, mach es so:

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.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

19

24.09.2012, 22:19


(Link)


Mich interessieren die roten Werte. Mit der perspektivischen links sieht es ja wohl richtig aus. Die Shadowmap hab ich hier nicht gerendert. die sieht genauso aus wie die beiden Szenen, nur halt mit den depth Werten.

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;
    }
}

Passt für 2D rendering wenn ich die Auflösung des Fensters nehme und die left und bottom planes auf 0 setze.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

24.09.2012, 22:25

Wunderbar, das sieht ja schon gut aus!?

Werbeanzeige