Запись игрового процесса в самой игре?

8

В настоящее время я работаю над 3D гоночной машиной для платформы iOS. Мне пришлось внедрить систему воспроизведения, а затем записать это воспроизведение в видеофайл, чтобы загрузить его на YouTube.

У меня проблемы только с записью, остальное сделано. Я использую glReadPixels()команду OpenGL ES 1.1 для захвата содержимого кадрового буфера и создания видео из этих кадров во время выполнения (используя инфраструктуру AVFoundation).

Проблема, с которой я сталкиваюсь, заключается в том, что мне приходится звонить glReadPixels()в каждом обновлении, которое очень медленно. Уменьшается FPS с 30 до 2-3 ... Есть ли альтернатива glReadPixels()команде? Или кто-нибудь создал систему воспроизведения и записал на видео?

Торнадо
источник

Ответы:

8

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

bummzack
источник
k этот подход является новым и заслуживает проверки ... эй, ты делал это раньше?
Торнадо
1
Нет, я не делал этого раньше Но я бы реализовал систему воспроизведения, как описано в этом вопросе, а затем визуализировал бы кадры за кадром, возможно, используя подход рендеринга к текстуре после окончания гонки.
bummzack
2
Я думаю, что большинство игр делают это (Starcraft для одного определенно делает). Тем не менее, вы должны убедиться, что ваша симуляция полностью детерминирована, то есть, предоставляя определенный набор входных данных, вы ВСЕГДА будете иметь одинаковые выходные данные. Кроме того, ваши данные воспроизведения значительно меньше и доступны для совместного использования.
пекин
@bummzack - ссылки, которые вы предоставили, будут очень полезны для меня ... спасибо за это
Торнадо
0

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

Casey
источник
2
Я в основном дал тот же ответ. Что отличает ваш подход от моего?
bummzack
Единственное предостережение: если у вас недетерминированный ИИ. Поскольку это гоночная игра, вы должны убедиться, что все гонщики ИИ ведут себя одинаково, когда вы воспроизводите данные воспроизведения игрока.
Apreche