Specular Highlighting will nicht
-
Cpp_Junky schrieb:
NormalVector.nX = N1.nX * N2.nX; NormalVector.nY = N1.nY * N2.nY; NormalVector.nZ = N1.nZ * N2.nZ; }
schaut nach ner art dotproduct aus, also eher falsch.irgendwo hier im forum wurden vor kurzen zig beispiele für die berechnung der normale gegeben, pick dir eine heraus.
rapso->greets();
-
rapso schrieb:
irgendwo hier im forum wurden vor kurzen zig beispiele für die berechnung der normale gegeben
Angeblich findet man sie sogar bei google...
Bye, TGGC (Just think about it)
-
und nicht vergessen das renderstate D3DRS_SPECULARENABLE auf true zu setzen...
-
Es ist OpenGL
-
Ok, die Normalen stimmen jetzt auch. Hab im Model-Editor eine Option gefunden die Normalen direkt in die Model-Datei zu exportieren. Von daher sollten die wohl stimmen
Das Lighting an sich sieht jetzt auch schon wesentlich besser ausMein "Highlighting" klappt aber immernoch nicht. Vielleicht liegts doch an
den Materialien
Das müsste doch ziemlich "highlighten" () oder ?
Material Code:Ambient = { 0.3, 0.3, 0.3, 1.0 } Diffuse = { 0.7, 0.7, 0.7, 1.0 } Specular = { 0.5, 0.5, 0.5, 1.0 } Emissive = { 0.0, 0.0, 0.0, 0.0 } Shininess = 60
-
Cpp_Junky schrieb:
Es ist OpenGL
oh...
-
Die Materialien sehen gut aus so. Zum Debugen würde ich aber pro Lichtart eine spezielle Farbe wählen (z.B. Spekular=Blau), so siehst Du sofort was Sache ist..
-
Hab mein spekulares Licht mal Rot gefärbt. Das Model wird davon beleuchtet. Es "highlighted" aber trotzdem nicht, sondern wird nur etwas heller als der Rest. Müssen meine Texturen vielleicht irgendeine bestimmte Eigenschaft besitzen, damit die "Highlight Spots" auf die Textur kommen ?
-
Ne, mit der Textur hat das nichts zu tun.
Hm, mach mal die Shininess etwas mehr, z.B. 128.0Naja, je nach Model sieht der "Glanzeffekt" eh nicht allzugut aus, dazu müsste man Phong Shading nehmen.
Mach sonst mal n'Screenshot, damit wir sehen können wies aussieht...
-
Hmmm, ich hab mittlerweile durch endloses rumgeforsche rausgefunden das die Highlight-Spots nur bei untexturierten Flächen möglich sind. OpenGL bügelt den Effekt wohl durch die Textur vollkommen über. Möglich soll es aber über eine Extension sein, mit der man die Reihenfolge von Licht und Textur Rendering ändern kann. Oder man benutzt gleich Environmental-Mapping
-
Cpp_Junky schrieb:
Hmmm, ich hab mittlerweile durch endloses rumgeforsche rausgefunden das die Highlight-Spots nur bei untexturierten Flächen möglich sind. OpenGL bügelt den Effekt wohl durch die Textur vollkommen über. Möglich soll es aber über eine Extension sein, mit der man die Reihenfolge von Licht und Textur Rendering ändern kann. Oder man benutzt gleich Environmental-Mapping
Hmm, jo OpenGL kombiniert ja das Licht mit der Textur, d.h. ein restlos weisser Fleck kriegste nicht hin. Aber nen Glanzeffekt lässt sich trotzdem ganz gut realisieren.
Wenn Du die Textur mit dem Licht "übermalen" willst, dann zeichne erst dein Licht alleine und addiere dann in einem zweiten pass die Textur dazu.Was ist das für ne Extension? Das näm mich auch Wunder, haste nen Link dazu?
-
durito schrieb:
Cpp_Junky schrieb:
Hmmm, ich hab mittlerweile durch endloses rumgeforsche rausgefunden das die Highlight-Spots nur bei untexturierten Flächen möglich sind. OpenGL bügelt den Effekt wohl durch die Textur vollkommen über. Möglich soll es aber über eine Extension sein, mit der man die Reihenfolge von Licht und Textur Rendering ändern kann. Oder man benutzt gleich Environmental-Mapping
Hmm, jo OpenGL kombiniert ja das Licht mit der Textur, d.h. ein restlos weisser Fleck kriegste nicht hin. Aber nen Glanzeffekt lässt sich trotzdem ganz gut realisieren.
Wenn Du die Textur mit dem Licht "übermalen" willst, dann zeichne erst dein Licht alleine und addiere dann in einem zweiten pass die Textur dazu.Was ist das für ne Extension? Das näm mich auch Wunder, haste nen Link dazu?
multiplizieren,nicht addieren, sonst ist das endergebis unnatürlich hell
-
Man, is dieses OGL scheisse...
Aber mal im Ernst, das muss doch gehen! Sicher das du es nicht doch irgendwo selbst verzockst?
Bye, TGGC (Just think about it)
-
@otze: ich mein schon addieren, er will ja wohl das Spekularlicht "unnatürlich hell" sprich weiss. Also nur den Glanzeffekt zeichnen und dann zum "normalen Bild" addieren.
@TGGC: stimmt, D3D hat n'ganz anderes Lichtmodell
-
@TGGC:
Ne is wirklich so. Man kann es nur über Umwege lösen - Zwei Rendering, Environmental-Mapping, Textur drüberblenden, diese komische Erweiterung o.ä.Kannst das Problem hier direkt bei opengl.org nachlesen:
http://www.opengl.org/resources/faq/technical/texture.htm
(FAQ Nummer 21.040)
-
Cpp_Junky schrieb:
@TGGC:
Ne is wirklich so. Man kann es nur über Umwege lösen - Zwei Rendering, Environmental-Mapping, Textur drüberblenden, diese komische Erweiterung o.ä.Kannst das Problem hier direkt bei opengl.org nachlesen:
http://www.opengl.org/resources/faq/technical/texture.htm
(FAQ Nummer 21.040)
Aber da steht doch, daß man einfach statt GL_SINGLE_COLOR GL_SEPARATE_SPECULAR_COLOR als Parameter übergeben muß!??!
Die anderen Methoden sind doch nur dafür, wenn man kein OpenGL 1.2 nutzen will.
Und jede GraKa die mehr als 30 Polys/Sek. darstellen kann (und jünger als 5 Jahre ist), hat auch OpenGL 1.2 Treiber.
-
Hab ich schon probiert.
Muss ich dann andere Header oder so einbinden ?
Bei mir krieg ich den Fehler das GL_SEPARATE_SPECULAR_COLOR nicht definiert ist. (Hab hier eine Win2000 Maschine mit einer Radeon7000)
-
Wahrscheinlich brauchst Du einfach neuere Header, oder?!
Du nutzt wahrscheinlich die, die bei der IDE dabei waren, hm?!
Die sind doch meistens steinalt.
Check' doch mal: In der Header steht doch oben ein #define mit der Versionsnr.!
-
Tja, wie ich schon öfters sagte: Bei OGL kommen die Probleme erst, wenn man ein bissl mehr als ein rotierendes Dreieck macht...
Bye, TGGC (Just think about it)
-
@TGGC: Rotierende Dreiecke sind der Anfang von allem...! :p
Naja. Zugegeben: Häufig auch das Ende...