La clave esta en usar la siguiente linea:
pygame.display.set_mode((width,height),OPENGL|DOUBLEBUF)
de esa manera le permitimos a la ventana principal de pygame, mostrar lo que podria mostrar una ventana de OpenGL.
A continuacion el ejemplo.
#---Codigo de pygame junto con pyopengl---
#Working with pygame instead of GLUT
#Using pygame events
import pygame
from pygame import *
from OpenGL.GL import *
from OpenGL.GLU import *
def triangle():
glBegin(GL_TRIANGLES)
glColor3f(1.0,0.0,0.0)
glVertex3f(0.0,0.8,0.0)
glColor3f(0.0,1.0,0.0)
glVertex3f(-0.6,-0.2,0.0)
glColor3f(0.0,0.0,1.0)
glVertex3f(0.6,-0.2,0.0)
glEnd()
def display():
glClearColor(0.0,0.0,0.0,0.0)
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0)
triangle()
glMatrixMode(GL_MODELVIEW)
glFlush()
def windowInit(width,height):
pygame.init()
pygame.display.set_mode((width,height),OPENGL|DOUBLEBUF)
glViewport(0,0,width,height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45,1.0*width/height,0.1,100.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def main():
windowInit(640,480)
while True:
display()
pygame.display.flip()
for event in pygame.event.get():
if event.type==QUIT:
return
main()
El unico problema de combinarlos es que el framerate que se obtiene, es menor que el que se obtendria ocupando directamente la ventana de Glut, o ventanas de windows/linux/otros. De todas maneras el framerate obtenido es suficiente para desarrollar un juego comercial.
No hay comentarios:
Publicar un comentario