Soy nuevo en programación y programación de juegos. He leído algo sobre vectores y matemáticas, pero tengo una pregunta: ¿dónde uso vectores en la programación de juegos? ¿Quizás alguien puede dar un ejemplo simple en el que está utilizando vectores (en 2D)?
He encontrado ejemplos, pero en su mayoría están en la consola donde generan números, y grandes ejemplos que no entiendo.
class Star
aquíPoint2D
utiliza enclass ResizeRectangle
Respuestas:
¿Qué son los vectores?
Los vectores son conjuntos de coordenadas de dimensión variable. Cada coordenada en un vector representa una posición absoluta en esa dirección del espacio en el que se encuentra el vector.
Tenga en cuenta que en todos los casos, hemos asignado significado a los vectores para nuestro problema. Si bien comúnmente encontrarás vectores que se usan para la geometría en los juegos, no hay razón para que no puedas hacer otra cosa con ellos.
¿Por qué uso vectores?
Primero, nunca tienes que usar vectores. Siempre que realice un seguimiento de x e y, o de las coordenadas que le interesen, de alguna manera estará bien.
Sin embargo, la ventaja de usar vectores es que representan claramente cosas como la dirección y la posición, y también tienen varias operaciones matemáticas definidas en ellos que hacen su vida más fácil.
Para un ejemplo simple de estos, considere el producto punto .
Supongamos que tiene un sistema de radar en un juego de estilo de arriba hacia abajo. Cada enemigo que aparece en el sector del radar (una cuña en forma de pastel en 2D) debería tener un pequeño punto rojo en la pantalla. Entonces, debes descubrir qué enemigos hay en tu sección de radar.
Podrías probar si los enemigos están dentro de un triángulo. También podría probar si los enemigos están contenidos en la intersección de los dos medios espacios de los planos / líneas que definen los dos lados del sector del radar.
O bien, puede usar un producto de puntos para hacer la verificación. Así es cómo:
Esto es muy útil, y ahora también le permite tener fácilmente radares que apuntan en diferentes direcciones (solo cambie el vector de avance) y tengan diferentes anchos (solo cambie el ángulo de ancho del radar), y también puede reutilizar el mismo código para esos casos !
¿Por qué si no uso vectores?
Si está en 2D, quizás la mejor manera de lograr efectos y movimientos complejos (girar, escalar, etc.) es usar un gráfico de escena. Un planeta tiene una nave en órbita, la nave tiene un avión no tripulado en órbita. El cálculo para esto sin usar matemáticas vectoriales es realmente feo.
Con las matemáticas vectoriales, representamos que cada uno tiene un punto y una matriz de transformación 3x3. El planeta usa su transformación, la nave usa su transformación y la transformación del planeta, y el dron usa su transformación y la transformación de la nave y la transformación del planeta.
Cuando el planeta se mueve, cambias su transformación, y la nave y el dron se posicionan automáticamente "gratis". Mucho código más limpio.
Todavía no está convencido. Los vectores también son la representación nativa de la posición, la geometría y el movimiento que utilizan casi todas las bibliotecas de gráficos, y ciertamente OpenGL y DirectX. No es probable que salgas sin tener que usarlos.
Conclusión Los vectores son una herramienta poderosa para escribir código claro que resuelve problemas geométricos de manera limpia y elegante.
fuente
Un ejemplo 2D son las coordenadas de la pantalla, identifica un píxel en la pantalla y tiene un componente xy y [x, y], es decir, la posición superior izquierda de la pantalla [0, 0]
Otro ejemplo: imagine un texto desplazándose desde el borde derecho de la pantalla al borde izquierdo de la pantalla. Ahora debe definir la velocidad del texto de desplazamiento en píxeles por segundo, es decir, [-20, 0], lo que significa que el texto se desplaza 20 píxeles a la izquierda por segundo y nunca cambia la altura.
Otro ejemplo más avanzado: imagina un juego 2D que se supone que se ejecuta en diferentes resoluciones de pantalla 800x600, 1024x768, etc. Esto se puede hacer fácilmente usando internamente un ancho de pantalla de 0.0 a 1.0 y una altura de 0.0 a 1.0 para desacoplar la lógica del juego de la resolución de pantalla real. Ahora, cuando dibujas en la pantalla, simplemente multiplicas el vector interno con el vector de resolución:
tenga en cuenta que las 3 variables son vectores 2D aquí, tienen un componente xy y, es decir, para este internal_pos [0.5, 0.25]:
Entonces la posición interna [0.5, 0.25] se transforma a la posición real de la pantalla [400, 150]
Esto fue lo básico. La verdadera ventaja de los vectores es la aplicación en Álgebra Lineal donde puedes usar matrices para transformar tus vértices (rotar, escalar, espejo, etc.), es decir, rotar fácilmente toda tu posición interna en 90 grados, o tienes que cambiar la pantalla y posición 0 de arriba a abajo de la pantalla, porque es decir, una biblioteca de terceros que utiliza, utiliza esta convención.
fuente
screen_pos = internal_pos * screen_resolution
es una coordenada invariante de la forma en que la ha escrito, podría escribirse más apropiadamentescreen_pos = map_to_screen * internal_pos
, dondemap_to_screen
hay un mapeo lineal (que puede escribirse como una matriz, en este caso una diagonal).Aquí hay una gran explicación de los vectores en el desarrollo de juegos en el blog de Wolfire Games:
http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
fuente
Un vector es una entidad que tiene tanto un valor como una dirección. Los ejemplos de vectores en el mundo real y los juegos basados en la física incluyen la velocidad y el impulso. Las propiedades que solo tienen valores pero no tienen dirección se denominan escalares e incluyen ubicación, masa, densidad, etc.
Los vectores son necesarios para los juegos que emulan propiedades físicas similares a los vectores (como se mencionó: velocidad, aceleración, etc.). Las matemáticas que se usan para los cálculos vectoriales se denominan álgebra lineal .
fuente
En cualquier lugar donde tenga un número para cada dimensión que represente algo, la colección de estos números puede considerarse un vector. Posición, velocidad y aceleración son los principales ejemplos de vectores. En algunos casos, también puede ser práctico representar la dirección de la orientación como un vector.
Para cosas básicas, en realidad no importa si consideras o no estos números como vectores, pero si quieres hacer algún tipo de física, deberías considerar las matemáticas vectoriales.
fuente
Muy simple, cualquier cosa con una posición o una dirección, que está en todas partes en un juego, usan vectores. Un vector es como un punto
Sin embargo, la diferencia realmente se reduce a esto. Un punto es solo un punto, mientras que un vector es una Flecha.
si usted tiene
Dices que quiero decir en este lugar x 5 y y 10.
sin embargo cuando declaras un vector ...
Estás diciendo que estoy declarando una flecha de 0,0 a x 5, y 10;
incluso puede hacer que el punto desde el que apunta su vector sea un punto en el espacio desde cualquier lugar, por ejemplo, usemos un punto y un vector para mover nuestro objeto, usaremos un Punto2 para almacenar su ubicación y un vector2 para moverlo .
ahora puede usar un vector para mover este punto, digamos que queremos mover este punto hacia arriba del eje x 10 unidades para que tenga
ahora el punto se ha movido donde su flecha vectorial lo indicó.
punto ahora es
Una última cosa a tener en cuenta es que a veces un vector se usa como un punto y viceversa solo porque contienen el mismo tipo de datos.
fuente
v = pos - origin
por lo tanto,v != pos
dado que el origen es un punto{0, 0, 0, 1}