Как заставить вращаться тор с помощью OpenGL на языке Python?

Рейтинг: 0Ответов: 1Опубликовано: 11.07.2023

Реализую по учебному заданию сцену, в которой тор и икосаэдр должны вращаться вокруг неподвижного цилиндра. Однако на деле у меня в сцене вращается цилиндр вокруг неподвижного тора (а икосаэдр не виден и неподвижен).

Не стану приводить код целиком. Вначале создаю окно, настраиваю параметры OpenGL. Есть функция draw_scene() (устанавливаю позицию камеры, отрисовываю тор и икосаэдр, вкладываю функцию rotate_objects() для вращения и перемещения объектов.

Функция rotate_objects() определяет условия для вращения объектов. Но работает явно неверно. В чем ошибка? Ниже финальный код скрипта:

# Функция для вращения объектов
def rotate_objects():
    global rotation_angle
    
    # Вычислим угол поворота в радианах
    angle_rad = math.radians(rotation_angle)
    
    # Рассчитаем положение цилиндра
    cylinder_x = 2 * math.sin(angle_rad)
    cylinder_y = 0
    cylinder_z = 2 * math.cos(angle_rad)

    
    # Вращение объектов вокруг цилиндра
    glPushMatrix()
    glTranslatef(cylinder_x, cylinder_y, cylinder_z)
    glRotatef(rotation_angle, 0, 1, 0)
    
    # Отрисовка цилиндра
    glColor3f(1, 0, 0)
    gluCylinder(gluNewQuadric(), 0.5, 0.5, 1, 32, 32)
    
    glPopMatrix()

# Основной цикл программы
rotation_angle = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    update_scene()
    draw_scene()

Ответы

▲ 1Принят

в функции glTranslatef(cylinder_x, cylinder_y, cylinder_z) вы явно указываете, что надо преобразовывать координаты цилиндра, следовательно, он будет двигаться вокруг чего-то, а для тора вы не делаете никаких манипуляций с координатами, также не ясно где у вас отрисовываются икосаэдр и тор (на каком этапе кода) и не забывайте о координатах фигур, предполагается, что все фигуры вращаются вокруг центра координат, а чтобы его сместить для каждой фигуры по-своему, надо перед настройкой поворота вычитать у координат фигуры (которая вращается), координаты фигуры (вокруг которой вращаются)