Wann passiert was in OpenGL
-
Hoi,
Ich arbeite gerade an einer kleinen Engine mit OpenGL.
Nun habe ich eine Frage zum Szenenaufbau.
Wann wird welche Matrix mit einbezogen?- Wann kommt die Projection Matrix zum Einsatz und wirkt sie sich nur auf die da nachfolgenden VertexBefehle aus?
Bsp:
glFrustum(....) glBegin(GL_QUADS); .....//Bastele einen Quader glEnd(); glOrtho(...); glBegin(GL_QUADS); .....//Bastele noch einen Quader glEnd();Liege ich richtig mit der Anahme, dass der erste Quader jetzt Perspectivisch und der 2te Orthogal gezeichnet wird, oder wird die ganze Szene bei einem Wechsel der Projectionsmatrix neu gerendert?
2)Wann wird das Licht berechnet?
Wird es sofort einbezogen, wenn man einen neuen Vertex übergibt, oder wird es erst einbezogen, wenn man den Backbuffer mit dem Frontbuffer tauscht?
(Das es erst berechnet wird, wenn man den Buffer tauscht halte ich zwar für undenkbar, aber könnte ja sein)Zum Schluss habe ich noch eine Letzte Frage.
Ist es möglich den Backbuffer zu speichern, dann eine neue Szene zu rendern und diese dann dadrüber zu legen?
Momentan rendere ich die Szene, die ich speiern will in eine Texture und blitte diese dann wenn gewollt übereinander wobei ich sie teils Mittels Alpha durchsichtig mache.
Ich weiß, ist net besonders schnell, aber besser als nichts.mfg Nock
-
weiss nicht, wie man den backbuffer speichern kann (kann man bestimmt, die frage ist nur wie ;)), aber vielleicht reichen dir ja bufferlisten. kannst dir mit glGenLists() nen paar listen ids besorgen und dann deine szene zwischen glNewList() und glEndList() basteln. über parameter kannst du steuern, ob die szene nur gerendert oder auch gleich gezeichnet werden soll. mit glCallList() kann man solche listen dann wieder abrufen.
-
mit deinem code waere ich vorsichtig, wenn du die ortho aufrufst hast du noch deine alte matrix im speicher, wenn man nicht vorher mit glloadIde.. leert kommt was komisches bei raus, dann wird die neue matrix mit der neuen verrechnet, nicht was du willst.
pop und push matrix, kannst dir auch mal anschauen, kann hier sinn machen.was meinst du mit speichern?? die pixels? kann einfach gemacht werden indem man den ganzen buffer mit pixelblits in nem auxbuffer schaufelt, aber was meinst du mit wieder addieren? die farbwerte der pixel zum colorbuffer??
Je nachdem was du machen willst , schau dir mal den Stencil buffer oder Accumulation buffer an, koennte da helfen.
Oder willst du den ganzen ogl drawing code erneut ausfuehren, dann schau dir display lists an.Generell, openlg redbook, kennst schon!! schau mal da rein.
-
Hoi,
Habs alles rausbekommen.
Probieren geht halt über studieren.Aber ich habe ne neue Frage und möchte dafür nicht extra nen neuen Thread aufmachen.
Zeichenet OpenGL auch die Dinge die außerhalb der Clipplanes liegen?
Also, als erstes stelle ich meine Projectionsmatrix ein.
Dadurch defineire ich ja die Clipplanes.Wenn ich jetzt aber etwas zeichne was außerhalb der Planes liegt, wird es dann überhaupt gerendert oder wird es einfach "ignoriert"?
mfg Nock
-
Was verstehst du denn unter "zeichnen"?
Naja als pixel am screen erscheint es schonmal nicht, aber klar wird sicher bearbeitet, wie soll man denn sonst feststellen, das es geclippt wird und nicht "gezeichnet".
Ich habe noch keine tests dahin gehend gemacht, aber gernell habe ich schon gehoert, das der ogl clipping algrithm nicht der schnellste ist.
Was aber ja auch schon daran liegt, das mit z.B wenn man seine Renderscene in bloecke unterteilt, die je ein haufen complexe objekte enthaelt, man schon recht einfach ein haufen aussortiern kann, was nicht in der scene erscheint, was aber ogl dahingegen polygon fuer polygon oder auch pixel fuer pixel errechnen muss.
im OGLRedbook befinden sich diagramme ueber die OGl pipeline/processing flow, schau mal dort wo das clipping eigentlich stattfindet und was alles vorher noch "gerechnet wird mit den daten".