First I went to http://www.python.org and downloaded the latest version of Python for windows. I made sure to select the option to add it to the system path.
Then I opened windows PowerShell (just a nicer term)
py -m pip install pygame --user py -m pip install numpy --user py -m pip install pyopengl --user
(I also installed NoteTab++, a nice text editor)
From there, I went to github and copied one of the examples from https://github.com/pygame/pygame/blob/master/examples/glcube.py and saved it on my desktop as myglcube.py.
In PowerShell, you just type:
cd Desktop py -m myglcube
Here is my example:
(here is the code)
#!/usr/bin/env python | |
"""Draw a cube on the screen. every frame we orbit | |
the camera around by a small amount and it appears | |
the object is spinning. note i've setup some simple | |
data structures here to represent a multicolored cube, | |
we then go through a semi-unopimized loop to draw | |
the cube points onto the screen. opengl does all the | |
hard work for us. :] | |
""" | |
import time | |
import pygame | |
from pygame.locals import * | |
try: | |
from OpenGL.GL import * | |
from OpenGL.GLU import * | |
except ImportError: | |
print ('The GLCUBE example requires PyOpenGL') | |
raise SystemExit | |
#some simple data for a colored cube | |
#here we have the 3D point position and color | |
#for each corner. then we have a list of indices | |
#that describe each face, and a list of indieces | |
#that describes each edge | |
CUBE_POINTS = ( | |
(0.5, –0.5, –0.5), (0.5, 0.5, –0.5), | |
(–0.5, 0.5, –0.5), (–0.5, –0.5, –0.5), | |
(0.5, –0.5, 0.5), (0.5, 0.5, 0.5), | |
(–0.5, –0.5, 0.5), (–0.5, 0.5, 0.5) | |
) | |
#colors are 0-1 floating values | |
CUBE_COLORS = ( | |
(1, 0, 0), (1, 1, 0), (0, 1, 0), (0, 0, 0), | |
(1, 0, 1), (1, 1, 1), (0, 0, 1), (0, 1, 1) | |
) | |
CUBE_QUAD_VERTS = ( | |
(0, 1, 2, 3), (3, 2, 7, 6), (6, 7, 5, 4), | |
(4, 5, 1, 0), (1, 5, 7, 2), (4, 0, 3, 6) | |
) | |
CUBE_EDGES = ( | |
(0,1), (0,3), (0,4), (2,1), (2,3), (2,7), | |
(6,3), (6,4), (6,7), (5,1), (5,4), (5,7), | |
) | |
def drawcube(): | |
"draw the cube" | |
allpoints = list(zip(CUBE_POINTS, CUBE_COLORS)) | |
glBegin(GL_QUADS) | |
for face in CUBE_QUAD_VERTS: | |
for vert in face: | |
pos, color = allpoints[vert] | |
glColor3fv(color) | |
glVertex3fv(pos) | |
glEnd() | |
glColor3f(1.0, 1.0, 1.0) | |
glBegin(GL_LINES) | |
""" | |
for line in CUBE_EDGES: | |
for vert in line: | |
pos, color = allpoints[vert] | |
glVertex3fv(pos) | |
""" | |
for x in range(–50,50): | |
glColor3f(x*.03%1.0, x*.04%1.0, x*.05%1.0) | |
glVertex3fv((x, 0, –100)) | |
glVertex3fv((x, 0, 100)) | |
glVertex3fv((–100, 0, x)) | |
glVertex3fv((100, 0, x)) | |
glEnd() | |
def main(): | |
"run the demo" | |
#initialize pygame and setup an opengl display | |
pygame.init() | |
pygame.display.set_mode((1024,768), OPENGL|DOUBLEBUF) | |
glEnable(GL_DEPTH_TEST) #use our zbuffer | |
#setup the camera | |
glMatrixMode(GL_PROJECTION) | |
gluPerspective(45.0,1024/768.0,0.1,100.0) #setup lens | |
glTranslatef(0.0, 0.0, –20.0) #move back | |
glRotatef(60, 1, 0, 0) #orbit higher | |
nt = int(time.time() * 1000) | |
for i in range(2**63): | |
nt += 20 | |
glTranslatef(0.0, 0.0, –.1) | |
#check for quit'n events | |
event = pygame.event.poll() | |
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): | |
break | |
#clear screen and move camera | |
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) | |
#orbit camera around by 1 degree | |
glRotatef(1, 0, 1, 0) | |
drawcube() | |
pygame.display.flip() | |
ct = int(time.time() * 1000) | |
pygame.time.wait(max(1,nt – ct)) | |
if i % 50 == 0: | |
print(nt–ct) | |
if __name__ == '__main__': main() |
Pingback: 2D Sinewave Example Using PyOpenGL – The Gahooa Perspective