Cubo con PyOpenGL

#!/usr/bin/env python # -*- coding: utf-8 -*- import Image import random import sys import time import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * ancho = 720 alto = 576 rotaX = 0.0 rotaY = 0.0 rotaZ = 0.0 """ Dibuja el cubo en pantalla """ def drawFrame(ejex, ejey, ejez): drawCube(ejex, ejey, ejez) pygame.display.flip() """ Dibuja el cubo con animacion """ def drawCube(ejex, ejey, ejez): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity() glTranslatef(ejex, ejey, ejez) glRotatef(rotaX,1.0,0.0,0.0) glRotatef(rotaY,0.0,1.0,0.0) glRotatef(rotaZ,0.0,0.0,1.0) glPushMatrix() glShadeModel(GL_SMOOTH) glBegin(GL_QUADS) glColor3f(0.0, 0.0, 1.0) glVertex3f( 1.0, 1.0,-1.0) glVertex3f(-1.0, 1.0,-1.0) glVertex3f(-1.0, 1.0, 1.0) glVertex3f( 1.0, 1.0, 1.0) glColor3f(0.0, 1.0, 1.0) glVertex3f( 1.0,-1.0, 1.0) glVertex3f(-1.0,-1.0, 1.0) glVertex3f(-1.0,-1.0,-1.0) glVertex3f( 1.0,-1.0,-1.0) glColor3f(1.0, 0.0, 0.0) glVertex3f( 1.0, 1.0, 1.0) glVertex3f(-1.0, 1.0, 1.0) glVertex3f(-1.0,-1.0, 1.0) glVertex3f( 1.0,-1.0, 1.0) glColor3f(0.0, 1.0, 0.0) glVertex3f( 1.0,-1.0,-1.0) glVertex3f(-1.0,-1.0,-1.0) glVertex3f(-1.0, 1.0,-1.0) glVertex3f( 1.0, 1.0,-1.0) glColor3f(1.0, 1.0, 0.0) glVertex3f(-1.0, 1.0, 1.0) glVertex3f(-1.0, 1.0,-1.0) glVertex3f(-1.0,-1.0,-1.0) glVertex3f(-1.0,-1.0, 1.0) glColor3f(1.0, 0.0, 1.0) glVertex3f( 1.0, 1.0,-1.0) glVertex3f( 1.0, 1.0, 1.0) glVertex3f( 1.0,-1.0, 1.0) glVertex3f( 1.0,-1.0,-1.0) glEnd() glPopMatrix() """ Acomoda la pantalla y la camara """ def resizeGL(ancho, alto): if alto == 0: alto = 1 glViewport(0, 0, ancho, alto) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45, float(ancho)/float(alto), 0.1, 100.0) glMatrixMode(GL_MODELVIEW) """ Inicializa OpenGL """ def initGL(): glClearColor(0.0, 0.0, 0.0, 0.0) glClearDepth(1.0) glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glEnable(GL_POLYGON_SMOOTH) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glShadeModel(GL_SMOOTH) resizeGL( ancho, alto) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) """ Principal """ if __name__ == '__main__': ejez = -6.0 #Alejamos, acercamos la camara ejex = 0 #Rotamos en X la vision ejey = 0 #Rotamos en X la vision glutInit(sys.argv) pygame.init() pygame.display.set_mode((ancho, alto),(OPENGL|DOUBLEBUF|GLUT_RGB)) pygame.display.set_caption("Cubo RGB") resizeGL(ancho, alto) initGL() while True: factorCambioY = +1.0 factorCambioZ = -1.0 factorCambioX = -1.0 keys = pygame.key.get_pressed() rotaX = rotaX + factorCambioX rotaY = rotaY + factorCambioY rotaZ = rotaZ + factorCambioZ for eventos in pygame.event.get(): if eventos.type == QUIT: sys.exit(0) """Manejar desde Teclado. elif keys[K_i]: rotaY = rotaY - 2.333 elif keys[K_d]: rotaY = rotaY + 2.333 elif keys[K_RIGHT]: rotaX = rotaX + 2.333 elif keys[K_LEFT]: rotaX = rotaX - 2.333 elif keys[K_DOWN]: rotaZ = rotaZ - 2.333 elif keys[K_UP]: rotaZ = rotaZ + 2.333 """ #Regresa el movimiento del cubo, evitando saltos. if rotaX > 360 or rotaX == 0 or rotaX < -360: factorCambioX = factorCambioX * - 1.0 if rotaY > 360 or rotaY == 0 or rotaY < -360: factorCambioY = factorCambioY * - 1.0 if rotaZ > 360 or rotaZ == 0 or rotaZ < -360: factorCambioZ = factorCambioZ * - 1.0 drawFrame(ejex, ejey, ejez)
Cubo realizado con la librería OpenGL.

Módulos externos:

PyOpenGL
Pygame

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.