Los gráficos por computadora en 2D son la generación de imágenes digitales por computadora , principalmente a partir de modelos bidimensionales (como modelos geométricos en 2D , texto e imágenes digitales) y mediante técnicas específicas para ellos. Puede referirse a la rama de la informática que comprende dichas técnicas o a los modelos mismos.
Los gráficos de computadora 2D se utilizan principalmente en aplicaciones que originalmente se desarrollaron sobre tecnologías tradicionales de impresión y dibujo , como la tipografía , la cartografía , el dibujo técnico , la publicidad , etc. En esas aplicaciones, la imagen bidimensional no es solo una representación de un objeto del mundo real, sino un artefacto independiente con valor semántico agregado; por lo tanto, se prefieren los modelos bidimensionales, porque brindan un control más directo de la imagen que los gráficos de computadora 3D (cuyo enfoque es más parecido a la fotografía que a la tipografía).
En muchos ámbitos, como la autoedición , la ingeniería y los negocios , una descripción de un documento basada en técnicas de gráficos por ordenador en 2D puede ser mucho más pequeña que la imagen digital correspondiente, a menudo por un factor de 1/1000 o más. Esta representación también es más flexible, ya que se puede renderizar en diferentes resoluciones para adaptarse a diferentes dispositivos de salida . Por estos motivos, los documentos y las ilustraciones suelen almacenarse o transmitirse como archivos gráficos en 2D .
Los gráficos por ordenador en 2D comenzaron en la década de 1950, basados en dispositivos de gráficos vectoriales . En las décadas siguientes, estos fueron reemplazados en gran medida por dispositivos basados en tramas . El lenguaje PostScript y el protocolo X Window System fueron desarrollos fundamentales en este campo.
Los modelos gráficos 2D pueden combinar modelos geométricos (también llamados gráficos vectoriales ), imágenes digitales (también llamados gráficos rasterizados ), texto a componer (definido por contenido, estilo y tamaño de fuente , color, posición y orientación), funciones matemáticas y ecuaciones , y más. Estos componentes pueden modificarse y manipularse mediante transformaciones geométricas bidimensionales como la traslación , la rotación y el escalado . En los gráficos orientados a objetos , la imagen se describe indirectamente mediante un objeto dotado de un método de autorrepresentación , un procedimiento que asigna colores a los píxeles de la imagen mediante un algoritmo arbitrario. Se pueden construir modelos complejos combinando objetos más simples, en los paradigmas de la programación orientada a objetos .
En la geometría euclidiana , una traslación (geometría) mueve cada punto una distancia constante en una dirección específica. Una traslación puede describirse como un movimiento rígido : otros movimientos rígidos incluyen rotaciones y reflexiones. Una traslación también puede interpretarse como la adición de un vector constante a cada punto, o como el desplazamiento del origen del sistema de coordenadas . Un operador de traslación es un operador tal que
Si v es un vector fijo, entonces la traslación T v funcionará como T v ( p ) = p + v .
Si T es una traslación, entonces la imagen de un subconjunto A bajo la función T es la traslación de A por T . La traslación de A por T v se escribe a menudo A + v .
En un espacio euclidiano , cualquier traslación es una isometría . El conjunto de todas las traslaciones forma el grupo de traslaciones T , que es isomorfo al propio espacio, y un subgrupo normal del grupo euclidiano E ( n ). El grupo cociente de E ( n ) por T es isomorfo al grupo ortogonal O ( n ):
Como una traslación es una transformación afín pero no una transformación lineal , normalmente se utilizan coordenadas homogéneas para representar el operador de traslación mediante una matriz y, por lo tanto, hacerlo lineal. Por lo tanto, escribimos el vector tridimensional w = ( w x , w y , w z ) utilizando 4 coordenadas homogéneas como w = ( w x , w y , w z , 1). [1]
Para traducir un objeto por un vector v , cada vector homogéneo p (escrito en coordenadas homogéneas) necesitaría ser multiplicado por esta matriz de traducción :
Como se muestra a continuación, la multiplicación dará el resultado esperado:
La inversa de una matriz de traducción se puede obtener invirtiendo la dirección del vector:
De manera similar, el producto de las matrices de traducción se obtiene sumando los vectores:
Dado que la suma de vectores es conmutativa , la multiplicación de matrices de traducción también es conmutativa (a diferencia de la multiplicación de matrices arbitrarias).
En álgebra lineal , una matriz de rotación es una matriz que se utiliza para realizar una rotación en el espacio euclidiano .
rota puntos en el plano cartesiano xy en sentido antihorario a través de un ángulo θ alrededor del origen del sistema de coordenadas cartesianas . Para realizar la rotación utilizando una matriz de rotación R , la posición de cada punto debe estar representada por un vector columna v , que contiene las coordenadas del punto. Un vector rotado se obtiene utilizando la multiplicación de matrices R v . Dado que la multiplicación de matrices no tiene efecto sobre el vector cero (es decir, sobre las coordenadas del origen), las matrices de rotación solo se pueden utilizar para describir rotaciones sobre el origen del sistema de coordenadas.
Las matrices de rotación proporcionan una descripción algebraica simple de tales rotaciones y se utilizan ampliamente para cálculos en geometría , física y gráficos de computadora . En el espacio bidimensional, una rotación se puede describir simplemente por un ángulo θ de rotación , pero también se puede representar por las 4 entradas de una matriz de rotación con 2 filas y 2 columnas. En el espacio tridimensional, cada rotación se puede interpretar como una rotación de un ángulo dado alrededor de un único eje fijo de rotación (véase el teorema de rotación de Euler ), y por lo tanto se puede describir simplemente por un ángulo y un vector con 3 entradas. Sin embargo, también se puede representar por las 9 entradas de una matriz de rotación con 3 filas y 3 columnas. La noción de rotación no se utiliza comúnmente en dimensiones superiores a 3; existe una noción de desplazamiento rotacional , que se puede representar por una matriz, pero no por un único eje o ángulo asociado.
Las matrices de rotación son matrices cuadradas , con entradas reales . Más específicamente, se pueden caracterizar como matrices ortogonales con determinante 1:
El conjunto de todas estas matrices de tamaño n forma un grupo , conocido como grupo ortogonal especial SO( n ) .
En dos dimensiones cada matriz de rotación tiene la siguiente forma:
Esto rota los vectores columna mediante la siguiente multiplicación de matrices :
Entonces las coordenadas (x',y') del punto (x,y) después de la rotación son:
La dirección de rotación del vector es en sentido antihorario si θ es positivo (por ejemplo, 90°) y en sentido horario si θ es negativo (por ejemplo, -90°).
Si se utiliza un sistema de coordenadas cartesiano estándar para diestros , con el eje x a la derecha y el eje y hacia arriba, la rotación R( θ ) es en sentido antihorario. Si se utiliza un sistema de coordenadas cartesiano para zurdos, con x dirigida a la derecha pero y dirigida hacia abajo, R( θ ) es en el sentido de las agujas del reloj. Estas orientaciones no estándar rara vez se utilizan en matemáticas, pero son comunes en gráficos de computadora 2D, que a menudo tienen el origen en la esquina superior izquierda y el eje y hacia abajo en la pantalla o página. [2]
Vea a continuación otras convenciones alternativas que pueden cambiar el sentido de la rotación producida por una matriz de rotación .
Especialmente útiles son las matrices para rotaciones de 90° y 180°:
En geometría euclidiana , el escalado uniforme ( escalado isotrópico , [3] dilatación homogénea , homotecia ) es una transformación lineal que agranda (incrementa) o encoge (disminuye) objetos mediante un factor de escala que es el mismo en todas las direcciones. El resultado del escalado uniforme es similar (en el sentido geométrico) al original. Normalmente se permite un factor de escala de 1, de modo que las formas congruentes también se clasifican como similares. (Algunos libros de texto escolares excluyen específicamente esta posibilidad, al igual que otros excluyen a los cuadrados de ser rectángulos o a los círculos de ser elipses).
Más general es el escalado con un factor de escala separado para cada dirección del eje. El escalado no uniforme ( escalado anisotrópico , dilatación no homogénea ) se obtiene cuando al menos uno de los factores de escalado es diferente de los demás; un caso especial es el escalado direccional o estiramiento (en una dirección). El escalado no uniforme cambia la forma del objeto; por ejemplo, un cuadrado puede transformarse en un rectángulo o en un paralelogramo si los lados del cuadrado no son paralelos a los ejes de escalado (se conservan los ángulos entre líneas paralelas a los ejes, pero no todos los ángulos).
Una escala se puede representar mediante una matriz de escala. Para escalar un objeto mediante un vector v = ( v x , vy , v z ), cada punto p = ( p x , p y , p z ) debería multiplicarse por esta matriz de escala :
Como se muestra a continuación, la multiplicación dará el resultado esperado:
Este escalamiento cambia el diámetro de un objeto por un factor entre los factores de escala, el área por un factor entre el producto más pequeño y el más grande de dos factores de escala, y el volumen por el producto de los tres.
El escalamiento es uniforme si y solo si los factores de escalamiento son iguales ( v x = v y = v z ). Si todos los factores de escala, excepto uno, son iguales a 1, tenemos escalamiento direccional.
En el caso donde v x = v y = v z = k , el escalamiento también se denomina ampliación o dilatación por un factor k , aumentando el área por un factor de k 2 y el volumen por un factor de k 3 .
El escalamiento en el sentido más general es cualquier transformación afín con una matriz diagonalizable . Incluye el caso en que las tres direcciones de escalamiento no sean perpendiculares. Incluye también el caso en que uno o más factores de escala sean iguales a cero ( proyección ), y el caso de uno o más factores de escala negativos. Este último corresponde a una combinación de escalamiento propiamente dicho y un tipo de reflexión: a lo largo de líneas en una dirección particular tomamos la reflexión en el punto de intersección con un plano que no necesita ser perpendicular; por lo tanto, es más general que la reflexión ordinaria en el plano.
En geometría proyectiva , que se utiliza a menudo en gráficos por ordenador , los puntos se representan mediante coordenadas homogéneas . Para escalar un objeto mediante un vector v = ( v x , v y , v z ), cada vector de coordenadas homogéneas p = ( p x , p y , p z , 1) debería multiplicarse por esta matriz de transformación proyectiva :
Como se muestra a continuación, la multiplicación dará el resultado esperado:
Dado que el último componente de una coordenada homogénea puede verse como el denominador de los otros tres componentes, se puede lograr un escalamiento uniforme mediante un factor común s (escala uniforme) utilizando esta matriz de escalamiento:
Para cada vector p = ( p x , p y , p z , 1) tendríamos
que se homogeneizaría a
Una forma conveniente de crear una imagen compleja es comenzar con un mapa rasterizado "lienzo" en blanco (una matriz de píxeles , también conocido como mapa de bits ) lleno de un color de fondo uniforme y luego "dibujar", "pintar" o "pegar" parches simples de color sobre él, en un orden apropiado. En particular, el lienzo puede ser el búfer de cuadros de una pantalla de computadora .
Algunos programas establecerán los colores de los píxeles directamente, pero la mayoría dependerá de alguna biblioteca de gráficos 2D o de la tarjeta gráfica de la máquina , que generalmente implementa las siguientes operaciones:
El texto, las formas y las líneas se representan con un color especificado por el cliente. Muchas bibliotecas y tarjetas proporcionan degradados de color , que son útiles para la generación de fondos que varían suavemente, efectos de sombras, etc. (Véase también sombreado Gouraud ). Los colores de los píxeles también se pueden tomar de una textura, por ejemplo, una imagen digital (emulando así los tonos de pantalla y la legendaria pintura a cuadros que solía estar disponible sólo en los dibujos animados ).
Pintar un píxel con un color determinado normalmente reemplaza su color anterior. Sin embargo, muchos sistemas admiten la pintura con colores transparentes y translúcidos , que solo modifican los valores de píxel anteriores. Los dos colores también se pueden combinar de formas más complejas, por ejemplo, calculando su bit a bit exclusivo o . Esta técnica se conoce como inversión de color o inversión de color y se utiliza a menudo en interfaces gráficas de usuario para resaltar, dibujar con bandas elásticas y otras pinturas volátiles, ya que volver a pintar las mismas formas con el mismo color restaurará los valores de píxel originales.
Los modelos utilizados en gráficos de computadora 2D generalmente no prevén formas tridimensionales o fenómenos ópticos tridimensionales como iluminación, sombras , reflexión , refracción , etc. Sin embargo, generalmente pueden modelar múltiples capas (conceptualmente de tinta, papel o película; opaca, translúcida o transparente , apiladas en un orden específico. El orden generalmente se define mediante un solo número (la profundidad de la capa o la distancia desde el espectador).
Los modelos en capas se denominan a veces "gráficos por ordenador en 2 1 ⁄ 2 D". Permiten imitar las técnicas tradicionales de dibujo e impresión basadas en película y papel, como cortar y pegar, y permiten al usuario editar cualquier capa sin afectar a las demás. Por estos motivos, se utilizan en la mayoría de los editores gráficos . Los modelos en capas también permiten un mejor antialiasing espacial de dibujos complejos y proporcionan un modelo sólido para determinadas técnicas, como las uniones en inglete y la regla de pares e impares .
Los modelos en capas también se utilizan para permitir al usuario suprimir información no deseada al visualizar o imprimir un documento, por ejemplo, carreteras o ferrocarriles de un mapa , ciertas capas de proceso de un diagrama de circuito integrado o anotaciones a mano de una carta comercial.
En un modelo basado en capas, la imagen de destino se produce "pintando" o "pegando" cada capa, en orden decreciente de profundidad, sobre el lienzo virtual. Conceptualmente, cada capa se renderiza primero por sí sola, lo que produce una imagen digital con la resolución deseada que luego se pinta sobre el lienzo, píxel por píxel. Por supuesto, no es necesario renderizar las partes totalmente transparentes de una capa. La renderización y el pintado se pueden realizar en paralelo, es decir, cada píxel de la capa se puede pintar sobre el lienzo tan pronto como se produce mediante el procedimiento de renderización.
Las capas que constan de objetos geométricos complejos (como texto o polilíneas ) se pueden dividir en elementos más simples ( caracteres o segmentos de línea , respectivamente), que luego se pintan como capas separadas, en algún orden. Sin embargo, esta solución puede crear artefactos de aliasing no deseados donde dos elementos se superponen al mismo píxel.
Véase también Formato de Documento Portátil#Capas .
Las tarjetas gráficas de ordenador modernas utilizan casi en su inmensa mayoría técnicas de trama, dividiendo la pantalla en una cuadrícula rectangular de píxeles , debido al coste relativamente bajo del hardware de vídeo basado en trama en comparación con el hardware de gráficos vectoriales. La mayoría del hardware gráfico tiene soporte interno para operaciones de blitting o dibujo de sprites . Un coprocesador dedicado al blitting se conoce como chip Blitter .
Los chips de gráficos 2D clásicos y las unidades de procesamiento de gráficos de finales de la década de 1970 y principios de la de 1980, utilizados en juegos arcade , consolas de videojuegos y computadoras hogareñas de 8 bits a principios de 16 bits , incluyen:
Muchas interfaces gráficas de usuario (GUI), incluidas macOS , Microsoft Windows o el sistema X Window , se basan principalmente en conceptos gráficos 2D. Este tipo de software proporciona un entorno visual para interactuar con la computadora y, por lo general, incluye algún tipo de administrador de ventanas para ayudar al usuario a distinguir conceptualmente entre diferentes aplicaciones. La interfaz de usuario dentro de las aplicaciones de software individuales también suele ser de naturaleza 2D, debido en parte al hecho de que la mayoría de los dispositivos de entrada comunes , como el mouse , están restringidos a dos dimensiones de movimiento.
Los gráficos 2D son muy importantes en los periféricos de control como impresoras, plotters, cortadoras de hojas, etc. También se usaron en la mayoría de los primeros videojuegos ; y todavía se usan para juegos de cartas y de mesa como el solitario , ajedrez , mahjongg , etc.
Los editores de gráficos 2D o programas de dibujo son software a nivel de aplicación para la creación de imágenes, diagramas e ilustraciones mediante la manipulación directa (a través del ratón, tableta gráfica o dispositivo similar) de primitivas de gráficos de ordenador en 2D. Estos editores suelen proporcionar primitivas geométricas así como imágenes digitales ; y algunos incluso admiten modelos procedimentales. La ilustración suele representarse internamente como un modelo en capas, a menudo con una estructura jerárquica para que la edición sea más cómoda. Estos editores suelen generar archivos gráficos en los que las capas y las primitivas se conservan por separado en su forma original. MacDraw , introducido en 1984 con la línea de ordenadores Macintosh , fue un ejemplo temprano de esta clase; ejemplos recientes son los productos comerciales Adobe Illustrator y CorelDRAW , y los editores gratuitos como xfig o Inkscape . También hay muchos editores de gráficos 2D especializados para ciertos tipos de dibujos como diagramas eléctricos, electrónicos y VLSI, mapas topográficos, fuentes de ordenador, etc.
Los editores de imágenes están especializados en la manipulación de imágenes digitales , principalmente mediante operaciones de dibujo/pintura a mano alzada y procesamiento de señales . Por lo general, utilizan un paradigma de pintura directa, donde el usuario controla lápices virtuales, pinceles y otros instrumentos artísticos a mano alzada para aplicar pintura a un lienzo virtual. Algunos editores de imágenes admiten un modelo de múltiples capas; sin embargo, para admitir operaciones de procesamiento de señales como el desenfoque, cada capa normalmente se representa como una imagen digital. Por lo tanto, cualquier primitiva geométrica proporcionada por el editor se convierte inmediatamente en píxeles y se pinta en el lienzo. El nombre editor de gráficos rasterizados a veces se usa para contrastar este enfoque con el de los editores generales que también manejan gráficos vectoriales . Uno de los primeros editores de imágenes populares fue MacPaint de Apple , compañero de MacDraw . Los ejemplos modernos son el editor gratuito GIMP y los productos comerciales Photoshop y Paint Shop Pro . Esta clase también incluye muchos editores especializados: para medicina, teledetección, fotografía digital , etc.
Con el resurgimiento [4] :8 de la animación 2D, los paquetes de software libre y propietario se han vuelto ampliamente disponibles para animadores aficionados y profesionales. Con software como RETAS UbiArt Framework y Adobe After Effects , el coloreado y la composición se pueden realizar en menos tiempo. [ cita requerida ]
Se han desarrollado varios enfoques [4] : 38 para facilitar y acelerar el proceso de animación digital 2D. Por ejemplo, al generar ilustraciones vectoriales en una herramienta como Adobe Flash, un artista puede emplear coloración automática y entremezclado controlado por software .
Programas como Blender o Adobe Substance permiten al usuario realizar animación 3D, animación 2D o combinar ambas en su software permitiendo experimentar con múltiples formas de animación. [5]