Normalenvektoren

  • Von aus scheint denn die Sonne, bitte? Ich habe gerade versucht, die Beleuchtung eines Fahrdrahtmastes so zu gestalten, dass das Ding nicht bloß im Schatten steht.


    Allgemein wäre es vllt sinnvoll, mal der Allgemeinheit nicht bloß zu erklären, was Normalenvektoren sind, sondern auch, wie man mit ihnen rechnet. Aber um sowas zu schreiben, bräuchte ich ein paar mehr Informationen. Eben zB, von wo aus die Sonne scheint ;) Und nicht zuletzt auch worauf! Auf eine Ebene? Auf ein Gauß-Krüger-Artefakt? Welche Transformationen in die Sicht gibt es bereits? Usw... Das sind Dinge, die wohl nur die Coder wissen.


    LG
    103

  • Hallo Uwe,


    wow, das ist ja mal n whole bunch of information... Da wird mir einiges viel klarer. Danke sehr!


    Aber es wäre trotzdem noch interessant, wie ein einzelener Pixel an Ende entsteht. Werden die Ebenen überhaupt pixelweise über Normalenvektoren berechnet? Oder interpoliert? Oder einfach irgendwie über Abbildungsgruppen projiziert? Also, mich interessiert hier einfach die Formelsammlung ;)


    Aber hab vielen Dank, Uwe, das sind in dem von Dir verlinkten Thread schon sehr viele neue Informationen!


    LG
    103

  • Nachtrag...


    Wenn ich nicht komplett alles falsch verstanden habe, ist der Begriff "Normalenvektor" aber arg falsch für das, was er repräsentieren soll...


    LG
    103


  • Von aus scheint denn die Sonne, bitte? Ich habe gerade versucht, die Beleuchtung eines Fahrdrahtmastes so zu gestalten, dass das Ding nicht bloß im Schatten steht.


    Allgemein wäre es vllt sinnvoll, mal der Allgemeinheit nicht bloß zu erklären, was Normalenvektoren sind, sondern auch, wie man mit ihnen rechnet. Aber um sowas zu schreiben, bräuchte ich ein paar mehr Informationen. Eben zB, von wo aus die Sonne scheint ;) Und nicht zuletzt auch worauf! Auf eine Ebene? Auf ein Gauß-Krüger-Artefakt? Welche Transformationen in die Sicht gibt es bereits? Usw... Das sind Dinge, die wohl nur die Coder wissen.


    Die Sonne bewegt sich (Oder ist es doch die Erde die sich bewegt?;) )


    Für die anderen Fragen empfehle ich eine eigenständige Recherche im Internet. Diese Themen füllen Bücher, und der Loksim macht es prinzipiell genauso wie alle anderen 3D-Anwendungen.
    Normalenvektor ist sicherlich nicht "arg falsch", diesen Begriff gibt es schon ewig in der 3D-Graphik. Und für einen "Vektor" der "normal" auf eine Ebene steht, ist der Begriff Normalenvektor ja auch ganz ok, imho...

  • Hallo,


    eigentlich ist dem Beitrag von lukash nichts mehr hinzuzufügen.


    Aus meiner früheren Praxis als Graphiksystemprogrammierer nur noch soviel:


    Ob man es Normalenvektoren oder wie wir früher "Normalvektoren" nennt
    ist völlig wurscht. Hauptsache ist doch, dass man weiß worum es geht.


    Ein Normalvektor ist der Vektor, der an einem Punkt senkrecht aus einer Oberfläche zeigt; egal ob Kugel, Kegel usw.


    Zur Berechnung einer 3D-Lichtszene benutzt man nun mehrere Dinge:


    1. Die Normalvektoren der Oberflächen
    (zur Bestimmung, in welche Richtung das Licht reflektiert wird).


    2. Die Charakteristik der Lichtquelle(n)
    (das bestimmt die Lichtrichtung).


    3. Die Farbtemperatur der Lichtquellen


    4. Alles weitere würde hier im Forum jetzt wirklich zu weit gehen ...


    Die Sonne ist z. B. ein diffuser Lichtgeber, also geht man dabei davon aus, dass
    das Licht aus allen Richtungen kommt.
    Es gibt dann noch Punktstrahler, Flächenstrahler, Rundstrahler
    und so weiter und so fort.


    Die Richtung der Normalvektoren der Lichtquellen und der Oberflächen
    entscheiden dann hauptsächlich über die Richtung und Stärke der
    resultierenden Reflektion.


    Daraus ergeben sich dann die für den Betrachter aus seinem
    Sichtwinkel entstehenden Eindrücke, wenn der
    Programmierer oder das Programm gut berechnet hat


    Ganz kompliziert wird es dann bei sogenannten "Freiformflächen", weil
    sich die Normalvektoren im Minus und Plus bewegen.


    Habe versucht, es so allgemeinverständlich und knapp wie möglich zu beschreiben,
    deshalb entschuldige ich mich schon jetzt bei den Experten.


    Zur Frage von lukash mit Sonne und Erde habe ich in diesem älteren Beitrag schon
    etwas geschrieben:
    http://loksim.de/smf/index.php?topic=550.msg5049#msg5049


    Gruß AlfredW


    P.S:
    Und für diejenigen, die sich etwas tiefer mit der Materie beschäftigen wollen,
    hier ein Link zu einem Artikel aus dem Internet:


    http://animalrace.uni-ulm.de/l…grafik/FelixSchuessel.pdf

  • Hallo Lukas und Alfred,


    genau das ist mein Problem, das ich gerade habe: Ich definiere ein l3dobj, das aus vier Ecken und damit einer Fläche und einer invertierten Fläche (erzeugt durch eine simple Drehgruppe) besteht. Die "Normalenvektoren" hocken aber nicht im Zentrum des Vierecks, sondern an an den Ecken. Während die besagte Fläche an sich erstmal 2-dimensional ist, spannen die vier "Eckenvektoren" eine sphärische Figur auf. Ich erspare mir mal, hier die entsprechende Formel hinzuschmieren, kann sich jeder Interessierte aus Wikipedia und ein paar Mathebüchern auf beliebig anspruchsvolle Art zusammenreimen.


    So, wie ich Grafikprogrammierung bisher verstanden habe, steht der Normalenvektor eines n-Ecks senkrecht auf dessen Schwerpunkt. Ein Normalenvektor ist kein Vertex. Ich lasse mich hier aber gerne eines Besseren belehren, weil ich wahrlich kein Grafik-Profi bin. Ich hab nur halbwegs Ahnung von Mathe.


    Danke für Euer Feedback!


    LG
    103

  • Verstehe ich die Frage von Dir richtig, dass Dir nicht klar ist, warum eine Fläche mehrere Normalenvektoren hat, und nicht nur einen?


    Wenn ja dann hier eine Mini-Erklärung:
    Die einfachste Variante für die Schattierung von Objekten verwendet pro Fläche nur einen Vektor, der senkrecht auf diese Fläche steht. Jedoch entstehen dabei sichtbare Übergänge zwischen angrenzenden Flächen.
    Deshalb gibt es verschiedenste Verbesserungen, bei denen man für jeden Punkt einen Normalenvektor eintragen kann.
    Loksim verwendet "Gouraud shading": Hier wird für jeden Punkt die Schattierung einzeln berechnet, und danach die berechneten Farben der Eckpunkte über die Fläche interpoliert. Somit entstehen "schönere" Übergänge zwischen benachbarten Flächen.


    PS: Der Normalenvektor ist ein Teil eines Vertex

  • Hallo Lukas,


    ja, da hast Du mich halbwegs erwischt. Für mein Verständnis ist ein Normalenvektor in dem Sinn, wie wir ihn hier gerade besprechen, ein VektorFELD, eng verwandt mit der Divergenz. Das, was die Grafik-Engine treibt, ist für nich erstmal eine Abbildung auf eine Mannigfaltigkeit, und auf den Karten der Mannigfaltigkeit stehen die (diskreten, interpolierten) Normalenvektoren (senkrecht).


    Jetzt habe ich aber ein Viereck, von mir aus ein Quadrat: {(-1, -1), (1, -1), (1, 1), (-1, 1)}. Und à la Loksim auf allen vier Ecken steht ein KRÜMMUNGSvektor, oder genauer: operiert ein Tensor (ganz korrekt: ein Spinor).


    Letztlich spannen die Koordinaten entlang einer Ebene zunächst ein 2-dimensionales n-Eder auf, wenn man mal einfach eine Fläche als dritte Dimension annimmt, die "da rein reicht". Ist einfach, Wikipedia weiß das.


    Wenn man aber nun im Editor Normalenvektoren in die Ecken des n-Ecks definiert, dann haben die zur Folge, dass sie eine weitere Dimension zum Artefakt hinzufügen. Mindestens eine, nämlich dann, wenn man die eh bereits entstehende Sphäre normalisiert, um eine artifizielle Dimension zu entfernen.


    So, wir haben eine Strecke, die von A = (1, 1, 1) nach B (-2, 0, 0) läuft, und jeder Punkt P(x, y, z) hat seine eigenen Aspekte, vor allem eigene Torsion.


    Und um das darzustellen mit der Frage, von wo die Sonne scheint, braucht es schon nen ar*** voll Mathe...


    LG
    103

  • Also ich steig bei Deiner Erklärung aus. Es geht ja im Prinzip nur um das Bestimmen von Winkeln zwischen zwei Vektoren und einfacher Interpolation... Wenn man das mathematisch wirklich so beschreiben kann wie Du das getan hast - Gratulation. Aber klingt ein wenig wie mit Kanonen auf Mücken zu schießen ;)

  • Hallo Lukas,


    ich versuch mal nen einfachen Anlauf. Stell Dir in einer Euklid'schen Ebene, also einem E2 bzw einem VONS(2), ein Quadrat vor, dessen Ecken auf den Punken A, B, C, D = (-1;-1), (-1;1), (1;1) und (1;-1) sitzen. Solange von A nach B usw klassische Geraden verlaufen, also "gerade Linien", ist alles dufte. Letztlich sind es aber Geodäten. Und Geodäten sind prinzipiell erstmal "krumm".


    Ich habe gelesen, dass LokSim Gauß-Krüger-Koordinaten benutzt, und diese sind eine Vereinfachung von Mannigfaltigkeiten. Du kannst also, fast wie in Feynmann-Diagrammen, von Punkt A nach Punkt B jede beliebige Kurve annehmen. Indem Du diese Kurve auf eine passende Mannigfaltigkeit projizierst, ist die Kurve wieder eine Gerade. Das tut aber nichts weiter zur Sache.


    Worum es geht, ist, dass du eigentlich nur vier Punkte hast in einer Ebene, diese aber durch Senkrechten in die dritte Dimension "krümmst". Das stellst Du Dir am besten so vor wie die Erdrotation: Wenn Du Dir die Erde als Scheibe vorstellst, die rotiert, dann gibt es eine Rotationsachse, die senkrecht auf dieser Scheibe steht.


    In einem "ordentlichen" E2 bzw VONS(2) sind diese Rotationsachsen nur so denkbar, dass sie alle miteinander parallel zueinander stehen.


    Aber genau das ist ja nicht der Fall. Das heißt, die Ecken des Quadrats haben eine dritte Dimension, und diese "geben sie weiter" an alle anderen Punkte. Besser gesagt, da die Ecken "in die nächste Dimension hinein" gekrümmt werden, haben auch alle Punkte der Fläche des Quadrats eine dritte Dimension. Ergo: Vektorfeld X im V(3) [also E3 oder VONS(3)].


    Mal plastisch beschrieben, stell Dir vor, Du hast einen flexiblen Stab in den Händen, hältst die Enden aber nur locker darin. Dann geht durch den Stab eine Gerade von A nach B, und man kann sie mittels der Definition bloß einer Dimension festlegen. Wenn Du nun aber Druck auf die Enden ausübst, krümmt sich die "Gerade" in eine weitere Dimension. Also: plus eine Dimension.


    Du kannst auch ein Blatt Papier her nehmen und es auf einen Tisch legen. Wieviele (relevante) Dimensionen hat dieses Papier nun? Genau: zwei. Solange Du es da liegen lässt. Du kannst das Blatt Papier aber auch in die Hand nehmen und zerknüllen. Wieviele Dimensionen sind nun relevant? Genau: immer noch zwei, aber nur dann, wenn Du das Koordinatensystem anpasst. Sonst sind es drei.Das bisher flache Papier kriegt eine dritte Dimension.


    Und genau dasselbe passiert, wenn Du über Normalenvektoren so redest, wie es hier offenbar üblich ist. Tatsächlich üblich (also mathematisch) wäre angesichts des besagten Quadrats ein Vektor derart, dass er im Punkt (0; 0; 0) besteht und senkrecht zur Ebene steht, dessen extrapolierte Menge sich aus der Teilmenge ergibt, Wenn Du nun aber die Ecken "kippst", sieht die Sache ganz anders aus. Dann nämlich stellt sich die Frage, wie genau die Funktionsbeschreibungen aussehen, um vernünftig interpolieren zu können.

  • Ich will hier nochmal nen Nachtrag reinreichen. Worüber wir hier mathematisch sprechen, heißt "Topologie". Nochmal das Quadrat, ein ganz normales Quadrat. In dessen Ecken steckst Du "senkrecht", also von "oben" (oder "unten", ist egal) Schaschlikspieße (das sind die Normalenvektoren à la LokSim). Solange die Spieße (3D) parallel stehen, passiert nix. Nun legst Du von Ecke A nach Ecke C und von Ecke B nach Ecke D Geraden auf das Quadrat. In jede Ecke legst Du weiterhin Geraden, die innerhalb der unendlich ausgedehnten Fläche liegen, die das Quadrat definiert, und senkrecht zu den besagten "Diagonalen". Um genau diese Achsen drehst Du nun die Spieße um 90 Grad (pi / 2). Da die Spieße aber am Quadrat kleben, ziehen sie das Quadrat mit sich UND führen zu einer Projektion des Quadrats in die dritte Dimension. Bleiben wir mal dabei, dass der Mittelpunkt (eigentlich Schwerpunkt, das ist hier aber dasselbe) des Quadrats bei (0; 0) liegt und die vier Ecken bei (+/- 1; +/- 1). Nun nehmen wir an, die Sonne scheine senkrecht "von oben" auf den Punkt (0; 0). Nimmt man nun eine Fläche an, die eine unendliche Ausdehnung der Tangente durch einen der (gekrümmten) Ecken ist, verläuft diese Ebene parallel zu den Sonnenstrahlen.


    Bleiben wir dabei, dass die Sonnenstrahlen alle parallel verlaufen. Wir haben aber nun eine gekrümmte Fläche, und auf jeden Punkt dieser Fläche lässt sich ein Vektor bestimmen, der senkrecht darauf steht, zusammengefasst also ein VektorFELD.


    Nun kommt es auf den Blickwinkel an, also auf die Position der "Kamera". Für alle 9 Koordinaten bzw. Winkel (3 der Spielerposition, 3 der "Sonne", 3 der Reflektionsfläche) muss nun die Lichtintensität berechnet werden. Vertexe sind eine Vereinfachung dieses Prinzips.


    Nehmen wir nun einen Würfel an. Wieder mit Mittelpunkt (0; 0; 0). Die Richtung der Sonnenstrahlen lässt sich durch einen einfachen Vektor bestimmen, wenn wir dabei bleiben, dass alle Sonnenstrahlen parallel verlaufen. Interessanter ist aber, durch welche zwei (3D) Koordinaten der die Sonnenstrahlen definierenden Vektor verläuft. Die Multiplikation der Winkel zwischen dem Strahl und dem senkrecht stehenden Vektor auf dem Punkt, in dem der Strahl die Fläche trifft, und dem Winkel der Kamera ergibt die Helligkeit. Trifft der Strahl senkrecht auf die Fläche, und schaut die Kamera aus fast demselben Winkel wie der Strahl auf die Fläche, ist die Reflektion besonders stark und damit die Helligkeit besonders groß. Wenn es sich um ein durchsichtiges Material handelt, gilt nach einer Rotation um zwei Winkel à 180°, dass die Helligkeit dieselbe ist mal dem Transparenzfaktor (der < 1 ist).


    Die restlichen Berechnungen sind elementar nur sin und cos.


    LG
    103