Programação com OpenGL/Modern OpenGL Tutorial Navegacao: diferenças entre revisões

[edição verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
Linha 33:
 
== Controle da camera ==
 
Vamos começar nossa implementação intuitiva:
* Esquerda/Direita rodara no eixo Y da camera.
* Cima/Baixo moverá para Frente/Para trás
* Page_up/Page_down rodara a camera no eixo X.
 
<source lang="cpp">
/* code here */
</source>
 
Para if para frente/Para trás, vamos usar <code>glm::translate</code> Temos duas formas:
* <code>glm::translate(transformation_matrix, glm::vec3(dx, dy, dz))</code>: aplicando a <code>transformation_matrix</code>, depois movendo em (dx, dy, dz) expressada no novo sistema de coordenadas.
* <code>glm::translate(glm::mat4(1), glm::vec3(dx, dy, dz)) * transformation_matrix</code>: aplicando <code>transformation_matrix</code>, depois movendo em (dx, dy, dz) expressado no sistema de coordenadas que está depois da translação.
* Neste caso a translação da camera, não esqueça que nosso truque move o mundo inteiro, e não a camera; por isto o significado acima esta ao contrario da matriz world2camera
 
Por exemplo, se existir um <code>transformation_matrix</code> rodando nossa camera em 90º para direita, e depois trasladar sobre o Z:
* Com a primeira forma você vai movimentar a camera novamente a esquerda(sobre o eixo Z do mundo),
* Enquanto da segunda forma você vai movimentar a camera frontal (sobre o eixo X do mundo).
 
-----
 
Esta implementação tem os seguintes problemas ao usar: Quando a camera estiver rodando para esquerda/direita equanto é dobrado, não usaremos a rotação do corpo da nossa entidade no dobro do eixo.
Em vez disto, vamos usar a rotação apenas sobre nossa cabeça alinhada ao eixo Y. assim vamos movimentar o mundo no eixo Y da coordenada local da camera:
<source lang="cpp">
glm::vec3 y_axis_world = glm::mat3(transforms[MODE_CAMERA]) * glm::vec3(0.0, 1.0, 0.0);
transforms[MODE_CAMERA] = glm::rotate(glm::mat4(1.0), -delta_rotY, y_axis_world) * transforms[MODE_CAMERA];
</source>
 
Por ultimo, vamos implmentar strifing:
<source lang="cpp">
/* code here */
</source>