Problem mit OpenGL Beleuchtung

Alles rund um die Programmierung mit Qt
Antworten
kert
Beiträge: 15
Registriert: 10. Oktober 2008 08:32

Problem mit OpenGL Beleuchtung

Beitrag 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! :)
Dateianhänge
Screenshot mit Beleuchtungsproblem
Screenshot mit Beleuchtungsproblem
lighting.png (11.28 KiB) 4008 mal betrachtet
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag 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?
kert
Beiträge: 15
Registriert: 10. Oktober 2008 08:32

Beitrag 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...
kert
Beiträge: 15
Registriert: 10. Oktober 2008 08:32

Beitrag 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?
Curtis Newton
Beiträge: 122
Registriert: 11. Juni 2008 18:39

Beitrag 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.
kert
Beiträge: 15
Registriert: 10. Oktober 2008 08:32

Beitrag 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?
kert
Beiträge: 15
Registriert: 10. Oktober 2008 08:32

Beitrag 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?
Dateianhänge
Auf der Rückseite der Geometrie befindet sich eine runde Geometrie, die hier durchschimmert, aufgrund des gewählten Offsets
Auf der Rückseite der Geometrie befindet sich eine runde Geometrie, die hier durchschimmert, aufgrund des gewählten Offsets
geometry_offset.png (1.85 KiB) 3920 mal betrachtet
Antworten