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

81

24.08.2011, 12:57

Ich rate mal ins Blaue und sag: Du verwendest (0 1 0) als Up-Vektor für deine Lightmatrix. Wenn die Lichtquelle genau über dem Ursprung liegt sind Up-Vektor und Lookat-Vektor kollinear und deine Lightmatrix kollabiert.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

82

24.08.2011, 13:00

Zitat

Verschwindet der Schatten ab einem gewissen Winkel einfach, oder wie?


Ich denke dot hat die Antwort.

Zitat

Ich rate mal ins Blaue und sag: Du verwendest (0 1 0) als Up-Vektor für deine Lightmatrix. Wenn die Lichtquelle genau über dem Ursprung liegt sind Up-Vektor und Lookat-Vektor kollinear und deine Lightmatrix kollabiert.


Ja stimmt, muss ich dazu den lookup ändern wenn die Lichtquelle drüber liegt? Oder kann man das an der Matrix direkt ändern?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

83

24.08.2011, 13:02

Du musst einen richtigen Up-Vektor verwenden und nicht einfach nur (0 1 0)...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

84

24.08.2011, 13:04

??? Was ist denn ein richtiger Up-Vektor? Ich dachte das richtet das Koordinaten System nur an der Angegeben Achse nach "oben" aus...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

85

24.08.2011, 13:07

Der Up-Vektor definiert wo für die Kamera "oben" ist, legt also die Rotation der Kamera um die Blickrichtung fest. Wenn die Kamera in Richtung (0 -1 0) blickt, dann kann (0 1 0) nichtmehr funktionieren...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

86

24.08.2011, 13:09

Zitat

Der Up-Vektor definiert wo für die Kamera "oben" ist, legt also die Rotation der Kamera um die Blickrichtung fest.


Ja so hab ich das auch verstanden, aber was ist falsch daran Y nach oben zu legen? Muss ich also jetzt überprüfen ob die Lichtquelle genau über dem Object liegt (x, y = 0) und dann den Up Vektor ändern? Ich wüste gerne was du mit richtig meinst...

[EDIT]

Hier nochmal das Programm.

Und: Kann man die Größe einer Textur nachträglich ändern, sodass sich die Shadowmap an die Auflösung neu anpassen kann (wenn man z.B. das Fenster neu skaliert)?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (24.08.2011, 13:17)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

87

24.08.2011, 13:21

Die Viewmatrix beschreibt ein Koordinatensystem, in dem die Kamera im Ursprung liegt und entlang der positiven z-Achse blickt. Angenommen du bist die Kamera. Der Up-Vektor ist dann jene Richtung (in Weltkoordinaten), in die deine Halswirbelsäule zeigt. Wenn du nach unten schaust, zeigt deine Halswirbelsäule dann in Richtung (0 1 0)? Wenn die Antwort ja ist, solltest du wohl schnellstmöglichst einen Arzt aufsuchen ;)

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

88

25.08.2011, 11:24

Das heißt? Up-Vektor ändern? Ich probiers einfach ^^

Achja:

Und kann man die größe der Textur nachträglich ändern oder muss die dann neu erstellt werden?

So, hier mal mit PCF:


(Link)


Links mit GL_LINEAR rechts mit GL_NEAREST. Problem ist das self-shadowing :/
So sieht der Fragment jetzt aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
uniform sampler2D texture0;
uniform sampler2DShadow shadowMap0;

uniform float xPixelOffset;
uniform float yPixelOffset;

in vec4 shadowCoord;
in vec2 texCoord0;

out vec4 color;

float shadowmapping(vec2 offset){
    return textureProj(shadowMap0,
                       shadowCoord+vec4(offset.x*xPixelOffset*shadowCoord.w, 
                                        offset.y*yPixelOffset*shadowCoord.w,
                                        0.0,
                                        0.0));
}

void main(void){    
    color = texture(texture0, texCoord0.st);
    
    float shadow = 1.0;

    if(shadowCoord.w > 0.0){
        float x, y;
        
        for(y = -1.5; y <= 1.5; y += 1.0){
            for(x = -1.5; x <= 1.5; x += 1.0){
                shadow += shadowmapping(vec2(x, y));
            }
        }

        shadow /= 16.0;
    }

    color *= shadow;
}


[EDIT]

Achja das self-shadow Problem hat sich gelöst, einfach mal Doku gelesen:

Quellcode

1
2
3
4
5
return textureProj(shadowMap0,
                       shadowCoord+vec4(offset.x*xPixelOffset*shadowCoord.w, 
                                        offset.y*yPixelOffset*shadowCoord.w,
                                        -0.005,                                                     // <------------
                                        0.0));


DANN NURNOCH: Und kann man die größe der Textur nachträglich ändern oder muss die dann neu erstellt werden?

und ich bin zufrieden :)

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »DeKugelschieber« (25.08.2011, 12:32)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

89

25.08.2011, 12:38

In OpenGL kannst du einfach nochmal glTexImage2D() aufrufen, dann wird ne neue Textur erzeugt. Die Größe einer vorhandenen Textur ändern geht nicht. Zumindest wär mir das sehr neu.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

90

25.08.2011, 14:13

Und die alte wird gelöscht und verursacht kein Speicherloch? Dann ist ja alles klar :) vielen dank.

Werbeanzeige