Auf Thema antworten

Hi!


In meinem 3D-Spiel habe ich schon vor einiger Zeit eine Skysphere (Skybox als Kugel) eingebaut. Keine Probleme macht es mir, auch Objekte dahinter zeichnen zu lassen, dafür reicht ja:

[code=Java]glDisable(GL_DEPTH_TEST);

...

//Skysphere wird gezeichnet

...

glEnable(GL_DEPTH_TEST);[/code]


Allerdings kamen heute 2 neue Probleme dazu:


1. Schatten auf Skysphere


Das Problem sollte nicht allzu groß sein. Ich arbeite ja mit Stencil-Buffer Schatten. (da hatte ich ja auch einige Probleme :D)

Vom Prinzip her müsste es ja eigentlich das gleiche sein, wie beim Depth-Buffer. Meine 2 Ansätze waren:

1.

[code=Java]glDisable(GL_DEPTH_TEST);

glDisable(GL_STENCIL_TEST);

...

glEnable(GL_STENCIL_TEST);

glEnable(GL_DEPTH_TEST);[/code]

Aber da kommt totaler Mist raus. Okay, als ich im Nachhinein nachgeschaut habe, wie ich die Schatten gemacht habe, ist es auch logisch, dass sowas rauskommt, da dann der Rest direkt in den Stencil-Buffer gezeichnet wird und somit als Schatten dargestellt wird.


2.

[code=Java]glDisable(GL_DEPTH_TEST);

glStencilMask(0);

...

glStencilMask(1);

glEnable(GL_DEPTH_TEST);[/code]

Sah zwar besser aus, allerdings wurden dann die Schatten nicht vollständig gezeichnet.


2. Antialiasing verursacht bläuliche Linien

Das viel wichtigere Problem ist, dass ich, wenn ich Antialiasing bei Linien mithilfe folgender Zeile einschalte:

[code=Java]glEnable(GL_LINE_SMOOTH);[/code]

haben die Linien, wenn ich den Himmel zeichnen lasse immer eine leicht bläuliche Färbung.

Wovon kommt das?


Anhang 1: mit Himmel, ohne Antialiasing

Anhang 2: mit Himmel, mit Antialiasing            <--- Linien leicht bläulich

Anhang 3: ohne Himmel, mit Antialiasing


mfg tdc



Oben