Effizientes Berechnen der Vertex Normalen



  • Ich hab die Vertizes in einem std::vector als 3d Vektoren und einen Index Buffer in der Form std::vector< uint32 >. Wobei immer 3 Indizes ein Dreieck bilden.
    Wie kann ich schnellstmöglich die Normalen berechnen? Ich hab mir schon überlegt erstmal einen std::vector< std::vector< Vector3d > > anzulegen und ersteinmal die Normalen für jedes Dreieck zu berechnen und diese dann in den std::vector im std::vector (der die Normalen aufnimmt) abzulegen und danach im zweiten Schritt die Normalen der einzelnen Dreiecke zu interpolieren und das Ergebnis dann im Vertex-Buffer abzulegen.

    Aber das ganze ist recht Speicherintensiv. Gibts da ein besseres Vorgehen?



  • ich machs immer so:

    ich hab eine liste mit allen vertices (deren normalvektoren sind auf (0,0,0) gesetzt).
    jetzt geh ich duch die liste mit den dreiecken und berechne den normalvektor (nicht normalisiert) und zähl ihn zum normalvektor von allen 3 vertices des dreiecks dazu.
    zum schluss normalisier ich alle normalvektoren und ferig.
    die normalvektoren sind dann nach der fläche der dreiecke gewichtet (teilen sich mehrere dreiecke einen vertex, so haben größere dreiecke mehr einfluss auf den gemittelten vektor als kleinere).



  • Das hört sich gut an 🙂
    So werd ichs machen.


Anmelden zum Antworten