PDA

View Full Version : Risse in der Skybox


MarianSchedenig
18-05-2004, 18:05
Unsere Skybox hat Risse!

http://skydoo.no-ip.org/pics/skybox.png (489kb)

Die Skybox ist ein simpler Würfel (12 Triangles), der mit CW Backface Culling von innen gezeichnet wird. Im Bild sieht man drei schwarze Linien an den Kanten zwischen Skybox-Boden und -Seiten.

Auch sichtbar sind einzelne schwarze Punkte im linken unteren Bereich. Das sind Artefakte des Shadow Volumes. Letzteres wird folgendermassen gezeichnet: Color Buffer deaktivieren, Stencil aktivieren und mit CCW Backface Culling das Shadow Volume zeichnen, Stencil jeweils um 1 erhöhen. Dann Volume mit CW Culling zeichnen und Stencil um 1 erniedrigen. Am Schluß sollte der verbleibende "echte" Schatten im Stencil Buffer stehen und an diesen Stellen wird er gezeichnet (Fullscreen-Face mit Stencil-Op >0).

Unser Verdacht ist nun, daß die "Back Faces" der Polygone (also der "hintere Teil" des Shadow Volumes und die Seiten der von innen gezeichneten Skybox) geringfügig kleiner gezeichnet werden als die Front Faces. Ist das denn normal, und kann man das umgehen?

Danke,
Marian.

MarkusL
18-05-2004, 20:59
Setze beim initialisieren der Skybox Textur die Wrap-Werte folgendermasen:

glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

Dann sollten die Risse verschwinden. Mehr Infos sind unter: http://home.planet.nl/~monstrous/skybox.html

Chuck
19-05-2004, 00:14
mal vorweg ich hab shadow volumes selbst noch nicht implementiert (und zz hab ich den algorithmus auch nicht komplett im kopf) und deshalb ist folgendes reine spekulation :)

jetzt zu der vermuting: habt ihr eigentlich die z-writes deaktiviert? falls nicht denk ich sollte man das machen, weil das ganze irgendwie beinahe danach aussieht, als ob die pixel die an den polygonkanten der shadowvolumes gerastert werden nicht so recht wissen ob sie da sein sollen oder nicht :) (geht mit glDepthMask)

die ränder an der skybox wurden ja bereits im vorigen posting aufgeklärt denk ich :) (der texture clamp mode ist da wichtig...)

MarianSchedenig
19-05-2004, 03:01
glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

Dann sollten die Risse verschwinden.

Super, das war's - danke!

Mehr Infos sind unter: http://home.planet.nl/~monstrous/skybox.html

Wenn ich bloß auf das Wort "seams" gekommen wäre...dann hätt' ich auch selber googeln können. ;)

jetzt zu der vermuting: habt ihr eigentlich die z-writes deaktiviert? falls nicht denk ich sollte man das machen, weil das ganze irgendwie beinahe danach aussieht, als ob die pixel die an den polygonkanten der shadowvolumes gerastert werden nicht so recht wissen ob sie da sein sollen oder nicht :) (geht mit glDepthMask)

Ach verdammt, hatte ich tatsächlich übersehen! Jetzt brauchen wir auch das WRAP beim Stencil Write nicht mehr...hab mich eh schon gewundert, warum das nötig war.

die ränder an der skybox wurden ja bereits im vorigen posting aufgeklärt denk ich :) (der texture clamp mode ist da wichtig...)

Fieserweise hat das Ergebnis in beiden Fällen gleich ausgeschaut, darum dachte ich an eine gemeinsame Ursache und bin auf die back faces gekommen...
:D