В настоящее время я работаю над 3D гоночной машиной для платформы iOS. Мне пришлось внедрить систему воспроизведения, а затем записать это воспроизведение в видеофайл, чтобы загрузить его на YouTube.
У меня проблемы только с записью, остальное сделано. Я использую glReadPixels()
команду OpenGL ES 1.1 для захвата содержимого кадрового буфера и создания видео из этих кадров во время выполнения (используя инфраструктуру AVFoundation).
Проблема, с которой я сталкиваюсь, заключается в том, что мне приходится звонить glReadPixels()
в каждом обновлении, которое очень медленно. Уменьшается FPS с 30 до 2-3 ... Есть ли альтернатива glReadPixels()
команде? Или кто-нибудь создал систему воспроизведения и записал на видео?
Я думаю, что самый простой способ - записывать действия пользователя и ИИ и состояние во время игры, а не реальные кадры. После того, как игровой процесс закончился, либо игрок, завершивший гонку, либо вернувшись в главное меню, ему предоставляется возможность просмотреть повтор (или сохранить его), и только тогда эти действия используются для воссоздания кадров путем воспроизведения действий и состояние через игровой движок. Это дает дополнительное преимущество, заключающееся в том, что (по существу) нет необходимости рисовать каждый полный кадр несколько раз во время игры.
источник