Existen dos potentes herramientas matemáticas que podemos utilizar con numerosos vectores para obtener
mucha información adicional sobre cómo se sitúan en el espacio unos con respecto a otros.
Son el producto DOT y el producto cruzado.
En esta conferencia examinaremos el producto DOT y cómo puede utilizarse para hacer girar a un personaje hacia
un lugar de destino.
El producto DOT es la suma de la multiplicación de los correspondientes componentes o valores de coordenadas
de dos vectores.
Dados los vectores V y W mostrados aquí, el producto DOT se encuentra multiplicando ambos valores x juntos, ambos
valores y juntos, y luego sumando el resultado.
Se escribe como una ecuación como esta con un solo punto entre los nombres de los vectores.
No se trata de un punto, sino de un punto real que se sitúa por encima de la línea.
La ecuación completa aparece entonces v punto x multiplicado por w x más v y multiplicado por w y.
Así que tomando los valores de los vectores tenemos que en este caso la ecuación se convierte en tres por
seis más tres por uno negativo.
El producto DOT en este caso es 15.
Inténtalo tú mismo.
¿Cuál es el producto DOT de estos dos vectores?
Cero tres y negativo cuatro dos.
La ecuación se convierte en cero multiplicado por cuatro negativo.
¿Cuáles son las coordenadas x más tres multiplicadas por dos?
¿Cuáles son las coordenadas y?
El resultado es que el valor final del producto DOT para estos dos vectores es seis.
Ahora probablemente estés sentado pensando, ¿y qué?
¿Qué significa este valor que estamos calculando?
Nos dice algunas cosas sobre las orientaciones relativas de los vectores.
Tengan paciencia conmigo por un momento y calculen los productos DOT para cada uno de estos pares.
Ponga el vídeo en pausa mientras lo hace.
Anótalos.
¿Cómo te fue?
El producto DOT para a es diez.
El producto DOT para B es cero y el producto DOT para C es siete negativo.
Ahora, tómate un momento para observar cada uno de los valores que tienes para los productos
DOT y cómo se orientan los pares de vectores entre sí.
¿Puedes notar algo?
Pues bien, en el caso de a, el producto DOT es un valor positivo y el ángulo entre los vectores es inferior
a 90 grados.
En B, los vectores están a 90 grados entre sí y el producto DOT es cero.
En el caso de C, los vectores forman un ángulo mayor de 90 grados y el producto DOT es menor que cero.
Así que, para recapitular, si el producto DOT es mayor que cero, entonces el ángulo entre los vectores es menor
que 90 grados.
Si el producto DOT es igual a cero, entonces el ángulo es exactamente 90 grados.
Y si el producto DOT es menor que cero, entonces el ángulo debe ser mayor que 90 grados.
¿Dónde está la utilidad de esto en los juegos?
Pues bien, nos permite determinar dónde está un objeto del juego en relación con otro objeto del juego.
Digamos que tenemos un tanque y el combustible, el vector que muestra la dirección de avance del tanque es la dirección
en la que el tanque está básicamente mirando.
Si se dibuja otro vector hacia el combustible desde el depósito, se puede utilizar el producto DOT para determinar
si el combustible está delante o detrás del depósito.
Y este mismo principio se puede utilizar si tienes, por ejemplo, un arma automática o tienes algún tipo de
cámara que quiera detectar si el personaje ha entrado en un espacio determinado.
En este caso, si el combustible está a la vista del depósito, el producto DOT de estos vectores será mayor
que cero.
Sin embargo, si el combustible está detrás del depósito, el producto punto será menor que cero.
Volveremos a examinar estos principios más adelante, pero por ahora, lo que más nos interesa es girar el depósito
para orientarlo hacia el combustible antes de que se mueva hacia él.
Así pues, el primer problema al que nos enfrentamos es encontrar el ángulo real entre la dirección de avance
del depósito y la dirección del combustible.
La relación entre el producto DOT y el ángulo entre los vectores se puede expresar así, donde la derivación
de esta fórmula está tomada de la trigonometría y se incluye en el artículo adjunto a esta conferencia.
Esto se puede reordenar para que el ángulo sea el centro de la ecuación, de modo que se pueda escribir un método
que devuelva el ángulo entre los vectores.
Y en este caso, resulta ser el coseno inverso del producto de los vectores dividido por su longitud
multiplicada.
Ahora bien, si todas estas matemáticas te parecen demasiado complicadas y abstractas, no te preocupes.
Vamos a hacer un ejercicio y lo haremos paso a paso.
Así que para encontrar el ángulo que necesita nuestro tanque para girar hacia el combustible, en primer lugar, necesitamos nuestros
dos vectores.
Necesitamos el que indica la dirección en la que está orientado el depósito, y necesitamos el que está entre
el depósito y el combustible.
Ahora bien, encontrar el que está orientado al tanque es bastante fácil porque en la unidad lo almacena dentro
del propio tanque.
Y ese vector en particular es, en este caso, el vector ascendente de nuestro tanque.
Si usted estuviera en un entorno 3D, que será un poco más tarde cuando estamos mirando a este tipo de ángulo,
girando en nuestros personajes de los ojos, entonces la dirección hacia adelante que el personaje se enfrenta es en realidad
a lo largo del eje Z.
Así que sólo tienes que tener cuidado con cuál de esos ejes de transformación de la unidad tienes que usar.
Bien, esta vez estamos usando eso.
Ahora para encontrar el vector entre el tanque y el combustible, en realidad tomamos la posición del combustible
y le restamos la posición del tanque.
El resultado es un vector y es el vector del depósito al combustible.
Así que vamos a empezar a implementar algunas de estas cosas y vamos a hacerlo de nuevo en nuestro script de la unidad
que tenemos en nuestro tanque.
Así que vamos a abrir eso.
Y una vez dentro de allí, vamos a crear un nuevo método de cálculo de ángulo.
Ahora aquí, lo que vamos a hacer es crear un ángulo de cálculo y lo haremos abajo donde tenemos nuestra barra
espaciadora siendo golpeada.
Así que calcula el ángulo y ahora lo pondremos.
De su lado.
Tan nulo.
Calcula el ángulo y lo que haremos aquí.
Te pondré en marcha, pero luego te dejaré que lo resuelvas.
En primer lugar, tenemos que crear un vector que será nuestro tanque hacia adelante, y que en realidad
será un vector tres, no un vector dos.
Eso va a equivaler, como te mostré en el video, a transformar el punto hacia arriba en este caso en lugar de como el
vector hacia adelante.
Porque en este caso, ya que estamos en 2D, el vector hacia adelante es el vector hacia arriba para nuestro tanque.
Así que ese es el tanque de avance.
Entonces necesitamos un vector tres y necesitamos la dirección del combustible y eso va a ser igual a la posición del combustible.
Así que la posición transformada de combustible menos la posición de punto de transformación así.
Así que ahora tenemos nuestros dos vectores.
A menudo, cuando empiezas a hacer muchos cálculos matemáticos, especialmente estas cosas con vectores,
puede que no sea una forma intuitiva de pensar en las cosas y, por lo tanto, tu capacidad para visualizarlas puede no ser tan buena
como si las hubieras estado usando durante mucho tiempo.
Así que una pequeña herramienta que me gusta usar es en realidad el rayo de depuración de dibujo aquí, que sólo le ayudará a ver
si usted tiene los valores correctos.
Por lo tanto, necesitamos que la dirección del tanque sea el vector delantero del tanque y que la dirección del combustible vaya
entre el tanque y el combustible.
Así que vamos a poner algunas matrices de dibujo de puntos de depuración.
Así que depurar el punto, dibujar el rayo.
Y esto sólo va a dibujar un poco de una línea en la pantalla para que usted pueda ver.
Así que es este punto transformar la posición del punto y de nuevo, estoy usando esto cuando no lo necesito.
Una vez más, es sólo un hábito para mí.
No tienes que ponerlo si no quieres.
Así que este será nuestro tanque hacia adelante de la posición del tanque y vamos a hacer que en el color de punto verde y vamos a tener
que subir durante 2 segundos para que podamos ver.
Entonces queremos que nuestro punto de depuración dibuje el rayo para esta posición del transformador de punto como la posición inicial para nuestro
rayo.
Y luego vamos a dibujar a la dirección del combustible y luego el punto de color rojo durante 2 segundos.
De acuerdo.
Una vez que tengas eso, guardémoslo y volveremos a la unidad y probaremos esto.
Así que vamos a pulsar el play y una vez que estemos aquí, podemos darle a la barra espaciadora.
Y puedes ver que tenemos esa línea roja ahí.
Ahora, ¿dónde está nuestro vector de avance?
Bueno, en realidad está ahí.
Si puedo acercarme aquí.
Vamos a echar un vistazo.
Mira, ahí está el vector de Ford en verde.
¿Puedes verlo en tu pantalla?
Puede que tengas que acercarte un poco más.
Ahí está.
Ahora bien, por qué es tan pequeño mientras que el vector hacia adelante o el vector hacia arriba o incluso el vector derecho de cualquier
objeto del juego está realmente normalizado, lo que significa que es una longitud de uno.
Por eso es tan corto ahí.
Pero eso está bien.
Todavía podemos verlo.
Si quisieras que eso fuera un poco más grande y se viera en la pantalla, entonces podrías multiplicar este tanque
aquí adelante por digamos, diez, y sería una longitud de diez y podrías verlo.
Pero de todos modos, esto es sólo para que podamos básicamente visualizar estas ecuaciones y asegurarnos de que
tenemos los valores correctos.
Bien, entonces voy a dejar el resto de este código para que realmente llegue al ángulo y lo imprima
como un desafío para usted al final de este video.
Así que para encontrar el ángulo, la fórmula es esta.
Así que es el arco coseno, que es lo que significa el coseno a la negativa de nuestro v w así que un producto vectorial
con el otro dividido por la longitud de ambos vectores multiplicados juntos.
De acuerdo, trabaja en ello pieza por pieza.
No te sientas abrumado por toda la ecuación.
Piénsalo bien.
Así que cuando volvamos en el próximo vídeo, continuaremos con esto y te mostraré cómo descifrar esta ecuación
si tienes problemas con ella y conseguir nuestra impresión de ángulos.