Parallan
Cadet 3rd Year
- Registriert
- Okt. 2006
- Beiträge
- 40
Ich versuch mit C++ und OpenGL ein Model in eine Szene zu laden, in der auch Licht gerendert wird. Dazu brauch ich die Normalen des Models beim Erstellen der Liste (die leider nicht in der Model-Datei enthalten sind), nach kurzer Suche hab ich folgende Methode gefunden (grob vereinfacht):
Das funktioniert auch alles, bis auf die Kleinigkeit, dass manche Normalen genau falsch rum sind, was zu Fehlern bei der Beleuchtung führt (bei Quadraten ist bei einem Dreieck die Normale Richtig, die andere Falsch).
Wenn ich Culling in OpenGL anschalte, ist alles korrekt (also, die Dreiecke sind alle im Uhrzeigersinn), außer der Beleuchtung.
Die eigentlich Frage ist: wie kann ich prüfen, ob die Normale in die richtige Richtung zeigt?
(meine Idee: man rendert das Dreieck aus Richtung der Normalen und prüft, ob es im Uhrzeigersinn gedreht ist (mir Fehlen leider die Techniken, um eine Methode zu erstellen, bzw. die bisherigen haben nicht funktioniert))
Parallan
Code:
vertex CalcNormal(vertex v1, vertex v2, vertex v3)
{
vertex temp_v1, temp_v2, temp_normal;
temp_v1 = v1-v0;
temp_v2 = v2-v0;
temp_normal = crossproduct(temp_v1, temp_v2);
return normalize(temp_normal);
}
Wenn ich Culling in OpenGL anschalte, ist alles korrekt (also, die Dreiecke sind alle im Uhrzeigersinn), außer der Beleuchtung.
Die eigentlich Frage ist: wie kann ich prüfen, ob die Normale in die richtige Richtung zeigt?
(meine Idee: man rendert das Dreieck aus Richtung der Normalen und prüft, ob es im Uhrzeigersinn gedreht ist (mir Fehlen leider die Techniken, um eine Methode zu erstellen, bzw. die bisherigen haben nicht funktioniert))
Parallan