import appuifw, key_codes, glcanvas, e32
from gles import *

vertices = array(GL_BYTE, 3, [
-1,1,1, 1,1,1, 1,-1,1, -1,-1,1,
-1,1,-1, 1,1,-1, 1,-1,-1, -1,-1,-1 ])
triangles = array(GL_UNSIGNED_BYTE, 3, [
1,0,3, 1,3,2, 2,6,5, 2,5,1, 7,4,5, 7,5,6,
0,4,7, 0,7,3, 5,4,0, 5,0,1, 3,7,6, 3,6,2 ])
colors = array(GL_UNSIGNED_BYTE, 4, [
0,255,0,255, 0,0,255,255, 0,255,0,255, 255,0,0,255,
0,0,255,255, 255,0,0,255, 0,0,255,255, 0,255,0,255 ])

running = 1
turning_axis = 0

def resize():
#Resize handler
glViewport(0, 0, canvas.size[0], canvas.size[1])
aspect = float(canvas.size[1]) / float(canvas.size[0])
glMatrixMode( GL_PROJECTION )
glLoadIdentity()
glFrustumf( -1.0, 1.0, -1.0*aspect, 1.0*aspect, 3.0, 1000.0 )

def initgl():
global render
#Initializes OpenGL and sets up the rendering environment
glClearColor( 0.0, 0.0, 0.0, 1.0 )# Set the screen background color.
glEnable( GL_CULL_FACE )# Enable back face culling.
resize()# Initialize viewport and projection.
glMatrixMode( GL_MODELVIEW )
glEnableClientState( GL_VERTEX_ARRAY )# Enable vertex arrays.
glVertexPointerb(vertices)# Set array pointers.
glEnableClientState( GL_COLOR_ARRAY ) # Enable color arrays.
glColorPointerub(colors )# Set color pointers.
glShadeModel( GL_SMOOTH )# Set the initial shading mode
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST )# no perspective correction

def drawbox(aSizeX, aSizeY, aSizeZ):
#Draws a box with triangles.Scales the box to the given size using glScalef.
glScalef( aSizeX, aSizeY, aSizeZ )
glDrawElementsub( GL_TRIANGLES, triangles )

def redraw(frame):
global turning_axis
#Draws & animates the objects. The frame number determines the amount of rotation.
iFrame = frame
glMatrixMode( GL_MODELVIEW )
cameraDistance = 100
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )

# Animate and draw box
glLoadIdentity()
glTranslatex( 0 , 0 , -cameraDistance << 16 )
if turning_axis == 0:
glRotatex( iFrame << 16,1 << 16,0,0)
glRotatex( iFrame << 16,0,1 << 16,0)
glRotatex( iFrame << 16,0,0,1 << 16)
elif turning_axis == 1:
glRotatex( iFrame << 16,1 << 16,0,0)
elif turning_axis == 2:
glRotatex( iFrame << 16,0,1 << 16,0)
elif turning_axis == 3:
glRotatex( iFrame << 16,0,0,1 << 16)
drawbox( 15.0, 15.0, 15.0 )

def set_exit():
global running, canvas
canvas=None
running = 0

def keys(event):
global turning_axis
if event['keycode'] == key_codes.EKeyDownArrow: turning_axis = 1
elif event['keycode'] == key_codes.EKeyRightArrow: turning_axis = 2
elif event['keycode'] == key_codes.EKeyLeftArrow: turning_axis = 3
elif event['keycode'] == key_codes.EKeyUpArrow: turning_axis = 0

appuifw.app.exit_key_handler=set_exit
appuifw.app.screen = 'normal'
canvas=glcanvas.GLCanvas(redraw_callback=redraw, event_callback=keys, resize_callback=resize)
appuifw.app.body=canvas
initgl()

while running:
canvas.drawNow()
e32.ao_sleep(0.0001)

創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()