2009-12-07 3 views
14

Я только что начал использовать OpenGL, и, похоже, нелегко понять работу glutMainLoop(), что на самом деле происходит там? Остается ли там ничего не делать до тех пор, пока какой-либо из вызовов функций не ответит?opengl glutmainloop()

ответ

17

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

В основном, эта функция является основным программным циклом, в котором GLUT выполняет большую часть работы для вас и позволяет вам просто настроить конкретную программную логику в этих обратных вызовах. Прошло некоторое время с тех пор, как я работал с GLUT, и это, конечно, сбивает с толку в первую очередь.

В вашем обратном вызове, очевидно, должна быть ваша основная логика рисовать то, что должно быть, что должно происходить. В режиме ожидания обратного вызова должны быть некоторые очень легкие операции, чтобы определить, какое изменение состояния должно было быть от последнего отображения времени, и вызывался в следующий раз. Например, если вы что-то оживляете, это будет то место, где вы измените свое положение или ориентацию.

+2

Глют напугал меня на всю жизнь –

+1

GLUT болезненна, и это не очень ... на самом деле это отвратило меня от графического программирования. – StrixVaria

+0

Вращение было для меня сумасшедшим, как «wtf, есть z-координата?» Как только я взял физику и выучил некоторые правила, все успокоилось –

4

Как указано в StrixVaria.

glutMainLoop входит в цикл обработки событий GLUT. Эта процедура должна вызываться не более одного раза в программе GLUT. После вызова эта процедура никогда не вернется. Он будет вызывать по необходимости любые обратные вызовы, которые были зарегистрированы.

Взятые из here

2

Использование OpenGL и перенасыщение вместе означает, что вы будете писать программу «GLUT», которая использует команды OpenGL в функции обратного вызова. main содержит функции пересыхания. многие функции перенасыщения требуют регистрации функции обратного вызова. Эти функции обратного вызова обычно содержат команды opengl.

На ваш вопрос, теперь, когда ясно, что вы в основном пишете программу перенасыщения, следует также принять, что вызов функции glutMainLoop фактически выполняет функции обратного вызова как и когда требуется, что в свою очередь выполняет команды opengl.

2

Well glutMainLoop - это основная функция, которая продолжает вызывать и вызывать функции отображения, а также позволяет фактически открывать ваше окно. Вы узнаете, что opengl не так страшен.

Смежные вопросы