Я бы хотел изменить положение на окружность, треугольники, линии и дугу.
То есть вы уже нарисовали сцену и теперь хотите изменить положение объектов?
Итак, все, что вам нужно понять, это то, что OpenGL не поддерживает своего рода граф сцены. После отправки запроса на отрисовку, вещи получают только обновления в целевом кадровом буфере, и все. Вы хотите что-то изменить? Очистить экран, перерисовать все, но теперь с примененными настройками.
Действительно, OpenGL просто рисует вещи, это не более чем сложные кисти (текстуры) и карандаши (примитивы) для некоторой бумаги, предлагаемой операционной системой (область просмотра / окно).
РЕДАКТИРОВАТЬ согласно комментарию
Обычная интерактивная графическая программа OpenGL с анимацией, запрограммированная на императивном языке программирования, имеет такую структуру (псевдокод)
float T = 0
float alpha = 0, beta = 0
float red = 0, green = 0, blue = 0
paused = false
on_mousemove(mousemove):
alpha += mousemove.rel_x
beta += mousemove.rel_y
on_keypress(keypress):
switch keypress.key:
case Key_ESCAPE:
queue_event(Quit)
return
case Key_PAUSE:
paused = not paused
case Key_R:
red += 0.1
case Key_r:
red -= 0.1
case Key_G:
green += 0.1
case Key_g:
green -= 0.1
case Key_B:
blue += 0.1
case Key_b:
blue -= 0.1
queue_event(Redraw)
render()
glViewport(0, 0, window.width, window.height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
apply_projection()
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
apply_modelview()
glColor3f(red, green, blue)
glRotatef(T * x_revolutions_per_second_factor, 1, 0, 0)
glRotatef(alpha, 0, 1, 0)
glRotate(beta, 0, 0, 1)
draw_object()
SwapBuffers()
main:
initialize_libraries()
load_resources()
create_window_and_OpenGL_context()
previous_loop = get_time()
loop 'eventloop':
event = peek_event()
switch event.type:
case MouseMove:
on_mousemove(event.mousemove)
case KeyPress:
on_keypress(event.keypress)
case Quit:
break 'eventloop'
case Redraw:
render()
break
case NoEvents:
fallthrough
default:
if not paused
render()
current_loop = get_time()
if not paused:
T += current_loop - previous_loop
previous_loop = current_loop