R
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();