from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
import os
import pygame
import time
def myInit():
glClearColor(0.0 , 0.0 , 0.0 , 0.0)
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45,1,0.1,50)
gluLookAt(10,10,10, 0,0,0 ,0,1,0)
glEnable(GL_DEPTH_TEST)
mov = 0
rgh = True
rangle = 0
def display_1():
global mov
global rgh
global rangle
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glColor(1.0,0.7,0.5)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glRotate(90,0,1,0)
glTranslatef(0+mov,0,0)
glScalef(1,0.35,0.5)
glutWireCube(5)
glLoadIdentity()
glRotate(90,0,1,0)
glTranslatef(0+mov,0.25*5,0)
glScale(0.5,0.35,0.5)
glutWireCube(5)
glColor(0,1.3,1)
glLoadIdentity()
glRotate(90,0,1,0)
glTranslatef(2.5+mov,-0.5,0.5*2.5)
glRotate(rangle,0,0,1)
glutWireTorus(0.25,0.5,12,8)
glColor(0,1.3,1)
glLoadIdentity()
glRotate(90,0,1,0)
glTranslatef(2.5+mov,-0.5,-0.5*2.5)
glRotate(rangle,0,0,1)
glutWireTorus(0.25,0.5,12,8)
glColor(0,1.3,1.5)
glLoadIdentity()
glRotate(90,0,1,0)
glTranslatef(-2.5+mov,-0.5,0.5*2.5)
glRotate(rangle,0,0,1)
glutWireTorus(0.25,0.5,12,8)
glColor(0.7,1.3,1)
glLoadIdentity()
glRotate(90,0,1,0)
glTranslatef(-2.5+mov,-0.5,-0.5*2.5)
glRotate(rangle,0,0,1)
glutWireTorus(0.25,0.5,12,8)
glutSwapBuffers()
if mov > 15:
rgh = False
if mov < -5:
rgh = True
if rgh:
mov += 0.0051
rangle -= 0.1
if not rgh:
mov -= 0.0051
rangle += 0.1
def restart_program():
"""Restarts the current program.
Note: this function does not return. Any cleanup action (like
saving data) must be done before calling this function."""
python = sys.executable
os.execl(python, python, * sys.argv)
def pause ():
paused = True
while paused :
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit ()
if event.type == pygame.KEYDOWN:
if event.key == pygame.k_c:
paused = False
elif event.key == pygame.k_q:
pygame.quit()
quit ()
gameDisplay.fill (white)
message_to_screen("Paused",
black,
-100,
size = "large")
message_to_screen ("Press C to continue or Q to quit.",
black,
25)
pygame.display.update ()
clock.tick (5)
pause = False
def keyboard (key,x,y):
if key == b"q" :
sys.exit(0)
if key == b"r" :
restart_program()
if key == b"p":
pause ()
glutInit()
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH )
glutInitWindowSize (500 , 500)
glutCreateWindow(b"wire cube")
glutDisplayFunc(display_1)
glutIdleFunc(display_1)
glutKeyboardFunc(keyboard)
myInit()
glutMainLoop()
ZnJvbSBPcGVuR0wuR0wgaW1wb3J0ICoKZnJvbSBPcGVuR0wuR0xVIGltcG9ydCAqCmZyb20gT3BlbkdMLkdMVVQgaW1wb3J0ICoKaW1wb3J0IHN5cwppbXBvcnQgb3MKaW1wb3J0IHB5Z2FtZQppbXBvcnQgdGltZSAKCmRlZiBteUluaXQoKToKICBnbENsZWFyQ29sb3IoMC4wICwgMC4wICwgMC4wICwgMC4wKQogIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkKICBnbE1hdHJpeE1vZGUoR0xfUFJPSkVDVElPTikKICBnbExvYWRJZGVudGl0eSgpCgogIGdsdVBlcnNwZWN0aXZlKDQ1LDEsMC4xLDUwKQogIGdsdUxvb2tBdCgxMCwxMCwxMCwgMCwwLDAgLDAsMSwwKQoKICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKQoKbW92ID0gMApyZ2ggPSBUcnVlCnJhbmdsZSA9IDAKZGVmIGRpc3BsYXlfMSgpOgoKICAgIGdsb2JhbCBtb3YKICAgIGdsb2JhbCByZ2gKICAgIGdsb2JhbCByYW5nbGUKIAogICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCkKICAgIGdsQ29sb3IoMS4wLDAuNywwLjUpCiAgICBnbE1hdHJpeE1vZGUoR0xfTU9ERUxWSUVXKQoKICAgIGdsTG9hZElkZW50aXR5KCkKICAgIGdsUm90YXRlKDkwLDAsMSwwKQogICAgZ2xUcmFuc2xhdGVmKDArbW92LDAsMCkKICAgIGdsU2NhbGVmKDEsMC4zNSwwLjUpICAKICAgIGdsdXRXaXJlQ3ViZSg1KQogICAgCiAgICBnbExvYWRJZGVudGl0eSgpCiAgICBnbFJvdGF0ZSg5MCwwLDEsMCkKICAgIGdsVHJhbnNsYXRlZigwK21vdiwwLjI1KjUsMCkKICAgIGdsU2NhbGUoMC41LDAuMzUsMC41KQogICAgZ2x1dFdpcmVDdWJlKDUpCgogICAgZ2xDb2xvcigwLDEuMywxKQogICAgZ2xMb2FkSWRlbnRpdHkoKQogICAgZ2xSb3RhdGUoOTAsMCwxLDApCiAgICBnbFRyYW5zbGF0ZWYoMi41K21vdiwtMC41LDAuNSoyLjUpCiAgICBnbFJvdGF0ZShyYW5nbGUsMCwwLDEpCiAgICBnbHV0V2lyZVRvcnVzKDAuMjUsMC41LDEyLDgpCgogICAgZ2xDb2xvcigwLDEuMywxKQogICAgZ2xMb2FkSWRlbnRpdHkoKQogICAgZ2xSb3RhdGUoOTAsMCwxLDApCiAgICBnbFRyYW5zbGF0ZWYoMi41K21vdiwtMC41LC0wLjUqMi41KQogICAgZ2xSb3RhdGUocmFuZ2xlLDAsMCwxKQogICAgZ2x1dFdpcmVUb3J1cygwLjI1LDAuNSwxMiw4KQoKICAgIGdsQ29sb3IoMCwxLjMsMS41KQogICAgZ2xMb2FkSWRlbnRpdHkoKQogICAgZ2xSb3RhdGUoOTAsMCwxLDApCiAgICBnbFRyYW5zbGF0ZWYoLTIuNSttb3YsLTAuNSwwLjUqMi41KQogICAgZ2xSb3RhdGUocmFuZ2xlLDAsMCwxKQogICAgZ2x1dFdpcmVUb3J1cygwLjI1LDAuNSwxMiw4KQoKICAgIGdsQ29sb3IoMC43LDEuMywxKQogICAgZ2xMb2FkSWRlbnRpdHkoKQogICAgZ2xSb3RhdGUoOTAsMCwxLDApCiAgICBnbFRyYW5zbGF0ZWYoLTIuNSttb3YsLTAuNSwtMC41KjIuNSkKICAgIGdsUm90YXRlKHJhbmdsZSwwLDAsMSkKICAgIGdsdXRXaXJlVG9ydXMoMC4yNSwwLjUsMTIsOCkKICAgCgogICAgZ2x1dFN3YXBCdWZmZXJzKCkKCiAgICBpZiBtb3YgPiAxNToKICAgICAgICByZ2ggPSBGYWxzZQogICAgaWYgbW92IDwgLTU6CiAgICAgICAgcmdoID0gVHJ1ZQogICAgaWYgcmdoOgogICAgICAgIG1vdiArPSAwLjAwNTEKICAgICAgICByYW5nbGUgLT0gMC4xCiAgICBpZiBub3QgcmdoOiAKICAgICAgICBtb3YgLT0gMC4wMDUxCiAgICAgICAgcmFuZ2xlICs9IDAuMQoKZGVmIHJlc3RhcnRfcHJvZ3JhbSgpOgogICAgIiIiUmVzdGFydHMgdGhlIGN1cnJlbnQgcHJvZ3JhbS4KICAgIE5vdGU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuLiBBbnkgY2xlYW51cCBhY3Rpb24gKGxpa2UKICAgIHNhdmluZyBkYXRhKSBtdXN0IGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4iIiIKICAgIHB5dGhvbiA9IHN5cy5leGVjdXRhYmxlCiAgICBvcy5leGVjbChweXRob24sIHB5dGhvbiwgKiBzeXMuYXJndikKCmRlZiBwYXVzZSAoKToKICBwYXVzZWQgPSBUcnVlCiAgd2hpbGUgcGF1c2VkIDoKICAgIGZvciBldmVudCBpbiBweWdhbWUuZXZlbnQuZ2V0KCk6CiAgICAgIGlmIGV2ZW50LnR5cGUgPT0gcHlnYW1lLlFVSVQ6CiAgICAgICAgcHlnYW1lLnF1aXQoKQogICAgICAgIHF1aXQgKCkKICAgICAgaWYgZXZlbnQudHlwZSA9PSBweWdhbWUuS0VZRE9XTjoKICAgICAgICBpZiBldmVudC5rZXkgPT0gcHlnYW1lLmtfYzoKICAgICAgICAgIHBhdXNlZCA9IEZhbHNlCiAgICAgICAgZWxpZiBldmVudC5rZXkgPT0gcHlnYW1lLmtfcToKICAgICAgICAgIHB5Z2FtZS5xdWl0KCkKICAgICAgICAgIHF1aXQgKCkKICAgIGdhbWVEaXNwbGF5LmZpbGwgKHdoaXRlKQogICAgbWVzc2FnZV90b19zY3JlZW4oIlBhdXNlZCIsCiAgICAgICAgICAgICAgICAgICAgICBibGFjaywKICAgICAgICAgICAgICAgICAgICAgIC0xMDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXplID0gImxhcmdlIikKICAgIG1lc3NhZ2VfdG9fc2NyZWVuICgiUHJlc3MgQyB0byBjb250aW51ZSBvciBRIHRvIHF1aXQuIiwKICAgICAgICAgICAgICAgICAgICAgICBibGFjaywKICAgICAgICAgICAgICAgICAgICAgICAyNSkKICAgIHB5Z2FtZS5kaXNwbGF5LnVwZGF0ZSAoKQogICAgY2xvY2sudGljayAoNSkKcGF1c2UgPSBGYWxzZQoKZGVmIGtleWJvYXJkIChrZXkseCx5KToKICBpZiBrZXkgPT0gYiJxIiA6CiAgICBzeXMuZXhpdCgwKQogICAgCiAgaWYga2V5ID09IGIiciIgOgogICAgcmVzdGFydF9wcm9ncmFtKCkKCiAgaWYga2V5ID09IGIicCI6CiAgICBwYXVzZSAoKQogIAogIApnbHV0SW5pdCgpCmdsdXRJbml0RGlzcGxheU1vZGUoR0xVVF9ET1VCTEUgfCBHTFVUX1JHQiB8IEdMVVRfREVQVEggKQpnbHV0SW5pdFdpbmRvd1NpemUgKDUwMCAsIDUwMCkKZ2x1dENyZWF0ZVdpbmRvdyhiIndpcmUgY3ViZSIpCmdsdXREaXNwbGF5RnVuYyhkaXNwbGF5XzEpCmdsdXRJZGxlRnVuYyhkaXNwbGF5XzEpCmdsdXRLZXlib2FyZEZ1bmMoa2V5Ym9hcmQpCm15SW5pdCgpCmdsdXRNYWluTG9vcCgpCg==