sexta-feira, 4 de fevereiro de 2011

Função de ScreenShot durante o jogo - ScreenMaker

Imagem Ilustrativa

Muitas vezes gostaríamos de salvar imagens durante um jogo ou passeio virtual 3d no blender, mas muitos inclusive eu não tinham idéia de como fazer. Dando uma olhada na API da BGE achei uma função chamada 'makeScreenshot()' do módulo Rasterizer que trata da renderização da imagem e tem muitas funções interessantes como coordenadas do mouse, tamanho da tela em pixel e por ai vai.
A função makeScreenshot() é muito simples de ser usado é só  colocar o nome do arquivo que será salvo no parâmetro da função Ex: Rasterizer.makeScreenschot('minha_imagem') e pronto. A imagem será salva na extensão jpg.

Imagem geral do template

Vamos para a lógica do template:
-Criamos um script python que irá fazer o processo de salvar a imagem de preferência ligado na câmera.
-Associamos um sensor do tipo keyboard(teclado) que irá disparar a função de salvar a imagem.
-Criar uma variável no Add Property que será o nosso contador de fotos.

Painel de Logica da BGE

Tirando várias fotos:
O script que desenvolvi tem a função de salvar um arquivo de imagem sempre que uma determinada tecla for pressionada e salva a imagem com um nome diferente em ordem crescente Ex: imagem0, imagem1 etc...

Script Python
____________________________________________________________

# Feito por Marcos Amaral (racom)
# em 27/01/2011


import Rasterizer #MODULO RESPOSAVEL PELA RENDERIZAÇÃO 

import GameLogic as g #MODULO DA BGE

cont = g.getCurrentController() #PARA OBTER OS CONTROLADORES, ACTUADORES E SENSORES
obj = cont.owner #PROPRIETARIO DOS CONTROLADORES

key = cont.sensors['key'] #OBTEM O SENSOR DE TECLADO

arquivo='imagem'+str(obj['contador']) #CRIA O NOME DO ARQUIVO

# SALVA screenshot
if key.positive:
Rasterizer.makeScreenshot(arquivo) #FUNCAO QUE SALVA A IMAGEM
obj['contador'] += 1 #SOMA MAIS UM AO CONTADOR
____________________________________________________________


Download do template:  screenshot.blend


É isso ai, espero que tenho gostado, em breve mais tutoriais sobre BGE.
Até mais!  \o



Um comentário:

  1. Oi Marcos.
    Se o jogo não depender de você controlando ele (dirigindo um carro por exemplo) você ainda pode (deve) marcar a opção "Enable All Frames" para ter mais continuidade na captura. O formato do arquivo é o mesmo que estiver na cena (png, jpg, ...). Quando estiver rodando de dentro do Blenderplayer acho que só PNG ou TIFF que funciona, agora não lembro.

    Eu uso muito para gravar um vídeo do jogo fazendo com que tudo funcione sozinho. (a performance cai bastante quando você usa esta função, por isso é bom usar o "Enable All Frames" e não precisar ficar grudado no computador andando pelo lugar.

    Enfim, realmente é um recurso muito bacana que infelizmente pouca gente conhece.

    Um abraço grande,
    Dalai

    www.dalaifelinto.com ;)

    ResponderExcluir