0% encontró este documento útil (0 votos)
23 vistas14 páginas

Lab11 Compu

El documento presenta ejemplos de programación gráfica utilizando OpenGL en Python, mostrando transformaciones de figuras como triángulos y cuadrados a través de escalado, rotación y traslación. Se implementan cambios de estado cada 3 segundos para animar las figuras, y se utiliza glutIdleFunc para animar la letra 'E' de manera continua. Cada sección del código está acompañada de consideraciones sobre su funcionamiento y ejecución visual.

Cargado por

YEFERSON SC
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas14 páginas

Lab11 Compu

El documento presenta ejemplos de programación gráfica utilizando OpenGL en Python, mostrando transformaciones de figuras como triángulos y cuadrados a través de escalado, rotación y traslación. Se implementan cambios de estado cada 3 segundos para animar las figuras, y se utiliza glutIdleFunc para animar la letra 'E' de manera continua. Cada sección del código está acompañada de consideraciones sobre su funcionamiento y ejecución visual.

Cargado por

YEFERSON SC
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y DE SISTEMAS


“COMPUTACIÓN GRÁFICA I”

DOCENTE:
-​ HANS HARLEY CCACYAHUILLCA BEJAR
INTEGRANTES:
-​ Yeferson Supa Cusipaucar 220553

CUSCO - PERÚ
2025
from [Link] import *
from [Link] import *
from [Link] import *
import sys

estado = 0

def init():
glClearColor(1.0, 1.0, 1.0, 1.0) # fondo blanco
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 400.0, 0.0, 300.0)

def DibujaTriangulo():
glColor3f(0.0, 0.0, 0.0)
glBegin(GL_TRIANGLES)
glVertex2f(0.0, 0.0)
glVertex2f(50.0, 0.0)
glVertex2f(25.0, 50.0)
glEnd()

def display():
global estado
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

glPushMatrix() # Guardamos el estado de la matriz actual

# Para centrar el triángulo original, lo movemos a (175, 125)


glTranslatef(175.0, 125.0, 0.0)

if estado == 0:
DibujaTriangulo()

elif estado == 1:
# Escalado desde el centro del triángulo
glTranslatef(25.0, 25.0, 0.0) # mover al centro del
triángulo
glScalef(2.0, 2.0, 1.0)
glTranslatef(-25.0, -25.0, 0.0) # volver al origen
DibujaTriangulo()

elif estado == 2:
# Escalado y rotación desde el centro
glTranslatef(25.0, 25.0, 0.0)
glScalef(2.0, 2.0, 1.0)
glRotatef(30.0, 0.0, 0.0, 1.0)
glTranslatef(-25.0, -25.0, 0.0)
DibujaTriangulo()

elif estado == 3:
# Traslación, rotación, escalado (todo desde el centro)
glTranslatef(80.0, 20.0, 0.0)
glTranslatef(25.0, 25.0, 0.0)
glScalef(2.0, 2.0, 1.0)
glRotatef(30.0, 0.0, 0.0, 1.0)
glTranslatef(-25.0, -25.0, 0.0)
DibujaTriangulo()

glPopMatrix() # Restauramos el estado anterior de la matriz


glFlush()

def timer(value):
global estado
estado = (estado + 1) % 4
glutPostRedisplay()
glutTimerFunc(3000, timer, 0)

def main():
glutInit([Link])
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(400, 300)
glutInitWindowPosition(100, 100)
glutCreateWindow(b"Transformaciones progresivas en triangulo")
init()
glutDisplayFunc(display)
glutTimerFunc(3000, timer, 0)
glutMainLoop()

if __name__ == "__main__":
main()

Consideraciones:
-​ El código presentado funciona de la siguiente manera se agrupan en tres estados
principales (escalado,rotado y traslado).
-​ Se usa la librería time, de tal forma que el triángulo cada 3 segundos haga un cambio
de estado.
-​ El triángulo inicialmente se encontrará en su forma inicial (sin ningún cambio).
Ejecución:​
Estado inicial:​
Primer estado (escalado):​

Segundo estado (rotado):


Tercer estado (traslado):​
from [Link] import *
from [Link] import *
from [Link] import *
import sys

estado = 0 # Controla qué transformación se aplica

def init():
glClearColor(1.0, 1.0, 1.0, 1.0) # Fondo blanco
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 400.0, 0.0, 300.0) # Área de dibujo

def DibujaCuadrado():
# Cuadrado azul centrado en (0,0)
glColor3f(0.0, 0.0, 1.0)
glBegin(GL_QUADS)
glVertex2f(-25.0, -25.0)
glVertex2f(25.0, -25.0)
glVertex2f(25.0, 25.0)
glVertex2f(-25.0, 25.0)
glEnd()

def display():
global estado
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

glPushMatrix()

if estado == 0:
# Estado 0: Cuadrado original centrado
glTranslatef(200.0, 150.0, 0.0)

elif estado == 1:
# Estado 1: Solo traslación
glTranslatef(150.0, 100.0, 0.0)

elif estado == 2:
# Estado 2: Traslación + Rotación alrededor del centro del
cuadrado
glTranslatef(150.0, 100.0, 0.0)
glTranslatef(25.0, 25.0, 0.0) # mover al centro del cuadrado
glRotatef(45.0, 0.0, 0.0, 1.0)
glTranslatef(-25.0, -25.0, 0.0) # regresar a la posición original

DibujaCuadrado()
glPopMatrix()
glFlush()

def timer(value):
global estado
if estado < 2:
estado += 1
glutPostRedisplay()
glutTimerFunc(3000, timer, 0) # Cada 3 segundos cambia

def main():
glutInit([Link])
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(400, 300)
glutInitWindowPosition(100, 100)
glutCreateWindow(b"Transformaciones por pasos - Cuadrado")
init()
glutDisplayFunc(display)
glutTimerFunc(3000, timer, 0)
glutMainLoop()

if __name__ == "__main__":
main()

Consideraciones:
-​ El cuadrado se muestra en un estadio inicial (sin ningún cambio).
-​ Posteriormente se hace los 2 cambios de estado (traslación y rotación).
-​ Se incluye la librería time para que el cambio de estado sea cada 3 segundos.
Ejecución​
Estadio inicial (sin cambios):​
Primer estado (traslación):​


Segundo estado (rotación):​


from [Link] import *
from [Link] import *
from [Link] import *
import sys
# Ángulo global de rotación
angle = 0.0

def initGL():
glClearColor(0.0, 0.0, 0.0, 1.0) # Fondo negro
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-300, 300, -300, 300, -1.0, 1.0) # Vista ortográfica 2D
glMatrixMode(GL_MODELVIEW)

def drawE():
# Cuerpo vertical de la E
glBegin(GL_QUADS)
glColor3f(0.7, 0.7, 0.7)
glVertex2f(-100, -150)
glVertex2f(-50, -150)
glVertex2f(-50, 150)
glVertex2f(-100, 150)
glEnd()

# Barra superior
glBegin(GL_QUADS)
glVertex2f(-50, 100)
glVertex2f(100, 100)
glVertex2f(100, 150)
glVertex2f(-50, 150)
glEnd()

# Barra del medio


glBegin(GL_QUADS)
glVertex2f(-50, -25)
glVertex2f(75, -25)
glVertex2f(75, 25)
glVertex2f(-50, 25)
glEnd()

# Barra inferior
glBegin(GL_QUADS)
glVertex2f(-50, -150)
glVertex2f(100, -150)
glVertex2f(100, -100)
glVertex2f(-50, -100)
glEnd()

def display():
global angle
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()

# Rotar toda la figura "E"


glPushMatrix()
glTranslatef(0.0, 0.0, 0.0) # Centro de rotación
glRotatef(angle, 0.0, 0.0, 1.0) # Rotar sobre el eje Z
drawE()
glPopMatrix()

glutSwapBuffers()
angle += 0.1 # Incremento de ángulo para animación

def idle():
glutPostRedisplay()

def main():
glutInit([Link])
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(600, 600)
glutInitWindowPosition(100, 100)
glutCreateWindow(b"Rotacion animada de la letra E")
glutDisplayFunc(display)
glutIdleFunc(idle)
initGL()
glutMainLoop()

if __name__ == "__main__":
main()



Consideraciones:
-​ En primer lugar se dibuja la E formado por rectángulos.
-​ Aplica una rotación animada en torno al centro de la figura.
-​ Usa glutIdleFunc para animar constantemente.


Ejecución:​
Varias tomas de la animación:​

También podría gustarte