Eu basicamente quero que minha câmera em 3D se mova automaticamente. Atualmente, tenho um movimento linear que é bastante burro, então eu gostaria de fazer um movimento de salto.
No entanto, o que é uma boa equação para saltar? Quero dizer, para um círculo que você pode fazer y = sqrt(1 - x^2)
, mas se eu tivesse um gráfico de salto, qual seria a fórmula correspondente? Eu acho que é algo com abs
, pois tem que 'saltar'. Algo como (eu inventei isso com o Paint):
O que é uma boa equação que resulta em um gráfico desse tipo? As transformações que eu posso fazer, acho, mas só estou procurando pelo tipo de equação.
3d
mathematics
camera
movement
pimvdb
fonte
fonte
y = abs(cos((x+18)/6.2)/((x+18)/6.2))*149
. @SteveH: Você poderia dizer os termos-chave das soluções newtonianas? Parece que estou usando os errados, pois não consigo realmente encontrar um bom exemplo de como implementá-lo.Respostas:
O uso de uma equação gráfica não ajudará a aplicar acelerações de aparência natural ao sistema. Você pode se surpreender ao descobrir como seria fácil simplesmente usar equações newtonianas básicas aqui. Dê ao objeto um pouco de massa e momento e deixe a força da gravidade e Newton lidar com as acelerações e mudanças de posição. É muito mais fácil do que você imagina
fonte
Em vez de fornecer uma resposta direta, quero indicá-lo na direção certa. Se você pesquisar no Google por IA para mover entidades, encontrará algoritmos usando variáveis como velocidade, massa, velocidade e aceleração. Se você adicionar a força gravitacional à equação, deverá obter um comportamento realista.
Como afirmado em um dos comentários às suas perguntas, não é tão complicado.
Eu recomendo a programação do jogo AI pelo exemplo que achei muito útil.
Eu também encontrei este link explicando as forças envolvidas em uma bola quicando.
fonte
Se o seu movimento parecer muito com o gráfico, você poderá usar uma equação de suavização de rejeição como esta ( fonte ):
O movimento ficaria neste gráfico (easeIn):
fonte
x^2
variantes. Se eu usareaseOutBounce(50, 0, 50, 50)
, obtenho o efeito de salto com 50 etapas, no intervalo de 0 a 50. Obrigado!Se você quiser pular, verifique o Coeficiente de Restituição . É um valor entre 0 e 1 que representa a "graça" da câmera. Um valor 0 significa que nenhum salto ocorrerá quando o objeto colidir com o solo e 1 significa que a câmera retornará à sua altura original após colidir com o solo (neste cenário, de qualquer maneira).
A maneira mais fácil de implementá-lo é fornecer à sua câmera um vetor de velocidade inicial (chame-o de u) e você deseja encontrar o vetor de velocidade final depois que a câmera colidir (vamos chamar de v). Vamos chamar o CR e.
e = v / u
Então, tudo o que você precisa fazer é multiplicar sua velocidade inicial pelo coeficiente, negar essa velocidade (para que ela viaje na direção oposta) e pronto, você tem sua velocidade final e, se continuar fazendo isso sempre que colidir, terá seu movimento saltitante. Isso pressupõe que você tenha um plano plano com o qual deseja pular, se tiver uma malha complexa contra a qual está colidindo e, em vez de negar o vetor, basta multiplicá-lo pelo normal do polígono com o qual colide (o que é essencialmente que negação faz em um plano).
Use algum tipo de função de atualização de posição (Euler, Verlet ou mesmo RK4 - veja este link ) e isso facilitará muito a tarefa.
Espero que ajude (e espero que minha matemática não esteja muito longe: P)
fonte
Se você estiver procurando por uma equação de perto, mas descrevendo aproximadamente uma rejeição, tente:
Onde
fonte