Normalenberechnung
-
Hallo
wenn ich für einen Vektor seine Normale berechne ist das der Vektor, nur normalisiert.
Für eine korrekte Beleuchtung z.B. eines Würfels brauche ich aber die normalen auf dessen Flächen, die immer genau in irgendeine Achsrichtung zeigen.Was ist jetzt richtig, für jeden Vertex dessen Normale übergeben, oder eine pro
Quad???Gruss Peter
-
Das sind zwei unterschiedliche Konzepte: Per-Face-Normals und Per-Vertex-Normals. Was am Ende natürlich besser aussieht ist das Per-Vertex-Verfahren.
Das DGL-Wiki machte sich die Mühe das darzustellen. Links Per-Face und rechts Per-Vertex.
-
Danke, das Forum hier ist echt gut - hat mich die letzten 3 Tage weitergebracht
als vorher 2 Wochen mit Buch.Gruss Peter
-
Bedenke aber, dass die Normalen meistens normiert angegeben werden müssen, also mit Länge 1.
-
Hinweis schrieb:
Bedenke aber, dass die Normalen meistens normiert angegeben werden müssen, also mit Länge 1.
In OpenGL nicht, wie es in Direct3D aussieht weiss ich nicht.
-
dagute schrieb:
wenn ich für einen Vektor seine Normale berechne ist das der Vektor, nur normalisiert.
Das gilt nur fuer eine Kugel deren Zentrum am Nullpunkt liegt.
EOutOfResources schrieb:
Hinweis schrieb:
Bedenke aber, dass die Normalen meistens normiert angegeben werden müssen, also mit Länge 1.
In OpenGL nicht, wie es in Direct3D aussieht weiss ich nicht.
Selbstverstaendlich muessen Normalen in jeder API normalisiert sein.
Man kann die OpenGL Fixed Function Pipeline zwar explizit anweisen, das pauschal nochmal zu erledigen - aber besonders sinnvoll ist das natuerlich nicht...
-
hellihjb schrieb:
dagute schrieb:
wenn ich für einen Vektor seine Normale berechne ist das der Vektor, nur normalisiert.
Das gilt nur fuer eine Kugel deren Zentrum am Nullpunkt liegt.
EOutOfResources schrieb:
Hinweis schrieb:
Bedenke aber, dass die Normalen meistens normiert angegeben werden müssen, also mit Länge 1.
In OpenGL nicht, wie es in Direct3D aussieht weiss ich nicht.
Selbstverstaendlich muessen Normalen in jeder API normalisiert sein.
Man kann die OpenGL Fixed Function Pipeline zwar explizit anweisen, das pauschal nochmal zu erledigen - aber besonders sinnvoll ist das natuerlich nicht...das normalisieren ist noetig falls man eine transformation durchfuehrt die die laenge der normale aendert, entsprechend ist es fall abhaengig ob das sinnvoll ist.
-
rapso schrieb:
das normalisieren ist noetig falls man eine transformation durchfuehrt die die laenge der normale aendert, entsprechend ist es fall abhaengig ob das sinnvoll ist.
Und falls solch eine Transformation nicht durchgeführt wird? Dann sollten sie trotzdem eine Länge von 1 haben
Zitat aus Avoiding 16 Common OpenGL Pitfalls:
For OpenGL's lighting equations to operate properly, the assumption OpenGL makes by default is that the normals passed to it are vectors of length 1.0.
-
inter2k3 schrieb:
Und falls solch eine Transformation nicht durchgeführt wird? Dann sollten sie trotzdem eine Länge von 1 haben
...oder die automatische Normalisierung eingeschaltet werden
Rapso hat schon insofern Recht, dass eine Renormalisierung notwendig sein kann, meisstens gibt es aber eine elegantere Loesung.
-
inter2k3 schrieb:
rapso schrieb:
das normalisieren ist noetig falls man eine transformation durchfuehrt die die laenge der normale aendert, entsprechend ist es fall abhaengig ob das sinnvoll ist.
Und falls solch eine Transformation nicht durchgeführt wird? Dann sollten sie trotzdem eine Länge von 1 haben
das ist dir ueberlassen, gab spiele die specular simulierten indem sie die normalen der objekte skalierten (da in opengl phong nicht von der view direction abhaengt, faellt das nicht auf).
Zitat aus Avoiding 16 Common OpenGL Pitfalls:
For OpenGL's lighting equations to operate properly, the assumption OpenGL makes by default is that the normals passed to it are vectors of length 1.0.
ja, GL_NORMALIZE on default disabled ist, war frueher eine performance frage, so?
ich wollte nur den 'aenfaenger' drauf hinweisen, dass er "aber besonders sinnvoll ist das natuerlich nicht" nicht zu woertlich nehmen muss und gl_normalize verteufelt. (als anfaenger hab ich mir auch so einigen rat zu sehr zu herzen genommen, da man sich darauf verlaesst weil aufgrund mangelnder erfahrung die differenzierung schwer faellt was wann ok oder schlecht ist).
in den shadern die ich schreibe normalize ich auch pauschal, weil es performance maessig so gut wie ignorierbar ist und dafuer die problemstellen (wo doch jemand was skaliert oder skinning oder morphing oder procedural oder...) nicht per hand behandelt werden muessen.
fuer den anfang wuerde gl_normalize voll reichen, statt dass er sich tage damit beschaeftigt wie er das ordentlich zu machen hat, denn dann ergoogled er sicher auch 10 verschiedene arten wie normalen berechnet werden und dabei machen es selbst die aller wenigsten spiele ordentlich.