В скрипте OpenGL как построить икосаэдр на Python
Начинаю разбираться с работе библиотеки OpenGL. Как понял, есть API GLUT, в котором реализован метод построения икосаэдра. Понятно, что модуль написан не под Python. Возможно, есть, кто сталкивался с тем, как реализовать метод.
Первоначально я нашел библиотеку glfw и, соответственно инструкциям, создал инициализировал модуль и создал окно. Как теперь с помощью GLUT определить икосаэдр - затрудняюсь. Есть алгоритм сделать это с помощью библиотеки math, однако это не для меня, т.к. в дальнейшем мне понадобится фигуру вращать по кругу (вокруг цилиндра) и добавить вход-выход из тумана.
Код:
import glfw
from OpenGL.GL import *
# источник вершин
vertex_src = """
# version 330 core
layout(location = 0) in vec3 a_position;
layout(location = 1) in vec3 a_color;
out vec3 v_color;
void main()
{
gl_Position = vec4(a_position, 1.0);
v_color = a_color;
}
"""
# Источник фрагментов
fragment_src = """
# version 330 core
in vec3 v_color;
layout (location = 0) out vec4 out_color;
void main()
{
out_color = vec4(v_color, 1.0);
}
"""
def window_resize(window, width, height):
# функция изменения размера окна
"""
Функция glViewport задает окно просмотра
"""
glViewport(0, 0, width, height)
# инициализация библиотеки glfw
if not glfw.init():
raise Exception('Бибиотека glfw не может быть инициализирована')
# создаем окно
window = glfw.create_window(1280, 720, 'Моя программа', None, None)
# проверим, правильно ли окно было создано
if not window:
glfw.terminate()
raise Exception('Окно glfw не может быть создано')
# установим положение окна
glfw.set_window_pos(window, 400, 200)
# установим функцию обратного вызова для изменения размера окна
glfw.set_window_size_callback(window, window_resize)
# сделаем контекст текущим (передадим фунции переменную window)
glfw.make_context_current(window)
while not glfw.window_should_close(window):
glfw.poll_events()
# закроем glfw, освободим выделенные ресурсы памяти
glfw.terminate()