OpenGL isolierte (Treiber-)Welt?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

BlitzMoritz

Betreff: OpenGL isolierte (Treiber-)Welt?

BeitragSo, Mai 04, 2008 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 04, 2008 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 05, 2008 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Crying or Very sad

FOODy

BeitragMo, Mai 05, 2008 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 06, 2008 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 06, 2008 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 06, 2008 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 06, 2008 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Uiuiui! Shocked Das sind ja allerlei Geheimtricks!
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

BeitragDi, Mai 06, 2008 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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ɹɹǝ,
 

theplayer

Betreff: noch eine frage

BeitragDi, Dez 02, 2008 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group