ich habe eine Frage bezüglich dieses Paramters bei VBOs. (GL_T2F_N3F_V3F ) Und zwar übergebe ich hier, wenn ich das richtig sehe pro Punkt eine Normale. Wie macht das Sinn, wo sich Normalen doch eigentlich auf Flächen beziehen sollten?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Mathematisch richtig. Aber bei OpenGL nutzt man die zusätzlichen Informationen um über die Fläche hinweg ggf. über die drei Normalen zu interpolieren. Damit kann man bei der Beleuchtung einen Rundungseffekt erzeugen (Smooth Shading).
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Birgt das dann nicht die Gefahr das folgendes passiert: (Ich habe versucht es in einem vereinfachenden Bildchen darzustellen.)
Dateianhang:
Vektorenproblem.jpg
Die drei schwarzen Striche stellen jeweils eine Fläche dar (Seitenansicht). Der oberste schwarze Strich hat zwei im Bild sichtbare Aufspannpunkte. Von diesen gehen Normalenvektoren (in rot) aus. Die Normalenvektoren würden allerdings nur zu den beiden Flächen links und rechts unten passen, denn wenn man aus ihnen eine Normale für die Fläche oben interpoliert erhält man die blaue Normale, welche in die falsche Richtung zeigt.
Edit: Oder rechnet Opengl zusätlich noch die richtige Normale der obigen Fläche aus und interpoliert linke rote Normale -> echte Normale -> rechte rote Normale?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wofür brauchst du denn die echte Normale der Fläche? Entweder du machst Smooth Shading, dann interpolierst du über die Normalen aller Punkte jeweils, oder du machst Flat Shading, dann wird die Normale des ersten Punktes genommen. Wenn du keinen Indexpuffer benutzt teilen sich die Dreiecke ja die Punkte nicht. Ansonsten musst du da natürlich drauf achten.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Es werden immer die Normalen der drei Vertices eines Dreiecks interpoliert. Wie du diese Normale setzt bleibt dir überlassen. Üblicherweise setzt man die Normale auf den normalisierten Durchschnitt der Normalen aller am Vertex beteiligten Dreiecke. Dies ergibt den besagten "Smooth Shading"-Effekt. Wenn man möchte kann man die Normalen der Dreiecke noch gewichten, etwa Anhand des aufgespannten Winkels des jeweiligen Dreiecks oder auch dem Flächeninhalt der Dreiecke.
Der Winkel in deinem Beispiel ist sehr spitz. Hier würde man normalerweise keinen "Smooth Shading"-Effekt wollen. Dies kann man verhindern indem man entsprechende Vertices einfach doppelt aber mit unterschiedlichen Normalen in das Mesh aufnimmt.
=> Man kann also gezielt für jeden Vertex festlegen ob man Smooth- oder Flah-Shading möchte.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.