Atualmente, estou trabalhando em um jogo de corrida de carros em 3D para a plataforma iOS. Eu tive que implementar um sistema de reprodução e gravar essa reprodução em um arquivo de vídeo para enviá-lo ao YouTube.
Só estou tendo problemas com a parte da gravação, o resto está feito. O que estou fazendo é usar o glReadPixels()
comando do OpenGL ES 1.1 para capturar o conteúdo do buffer de quadros e criar um vídeo a partir desses quadros durante o tempo de execução (usando a estrutura AVFoundation).
O problema que estou enfrentando é que preciso chamar glReadPixels()
cada atualização que é muito lenta. Diminui o FPS de cerca de 30 para apenas 2-3 ... Existe alguma alternativa ao glReadPixels()
comando? Ou alguém criou um sistema de reprodução e gravou em vídeo?
Eu acho que a maneira mais simples é registrar as ações do usuário e da IA e o estado durante o jogo, não os quadros reais. Depois que o jogo termina, o jogador que completa a corrida ou volta ao menu principal recebe a opção de assistir a uma repetição (ou salvar uma) e somente então essas ações são usadas para recriar os quadros, reproduzindo as ações e estado através do mecanismo de jogo. Isso tem o benefício adicional de não ter (essencialmente) de desenhar cada quadro inteiro várias vezes adicionais durante o jogo.
fonte