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

51

07.08.2011, 12:01

Ok, das heißt deine Matritzen werden als column-major interpretiert wenn transpose false ist.

C-/C++-Quelltext

1
2
3
4
5
6
float M[16] = {
  0.5f, 0.0f, 0.0f, 0.0f,
  0.0f, 0.5f, 0.0f, 0.0f,
  0.0f, 0.0f, 0.5f, 0.0f,
  0.5f, 0.5f, 0.5f, 1.0f
};

entspricht dann der Matrix

Quellcode

1
2
3
4
0.5  0.0  0.0  0.5
0.0  0.5  0.0  0.5
0.0  0.0  0.5  0.5
0.0  0.0  0.0  1.0

Bleibt die Frage was shadowMatrix.getArray() genau liefert.

Doch, aber nicht so wie du es oben im rechten Bild siehst. Da wirft die Box den Schatten nicht nur auf den Boden und auf die Seiten die vom Licht weg fallen sondern auch oben drauf (die gelbe Kugel ist die Lichtquelle).

Ähm, ja. Ich kann nur zum 3ten Mal sagen: Teste doch bitte mal das projective Texturemapping unabhängig von der Shadowmap. Im Moment gibts einfach soviele mögliche Fehlerquellen dass man absolut nicht sagen kann was wo wie genau falsch läuft. Also: Nimm doch bitte mal irgendeine normale Textur und schau dass du die richtig auf die Szene projiziert bekommst. Über die Korrektheit irgendwelcher Schattenwürfe zu diskutieren is so jedenfalls völlig sinnfrei, wenn noch nichtmal sicher ist dass die Berechnung der Texturkoordinaten überhaupt funktioniert.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (07.08.2011, 12:10)


DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

52

07.08.2011, 19:34

Zitat

Bleibt die Frage was shadowMatrix.getArray() genau liefert.


Einfach einen Zeiger auf das Array damit ich die Matrix einlesen kann. Also kannst du dir das als float[16] vorstellen.

Ja die Berechnung ist eben noch das Problem, wenn ich die Shadowmap so render hab ich ja schön die Grauwerte. Hier mal mit einer extra Textur, die du oben Rechts siehst:


(Link)


Zitat

entspricht dann der Matrix


Heißt das es so richtig ist?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

53

07.08.2011, 22:53

Zitat

Bleibt die Frage was shadowMatrix.getArray() genau liefert.

Einfach einen Zeiger auf das Array damit ich die Matrix einlesen kann. Also kannst du dir das als float[16] vorstellen.

Ja das war mir klar und beantwortet die Frage nicht. Die Frage ist: Wie ist dieses Array denn zu interpretieren? Stehen da die Zeilen oder die Spalten nacheinander drin!?

Hier mal mit einer extra Textur, die du oben Rechts siehst

Vergiss doch mal die Schattenberechnung und render einfach nur die Textur. Solange du da nicht den Smiley auf die Szene projiziert siehst funktioniert es nicht und fertig. Und solange nichtmal das funktioniert hat es keinen Sinn irgendwas mit Schatten anzufangen. Das einzige was du damit erreichst ist, dass du die Anzahl der möglichen Fehlerquellen um ein paar Größenordnungen nach oben treibst.

Heißt das es so richtig ist?

Sieht es denn richtig aus? Das worauf du dich da beziehst war ein Beispiel mit dem ich erläutern wollte worauf ich bei meiner Fragerei hinauswollte. Neuer Versuch.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (07.08.2011, 23:02)


DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

54

08.08.2011, 09:47

Zitat

Ja das war mir klar und beantwortet die Frage nicht. Die Frage ist: Wie ist dieses Array denn zu interpretieren? Stehen da die Zeilen oder die Spalten nacheinander drin!?


Also es ist eindimensional, die Indexe stehen von links nach rechts, also wird Zeilenweise eingelesen:

0 1 2 3 -> nächste Zeile

Definition ist: float values[16];

Ist dann glaube ich mal Row-major.

Zitat

Vergiss doch mal die Schattenberechnung und render einfach nur die Textur. Solange du da nicht den Smiley auf die Szene projiziert siehst funktioniert es nicht und fertig. Und solange nichtmal das funktioniert hat es keinen Sinn irgendwas mit Schatten anzufangen. Das einzige was du damit erreichst ist, dass du die Anzahl der möglichen Fehlerquellen um ein paar Größenordnungen nach oben treibst.


Also erstmal mit diesem Fragment Shader:

Quellcode

1
2
3
4
5
6
7
8
void main(void){
    color = texture(texture0, texCoord0.st);

    vec4 shadowTextureCoord = normalize(shadowCoord);
    vec4 sc = texture(shadowMap0, shadowTextureCoord.st);
    
    color *= sc;
}



(Link)


Dann ohne normalize auf shadowCoord:


(Link)


und


(Link)


Beim oberen von den beiden wird die Textur gar nicht angezeigt, da steht sie senkrecht zum Boden, also x = 0 z = 0 und y > 0. Beim zweiten hab ich sie einfach mal ein wenig auf der x-Achse verschoben.

Damit du das vielleicht mal besser siehst hier das als zip:

http://marvinblum.de/media/download/shadowmapping.zip

Du kannst die Lichtquelle mit WASD verschieben.

Achja das Licht zeigt immer auf 0, 0, 0.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

55

09.08.2011, 11:11

Ja es wird wohl an den Texturkoordinaten liegen, nur ich weiß nicht wie ich die sonst berechnen soll...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

56

09.08.2011, 11:36

Wenn du die Texcoords normalisieren musst um was zu sehen ist schonmal grundsätzlich was faul. Ich hab mir mal angeschaut wie deine Projektion sich verhält und es sieht mir falsch aus. In deinem Shader hast du offenbar vergessen die Texcoords durch w zu teilen. Aber auch wenn ich das schnell mal dort reinschreib wirds nicht besser. Ich kann nur weiter vermuten dass deine shadowmatrix0 falsch ist, auch wenn ich leider nicht genau sagen kann wo der Fehler liegt. Versuch vielleicht wirklich einfach mal die Matrix als Transponierte zu übergeben (bei glUniformMatrix() transposed auf GL_TRUE setzen) und schau ob was besser wird.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

57

09.08.2011, 12:09

Zitat

Ich hab mir mal angeschaut wie deine Projektion sich verhält und es sieht mir falsch aus.


Wie meinst du das? Aufgesetzt wird sie so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, 1.0*windowSize[0]/windowSize[1], 2, 100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(lig.position[0], lig.position[1], lig.position[2], // variabel
              lig.lookat[0], lig.lookat[1], lig.lookat[2], // 0 0 0
              view[6], view[7], view[8]); // 0 1 0


Zitat

Versuch vielleicht wirklich einfach mal die Matrix als Transponierte zu übergeben (bei glUniformMatrix() transposed auf GL_TRUE setzen) und schau ob was besser wird.



(Link)


Naja... Ich glaube ich erschieß mich einfach :O

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

58

09.08.2011, 12:13

Wie meinst du das? Aufgesetzt wird sie so:

Und dann holst du dir die Werte einfach mit glGetFloatv()? Sehr merkwürdig dass das nicht klappt...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

59

09.08.2011, 12:38

Ja ich verzweifel langsam^^ Gibts das in irgendeinem Buch nachzulesen? Möglichst ohne GL_TEXTURE_MATRIX?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

60

10.08.2011, 09:19

Der Effekt is doch interessant XD
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]

Werbeanzeige