В скрипте 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()

Ответы (0 шт):