Gráficos 2D para juegos DirectX
Analizamos el uso de gráficos y efectos de mapa de bits 2D, y cómo usarlos en tu juego.
Los gráficos 2D son un subconjunto de gráficos 3D que se ocupan de primitivos 2D o mapas de bits. Por lo general, no usan una coordenada z en la forma en que un juego 3D podría, ya que el juego normalmente se limita al plano x-y. A veces usan técnicas de gráficos 3D para crear sus componentes visuales y, por lo general, son más fáciles de desarrollar. Si no estás familiarizado con los juegos, un juego 2D es un excelente lugar para empezar, y el desarrollo de gráficos 2D puede ser un buen lugar para que puedas conseguir un control en DirectX.
Puedes desarrollar gráficos de juegos 2D en DirectX mediante Direct2D o Direct3D, o alguna combinación. Muchas de las clases más útiles para el desarrollo de juegos 2D están en Direct3D, como la clase Sprite . Direct2D es un conjunto de API que tienen como destino principalmente interfaces de usuario y aplicaciones que requieren compatibilidad con primitivos de dibujo (como círculos, líneas y formas de polígono plano). Teniendo esto en cuenta, todavía proporciona un conjunto eficaz y eficaz de clases y métodos para crear gráficos de juego, especialmente al crear superposiciones, interfaces y pantallas de cabeza (HUD) de juego, o para crear una variedad de juegos 2D, desde simples hasta razonablemente detallados. Sin embargo, el enfoque más eficaz al crear juegos 2D es usar elementos de ambas bibliotecas, y así es como abordaremos el desarrollo de gráficos 2D en este tema.
Conceptos de un vistazo
Antes de la llegada de gráficos 3D modernos y el hardware que lo admite, los juegos eran principalmente 2D, y muchas de sus técnicas de gráficos implicaban bloques de movimiento de memoria alrededor, normalmente matrices de datos de color que se traducirían o transformarían en píxeles en la pantalla de una manera 1:1.
En DirectX, los gráficos 2D forman parte de la canalización 3D. Hay una gran variedad de resoluciones de pantalla y hardware gráfico disponible, y el motor de gráficos 2D debe ser capaz de admitirlos sin un cambio significativo en la fidelidad.
Estos son algunos de los conceptos básicos con los que debe estar familiarizado al iniciar el desarrollo de gráficos 2D.
- Píxeles y coordenadas ráster. Un píxel es un único punto en una pantalla ráster y tiene su propio par de coordenadas (x, y) que indica su ubicación en la pantalla. (El término "píxel" se usa a menudo indistintamente entre los píxeles físicos que componen la pantalla y los elementos de memoria direccionables usados para contener los valores alfa y color de los píxeles antes de enviarlos a la pantalla). La trama se trata mediante API como una cuadrícula rectangular de elementos de píxeles, que a menudo tiene una correspondencia de 1:1 con la cuadrícula de píxeles física de una pantalla. Los sistemas de coordenadas ráster comienzan desde la parte superior izquierda, con el píxel en (0, 0) en la esquina superior izquierda de la cuadrícula.
- Los gráficos de mapa de bits (a veces denominados gráficos ráster) son elementos gráficos representados como una cuadrícula rectangular de valores de píxeles. Sprites (matrices de píxeles calculadas administradas independientemente del ráster) son un tipo de gráfico de mapa de bits, que se usa habitualmente para los personajes activos o objetos animados independientes del fondo de un juego. Los distintos fotogramas de animación de un sprite se representan como colecciones de mapas de bits denominados "hojas" o "lotes". Los fondos son objetos de mapa de bits más grandes que la misma resolución o mayor que el de la trama de pantalla, y a menudo sirven como telón de fondo para el campo de juego de un juego.
- Los gráficos vectoriales son gráficos que usan primitivos geométricos, como puntos, líneas, círculos y polígonos para definir objetos 2D. Se representan no como matrices de píxeles, sino como ecuaciones matemáticas que las definen en un espacio 2D. No tienen necesariamente una correspondencia 1:1 con la cuadrícula de píxeles de la pantalla y deben transformarse desde el sistema de coordenadas en el que los representó en el sistema de coordenadas ráster de la pantalla.
- La traducción es cuando toma un punto o vértice y calcula su nueva ubicación en el mismo sistema de coordenadas.
- El escalado es cuando se amplía o reduce un objeto mediante un factor de escala especificado. Con una imagen vectorial, se reducen y amplían sus vértices componentes; con un mapa de bits, se amplían los elementos de píxeles o se reducen. Con las imágenes de mapa de bits, se pierden datos de píxeles cuando se reduce la imagen y se amplían los píxeles individuales cuando la imagen se escala más cerca. Para este último, puede usar operaciones de interpolación de color de píxel, como el filtrado bilineal, para suavizar los límites de color ásperos entre los píxeles ampliados.
- La rotación es cuando se gira un objeto sobre un eje o ejes especificados. Con una imagen vectorial, los vértices de la geometría se multiplican por una matriz de rotación para obtener el vértice girado; con una imagen de mapa de bits, se pueden emplear algoritmos diferentes, cada uno con un grado menor o mayor de fidelidad en los resultados. Al igual que con el escalado y la traducción, hay API específicamente para las operaciones de rotación.
- La transformación es cuando toma un punto o vértice en un sistema de coordenadas y calcula su punto o vértice correspondiente en otro sistema de coordenadas. Esto incluye la traducción, el escalado y la rotación, así como otras operaciones de cálculo de coordenadas.
- El recorte se produce cuando se quitan partes de mapas de bits o geometría que no están dentro del área visible de la pantalla, o se ocultan por objetos con mayor prioridad de vista.
- El búfer de fotogramas es un área en memoria (a menudo en la memoria del propio hardware gráfico) que contiene el mapa ráster final que dibujará en la pantalla. La cadena de intercambio es una colección de búferes, donde se dibuja en un búfer de reserva y, cuando la imagen está lista, se "intercambia" al frente y se muestra.
Consideraciones de diseño
El desarrollo de gráficos 2D es una excelente manera de acostumbrarse al desarrollo con Direct3D, y te permitirá dedicar más tiempo a otros aspectos críticos del desarrollo de juegos: audio, controles y la mecánica del juego.
Dibujar siempre en un búfer atrás. Dibujar directamente en el búfer de fotogramas significa que la imagen se mostrará cuando se reciba la señal de visualización (normalmente cada 1/60 de segundo), incluso si la operación de dibujo no se ha completado.
Diseñe su motor gráfico para admitir una buena selección de resoluciones, de 1024x600 a 1920x1080 (o superior). Tu audiencia te agradecerá si apoyas la resolución nativa de su monitor LCD, especialmente con gráficos 2D.
Grandes obras de arte serán su mejor recurso, en lo que respecta a los objetos visuales. Aunque los gráficos de mapa de bits pueden carecer del golpe de los objetos visuales fotorealistas 3D con las características más recientes del modelo de sombreador, las ilustraciones de gran resolución a menudo pueden transmitir tanto o más estilo y personalidad, y con mucho menos de una penalización de rendimiento.