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

10.02.2010, 00:18

OpenGL: Warum ist Schatten von gluPerspective abhängig?

Hi Leute,
ich habe heute NeHe-Lektion 27 durchgearbeitet. Ich habe lange dafür gebraucht bis ich herausgefunden habe warum die Schatten nicht gleich funktioniert hat (dabei steht in der *letzte* Zeile von Lektion 27, daß man die Wert für "near clipping plane" eventuell anpassen muss *sigh* ).

Die Bilder zeigen wovon ich spreche (Orange Punkt oben ist die Lichtquelle):

gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.01f,100.0f);


(Link)


gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);


(Link)


Mich würde interessieren warum das so ist. Evtl. hat jemand von Euch ne Erklärung dafür.

Thanx!
Floh

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

2

10.02.2010, 00:21

Weil das Shadow-Rect so nah gezeichnet wird.

Quellcode

1
2
3
4
5
6
glBegin( GL_TRIANGLE_STRIP );
        glVertex3f(-0.1f, 0.1f,-0.10f);
        glVertex3f(-0.1f,-0.1f,-0.10f);
        glVertex3f( 0.1f, 0.1f,-0.10f);
        glVertex3f( 0.1f,-0.1f,-0.10f);
    glEnd();


Setz das auf dein Near-Clipping + 0.00001 und es geht mit jedem Wert.

LG
Alyx

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

3

10.02.2010, 00:24

Stencil-Shadows in der altmodischen Art funktionieren so, dass mit Hilfe der von den Dreieckskannten aus mit Lichtrichtung zu den Vertices gebildeten Shadow-Planes die Stencilwerte je nach Blickrichtung jeweils erhöht bzw. erniedrigt werden.

Überall dort, wo sie andere Objekte durchstechen, bleibt anschließend ein Wert größer dem Initialwert übrig, überall sonst der Initialwert, weil sie sich gegenseitig aufheben, da man dann immer vor und Rückseite sieht (128+1-1==128)

Am Ende zeichnet man ein Rechteck von der oberen linken zur unteren rechten Ecke des Bildschirms mit der Bedingung, dass es nur dort gezeichnet wird, wo der Wert größer dem Initialwert ist, sprich Schatten zu sehen sein soll.

Wenn das Rechteck natürlich vor dem Nearclipping-Plane liegt, kommt gar nichts, wie im zweiten Screenshot.

LG
Alyx

4

10.02.2010, 00:37

Zitat von »"Alyx"«

Weil das Shadow-Rect so nah gezeichnet wird.

Quellcode

1
2
3
4
5
6
glBegin( GL_TRIANGLE_STRIP );
        glVertex3f(-0.1f, 0.1f,-0.10f);
        glVertex3f(-0.1f,-0.1f,-0.10f);
        glVertex3f( 0.1f, 0.1f,-0.10f);
        glVertex3f( 0.1f,-0.1f,-0.10f);
    glEnd();


Setz das auf dein Near-Clipping + 0.00001 und es geht mit jedem Wert.

LG
Alyx
Ach... deswegen! Ich habe nicht mehr daran gedacht daß die "Schatten-Textur" in Wirklichkeit direkt vor die Nase gezeichnet wird.

Vielen Dank! Auch für die Erklärung danach.
cu Floh

Werbeanzeige