Warum funktioniert mein Lichtmodell nicht mehr richtig, nachdem ich die Szene skaliert habe?
-
Hallo,
habe genau das Problem welches in der 3DSource.de beschrieben wird
18.090 Warum funktioniert mein Lichtmodell nicht mehr richtig, nachdem ich die Szene skaliert habe ?
Die OpenGL kann nur mit normalisierten Normalenvektoren arbeiten (Länge = 1.0). Da die Normalenvektoren genauso wie jede andere Koordinate durch die ModelView Transformation verändert werden, kann sich durch ein glScale() auch die Länge der Normalenvektoren ändern und somit die Beleuchtung der Szene verfälschen.
Seit OpenGL 1.1 kann die Normalisierung der Vektoren auch automatisch durch den Befehl (GL_NORMALIZE) aktiviert werden, hat durch die notwendige Quadratwurzelberechnung aber auch einen negativen Einfluss auf die Performance des Programms.
Die zweite Möglichkeit steht ab OpenGL 1.2 bzw. als Extension auch für OpenGL 1.1 in Form von glEnable(GL_RESCALE_NORMAL) zur Verfügung. Diese Berechnung ist weniger aufwendig als der erstgenannte Befehl, da hier die durchgeführte Skalierung durch einfache Multiplikation rückgängig gemacht wird.
Ist der Verzicht auf Skalierung nicht möglich, sollte im Falle gleichzeitiger Verzerrung der Objekte (verschiedene Faktoren für glScale) trotzdem auf die korrekte Berechnung der Normalenvektoren mittels GL_NORMALIZE zurückgegriffen werden.
glEnable(GL_NORMALIZE) funktioniert leider nicht
ich weis nicht warum, habe es in der init() aufgerufen
nachdem das nicht geklappt hat in der draw() beides will nichtdas GL_RESCALE konnte ich nicht ausprobieren
ich finde die OpenGL Version 1.2 nicht zum download.
Suche schon lang nach der 2.1 wo kann man die runterladen?gibt es einen anderen Weg dem Problem aus dem Weg zu gehen
weil beide Befehle sehr Rechen intensiv sind!Gruß Matthias
-
glEnable(GL_NORMALIZE) funktioniert leider nicht
ich weis nicht warumDas wird Dir zwar leider keine Hilfe sein aber Du machst wohl was falsch.
Schau mal in glext.h.