um colega me perguntou em particular como acertar o efeito de entrada do Little Planet de um tour feito no Panotour. Pra isso ele tentou mexer no XML, mas não estava conseguindo acertar.
Como não sei se posso publicar os códigos aqui, vou tentar passar as dicas genéricas.
Isso é feito através do ajuste de alguns parâmetros que fazem com que a foto esteja inicialmente no formato little planet, são eles:
<view fisheye = "1" stereographic = "true" fovmax = "150" fov = "150">
Os valores de fovmax e fov são meio opcionais e podem não aparecer assim no código gerado pelo Panotour. Na verdade o Panotour abusa da programação, criando inúmeras funções e em geral dividindo os XMLs em vários sub-arquivos, dificultando um pouco as coisas pra quem não está acostumado com códigos complexos. A dica principal é: tente se concentrar no que precisa - mas pode ser difícil.
Muitas vezes isso é atribuído de outras formas, como com as funções "set" e as vezes os valores estão disfarçados em variáveis, definidas de várias formas diferentes, com funções matemáticas e tal.
É claro que entender a estrutura de objetos que existem nessa programação é importante pra entender as variações. Isso é parecido com programação orientada a objetos, coisa de programador. Quem não é programador pode ter muita dificuldade de entender isso. Contratem programadores e deem um emprego pra alguém! kkkk ou então me contratem pontualmente! rs...
Voltando ao efeito, outra coisa fundamental é definir corretamente os parâmetros hlookat e vlookat pra indicar pra onde a visão está apontada tanto antes quanto depois. Eles é que vão fazer, por exemplo, a imagem girar se a gente definir um hlookat diferente antes e depois do efeito. Se eles ficarem iguais a little planet não gira, e é esse o problema que o colega queria resolver.
O efeito de transição é feito com o comando "tween" para os parâmetros que variam. Isso vai fazer o krpano levar gradualmente o valor de um ponto ao outro. Por exemplo, levar o campo de visão de 150 para 90 ou quaisquer outros valores que tenhamos definido. O efeito de giro precisa de um "tween" no hlookat, levando ele pra um novo valor, diferente do definido inicialmente. Pra girar 360º, por exemplo, basta somar 360 ao valor inicial (que pode não ser zero caso desejemos que a visão inicial esteja olhando pra um ponto específico.
Resumindo, de cara definimos os parâmetros iniciais (exemplos):
Código: Selecionar todos
set(view.hlookat,200);
set(view.vlookat,90);
set(view.fovmax, 150);
set(view.fov, 150 );
set(view.fisheye, 1 );
set(view.stereographic, true);
Código: Selecionar todos
<view hlookat="200" vlookat="90" fovmax="150" fov="150" fisheye="1" stereographic="true">
Daí você tem um evento que dispara a alteração deles, e isso é numa função, chamada "action" no krpano.
Código: Selecionar todos
tween(view.hlookat, -272, 8.5, easeInOutQuad );
tween(view.vlookat, 16.5, 8.5, easeInOutQuad );
tween(view.fov, 90, 8.5, easeInOutQuad );
tween(view.fisheye, 0.0, 8.5, easeInOutQuad, WAIT);
set(view.stereographic,false);
set(view.fovmax, 120);
Aqui o índice das docs: http://krpano.com/docu/
E as mais relevantes:
http://krpano.com/docu/xml/
http://krpano.com/docu/actions/
Bom, depois dessa "teoria" toda (meio esburacada) essa é a função entregue pelo Panotour e que faz o little panet se converter na foto normal:
Código: Selecionar todos
<action name="tweennormalview">
tween(view.fovmax, get(panoview.fovmax), 5, easeInOutQuad);
tween(view.vlookat, get(panoview.v), 5, easeInOutQuad);
if(panoview.fov LE view.fov, tween(view.fov, get(panoview.fov), 5, easeInOutQuad); );
tween(view.fisheye, 0.0, 5, easeInOutQuad,
set(view.architectural, 0.0);
set(view.stereographic, false);
set(view.pannini, false);
set(view.fisheyefovlink, 0.5);
events.dispatch(onPanoStart);
events.dispatch(onEndLittlePlanetIntroduction);
if (tour_firstlittleplanet,
events.dispatch(onTourStart);
set(tour_firstlittleplanet, false);
);
);
</action>
Vejam que o programa não está sequer alterando o hlookat, então tem que fazer ele alterar. Outro problema é que o programa não define ele claramente com um valor explícito. Ele faz um monte de contas, então o mais certo (não o mais prático, talvez) é pegar o valor atual e somar. Aí começa a ter que saber os comandos, e programar!
Eu acrescentaria:
Código: Selecionar todos
Math.round(novohlookat, view.hlookat);
mod(novohlookat, 360);
if (novohlookat GT 180,
sub(novohlookat, 360);
,
if (novohlookat LT -180, add(novohlookat, 360));
);
tween(view.hlookat, get(novohlookat), 5, easeInOutQuad );
Eu colocaria isso logo no início, depois da linha que abre o "<action"
O mais simples seria provavelmente acrescentar simplesmente:
Código: Selecionar todos
tween(view.hlookat, 360, 5, easeInOutQuad );
Outra coisa que notei é que o valor inicial de vlookat está em 0, ou seja, a visão inicial aponta pro horizonte e não pra baixo. Não sei se ele já fez isso de propósito, mas se não, é só alterar pro que lhe convier, pois isso está explicito no código.
O código gerado pelo krpano em geral é bem mais simples, bem como as personalizações que eu vou fazendo, que não trazem essa complicação que o Panotour bota, mas enfim, não há muito o que fazer sobre isso, é só um comentário inútil, rs.
Abs, Cartola.