-
Notifications
You must be signed in to change notification settings - Fork 0
/
rotate-triangle.py
98 lines (83 loc) · 2.21 KB
/
rotate-triangle.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GL import shaders
import sys
import numpy as np
VERTEX_SHADER = """
attribute vec2 pos;
uniform float moveTime;
uniform float scaleTime;
uniform float angle;
vec2 rotate(vec2 pos) {
float x = (pos.x)*cos(angle)-pos.y*sin(angle)-0.5;
float y = (pos.x)*sin(angle) + pos.y*cos(angle);
return vec2(x,y);
}
void main() {
gl_Position = vec4(rotate(pos),0,1);
}
"""
FRAGMENT_SHADER = """
uniform float time;
void main() {
gl_FragColor = vec4(sin(2.0*time),cos(2.0*time),0,1);
}
"""
shaderProgram = None
def init():
global VERTEX_SHADER
global FRAGMENT_SHADER
global shaderProgram
vertex_shader = shaders.compileShader(VERTEX_SHADER, GL_VERTEX_SHADER)
fragment_shader = shaders.compileShader(FRAGMENT_SHADER, GL_FRAGMENT_SHADER)
shaderProgram = shaders.compileProgram(vertex_shader, fragment_shader)
buffer = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, buffer)
x1 = -0.5
y1 = -0.5
vertices = [0.0,-0.5,
0.0,0.5,
-0.5,0.0,
]
vertices = np.array(vertices, dtype = 'float32')
buffer = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, buffer)
glBufferData(GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL_STATIC_DRAW)
pos = glGetAttribLocation(shaderProgram, "pos")
glVertexAttribPointer(pos, 3, GL_FLOAT, GL_FALSE, 0, None)
glEnableVertexAttribArray(pos)
global ANGLE
global TIME1
global scaleTime
ANGLE = glGetUniformLocation(shaderProgram, "angle")
TIME1 = glGetUniformLocation(shaderProgram,"time")
scaleTime = glGetUniformLocation(shaderProgram,"scaleTime")
moveTime = glGetUniformLocation(shaderProgram,"moveTime")
TIME = 0.0
def timer(x):
global TIME
TIME += 1/50
glutPostRedisplay()
glutTimerFunc(25, timer, 0)
def render():
glClearColor(TIME % 1,1,1,1)
glClear(GL_COLOR_BUFFER_BIT)
glUseProgram(shaderProgram)
glUniform1f(ANGLE, TIME)
glUniform1f(TIME1,TIME)
glUniform1f(scaleTime,TIME)
glDrawArrays(GL_TRIANGLES, 0, 3)
glUseProgram(0)
glutSwapBuffers()
def main():
glutInit()
glutInitDisplayMode(GLUT_RGB)
glutInitWindowSize(640,640)
glutInitWindowPosition(200,200)
glutCreateWindow("Triangle")
init()
glutDisplayFunc(render)
glutTimerFunc(25, timer, 0)
glutMainLoop()
if __name__ == "__main__":
main()