jueves, 29 de noviembre de 2018

Unidad 4: cubo

import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *
#definimos la ubicacion de (x, y, z)de cada vertice(punto)
verticies = (
    (1, -1, -1), #0    
    (1, 1, -1),  #1    
    (-1, 1, -1), #2    
    (-1, -1, -1),#3    
    (1, -1, 1),  #4    
    (1, 1, 1),   #5    
    (-1, -1, 1), #6    
    (-1, 1, 1)   #7
)
#definimos los bordes(tuplas(a,b))el borde se dibujara entre
2 vertices(empezamos con 0 ya que es primer vertice difinido)
edges = (
    (0, 1),#punto 0 a 1    
    (0, 3),#punto 0 a 3    
    (0, 4),#    
    (2, 1),#    
    (2, 3),#    
    (2, 7),#    
    (6, 3),#    
    (6, 4),#    
    (6, 7),#    
    (5, 1),#    
    (5, 4),#    
    (5, 7) #
)
#generar un cubo

def Cube():#funcion crear cubo
    glBegin(GL_LINES)#esto notifica a OpenGL que estamos a 
#punto de lanzarle un código
#GL_LINES indica como manejar el código, tratara el código como
#dibujo de linea
    for edge in edges:#borde por borde (par de vertices)
        for vertex in edge:#vertice en bordes
            glVertex3fv(verticies[vertex])#dibujo de lineas (A,B)
    glEnd()#fin de OpenGL

#mostrar cubo
def main():
    pygame.init()#inicio de pygame
    display = (800, 600)#mostrar , tamaño(x,y()ancho x alto)
    pygame.display.set_mode(display, DOUBLEBUF | OPENGL)#
#notifica a PyGame que vamos a alimentarlo con código OpenGL
#DOUBLEBUF, que significa doble búfer, y es un tipo de búfer donde hay dos búferes para cumplir con las tasas de actualización del monitor. Tome nota de que pipe ("|") se usa para separar constantes. Se utilizará de nuevo más tarde para separar constantes.
    gluPerspective(45, (display[0] / display[1]), 0.1, 50.0)
#Determina la perpectiva
#(a,b,c)grado de campo de vision, ancho y altura de visualizacion
#valores(znear, zfar) planos de recorte cercano y lejanos
#el objeto solo sera visible entre estos dos recortes(perspectiva)
#plano de referrencia
    glTranslatef(0.0, 0.0, -5)#multiplica la matriz actual 
#por una matriz de traducción, es para ver el cubo
#bucle de eventos
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glRotatef(1, 3, 1, 1)#multiplica la matriz actual 
#por una de rotacion
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
#especificamos que estamos eliminando (lienzo el limpio)
        Cube()#llama la funcion
        pygame.display.flip()#actualiza la pantalla
        pygame.time.wait(10)#espera(tiempo wait)

main()#funcion principal


El búfer doble, como se menciona en la descripción de las etiquetas, utiliza un bloque de memoria separado para aplicar todas las rutinas de dibujo y luego copia ese bloque (búfer) a la memoria de video como una sola operación. El no hacer esto puede llevar a artefactos gráficos. Un ejemplo simple podría ser el parpadeo de la escena causada por parte del fondo que se dibuja justo antes de que se actualice el video y luego otras partes (por lo que no se muestran hasta la próxima actualización).

No hay comentarios:

Publicar un comentario