import pygame import numpy import ctypes import sys from OpenGL.GL import * from OpenGL.GLU import * pygame.display.init() pygame.display.set_mode((640, 480), pygame.OPENGL|pygame.DOUBLEBUF) glViewport(0, 0, 640, 480) glClearColor(0.0, 0.0, 0.0, 1.0) triangle_verticies = numpy.array([-20.0, -20.0, 0.0, 20.0, -20.0, 0.0, 0.0, 20.0, 0.0], dtype=numpy.float32) projection_matrix = numpy.array([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], dtype=numpy.float32) view_matrix = numpy.array([1.0, 0.0, 0.0, 320.0, 0.0, 1.0, 0.0, 240.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0], dtype=numpy.float32) mvp_matrix = projection_matrix * view_matrix triangle_buffer_handle = glGenBuffers(1) glBindBuffer(GL_ARRAY_BUFFER, triangle_buffer_handle) glBufferData(GL_ARRAY_BUFFER, triangle_verticies, GL_STATIC_DRAW) v_shader_source = "attribute vec4 v_position;\n" +\ "uniform mat4 uMVPMatrix;\n" +\ "void main()\n" +\ "{\n"+\ " gl_Position = uMVPMatrix * v_position;\n" +\ "}\n" f_shader_source = "void main()\n" +\ "{\n" +\ " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n" +\ "}\n" v_shader_handle = glCreateShader(GL_VERTEX_SHADER) glShaderSource(v_shader_handle, v_shader_source) glCompileShader(v_shader_handle) vs_compile_status = ctypes.c_int(-24) glGetShaderiv(v_shader_handle, GL_COMPILE_STATUS, vs_compile_status) if vs_compile_status.value == 0: print glGetShaderInfoLog(v_shader_handle) sys.exit(0) f_shader_handle = glCreateShader(GL_FRAGMENT_SHADER) glShaderSource(f_shader_handle, f_shader_source) glCompileShader(f_shader_handle) s_program_handle = glCreateProgram() glAttachShader(s_program_handle, v_shader_handle) glAttachShader(s_program_handle, f_shader_handle) glLinkProgram(s_program_handle) link_status = ctypes.c_int(-24) glGetProgramiv(s_program_handle, GL_LINK_STATUS, link_status) glUseProgram(s_program_handle) v_position_handle = glGetAttribLocation(s_program_handle, "v_position") mvp_matrix_handle = glGetUniformLocation(s_program_handle, "uMVPMatrix") clock = pygame.time.Clock() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False clock.tick(40) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glVertexAttribPointer(v_position_handle, 3, GL_FLOAT, GL_FALSE, 0, triangle_verticies) glEnableVertexAttribArray(v_position_handle) glUniformMatrix4fv(mvp_matrix_handle, 1, GL_FALSE, mvp_matrix) glDrawArrays(GL_TRIANGLES, 0, 3) pygame.display.flip()