Interpolação Gráfica – Dando um “up” no seu jogo
Ok, o título pode parecer estranho, mas o efeito é sensacional!
Por que Interpolação Gráfica? Para que seus movimentos durante um jogo possam ser cada vez mais naturais (ou próximos da realidade), permitindo que o seu jogador tenha uma melhor experiência visual.
Vamos antes falar sobre o que é interpolação: Matematicamente a interpolação é o método que permite a criação de novos conjuntos de valores a partir de 2 ou mais valores previamente estabelecidos.
Dessa maneira, podemos ter, então um ponto (x1, y1) inicial e um ponto (x2, y2) final e, a partir deste ponto, traçarmos um conjunto de pontos para “completar” este espaço faltante entre eles. Este complemento pode ser feito de várias maneiras: linear (usando uma função do 1o grau), quadrática (uma função do 2o grau, dando um efeito “curvo” para os pontos), exponencial (que pode “crescer” rapidamente), senoidal (criando uma espécie de ondulação entre os pontos).
Certo, mas o que isso pode afetar seu jogo? De várias formas: Imagine um jogo de simulação de corrida, na qual você queira alternar a câmera entre fora e dentro do carro, como mostra a figura abaixo.
Neste caso, teríamos como alternativas fazer um algoritmo simples que apenas alterna entre uma câmera e outra (algo sem uma “transição” para o usuário) e outra que possa utilizar a interpolação.
Na técnica da Interpolação, basicamente pegamos o ponto inicial (x1, y1) e o ponto final (x2, y2) e criamos uma razão entre eles, como na figura abaixo.
A partir daí, como temos já esta proporção, basta definir quantos passos são necessários para seguir de um ponto para outro. Neste caso, podemos criar 2 métodos: zoomIn e zoomOut que basicamente aplicam a soma (ou subtração) nos pontos, mudando a posição da câmera a cada frame, gerando o efeito esperado.
O algoritmo para cada método pode ser definido como:
metodo zoomIn(){ passos = 10; // defino que quero 10 passos para a transição razaoX = (x1 - x2)/passos; // pego a diferença dos X1 e X2 razaoY = (y1 - y2)/passos; // pego a diferença dos Y1 e Y2 para contador de 1 até passos faça posCamera.X = posCameraX - razaoX; posCamera.Y = posCameraY - razaoY; fim_para fim_metodo
O método zoomOut é análogo, obviamente invertendo a operação de subtração para soma, afastando a câmera da parte de dentro para fora.
Confira ambas as abordagens nos 2 vídeos abaixo. O primeiro não utiliza interpolação, já o segundo utiliza. Qual é mais agradável para você como jogador? E qual você preferiria apresentar ao seu futuro usuário?
Nunca se esqueça: nada vem pronto. Certamente você precisará de algoritmos cada vez mais específicos se quiser deixar seu jogo com sua própria marca. E isso é o que irá diferenciá-lo no mercado.
Quer saber mais? Acompanhe o blog e fique por dentro das novidades!
#vamosprogramar!