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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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