Este blog esta em reforma no momento.

Programar programar programar

Novas "features" do exporter:
Metodo appendAnimation()
Agora todo objeto que estiver marcado com IPO sera exportado com um bloco de animação.
O objeto também podera conter propriedades especiais como:
nomevalor
autostarttrue/false
looptrue/false
firsframeint/string
lastframeint/string
frameliststring:endereco_de_arquivo.txt
callbackstring
A intenção é montar um sistema de animação independente, para atender os cinematics.
Uma coisa chata é a curva IPO, descobri que não tenho um pingo de paciência para fazer os malditos calcúlos das curvas.
Mas sei que da pra fazer a equação entre frames fácil (aquela que você calcula a diferênça entre um frame e outro por causa do framerate elevado).
Outra coisa perigosa é que não sei como vai ser a nova API do Blender, dizem que as curvas IPO vão ser descartadas.
Bom, outra vantagem é o framelist, que aponta para um arquivo com endereços de animação. Onde cada linha tem um numero inicial, um final e um label para a animação. Eu poderia usar o sistema de Actions do Blender para issu, no entanto acho que esse caminho é mais simples de início. Mesmo porque ainda não sei oque vira na API do 2.50.

Nas próximas implementações eu irei ver se consigo obter os dados do filtro Constraint. São muitos filtros, e alguns deles não interesão. Na verdade oque deve ser mais usado é o "Track to", que vai se traduzir em um simples "Look At" dentro da OGRE, assim poderei ter cameras estratégicamente posicionadas em cena seguindo o personagem.

Enquanto ia ao banheiro pensei em um pequeno acrescimo para futuras expansões, um campo para chamar uma função callback. Inicialmente achei que ia ser util para animação dinâmica. No entanto ja é previsto que isso seja feito via código naturalmente. Então ficaria redundande. No entanto achei uma finalidade: chamar uma callback informando o frame e o objeto que esta sendo animado. Assim posso disparar eventos em determinadas sircunstâncias.
A cada frame registrado, é enviado a função definida em callback, esta passa dois valores, o lua_userdata do objeto e o lua_number do frame corrente. Uma utilização seria:
function cameraActIntro( ob, frame )
if frame >= 90 then
displayControl.setVisible( true )
else
displayControl.setVisible( false )
end
end
Também implementei melhorias nos objetos, agora ele serializa os objetos em cena antes de mandar pro xml. Assim acaba-se o erro de um objeto pedir um pai sem que o pai seja instanciado.
Uma coisa curiosa sobre o Python, olhei no meu manual e nada, mas não achei um método para pegar o indice de um dado elemento dentro de listas. Acabou que fiquei com pressa de procurar solução no Google e meti uma função para fazer issu, já que a melhor que o método index(valor) precisava estar num TRY para funcionar.
Depois com calma vasculhei o Google e... não é que essa é uma solução que o pessoal realmente utiliza! Curioso a linguagem não ter um indexOf.
Ainda não olhei com calma, ou bons olhos, o Python 3.0 pra saber se issu foi alterado.
O proximo passo agora é dentro do C++, onde deverei inserir uma classe Frame para interpolar valores, e jogar direto na Camera.

Ufah! Esse hoje foi bem técnico, acho que ninguem leu até o fim. Para os que tiverem saco para ler olhem esse endereço (é de onde vem meu papel de parede): www.brianhamner.com

Comentários