-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlab3.py
More file actions
110 lines (98 loc) · 2.77 KB
/
lab3.py
File metadata and controls
110 lines (98 loc) · 2.77 KB
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
99
100
101
102
103
104
105
106
107
108
109
from OpenGL.GL import *
import glfw
import math
angle = 0.0
ang=0.0
seen=0
def main():
if not glfw.init():
return
window = glfw.create_window(640, 640, "Lab3", None, None)
if not window:
glfw.terminate()
return
glfw.make_context_current(window)
glfw.set_key_callback(window, key_callback)
while not glfw.window_should_close(window):
display(window)
glfw.destroy_window(window)
glfw.terminate()
def Prizm(n, ang):
g=360/n
angle=math.radians(g)
vertex=[0]*(2*n*3)
# вершины
for i in range(n):
vertex[i*3]=math.cos(angle*i)*0.5
vertex[i*3+1]=math.sin(angle*i)*0.5
vertex[i*3+2]=-0.5
for i in range(n):
vertex[(i+n)*3]=math.cos(angle*i+ang)*0.25
vertex[(i+n)*3+1]=math.sin(angle*i+ang)*0.25
vertex[(i+n)*3+2]=0.5
#грани
for i in range(n):
glBegin(GL_LINES)
tup=(vertex[i*3], vertex[i*3+1], vertex[i*3+2])
glVertex3fv(tup)
tup=(vertex[(i+n)*3], vertex[(i+n)*3+1], vertex[(i+n)*3+2])
glVertex3fv(tup)
glEnd()
for i in range(n-1):
glBegin(GL_LINES)
tup=(vertex[i*3], vertex[i*3+1], vertex[i*3+2])
glVertex3fv(tup)
tup=(vertex[(i+1)*3], vertex[(i+1)*3+1], vertex[(i+1)*3+2])
glVertex3fv(tup)
glEnd()
for i in range(n-1):
glBegin(GL_LINES)
tup=(vertex[(i+n+1)*3], vertex[(i+n+1)*3+1], vertex[(i+n+1)*3+2])
glVertex3fv(tup)
tup=(vertex[(i+n)*3], vertex[(i+n)*3+1], vertex[(i+n)*3+2])
glVertex3fv(tup)
glEnd()
glBegin(GL_LINES)
tup=(vertex[(n-1)*3], vertex[(n-1)*3+1], vertex[(n-1)*3+2])
glVertex3fv(tup)
tup=(vertex[0], vertex[1], vertex[2])
glVertex3fv(tup)
tup=(vertex[(2*n-1)*3], vertex[(2*n-1)*3+1], vertex[(2*n-1)*3+2])
glVertex3fv(tup)
tup=(vertex[(n)*3], vertex[(n)*3+1], vertex[(n)*3+2])
glVertex3fv(tup)
glEnd()
def display(window):
global seen
global angle
global angle1
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glClearColor(1.0, 1.0, 1.0, 1.0)
glPushMatrix()
glRotatef(angle, 1, 1, 1)
glColor3f(1.0,0.5,1.0)
Prizm(4, ang)
#Cube(vertices, edges)
glPopMatrix()
glfw.swap_buffers(window)
glfw.poll_events()
def key_callback(window, key, scancode, action, mods):
global seen
global angle
global ang
if action == glfw.PRESS:
if key == glfw.KEY_RIGHT:
angle += 10
if key == 263: # glfw.KEY_LEFT
angle -= 1
if key == glfw.KEY_SPACE:
if seen==0:
seen=1
else:
seen=0
if key == glfw.KEY_UP:
ang += 1
if key == glfw.KEY_DOWN:
ang -= 1
main()