Clipping am kanonischen Sichtvolumen in OpenGL



  • Servus,

    hat jemand eine Erklärung dafür, wieso OpenGL das Clipping am kanonischen Sichtvolumen vornimmt?
    Hab mir überlegt, das es deshalb Sinnig ist, weil die Transformation sowieso statfindet und die Clipplanes dann ja immer gleich sind. Also müssten sie nicht extra berechnet werden. Ist das schon alles, oder steckt da noch mehr dahinter?

    MfG
    GKone


  • Mod

    oGL selbst macht kein klipping, das bleibt dem treiber überlassen.

    rapso->greets();



  • ob diese antwort meine professor zufrieden stellt weis ich net *g*

    Woher weist Du denn, das der Treiber das clipping übernimmt. Hab dazu nix gefunden. Und welcher Treiber? Meinst Du den OpenGL Treiber meiner Grafikkarte? Ist dann ja auch OpenGL. Aber darum gehts ja garnicht.
    Gibt es einen guten Grund wiso nicht erst alles außerhalb des Frustums abgeclippt wird und dann erst durch die Projektionsmatrix geschickt wird?


  • Mod

    jo den grund gibt es, wie soll oGL wissen was du clippen möchtest? woher soll oGL wissen dass du nciht schon geklippt hast? und was wenn du als treiber einen raytracer hast? dann schickst du alle deine scenedaten von der aplikation zum renderer und möchtest dass dort rekursiv strahlen verfolgt werden und mußt feststellen dass alles außerhalb des frustrums fehlt... oder du hast einen vertexshader, der transformiert nicht mit der normalen transformations-/projectionsmatrix sondern errechnet sich aus den vertexdaten eigene werte (z.b. animierte wasserwellen).

    oGL soll als kommunikationsschnitstelle dienen, je mehr du dort für andere aufgaben einbaust, desto weniger ist sie für den allround einsatz geeignet.

    eine application kann im voraus schon anhand von umgebungsvolumina rausfinden ob ein objeckt potenziell sichtbar ist. das ist schneller als oGL die ganze geometrie zu übergeben.
    und dann kann der trebier der grafikkarte die einzelnen polys übergeben, die kann damit schneller umgehen als jeder treiber jedes poly clippen könnte. die karten sind sogar so ausgelegt, dass sie nichtmal die polygone am frustum zuschneiden sondern in einen puffer außerhalb des bildschirms weiterzeichnen, weil es viel aufwendiger wäre ein poly zu clippen als ein paar zehntausend pixel zu zeichnen.

    clipping wird bei oGL von treibern ausgeführt in zusammenarbeit mit renderlists, du kannst ja als user deine ganze scene in listen stecken und sie an oGL übergeben, dabei kümmern sich die wenigsten ums culling, weil listen eben dafür benutzt werden um "fris das und spuck was gutes aus" zu haben. deswegen hat nVidia scheinbar ein cullingtree mit AABB zum cullen und bekommen so für nicht sicherbare objeckte wirklich gute performance!

    naja
    rapso->greets();


Anmelden zum Antworten