Seite 1 von 1

OpenGL: Fenster verschwindet immer sofort wieder

Verfasst: Donnerstag 11. Juni 2009, 18:15
von Imperator
Hallo,

ich beschäftige mich gerade ein wenig mit OpenGL, leider gibt es zur Python Variante nur sehr wenig Lehrmaterial. Ich muss daher sehr viel über ausprobieren herausfinden, und hänge nun ganz gewaltig fest. Ich habe zuerst einmal den Code geschrieben, durch den sich ein leeres Fenster öffnet. Das tut es zwar auch, aber leider immer nur für eine Sekunde.

Code: Alles auswählen

import OpenGL.GL as gl
import OpenGL.GLE as gle
import OpenGL.GLU as glu
import OpenGL.GLUT as glut

def Initialise(height, width, posx, posy):
    glut.glutInitDisplayMode(glut.GLUT_DOUBLE | glut.GLUT_RGBA  
    | glut.GLUT_DEPTH)
    glut.glutInitWindowSize(height, width)
    glut.glutInitWindowPosition(posx, posy)
    glut.glutCreateWindow('OpenGL experiment')
    
if __name__ == '__main__':
    Initialise(300, 400, 200, 300)
    glut.glutMainLoop()
Hat jemand mit mehr erfahrung auf diesem Gebiet eine Idee?

Verfasst: Donnerstag 11. Juni 2009, 18:47
von BlackJack
Also ich bekomme eine Fehlermeldung auf der Konsole, das `glutInit` nicht aufgerufen wurde.

Verfasst: Donnerstag 11. Juni 2009, 19:44
von Imperator
Hallo BlackJack,

welche Version von OpenGL hast du?

Verfasst: Donnerstag 11. Juni 2009, 20:07
von BlackJack
Keine Ahnung, was Unbuntu auf dem Rechner halt im Repository hat(te). Aber ich glaube nicht, dass das versionsabhängig ist, dass man die am Anfang die Initialisierung aufrufen muss.

Verfasst: Freitag 12. Juni 2009, 08:55
von Imperator
Also, ich habe jetzt erkannt dass tatsächlich glutInit aufgerufen werden muss (ich hatte aber keinerlei Fehlermeldung erhalten^^). Leider verschwindet das Fenster trotzdem gleich wieder. Es muss also an etwas anderem liegen.

Verfasst: Freitag 12. Juni 2009, 10:34
von BlackJack
Kann ich mir nicht vorstellen. Irgendwas muss doch auf der Konsole ausgegeben werden. Ob nun von Python, von den OpenGL-Bibliotheken, oder dem Betriebssystem. Bei mir läuft's nämlich wenn ich den Aufruf hinzufüge.

Edit: Ansonsten könntest Du ja einfach mal mit einem Minimalbeispiel aus einem Tutorial anfangen. Die NeHe Tutorials gibt's auch für Python.

Verfasst: Freitag 12. Juni 2009, 11:34
von Imperator
Wofür steht Nehe?

Ich habe es jetzt einmal aus der Windows Eingabeaufforderung herausgestartet (hätte ich eigentlich auch schon früher draufkommen können^^), weshalb es zwar auch nicht funktioniert, aber wenigstens eine Fehlermeldung liefert: 'reedisplay needed for window 1, but no display callback.' Daraus werde ich nicht ganz schlau, denn den mainloop-Aufruf habe ich doch.

Eine Frage hätte ich noch: Welches Argument hast du glutInit übergeben? Ich habe glut.glutInit(sys.argv) verwendet.

Edit: Ich habe Nehe gefunden und versucht den Code von lesson 1 zu starten: NameError: global name 'glutSetDisplayFuncCallback' is not defined
:roll: Kann das durch eine andere version verursacht werden? Immerhin ist der code von 1999.

Verfasst: Freitag 12. Juni 2009, 13:11
von yipyip
Versuchs mal mit

Code: Alles auswählen

from OpenGL.GL import *
from OpenGL.GLE import *
from OpenGL.GLU import *
from OpenGL.GLUT import *


def draw():

  glBegin(GL_POLYGON)                
  glVertex3f(0.0, 1.0, 0.0)        
  glVertex3f(1.0, -1.0, 0.0)        
  glVertex3f(-1.0, -1.0, 0.0)
  glEnd()
  
  glFlush()
  glutSwapBuffers()


def initialize(width, height):

  glutInit('')
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH)
  glutInitWindowSize(width, height)
  glutCreateWindow('OpenGL experiment')

   
if __name__ == '__main__':
  
  initialize(600, 400)
  glutIdleFunc(draw)
  glutMainLoop()
Naeheres darfst Du mich da nicht fragen, kenne mich auch damit nicht aus.
'Nehe' ist der Inbegriff fuer *das* OpenGl-Tutorial, einfach googeln.

:wink:
yipyip

Verfasst: Freitag 12. Juni 2009, 13:22
von Imperator
Danke für den Code yipyip, aaaaaber: Auch hier bekomme ich kurz ein Fenster mit einem dreieck(?) zu sehen, was sofort wieder verschwindet.
Wenigstens weiß ich jetzt, dass das Problem scheinbar bei meinem PC liegt.

Verfasst: Freitag 12. Juni 2009, 13:31
von yipyip
Genau, Du solltest ein weisses Dreick mit schwarzem Hintergrund
sehen.
Bei mir bleibt das Fenster stehen (wie man es erwarten sollte).
[Ubuntu 8.10]

Sehr merkwuerdig...
:?
yipyip

Verfasst: Freitag 12. Juni 2009, 15:34
von Imperator
Wenn ich deinen code nicht aus IDLE sondern der Eingabeaufforderung starte, gibt es wieder diese seltsame Fehlermeldung die ich oben ja schon gepostet habe.
Ach ja, windows Vista 32 bit. Das dürfte aber eigentlich nichts zur Sache tun, da OpenGL plattformunabhängig ist.

Verfasst: Freitag 12. Juni 2009, 15:44
von yipyip
Sorry, aber um irgendetwas Sinnvolles sagen zu koennen,
muesste ich mich erst in OpenGl einlesen, so kann ich
nur wild spekulieren.
Vielleicht fehlt da doch noch etwas in Sachen Module/Treiber?
(Bei mir funktionierts ja ohne Fehlermeldung.)

:wink:
yipyip

Verfasst: Freitag 12. Juni 2009, 15:57
von BlackJack
@Imperator: Die Funktion, die in der Fehlermeldung von oben angemeckert wird, kommt in yipyip's Beispiel doch gar nicht vor!?

Edit: Und versuch's doch einfach mal mit den PyOpenGL-Beispielen für Deine Version. *Die* sollten ja nun alles richtig machen.

Verfasst: Freitag 12. Juni 2009, 16:21
von Imperator
Ich meinte mit der schon oben geposteten Fehlermeldung diese hier:
reedisplay needed for window 1, but no display callback.
:wink: