Seite 1 von 1

Probs mit OpenGL 2D :evil:

Verfasst: 10.11.2005 22:15
von Artus
Hio,
also langsam hab ich satt ich hab gegoogled ohne ende aber ich find kein vernünftiges ... nein ich meine überhaupt kein tutorial wie man ein 2D Game in c++ mit OpenGL macht.
Bei mir glappt das mit dem glOrtho nich und wie bring ich dann die maus mit ein um zb buttons zu machen oder so ich binn echt am verzweifeln ich weis nicht was noch nun wend ich mich an euch. wenn ich das glOrtho setzt es mir die sachen trodzdem in den 3D-Raum. Kann mir jemand helfen ode ein Tutorial machen? :roll:

PS: Die NeHe-Tutorials sind kacke was 2D angeht anlso braucht nich nen link zu den machen ^^

mfg Artus

Verfasst: 11.11.2005 01:20
von Zaphod
hast du es mal mit der funktion gluOrtho2D() aus der gl utilities bibliothek versucht?

Verfasst: 11.11.2005 01:25
von Ynnus
Das DGL-Wiki-Tutorial für 2D in OpenGL: http://wiki.delphigl.com/index.php/Tutorial_2D


(Bezieht sich zwar auf Delphi, aber OpenGL Syntax ist ja der gleiche. Man muss nur wenig umdenken)


Ansonsten ist die Sache recht einfach wenn man es einmal verstanden hat.
Kurze Beschreibung:
Viewport erstellen, Projektionsmatrix wählen, Identity-Matrix aufsetzen, mit glOrtho() richtest du die Projektionsmatrix orthogonal aus. Dann Modelview wählen und identitätsmatrix wählen. Danach kannst du in der Modelview-Matrix mit Pixelkoordinaten arbeiten, was die Sache im 2D-Bereich sehr vereinfacht. Die Projektionsmatrix brauchst du danach nicht mehr modifizieren oder neu Ortho anwenden, die bleibt wie sie ist.
wenn ich das glOrtho setzt es mir die sachen trodzdem in den 3D-Raum.
Vermutlich hast du nach dem "orthogonalisieren" der Projektionsmatrix wieder loadIdentity aufgerufen wodurch der Ortho-Modus wieder deaktiviert wird.

Verfasst: 11.11.2005 07:47
von DarkDragon
Zaphod hat geschrieben:hast du es mal mit der funktion gluOrtho2D() aus der gl utilities bibliothek versucht?
Meine Engine kann z.B. auch 2D sachen. Das geschieht in etwa so:

Code: Alles auswählen

Procedure Start2D()
  glMatrixMode_(#GL_TEXTURE)
  glLoadIdentity_()
  glScalef_(1.0, 1.0, 1.0)
  glMatrixMode_(#GL_MODELVIEW)
  
  glMatrixMode_(#GL_PROJECTION)
  glLoadIdentity_()
  gluOrtho2D__(0.0,WindowWidth(),0.0,WindowHeight())
  glMatrixMode_(#GL_MODELVIEW)
  
  If glIsEnabled_(#GL_FOG) <> 0
    glDisable_(#GL_FOG)
    OldFogState = 1
  Else
    OldFogState = 0
  EndIf
  
  glDisable_(#GL_CULL_FACE) ;#GL_CULL_FACE
  glDisable_(#GL_DEPTH_TEST) ;#GL_DEPTH_TEST
  glDisable_(#GL_LIGHTING) ;#GL_LIGHTING
  glEnable_(#GL_COLOR_MATERIAL) ;#GL_COLOR_MATERIAL
EndProcedure

Procedure Stop2D()
  glEnable_(#GL_CULL_FACE)
  glEnable_(#GL_DEPTH_TEST)
  glEnable_(#GL_LIGHTING)
  glDisable_(#GL_COLOR_MATERIAL)
  If OldFogState = 1
    glEnable_(#GL_FOG)
  Else
    glDisable_(#GL_FOG)
  EndIf
  
  glMatrixMode_(#GL_PROJECTION)
  glLoadIdentity_()
  gluPerspective__(CAMFOV, WindowWidth()/WindowHeight(), NearZ.f, FarZ.f)
  glRotatef_(CamAng\X, 1.0, 0.0, 0.0)
  glRotatef_(CamAng\Y, 0.0, 1.0, 0.0)
  glRotatef_(CamAng\Z, 0.0, 0.0, 1.0)
  glTranslatef_(Cam\X, Cam\Y, Cam\Z)
  glMatrixMode_(#GL_MODELVIEW)
EndProcedure

...
Start2D()

...
glLoadIdentity_()

;Textur auf Screen zeichnen
glBindTexture_(#GL_TEXTURE_2D, Texture)
glBegin_(#GL_QUADS)
  glTexCoord2f_(0.0, 0.0)
  glVertex2f_(0.0, Height)
  
  glTexCoord2f_(1.0, 0.0)
  glVertex2f_(Width, Height)
  
  glTexCoord2f_(1.0, 1.0)
  glVertex2f_(Width, 0.0)
  
  glTexCoord2f_(0.0, 1.0)
  glVertex2f_(0.0, 0.0)
glEnd_()

Stop2D()