Как я могу сказать OpenGL, как часто рисовать вещи? - PullRequest
1 голос
/ 03 июня 2011

Хорошо, я буду звучать как идиот с этим.Вот так.

Я занимаюсь разработкой для iOS уже около года, но только сегодня вечером я начал делать что-нибудь, связанное с OpenGL.Я следовал за замечательным руководством Джеффа Ламарша, и я рисую аккуратный треугольник, и я получил его, чтобы переворачивать и все такое.Я один увлеченный программист.

Хорошо, вот глупая часть вопроса: как я могу установить где-нибудь для OpenGL непрерывное выполнение glRotatef и glDrawArrays + друзей или с заданными кадрами в секунду?Я пробовал поискать его в Google, но на самом деле не могу придумать хороших поисковых терминов.

Заранее спасибо, и будьте готовы задать еще тонну этих вопросов.

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

В то время как другие делают хорошие предложения для общего случая OpenGL ES, я знаю, что вы, вероятно, работаете над iOS здесь, Уилл, так что есть лучшая альтернатива для конкретной платформы.Я полагаю, что в вашем случае вам будет лучше обслуживать CADisplayLink, который запускает обратные вызовы, синхронизированные с частотой обновления экрана.Используя это, вы получите гораздо более плавные обновления, чем при использовании таймера или какого-либо опроса внутри цикла.

Это особенно эффективно в сочетании с Grand Central Dispatch, как я опишу в своем ответе здесь.Когда я переключился с использования цикла на CADisplayLink для обновлений, мой рендеринг стал намного более плавным на всех устройствах iOS из-за меньшего количества пропущенных кадров.Добавление GCD к тому же сделало вещи еще лучше.

Вы можете обратиться к моему Molecules коду для примера этого в действии (см. SLSMoleculeGLViewController, чтобы узнать, как мой автоповорот анимируется этим),Шаблон приложения Apple OpenGL ES также использует CADisplayLink для обновлений, последний раз я проверял.

1 голос
/ 03 июня 2011

Вы должны прочитать концепцию игровых циклов.

http://entropyinteractive.com/2011/02/game-engine-design-the-game-loop/ хороший ресурс для начала.

0 голосов
/ 03 июня 2011

Ну, я не эксперт по этому вопросу, но разве вы не можете просто поместить команды поворота / рисования в цикл while, который заканчивается при нажатии определенной кнопки или при наступлении определенного события?

...