Seite 1 von 1
Problem mit OpenGL Beleuchtung
Verfasst: 8. September 2009 15:53
von kert
hi,
ich habe komische Effekte auf der Oberfläche meines gerenderten Modells, wenn ich die Kanten nicht zeichne, sondern nur die Oberfläche mit angeschaltetem Licht.
Am besten ist das auf dem Screenshot im Anhang zu erkennen - obwohl die Kanten nicht mitgerendert werden, kann man die auf eine seltsame Art und Weise sehen.
Ich habe mir eine Lichtquelle definiert, die sich auf der z-Achse befindet: pos(0,0,1) und folgende weitere Einstellungen besitzt:
[code]
diffuse_R=1;diffuse_G=1;diffuse_B=1;diffuse_A=1
ambient_R=0;ambient_G=0;ambient_B=0;ambient_A=1
specular_R=1;specular_G=1;specular_B=1;specular_A=1
[/code]
Woran kann das liegen, dass ich solche Effekte bekomme? Es passiert auch nicht bei jedem Modell, was ich mir ansehe... Kann sowas passieren, wenn die Lichtquelle innerhalb des Objekts liegt?
Bin für brauchbare Tipps sehr dankbar!

Verfasst: 8. September 2009 15:56
von Exasperation
ALso ich hab zwar keine Ahnung von GL, aber ich hab da so ne Vermutung... Meinst du mit Kantne, die ganzen Linien, die über die Oberfläche laufen? Kann es einfach sein, dass dadurch dass die Kanten nicht gerendert werden, du einfach durch die Kanten durchschaust?

Also dass da einfach Lücken zwischen den Flächen sind wo ja sonst die Kanten laufen würden?
Verfasst: 8. September 2009 15:59
von kert
Ich glaube nicht, dass das das Problem ist. Es sieht ja in Ordnung aus, wenn ich das Licht nicht eingeschaltet habe.
Mir ist aber noch aufgefallen, dass es in der Nähe der Oberfläche ziemlich flackert, wenn ich das Licht an habe und rotiere...
Verfasst: 9. September 2009 10:50
von kert
Ich habe jetzt herausgefunden, wie diese Effekte zustande kommen... Es liegt daran, dass ich ein Volumenmodell mit Hexaedern rendere, die sich in OpenGL aus QUADS zusammensetzen. Die Effekte bzw. das Flackern entsteht durch die Überlappung der Quads an den Rändern.
Hat jemand eine Idee, wie ich diese Problem lösen kann, ohne ein Oberflächenmodell zu rendern?
Verfasst: 9. September 2009 10:55
von Curtis Newton
kert hat geschrieben:Ich habe jetzt herausgefunden, wie diese Effekte zustande kommen... Es liegt daran, dass ich ein Volumenmodell mit Hexaedern rendere, die sich in OpenGL aus QUADS zusammensetzen. Die Effekte bzw. das Flackern entsteht durch die Überlappung der Quads an den Rändern.
Hat jemand eine Idee, wie ich diese Problem lösen kann, ohne ein Oberflächenmodell zu rendern?
GL_QUAD_STRIP? Ist eh schneller.
C.
Verfasst: 9. September 2009 11:38
von kert
hmmm. die punkte der flächen meiner hexaeder sind aber alle in einer anderen reihefolge definiert, als die die ich für GL_QUAD_STRIP brauche...
gibt es nicht irgendeine lösung in richtung buffering?
Verfasst: 10. September 2009 14:13
von kert
Ich sage nur Z-Fighting... Das Problem habe ich jetzt mit Hilfe eines Offsets behoben:
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glPolygonOffset(0.0005f, 0.f);
renderObjects();
glDisable(GL_POLYGON_OFFSET_FILL);
Die Effekte konnte ich so beheben, allerdings habe ich nun ein ähnliches Problem beim rüberrendern von Linien bzw. Punkten.
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-0.5f, 0.f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
renderLines();
glDisable(GL_POLYGON_OFFSET_LINE);
Mit dem Offset von -0.5f für Linien kann ich die Linien auf der Oberfläche wieder gut erkennen, nur leider kommt es zu "Durchschimmer"-Effekten... (siehe Bild)
Hat jemand eine Idee oder Erfahrung mit den Offset-Werten, sprich: auf welche Werte man die am besten setzt?