This repository was archived by the owner on Jul 1, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstep1.py
54 lines (45 loc) · 2.06 KB
/
step1.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
import numpy as np
from vispy import gloo
from vispy import app
"""
1 этап.
Создать окно приложения, контекст OpenGL.
Очистить фон и отрисовать одну точку.
"""
""" Это исходник вершинного шейдера, он будет вызывается для каждой вершины (точки) в отрисовываемой сцене.
Шейдеры пишутся на языке GLSL, который представляет собой C++ с рядом ограничений и расширений."""
vert = ("""#version 120
attribute vec2 a_position;
void main (void) {
gl_Position = vec4(a_position.xy,1,1);
}"""
)
""" Это исходный текст шейдера фрагменов, он отвечает за определение цвета отображаемых на экране пикселя
(чуть сложнее, если разрешить смешивание цветов)."""
frag = ("""#version 120
void main() {
gl_FragColor = vec4(0.5,0.5,1,1);
}"""
)
class Canvas(app.Canvas):
""" холст """
def __init__(self):
"""конструктор обьекта окна"""
app.Canvas.__init__(self, title="step 1", size=(300, 300), vsync=True)
gloo.set_state(clear_color=(0, 0, 0, 1), depth_test=False, blend=False)
self.program = gloo.Program(vert, frag)
self.program["a_position"] = np.array([[0, 0]], dtype=np.float32)
self.activate_zoom()
self.show()
def activate_zoom(self):
"""установка размера окна"""
self.width, self.height = self.size
print(self.width, self.height)
gloo.set_viewport(0, 0, *self.physical_size)
def on_draw(self, event):
"""перерисовка окна"""
gloo.clear()
self.program.draw('points')
if __name__ == '__main__':
c = Canvas() # обьект приложения
app.run() # обработчик событий.