#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last modified: 2018/11/09 19:48:33 # Last updated: <2021/09/30 21:19:15 +0900> """ draw glut teapot on pygame Windows10 x64 + Python 2.7.15 pygame 1.9.4 + PyOpenGL 3.1.0 + PyOpenGL-accelerate 3.1.0 not work Windows10 x64 21H1 + Python 3.9.5 x64 pygame 2.0.1 + PyOpenGL 3.1.5 + PypenGL-accelerate 3.1.5 """ from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * import pygame import sys SCRW, SCRH = 640, 480 running = True screen = None pygame.init() # OPENGL向けに初期化 screen = pygame.display.set_mode((SCRW, SCRH), pygame.OPENGL | pygame.DOUBLEBUF) if not screen: sys.exit() glutInit(sys.argv) glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH) # glutInitWindowSize(SCRW, SCRH) glClearColor(0.0, 0.0, 0.0, 1.0) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0, float(SCRW) / float(SCRH), 0.1, 100.0) # gluOrtho2D(0, SCRW, SCRH, 0) glEnable(GL_DEPTH_TEST) # enable shading clock = pygame.time.Clock() xrot, yrot = (0.0, 0.0) xpos, ypos, zpos = (0.0, 0.0, -5.0) # main loop while running: # clock.tick(60) clock.tick_busy_loop(60) for event in pygame.event.get(): if event.type == pygame.QUIT: self._running = False elif event.type == pygame.KEYDOWN: print(event.key, event.mod, event.unicode) if event.key == pygame.K_ESCAPE or event.key == pygame.K_q: running = False elif event.type == pygame.KEYUP: print(event.key, event.mod) spd = 0.1 pressed_keys = pygame.key.get_pressed() if pressed_keys[pygame.K_UP]: zpos -= spd if pressed_keys[pygame.K_DOWN]: zpos += spd if pressed_keys[pygame.K_LEFT]: xpos -= spd if pressed_keys[pygame.K_RIGHT]: xpos += spd xrot += 0.25 yrot += 1.0 # draw object # Clear OpenGL Buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_MODELVIEW) glLoadIdentity() # set camera gluLookAt(0.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) glTranslatef(xpos, ypos, zpos) glRotatef(xrot, 1.0, 0.0, 0.0) glRotatef(yrot, 0.0, 1.0, 0.0) glScale(1.0, 1.0, 1.0) # draw teapot glColor3f(1.0, 0.0, 0.0) # color red glutWireTeapot(1.0) # wireframe # glutSolidTeapot(1.0) # solid # OpenGL drawing glFlush() # flip pygame double buffer pygame.display.flip() cap = '%5.2f FPS' % (clock.get_fps()) pygame.display.set_caption(cap) pygame.quit()