Normalen aus 5 Vertices berechnen



  • Hallo alle miteinander! Ich würde gerne die Belichtung meines Terrains ein wenig verschönern. Soweit ich weiß muss man um das ganze ein wenig schöner zu machen die Normalen für jeden Vector einzelnd berechnen, anstadt für alle 3 zusammen. Momentan berechne ich die Normalen aus allen 3 Vectoren der Polygone. Das sieht dann in etwa so aus:

    // Pseudocode
    Seite1 = Vertex2 - Vertex1;
    Seite2 = Vertex2 - Vertex3;
    
    KreuzVector = KreuzproduktAus(Seite1, Seite2)
    

    Nun muss ich aber das Kreuzprodukt aus 5 Vectoren berechnen, also allen umliegenden Vectoren um einen Vertex. Ich habe da im moment eine Denkblokade wie ich das machen muss. Ich muss auf jeden fall die aufspannenden Vectoren anders berechnen, also anstatt:

    Seite1 = Vertex2 - Vertex1;
    Seite2 = Vertex2 - Vertex3;

    etwas anderes ...

    Währe euch echt dankbar wenn ihr mir da ein wenig helfen könntet! Ich möchte das ganze später mit Shadern machen, jedoch währe es wohl ratsammer ersteinmal das zu verstehen.



  • Du berechnest den Durchschnitt der Normalen der anliegenden Dreiecke:

    1
       /|\
      / | \
     /  |  \
    2---3---4
     \  |  /
      \ | /
       \|/
        5
    


  • Hm das müsste dann stimmen?

    //Pseudocode
    Durchschnitt = (Vec1 + Vec2 + Vec5 + Vec4) / 4;
    
    KreuzVector = KreuzproduktAus(Vect3, Durchschnitt);
    


  • Um den Durchschnitt der Normalen zu berechnen musst Du zunaechst die Normalen selbst berechnen.



  • Ok, das verstehe ich jetzt wieder nicht. Wie kann ich denn dann die normalen berechnen, wenn ich dies nur aus einem einzigen vector berechnen muss?



  • Code-Walker schrieb:

    Ok, das verstehe ich jetzt wieder nicht. Wie kann ich denn dann die normalen berechnen, wenn ich dies nur aus einem einzigen vector berechnen muss?

    Du berechnest den Durchschnitt der Normalen der anliegenden Dreiecke:

    1
       /|\
      /M|M\
     /MM|MM\
    2---3---4
     \MM|MM/
      \M|M/
       \|/
        5
    


  • Wie kann ich denn dann die normalen berechnen, wenn ich dies nur aus einem einzigen vector berechnen muss?

    Ich verstehe Deine Frage leider weder inhaltlich noch grammatikalisch.
    Die "Normale" ist ein Vektor der senkrecht auf einer Ebene steht.
    Eine Ebene ist durch ein Dreieck gegeben und Du weisst bereits, wie man die Normale anhand eines Dreiecks berechnet.
    Nun moechtest Du aber Normalen fuer jeden Eckpunkt haben.
    Rein mathematisch kann man nun keine Senkrechte auf einem Punkt festlegen.
    Man ueberlegt sich darum, welche Dreiecke sich an diesem Punkt treffen (siehe Grafik oben).
    Du berechnest also die Normalen der Dreiecke (1,2,3), (1,3,4), (2,5,3), (3,5,4) (beachte dass alle Dreiecke die gleiche Orientierung haben) und bilde deren Mittelwert (erledigt sich von alleine durch anschliessende Normierung).



  • Achso, danke! Dann werde ich mich gleich mal dran setzen!


  • Mod

    am ende bekommt man das selbe raus wie beim kreuzprodukt aus vector 1-5 und 2-4, der mittelpunkt hebt sich selbst auf.


Log in to reply