Ajustando a Camera
O jogo vai contar com um sistema de camera composto por 4 cameras:
Uma de visão em primeira pessoa para visão dos espaços;
Uma ortogonal que mostra o plano geral como num RPG normal;
Uma "livre" para os cinematics;
Cameras gerais fixas no cenário, para alternar ângulos dramáticos.
De início ja montei as duas principais, baseando-me no exemplo da própria GameKit.
O sistema é basicamente assim: são inseridos dois objetos vazios (emptys) no espaço global.
O objeto que fará revolução no eixo X (vermelho) é conectado ao objeto que fará revolução no eixo Z.
A camera é conectada ao objeto do eixo X e praticamente faz o movimento de 360 graus em todos os lados. Esta é a camera de primeira pessoa e fornece uma visão em perspectiva ótima para o jogador observar as coisas do ângulo do personagem, observar inimigos e mirar com armas de mão.
Outra camera é conectada ao objeto do eixo Z e sofre apenas rotação neste eixo, como a camera do Ragnarok. Esta camera também difere da outra porque esta usando pojeção ortogonal.
Tradução para leigos
Esta imagem acima esta usando a projeção em perspectiva, as linhas retas vão se aproximando umas das outras conforme vão se distanciando da camera.
Já a projeção ortogonal isso não acontece, é um meio de visão usado para estudos técnicos e muito comum essa visão em jogos que não usavam 3D, mas um 2D que permitisse a visão tridimensional.
Isto produz umas diferenças de como as cameras se comportam no caso do zoom. A camera em perspectiva basta eu aproximar ou afastar do personagem, já a ortogonal é indiferente à distância dos objetos assim para dar o zoom nela eu preciso mudar a escala da camera.
Permutar entre os sistemas de camera sera um ponto que espero que agrade e aumente a jogabilidade. Bom, eu sempre me pego querendo uma visão mais introspectiva em jogos como Mu Online, Warcraft 3 e Diablo por isso espero que outros jogadores também queirão o mesmo.
Programando a malvada
Pegar o modelo da GameKit e expandir foi fácil, mais dificil foi implementar as funções extras.
No começo bastou pegar a cena corrente e nela a camera corrente e mudar seu modo de projeção. Isso apenas no C++ pois a engine não oferecia essa função em tempo de execução.
Ai tive uns probleminhas ao trocar de camera, pois toda vez que eu mudava a forma de projetar a matriz de visão era reiniciada e perdia o "aspect ratio" da tela. Deixando a imagem bem distorcida.
Após isso tive que ter o cuidado de recalcular o "aspect ratio". Isso é feito dividindo-se a largura da janela pela altura. Esse valor é injetado na matriz de visão para corrigir a distorção visual.
Uma de visão em primeira pessoa para visão dos espaços;
Uma ortogonal que mostra o plano geral como num RPG normal;
Uma "livre" para os cinematics;
Cameras gerais fixas no cenário, para alternar ângulos dramáticos.
De início ja montei as duas principais, baseando-me no exemplo da própria GameKit.
O sistema é basicamente assim: são inseridos dois objetos vazios (emptys) no espaço global.
O objeto que fará revolução no eixo X (vermelho) é conectado ao objeto que fará revolução no eixo Z.
A camera é conectada ao objeto do eixo X e praticamente faz o movimento de 360 graus em todos os lados. Esta é a camera de primeira pessoa e fornece uma visão em perspectiva ótima para o jogador observar as coisas do ângulo do personagem, observar inimigos e mirar com armas de mão.
Outra camera é conectada ao objeto do eixo Z e sofre apenas rotação neste eixo, como a camera do Ragnarok. Esta camera também difere da outra porque esta usando pojeção ortogonal.
Tradução para leigos
Esta imagem acima esta usando a projeção em perspectiva, as linhas retas vão se aproximando umas das outras conforme vão se distanciando da camera.
Já a projeção ortogonal isso não acontece, é um meio de visão usado para estudos técnicos e muito comum essa visão em jogos que não usavam 3D, mas um 2D que permitisse a visão tridimensional.
Isto produz umas diferenças de como as cameras se comportam no caso do zoom. A camera em perspectiva basta eu aproximar ou afastar do personagem, já a ortogonal é indiferente à distância dos objetos assim para dar o zoom nela eu preciso mudar a escala da camera.
Permutar entre os sistemas de camera sera um ponto que espero que agrade e aumente a jogabilidade. Bom, eu sempre me pego querendo uma visão mais introspectiva em jogos como Mu Online, Warcraft 3 e Diablo por isso espero que outros jogadores também queirão o mesmo.
Programando a malvada
Pegar o modelo da GameKit e expandir foi fácil, mais dificil foi implementar as funções extras.
No começo bastou pegar a cena corrente e nela a camera corrente e mudar seu modo de projeção. Isso apenas no C++ pois a engine não oferecia essa função em tempo de execução.
Ai tive uns probleminhas ao trocar de camera, pois toda vez que eu mudava a forma de projetar a matriz de visão era reiniciada e perdia o "aspect ratio" da tela. Deixando a imagem bem distorcida.
Após isso tive que ter o cuidado de recalcular o "aspect ratio". Isso é feito dividindo-se a largura da janela pela altura. Esse valor é injetado na matriz de visão para corrigir a distorção visual.
int WWP_Ex::setProjectionType( lua_State* L)
{
int stack = lua_gettop(L);
if (stack>0 && lua_isstring(L,1))
{
bool perspective = true;
char type = ((const char*) lua_tostring(L,1))[0];
if (type=='o' || type=='O')
perspective = false;
gkScene* scene = gkEngine::getSingleton().getActiveScene();
gkCamera* camera;
if(scene)
camera = scene->getMainCamera();
if (camera)
if (perspective)
camera->setProjType( gkCameraProperties::CA_PERSPECTIVE );
else {
camera->setProjType( gkCameraProperties::CA_ORTHOGRAPHIC );
}
Ogre::Real ratio = (double) scene->getDisplayWindow()->getWidth() / (double) scene->getDisplayWindow()->getHeight();
scene->getDisplayWindow()->getViewport(0)->getViewport()->getCamera()->setAspectRatio(ratio);
}
}
Comentários
Postar um comentário
Como fiquei sabendo que um pobre blogueiro foi processado por um comentário anonimo esses dias, so me resta me precaver contra a ineficácia da legislação em tratar o meio online. Mas eu prometo que libero rapido ^_~