Backface Culling - Algorithmus gesucht



  • Heyho!

    Ich suche einen Algorithmus, der mir ermittelt ob ich von meiner aktuellen Position die Rück- oder Vorderseite eines Polygons sehe.
    Ich rede jetzt nicht von glCullFace 😉 sondern von dem, was dahinter steckt.



  • Ich wuerde sagen, Du betrachtest einfach den Winkel zwischen Kamerablickrichtung und Normalenvektor des Polygons (Punktprodukt etc). Ist er kleiner als 90 Grad, siehst du die Vorderseite.
    -Gunnar


  • Mod

    Gunnar schrieb:

    Ich wuerde sagen, Du betrachtest einfach den Winkel zwischen Kamerablickrichtung und Normalenvektor des Polygons (Punktprodukt etc). Ist er kleiner als 90 Grad, siehst du die Vorderseite.
    -Gunnar

    das klappt nur wenn das polygon genau vor dir ist, wenn es an der seite ist, könntest du es eventuell sehen.

    du müßtest den vector vom eyepoint zu einem vertex vom poly errechnen und dann ein skalarprodukt (dotproduct) mit der normalen, mit dem vorzeichen stellst du dann fest ob etwas zu sehen ist oder nicht 😃

    rapso->greets();



  • Hmm, ok soweit die Theorie. Ich habe folgendes:
    Den Vector der Kamera und den Normalvektor zu jedem Poly. Wie bekomm ich jetzt den Winkel zwischen beiden ? bzw wie funktioniert das mit diesem "Skalarprodukt" ?


  • Mod

    Cpp_Junky schrieb:

    Hmm, ok soweit die Theorie. Ich habe folgendes:
    Den Vector der Kamera ?

    *hust* emm.. du brauchst den vom camera-ursprung zu einem punkt vom dreieck.

    if(dir.x*nor.x+dir.y*nor.y+dir.z*nor.z<=0.f)
    {
    //visible
    }
    

    alternativ kann man das ding auch projezieren und den flächeninhalt errechnen (für 2d kann man das recht effizient machen just google :D), dann je nachdem ob der flächeninhalt positiv oder negativ ist...
    so machen es die grafikkarten meißt.

    rapso->greets();


Anmelden zum Antworten