Vetores Aplicados Ao Desenvolvimento de Jogos

11
Vetores aplicados ao desenvolvimento de jogos Eu estudei vetores no colégio e na faculdade, mas nunca havia entendido qual sua utilização prática. Já li vários artigos sobre vetores, mas todos eles se focam em ensinar como realizar as operações necessárias: adição, subtração, etc. Neste artigo, quero focar mais tempo em mostrar aplicações, do que em ensinar a matemática que envolve o cálculo com vetores. Tomei como base alguns artigos que li na própria internet e agradeço muito aos seus autores, principalmente ao Wolfire que fez um extraordinário trabalho descrevendo e ilustrando a utilização de vetores em jogos. Adicionei também meus comentários e meu próprio jeito de descrever as coisas, tentando tornar mais fácil de entender o conteúdo. Exemplos de utilização de vetores: Imaginando um sistema de coordenadas cartesianas com o centro na posição (0,0), os exemplos acima mostram como descrever a posição do homem em relação ao centro é a coordenada x=2, que indica que ele está a duas oposições à direita da origem e y=1 que indica que ele está uma posição acima da origem, ou simplesmente: (2,1). Um vetor, por si só é apenas um conjunto de números. Esses números podem representar qualquer coisa dependendo do contexto em que são aplicados. Nos exemplos acima, a coordenada (-2,3) pode representar a direção em que o avião

Transcript of Vetores Aplicados Ao Desenvolvimento de Jogos

Page 1: Vetores Aplicados Ao Desenvolvimento de Jogos

Vetores aplicados ao desenvolvimento de jogos

Eu estudei vetores no colégio e na faculdade, mas nunca havia entendido qual sua utilização prática. Já li vários artigos sobre vetores, mas todos eles se focam em ensinar como realizar as operações necessárias: adição, subtração, etc. Neste artigo, quero focar mais tempo em mostrar aplicações, do que em ensinar a matemática que envolve o cálculo com vetores. Tomei como base alguns artigos que li na própria internet e agradeço muito aos seus autores, principalmente ao Wolfire que fez um extraordinário trabalho descrevendo e ilustrando a utilização de vetores em jogos. Adicionei também meus comentários e meu próprio jeito de descrever as coisas, tentando tornar mais fácil de entender o conteúdo.

Exemplos de utilização de vetores:Imaginando um sistema de coordenadas cartesianas com o centro na posição (0,0), os exemplos acima mostram como descrever a posição do homem em relação ao centro é a coordenada x=2, que indica que ele está a duas oposições à direita da origem e y=1 que indica que ele está uma posição acima da origem, ou simplesmente: (2,1).

Um vetor, por si só é apenas um conjunto de números. Esses números podem representar qualquer coisa dependendo do contexto em que são aplicados. Nos exemplos acima, a coordenada (-2,3) pode representar a direção em que o avião está se movimentando, como também poderia representar a posição de um obstáculo.Por isso as unidades são muito importantes e o programador deve cuidar de representá-las corretamente.

Vamos dizer que temos o seguinte vetor V(3,5,2). Esses números não significam nada por si só. Quando alguém vê esse vetor irá perguntar: 3 o que?, 5 o que e 2 o que?Se o programador decidir que o primeiro algarismo significa o deslocamento na horizontal, o segundo algarismo representa a posição na vertical e o terceiro algarismo representa a profundidade, então esse vetor pode significar a posição de um objeto no espaço, conforme figura abaixo:

Page 2: Vetores Aplicados Ao Desenvolvimento de Jogos

Adição de VetoresUtilização: Por que adicionar Vetores?Uma utilização da adição de vetores pode ser: Integração com física

Exemplo: Mario pulando

Definições:1 - Os vetores representam a velocidade do Mário em cada frame.2 - Ele começa na posição (0,0). 3 - Quando começa o salto, sua velocidade é (1,3) - ele está se movendo para cima e também para a direita. 4 - Sua aceleração durante o salto é (0,-1), porque a gravidade o puxa para baixo.

Page 3: Vetores Aplicados Ao Desenvolvimento de Jogos

Vamos acompanhar o salto nos primeiros frames:

1 - Para o primeiro quadro: somaremos a velocidade (1,3) a sua posição inicial (0,0). Então, para começar sua nova posição é: (1,3). 2 - Em seguida, adicionar a sua aceleração (0, -1) a sua velocidade (1,3) e conseguir sua nova velocidade que é: (1,2).3 - Fazemo-lo novamente para o segundo quadro. Nós adicionamos a sua velocidade (1,2) a sua posição (1,3) para obter (2,5). Em seguida, adicionamos a sua aceleração (0, -1) a sua velocidade (1,2) para obter sua nova velocidade: (1,1).

Normalmente, nos jogos o jogador controla a aceleração do personagem com o teclado ou joystick, e o jogo calcula a nova velocidade e posição através de integração física (via vetores neste caso).

Poderíamos fazer a mesma coisa utilizando equações físicas, (http://educacao.uol.com.br/fisica/ult1700u3.jhtm) ou através de devidas e integrais, mas este não é o escopo deste artigo. Basta fazer dois comentários: 1 - que o processo de derivação matemática equivale ao cálculo da taxa de variação, assim a velocidade é a derivada do espaço (taxa de variação do espaço percorrido) e a aceleração (taxa de variação da velocidade) é a derivada da velocidade.2 – que o método descrito acima, o qual é conhecido como força bruta, é mais utilizado em jogos pois permite ao jogador interagir a qualquer momento como jogo, ou seja, no exemplo do Mario pulando, o jogador poderia mudar a direção do pulo a qualquer frame mais facilmente.

Subtração de Vetores:

Utilização: Normalmente é utilizada para descobrir o vetor necessário para se atingir uma determinada posição. Vejamos no exemplo abaixo:

Digamos que o jogador está de pé, na posição (1,2) com um rifle laser, e um robô inimigo está na posição (4,3). Para obter o vetor que o laser deve viajar para acertar o robô, você pode subtrair a posição do jogador da posição do robô:

(4,3)-(1,2) = (4-1, 3-2) = (3,1).

Page 4: Vetores Aplicados Ao Desenvolvimento de Jogos

Multiplicação de Vetor por um escalar

Utilização: Utilizado para aplicar forças aos objetos, por exemplo, a força que a resistência do ar exerce em um determinado objeto.

Podemos simular a resistência exercida pelo ar, multiplicando a velocidade do jogador por 0,9 a cada frame. Para fazer isso, basta multiplicar cada componente do vetor por escalar. Se a velocidade do jogador é (10,20), a nova velocidade é: 0.9*(10,20) = (0.9*10, 0.9*20) = (9,18).

Ferramentas para trabalhar com Vetores

Comprimento / Magnitude (Rever este tópico.....)

Para saber o comprimento de um vetor, utilizamos o Teorema de Pitágoras, que diz o seguinte: A soma dos quadrados dos catetos de um triângulo é igual ao quadrado da hipotenusa.

Exemplo de Utilização:

Page 5: Vetores Aplicados Ao Desenvolvimento de Jogos

Se tivermos uma nave com vetor de velocidade V (4,3), podemos também querer saber o quão rápido ela está indo, a fim de calcular o quanto a tela deve agitar ou o quanto de combustível ela deve usar. Para isso, precisamos encontrar o comprimento (ou magnitude) do vetor V. O comprimento de um vetor é frequentemente escrito utilizando o sinal | | , de modo que o comprimento de V é | V |.

Podemos pensar em V como um triângulo com lados 3 e 4, e use o teorema de Pitágoras para encontrar a hipotenusa: x2 + y2 = h2. Isto é, o comprimento de um vetor com componentes H (x, y) é sqrt (x2 + y2). Assim, para calcular a velocidade do nosso navio, que é só usar:

|V| = sqrt(42+32) = sqrt(25) = 5

Distância

Se o jogador está em P (3,3) e há uma explosão de E (1,2), precisamos encontrar a distância entre eles para ver quanto dano o jogador tem. Poderíamos fazer isto facilmente utilizando o Teorema de Pitágoras também... Mas no entanto, não podemos calcular a hipotenusa (distância) se não sabemos ainda os lados

Page 6: Vetores Aplicados Ao Desenvolvimento de Jogos

dos catetos. Para solucionar este problema então, teremos que combinar o uso de duas ferramentas que já estudamos: subtração e comprimento. Ao subtrair PE para obter o vetor de entre eles, ou seja, os catetos do triângulo, e depois encontrar o comprimento deste vetor para obter a distância entre eles.

A ordem não importa aqui, | | EP nos dará o mesmo resultado.

Distância = |P-E| = |(3,3)-(1,2)| = |(2,1)| = sqrt(22+12) = sqrt(5) = 2.23

Normalização

Em matemática, um vetor unitário ou versor num espaço vetorial normalizado é um vetor cujo comprimento é 1.Um vetor unitário é muitas vezes denotado com um “circunflexo”, logo: î.O termo vetor normalizado é algumas vezes utilizado simplesmente como sinônimo para vetor unitário.

Quando estivermos lidando com as direções (ao contrário de posições ou velocidades), é importante que eles tenham unidade de comprimento (comprimento de 1). Isto torna a vida muito mais fácil para nós. Por exemplo, digamos que há uma arma apontada na direção de (1,0) que dispara um tiro de 20 m / s. Qual é a velocidade da bala? Desde que a direção tem comprimento 1, podemos apenas multiplicar a direção e velocidade do projétil para obter a velocidade da bala: (20,0). Se o vetor de direção tivesse qualquer outro comprimento, não poderíamos fazer isso - a bala iria demasiado depressa ou demasiado lento.

Então, como vamos normalizar um vetor (ajustar o comprimento a uma unidade)? Fácil, dividimos cada componente pelo comprimento do vetor. Se queremos normalizar vetor u com componentes (3,4), basta dividir cada componente pelo seu comprimento, 5, para começar (05/03, 05/04).

Agora podemos usar o teorema de Pitágoras para provar que tem o comprimento 1:

(3/5)2 + (4/5)2 = 9/25 + 16/25 = 25/25 = 1

Produto

Page 7: Vetores Aplicados Ao Desenvolvimento de Jogos

Aqui, podemos ver que quando os vetores estão apontando para a mesma direção, o produto escalar é positivo. Quando eles são perpendiculares, o produto escalar é zero, e quando elas apontam em direções opostas, é negativo. Basicamente, é proporcional ao quanto os vetores estão apontando na mesma direção. Esta é uma pequena amostra do poder do produto do ponto, e já bastante útil!O produto vetorial pode também ser utilizado para calcular a normal de um triângulo ou outro polígono, para permitir efeitos que simulam iluminação, dentre outros.

Como Calcular:

Em matemática, o produto vetorial é uma operação binária sobre vetores em um espaço vetorial. Pode ser denominado também como produto externo. Seu principal uso baseia-se no fato que o resultado de um produto vetorial é sempre perpendicular a ambos os vetores originais.O produto vetorial pode ser representado graficamente, como se segue:

Page 8: Vetores Aplicados Ao Desenvolvimento de Jogos

Para obter o produto escalar de dois vetores, multiplicamos os componentes e, em seguida os adicionamos.

(a1,a2)•(b1,b2) = a1b1 + a2b2

Por exemplo, (3,2) • (1,4) = 3 * 2 * 1 + 4 = 11. Este parece tipo de inútil num primeiro momento, mas vamos olhar alguns exemplos:

Exemplo:

Digamos que temos um guarda na posição G (1,3) olhando na direção D (1,1), com um campo de visão de 180 °. Temos um herói covarde por na posição H (3,2). Ele está no campo de visão do guarda? Podemos descobrir, verificando o sinal do produto de D e V (o vetor que parte do guarda para o herói). Isso nos dá:

Bibliografia:http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/

http://pt.wikipedia.org/wiki/Produto_vetorial