OpenGL: Fenster verschwindet immer sofort wieder

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

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?
BlackJack

Also ich bekomme eine Fehlermeldung auf der Konsole, das `glutInit` nicht aufgerufen wurde.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Hallo BlackJack,

welche Version von OpenGL hast du?
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.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

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.
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.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

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.
Zuletzt geändert von Imperator am Freitag 12. Juni 2009, 13:19, insgesamt 1-mal geändert.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

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.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

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.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
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.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Ich meinte mit der schon oben geposteten Fehlermeldung diese hier:
reedisplay needed for window 1, but no display callback.
:wink:
Antworten