OpenGL isolierte (Treiber-)Welt?
Übersicht

![]() |
BlitzMoritzBetreff: OpenGL isolierte (Treiber-)Welt? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dem Wissenden wird die Frage (eines motivierten, aber irritierten OpenGL-Neulings) wahrscheinlich reichlich doof vorkommen, von ihrer Beantwortung hängt jedoch ab, ob die Auseinandersetzung sich für mich weiter lohnen wird oder nicht:
Sobald man GL-Befehle benutzt (einschließlich GLGraphics oder entsprechende Graphics-Treiber), erscheinen sämtliche "normale" Graphikbefehle wie DrawText, DrawImage oder DrawOval außer Kraft gesetzt, d.h. entweder bewirken sie gar nichts oder es kommt sogar zu Laufzeitfehlern. Ist dem wirklich so? Oder kann man vielleicht durch ein simples Umschalten schnell und flüssig zwischen verschiedenen Graphik-"Zuständen" wechseln. Für einige Befehle (wie z.B. DrawText - glDrawText) gibt es zwar einen "Ersatz", aber wohl nicht für alle, außerdem müsste man bei fortgeschrittenen größeren Projekten extrem viel Syntax korrigieren. Das wäre echt blöd. |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Setzte den Max2D-Treiber auf OpenGL und benutz die normale `Graphics' Funktion.
Das vor Graphics und schon hast du OpenGL als Backend: Code: [AUSKLAPPEN] SetGraphicsDriver(GLMax2DDriver()) ' Graphics ... Grüße, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eben nicht: Man nehme z.B. das simple Dreiecksbeispiel von www.blitzbasic.com und tausche nur "GLGraphics" entsprechend aus:
Code: [AUSKLAPPEN] SetGraphicsDriver(GLMax2DDriver())
Graphics 640,480 While Not KeyHit( KEY_ESCAPE ) glClear GL_COLOR_BUFFER_BIT glBegin GL_TRIANGLES glVertex2i 0,1 glVertex2i 1,-1 glVertex2i -1,-1 glEnd Flip Wend Prompt ist das weiße Dreieck verschwunden und nichts mehr zu sehen! ![]() |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klar geht das. Du musst halt daran denken das die Größeneinheit in Pixel ist, bzw X=0 und Y=0 die Ecke Oben-Links und X=GraphicsWidth() und Y=GraphicsHeight() die Ecke Unten-Rechts ist.
Code: [AUSKLAPPEN] Framework brl.glmax2d
SetGraphicsDriver(GLMax2DDriver()) Graphics 640,480 While Not KeyHit( KEY_ESCAPE ) glClear GL_COLOR_BUFFER_BIT glBegin GL_TRIANGLES glVertex2i 10,40 glVertex2i 40,10 glVertex2i 10,10 glEnd Flip Wend Grüße, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aha, so weit ich das jetzt verstehe, benötigt also GLGraphics für OpenGL jene Koordinaten, wie man sie von BlitzBasic3D kennt (mit dem Bildschirmmittelpunkt als 0,0,0-Punkt), aber wenn man statt dessen SetGraphicsDriver(GLMax2DDriver()) nimmt, gelten die "normalen" Bildschirmkoordinaten wie bei BlitzBasic2D.
Dabei tauchen jedoch wieder zwei Irritationen auf: 1.) Wie ist dann die 3.Koordinate z zu lesen? Bei folgendem Versuch mit glVertex3i verschwand das Dreieck erneut, wenn man etwas anderes als 0 für die dritte Koordinate setzte. 2.) Egal, wo man im folgenden Code DrawText geltend macht, immer fehlt das Dreieck, im zweiten Fall "blitzt" es nur einmal kurz auf: Code: [AUSKLAPPEN] SetGraphicsDriver(GLMax2DDriver())
Graphics 640,480 While Not KeyHit( KEY_ESCAPE ) glClear GL_COLOR_BUFFER_BIT 'DrawText "Tja, wo ist jetzt das Dreieck wieder hin?", 10,10 glBegin GL_TRIANGLES glVertex3i 100,200,0 '3.Koordinate? glVertex3i 500,200,0 glVertex3i 300,400,0 glEnd 'DrawText "Das Dreieck blitzt einmal auf und ist dann weg ...", 10,10 Flip Wend |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das liegt daran, das nach einem DrawText der GL_TEXTURE_2D-Flag aktiv ist.
Lösen tut man es mit einem Max2D-Befehl der den wieder deaktiviert, da ein glDisable(GL_TEXTURE_2D) nur bedingt hilft, wegen dem zusätzlichen internen Schalter im brl.glmax2d Module. Code: [AUSKLAPPEN] Framework brl.glmax2d
SetGraphicsDriver(GLMax2DDriver()) Graphics 640,480 While Not KeyHit( KEY_ESCAPE ) glClear GL_COLOR_BUFFER_BIT DrawText "Nun sieht man weder vom Text, noch vom Dreieck etwas ...", 10,10 Plot -1,-1 glBegin GL_TRIANGLES glVertex3i 100,200,0 '3.Koordinate? glVertex3i 500,200,0 glVertex3i 300,400,0 glEnd DrawText "Den Text sieht man immerhin, das Dreieck ist aber blitzartig verschwunden ...", 10,32 Plot -1,-1 Flip Wend Grüße, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Z-Koordinate kannst Du für verschiedene Ebenen nutzen. Das heißt, alles was in einer höheren Ebene ist liegt über den Elementen der darunter liegenden Ebenen. Die Reihenfolge in der Du die Sprites zeichnest ist dann egal.
Wie die Standardeinstellung bei BMax aussieht weiß ich nicht aber Du solltest Dir den Befehl ansehen: glOrtho z.B: glOrtho 0, 640, 480, 0, 0, -2000 bedeutet, dass die X-Koordinaten von 0-640, die Y-Koordinaten von 0-480 und die Z-Koordinaten von 0-2000 innerhalb des Sichtbereichs sind. |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Uiuiui! ![]() Irgendwie drollig: Plot -1,-1 funktioniert, aber ich denke, die "glOrtho"-Variante im folgenden Code erfüllt den gleichen Zweck und nimmt gleichzeitig die Perspektive wieder 'raus. Vielen Dank für Eure Tipps. Code: [AUSKLAPPEN] SetGraphicsDriver(GLMax2DDriver())
Graphics 640,480 While Not KeyHit( KEY_ESCAPE) 'OpenGL-Graphikkonfiguration: glClear GL_COLOR_BUFFER_BIT glMatrixMode GL_PROJECTION glLoadIdentity gluPerspective 45, GraphicsWidth()/GraphicsHeight(), 1, 120 glTranslatef(0,0,-100+Animation) ''Koordinatenursprung" definieren. Animation=20*Cos(MilliSecs()/5.0) 'OpenGL-Zeichnungen: glBegin GL_TRIANGLES glVertex3i -20,-20,0 glVertex3i 0,20,0 glVertex3i 20,-20,0 glEnd 'Zurücksetzen von OpenGL / Perspektive etc.: glMatrixMode GL_PROJECTION glLoadIdentity glOrtho 0,GraphicsWidth(),GraphicsHeight(),0,0,-2000 ''Normale" Graphik-Befehle: DrawText "Hallo", 0, 0 DrawOval 0,20,20,20 Flip Wend |
||
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach, weils mir grad einfällt:
Wenn du Nebel aktivierst kannst Du auch ganz lustige Effekte über die Z-Achse realisieren. |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
theplayerBetreff: noch eine frage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi, tut mir leid wenn ich diesen alten thread ausbuddel aber das ist genau mein problem und ich habe noch eine frage hinterher.
wenn ich ein bild mit drawimage rendern will, verscheindet wieder das gerenderte opengl. geht das überhaupt oder muss ich dann jedes bild als textur auf nem quad rendern? wenn ja, natürlich die dumme frage, wie? mfg theplayer |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group