Capítulo 1 Introducción El término "gráficos por computadora" se refiere a cualquier cosa involucrada en la creación o manipulación de imágenes en computadora , incluyendo animado imágenes . Se es a muy amplia campo , y uno en que los cambios y los avances parecen venir a un ritmo vertiginoso. Se puede ser difícil para a principiante para saber por dónde empezar. Sin embargo, , no es a núcleo de ideas fundamentales que son parte de el base de la mayoría de las aplicaciones de gráficos por ordenador. Este libro intenta cubrir esos fundamentos ideacionales, o al menos tantas de ellas como caben en un nivel universitario de un semestre curso. Si bien no es posible cubrir todo el campo en un primer curso incluso gran parte de este debe ser un buen lugar para empezar. Este breve capítulo ofrece una visión general e introducción al material que se tratará en el resto del libro, sin entrar en muchos detalles. 1.1 Pintura y dibujo El foco principal de este libro son los gráficos tridimensionales(3D), donde la mayor parte del trabajo entra en la producción de un modelo 3D de una escena. Pero en última instancia , en casi todos casos, el fin resultado de un proyecto de gráficos por ordenador es una imagen bidimensional. Y, por supuesto, la producción directa y la manipulación de imágenes 2D es un tema importante por derecho propio. Además , a lote de ideas se retrasan de dos dimensiones a tres. Por lo tanto, tiene sentido comenzar con gráficos en 2D. Una imagen que se presenta en la pantalla del ordenador se compone de píxeles. El pantalla consiste en de una cuadrícula rectangular de píxeles, dispuesta en filas y columnas. El píxeles son pequeño suficiente que no son fáciles de ver individualmente. De hecho, para muchas pantallas de muy alta resolución, se vuelven esencialmente invisibles. En un momento dado, cada píxel puede mostrar solo un color. Más pantallas estos días utilizan el color de 24 bits, donde un color se puede especificar por tres números de 8 bits, dando la niveles de rojo, verde y azul en el color. Cualquiera que color que puede ser mostrado en el pantalla es hecho hasta de alguna combinación de estos tres "colores primarios". Otros formatos son posible , tales como escala de grises, donde cada píxel es algún tono de gris y el color del píxel se da por un número que especifica el nivel de gris en una escala de negro a blanco. Típicamente , 256 sombras de grises son utilizado . Las primeras pantallas de computadora utilizan color indexado, donde sólo un pequeño conjunto de colores, por lo general 16 o 256, podría visualizarse . Para un indexado pantalla a color, no es a numerado lista de posible colores , y el color de un píxel se especifica mediante un entero que da la posición del color en el lista. En cualquier caso, los valores de color de todos los píxeles de la pantalla se almacenan en un bloque de memoria conocida como búfer de fotogramas . Cambios el imagen en el pantalla requiere cambiando color valores que se almacenan en el búfer de tramas. El pantalla es redibujado muchos veces por segundo , por lo que casi inmediatamente después de que los valores de color se cambian en el búfer de marco, los colores de los píxeles de la pantalla se cambiarán para que coincidan, y la imagen mostrada cambiará . 1 CAPÍTULO 1. INTRODUCCION 2 Una pantalla de ordenador utilizada de esta manera es el modelo básico de gráficos ráster. El término "raster" técnicamente se refiere al mecanismo utilizado en monitores de computadora de tubo de vacío más antiguos: Un haz de electrones se movería a lo largo de las filas de píxeles, haciéndolos brillar. El viga fue movidos a través de la pantalla por potentes imanes que desviarían la trayectoria de los electrones. El más fuerte el haz, más brillante es el resplandor del píxel, por lo que el brillo de los píxeles podría ser controlado mediante la modulación de la intensidad del haz de electrones. El color valores almacenado en el tampón de trama se utilizaron para determinar la intensidad del haz de electrones. (Para una pantalla a color, cada píxel tenía un punto rojo, un punto verde, y un punto azul, que fueron iluminados por separado por el viga.) Un monitor de ordenador de pantalla plana moderno no es un ráster en el mismo sentido. No hay es no haz de electrones en movimiento. El mecanismo que controles el colores de el píxeles es diferente para diferentes tipos de pantalla. Pero el pantalla es todavía hecho hasta de píxeles , y el color valores para todos los píxeles todavía se almacenan en un búfer de fotogramas. El idea de un imagen que consiste en de a rejilla de píxeles , con valores de color numéricos para cada píxel, define gráficos ráster. Aunque las imágenes de la pantalla del ordenador se representan mediante píxeles, especificando los colores de píxeles no siempre es la mejor manera de crear una imagen. Otro manera es a especificar el básico objetos geométricos que contiene, formas como líneas, círculos, triángulos y rectángulos . Este es la idea que define los gráficos vectoriales : Representar una imagen como una lista de la formas que contiene. Para hacer cosas más interesante , el formas puede tienen atributos , tales como el grosor de una línea o el color que rellena un rectángulo. De curso , no cada imagen puede ser compuesto de formas geométricas simples. Este enfoque sin duda no lo haría trabajo para a imagen de una hermosa puesta de sol (o para la mayoría de cualquier otra imagen fotográfica). Sin embargo, , que obras bien para muchos tipos de imágenes, como planos arquitectónicos e ilustraciones científicas. De hecho, al principio de la historia de la computación, los gráficos vectoriales incluso se utilizaron directamente en computadora pantallas. Cuando el primero gráfico computadora pantallas fueron desarrollado , raster pantallas fueron también lento y caro para ser práctico. Afortunadamente , que fue posible a usar vacío tubo tecnología de otra manera: El haz de electrones se podría hacer para dibujar directamente una línea en la pantalla , simplemente barriendo la viga a lo largo de esa línea. Una pantalla de gráficos vectoriales almacenaría una lista de visualización de líneas que deben aparecer en la pantalla. Desde a punto en el pantalla sería resplandor sólo muy brevemente después de ser iluminado por el haz de electrones, la pantalla gráfica pasaría a través de la mostrar lista una y otra vez, redibujando continuamente todas las líneas de la lista. Para cambio el imagen , sólo sería necesario cambiar el contenido de la lista de visualización. De curso , si la pantalla lista se convirtió en demasiado larga, la imagen comenzaría a parpadear porque una línea tendría la oportunidad de visiblemente se desvanecen antes de su siguiente turno para ser redibujado. Pero aquí está el punto: Para una imagen que se puede especificar como un número razonablemente pequeño de Formas geométricas, la cantidad de información necesaria para representar la imagen es mucho menor utilizando una representación vectorial que utilizando una representación ráster. Considere un imagen hecho hasta de mil segmentos de línea. Para un vector representación de el imagen , que sólo necesidad a tienda las coordenadas de dos mil puntos, los puntos finales de las líneas. Este sería tomar hasta sólo a pocos kilobytes de memoria. Para tienda el imagen en un marco buffer para a raster pantalla sería requieren mucho más memoria. Del mismo modo , una visualización vectorial podría dibujar el líneas en el pantalla más rápidamente que una visualización ráster podría copiar la misma imagen del búfer de fotogramas a la pantalla . (Como tan pronto como las pantallas ráster se volvieron rápidas y baratas, sin embargo, rápidamente desplazaron vector debido a su capacidad para mostrar todo tipo de imágenes razonablemente bien.) CAPÍTULO 1. INTRODUCCION 3 La división entre gráficos ráster y gráficos vectoriales persiste en varias áreas del ordenador gráficos. Para ejemplo , que puede ser visto en un división entre dos categorías de programas que se puede utilizar para crear imágenes: programas de pintura y programas de dibujo. En una pintura programa, la imagen se representa como una cuadrícula de píxeles, y el usuario crea una imagen asignación de colores a píxeles. Este podría se haga por utilizando a " dibujo herramienta " que actos como a pintor cepillo o incluso mediante herramientas que dibujan formas geométricas como líneas o rectángulos. Pero el punto en un programa de pintura es colorear los píxeles individuales, y son sólo los colores de píxeles los que se guardan. Para hacer esto más claro, supongamos que se utiliza un programa de pintura para dibujar una casa, a continuación, dibujar a árbol en frente de la casa. Si que entonces borrar el árbol , usted va a sólo revelar a en blanco antecedentes , no una casa. De hecho, la imagen nunca contenía realmente una "casa" en absoluto sólo de color individual píxeles que el espectador podría percibir como la creación de una imagen de una casa. En un programa de dibujo, el usuario crea una imagen añadiendo formas geométricas y la imagen se representa como una lista de esas formas. Si que lugar un lugar casa forma (o colección de formas que hacen hasta una casa)en la imagen , y luego se coloca una forma de árbol en la parte superior de la casa, el casa es todavía allí, ya que se almacena en la lista de formas que contiene la imagen. Si que eliminar el árbol , la casa seguirá estando en la imagen, tal como era antes de añadir el árbol. Además , que debe ser capaz de seleccionar una de las formas en la imagen y moverla o cambiar su tamaño, por lo que el dibujo los programas ofrecen un amplio conjunto de operaciones de edición que no son posibles en los programas de pintura. (El reverso, sin embargo, también es cierto.) Un programa práctico para la creación y edición de imágenes podría combinar elementos de dibujo, aunque uno u otro suele ser dominante. Para ejemplo , a dibujo programa podría permitir que el usuario incluya una imagen de tipo ráster, tratándola como una forma. Un programa de pintura puede permitir al usuario crear "capas", que son imágenes separadas que se pueden superior de otro para crear la imagen final. El capas puede entonces ser manipulado mucho como el formas en un programa de dibujo (para que pueda mantener su casa y su árbol en capas separadas , incluso si en la imagen de la casa está en la parte posterior del árbol). Dos programas gráficos conocidos son Adobe Photoshop y Adobe Illustrator. Photoshop está en la categoría de programas de pintura, mientras que Illustrator es más de un programa de dibujo. En el mundo del software libre, el programa de procesamiento de imágenes GNU, Gimp, es una buena alternativa a Photoshop, while Inkscape es un programa de dibujo libre de forma razonable. Breves introducciones a Gimp y Inkscape se pueden encontrar en el Apéndice C. La división entre gráficos ráster y vectoriales también aparece en el campo de archivo de gráficos formatos. No hay son muchos maneras a representan un imagen como datos almacenado en un archivo. Si el original imagen debe ser recuperada de los bits almacenados en el archivo, la representación debe seguir algunos Especificación exacta, conocida. Tales a especificación es llamado a gráficos archivo formato . Algunos popular los formatos de archivo de gráficos incluyen GIF, PNG, JPEG y SVG. Más imágenes utilizado en el Las webs son GIF, PNG o JPEG. Los navegadores web modernos también tienen soporte para imágenes SVG. GIF, PNG y JPEG son básicamente formatos de gráficos ráster; un imagen es especificados por almacenamiento un valor de color para cada píxel. GIF es un formato de archivo más antiguo, que ha sido reemplazado en gran medida por PNG, pero todavía se pueden encontrar imágenes GIF en la web. (El formato GIF admite animación imágenes, por lo que los GIF se utilizan a menudo para animaciones simples en páginas Web .) GIF utiliza un índice modelo de color con un máximo de 256 colores. PNG puede utilizar color indexado o completo de 24 bits, mientras que JPEG está diseñado para imágenes a todo color. La cantidad de datos necesarios para representar una imagen ráster puede ser bastante grande. Sin embargo, los datos suelen contener mucha redundancia ,y los datos pueden ser "comprimidos" para reducir su tamaño. GIF y PNG utilizan compresión de datos sin pérdida, lo que significa que la imagen original CAPÍTULO 1. INTRODUCCION 4 se puede recuperar perfectamente de los datos comprimidos. JPEG utiliza una compresión de datos con pérdida algoritmo, lo que significa que la imagen que se recupera de un archivo JPEG no es exactamente al igual que la imagen original; algunos información tiene sido perdido . Este podría no sonido como a bueno idea, pero de hecho la diferencia a menudo no es muy notable, y el uso de la compresión con pérdida por lo general permite una mayor reducción en el tamaño de los datos comprimidos. JPEG generalmente funciona bien para imágenes fotográficas, pero no tan bien para las imágenes que tienen bordes nítidos entre diferentes colores . Es especialmente malo para dibujos de líneas e imágenes que contienen texto; PNG es el formato preferido para tales imágenes. SVG, por otro lado, es fundamentalmente un formato de gráficos vectoriales. las edades pueden incluir imágenes ráster). SVG es en realidad un lenguaje basado en XML para describir dos imágenes de gráficos vectoriales dimensionales. "SVG" significa "Gráficos vectoriales escalables "y el término "escalable" indica una de las ventajas de los gráficos vectoriales : No hay pérdida de calidad cuando se aumenta el tamaño de la imagen. Una línea entre dos puntos se puede representar a cualquier escala, y sigue siendo la misma perfecta línea geométrica. Si que tratar de a en gran medida aumentar el tamaño de a raster imagen , en el otros mano , que voluntad encontrar que no tienen suficiente color valores para todos los píxeles de la nueva imagen; cada uno pixel de el original imagen voluntad ser ampliado a cubierta a rectángulo de píxeles en la imagen escalada, y obtendrá bloques de varios píxeles de color uniforme. El naturaleza escalable de las imágenes SVG las convierten en una buena opción para los navegadores web y para elementos en el escritorio de su computadora. Y de hecho, algunos entornos de escritorio ahora están usando Imágenes SVG para sus iconos de escritorio. Una imagen digital, independientemente de su formato, se especifica mediante un sistema de coordenadas. A el sistema de coordenadas establece una correspondencia entre números y puntos geométricos. En dos dimensiones, a cada punto se le asigna un par de números, que se denominan las coordenadas de el punto. El dos coordenadas de a punto son a menudo llamado su x - coordinar y y y - coordinar , aunque los nombres "x" e "y" son arbitrarios. Una imagen ráster es una cuadrícula bidimensional de píxeles dispuesta en filas y columnas. Como tal, tiene un sistema de coordenadas natural en el que cada píxel corresponde a un par de enteros con el número de la fila y el número de la columna que contiene el píxel. (Incluso en este caso simple, hay cierto desacuerdo en cuanto a si las filas deben ser numeradas de superiora-inferior o de abajo-a-arriba.) Para una imagen vectorial, es natural utilizar coordenadas de número real. El coordinar sistema para una imagen es arbitraria hasta cierto punto; que es , el mismo imagen puede ser especificados utilizando diferente sistemas de coordenadas. No quiero decir mucho acerca de los sistemas de coordenadas aquí, pero van a ser un foco principal de una gran parte del libro,y son aún más importantes en tres -dimensiones gráficos que en dos dimensiones. 1.2 Elementos de gráficos 3D Cuando nos dirigimos a gráficos 3D, encontramos que los enfoques más comunes tienen más en común con gráficos vectoriales que con gráficos ráster. Que es , el contenido de un imagen es especificado como una lista de objetos geométricos. El técnica es referidos a como geométrico modelado . El punto de partida es construir un "mundo 3D artificial" como una colección de formas, dispuestas en un espacio tridimensional. El objetos puede tienen atributos que , combinados con propiedades globales del mundo, determinar la apariencia de los objetos. A menudo , el rango de formas básicas es muy limitada, tal vez incluyendo sólo puntos, segmentos de línea, y triángulos. A forma más compleja, como un polígono o esfera, se puede construir o aproximar como una colección CAPÍTULO 1. INTRODUCCION 5 de formas más básicas, si no se considera en sí misma básica. Para hacer a dos -dimensional imagen de la escena, la escena se proyecta de tres dimensiones a dos dimensiones. Proyección es el equivalente a tomar una fotografía de la escena. Vamos a mirar cómo que todos obras en un poco más detalles. En primer lugar, la geometría. .. . Nosotros iniciar con un vacío 3D espacio o " mundo ." De curso , este espacio existe sólo conceptualmente, pero es útil pensar en él como real y ser capaz de visualizarlo en su mente. El espacio necesidades a coordinar sistema que asociados cada uno punto en el espacio con tres números, generalmente denominados las coordenadas x, y, y z del punto . Esta coordenada sistema se conoce como "coordenadas mundiales." Queremos construir una escena dentro del mundo, compuesta de objetos geométricos. Para ejemplo , podemos especificar un segmento de línea en la escena dando las coordenadas de sus dos puntos finales, y podemos especificar un triángulo dando las coordenadas de sus tres vértices. El más pequeño bloques de construcción con los que tenemos que trabajar, como segmentos de línea y triángulos, se denominan primitivas geométricas. Diferente gráficos sistemas hacer diferente conjuntos de primitivo disponible , pero en muchos casos sólo formas muy básicas como líneas y triángulos se consideran primitivas . Una escena compleja puede contener un gran número de primitivos, y sería muy difícil crear la escena dando coordenadas explícitas para cada primitiva individual. La solución, como cualquier programador debe adivinar inmediatamente, es dividir los primitivos en componentes reutilizables. Para ejemplo , para a escena que contiene varios automóviles , que podría crear a geométrico modelo de a rueda . Un automóvil puede ser modelado como cuatro ruedas juntos con modelos de otros componentes . Y luego podríamos usar varias copias del modelo de automóvil en la escena. Tenga en cuenta que una vez que se ha diseñado un modelo geométrico, se puede utilizar como un componente en modelos más complejos. Este es referidos a como jerárquico modelado . Supongamos que tienen construido a modelo de a rueda hacia fuera de geométrico primitivos . Cuando que rueda es se movió en posición en el modelo de un automóvil , el coordenadas de todos de su primitivos voluntad tienen a ser ajustado . Así que lo que exactamente tienen que ganado por edificio el rueda. El punto es que todos de el coordenadas en el rueda son ajustado en el mismo manera . Que es , a lugar el rueda en el automóvil , que sólo tienen a especificar un solo ajuste que es aplicado a el rueda como entero . El tipo de " ajuste " que es utilizado es llamado a geométrico transformar (o transformación geométrica). Una transformación geométrica se utiliza para ajustar el tamaño, la orientación y posición de un objeto geométrico. Cuando haciendo a modelo de un automóvil , que construir uno rueda . A continuación, aplicamos cuatro transformaciones diferentes al modelo de rueda para agregar cuatro copias de la rueda al automóvil. Del mismo modo , que puede añadir varios automóviles a a escena por aplicando diferente transforma en el mismo modelo de automóvil. Los tres tipos más básicos de transformación geométrica se denominan escala, rotación y translación. Una transformación de escala se utiliza para establecer el tamaño de un objeto, es decir, para hacerlo más grande o más pequeño por algún factor especificado. Una transformación de rotación se utiliza para establecer la orientación de un objeto, girándolo por algún ángulo sobre algún eje específico. Una transformación de traducción se utiliza para establecer la posición de un objeto, descolocándolo por una cantidad determinada de su posición original. En este libro, vamos a cumplir con estas transformaciones primero en dos dimensiones, donde están más fácil de entender. Pero que es en 3D gráficos que convertirse en verdaderamente esencial . • Siguiente, apariencia. . . . Geométrico formas por ellos mismos son no muy interesante . Tú tienen que ser capaces de establecer su apariencia. Este es hecho por asignación de atributos a el geométrico objetos. Un obvio atributo es color, pero conseguir a realista apariencia vueltas hacia fuera a ser un lote más complicado que simplemente especificar un color para cada primitivo. En gráficos3D, en lugar de color, por lo general hablamos de material. El término material aquí se refiere a el propiedades que CAPÍTULO 1. INTRODUCCION 6 determinar la apariencia visual intrínseca de una superficie. Esencialmente , este significa cómo el superficie interactúa con la luz que golpea la superficie. Las propiedades del material también pueden incluir un color básico como otras propiedades como la brillo, la rugosidad y la transparencia. Uno de los tipos más útiles de propiedad de material es una textura. En términos generales, una textura es una forma de variar las propiedades del material de punto a punto en una superficie. El la mayoría uso común de la textura es permitir diferentes colores para diferentes puntos. Este es hecho por utilizando una imagen 2D como una textura, que se puede aplicar a una superficie para que la imagen se vea como que es "pintado" sobre la superficie. Sin embargo, , textura puede también referirse a cambiando valores para cosas como transparencia o "bumpiness". Texturas permitir nosotros a añadir detalle a a escena sin utilizando a enorme número de primitivas geométricas; en su lugar , que puede utilizar un más pequeño número de texturizado primitivos . Un material es una propiedad intrínseca de un objeto, pero la apariencia real del objeto también depende del entorno en el que se vea el objeto. En el mundo real, no ver cualquier cosa a menos que haya algo de luz en el medio ambiente. El mismo es cierto en 3D gráficos : usted tiene que añadir iluminación simulada a una escena. No hay puede ser varios fuentes de luz en un escena. Cada uno luz fuente puede tienen su propio color, intensidad , y dirección o posición. La luz de esas fuentes interactuará con las propiedades materiales de los objetos de la escena . El soporte para la iluminación en un sistema gráfico puede variar de bastante simple a muy complejo y computacionalmente intensivo. • ? Por último, la imagen. . .. En general, el lo último objetivo de 3D gráficos es a producir 2D imágenes del mundo 3D. El transformación de 3D a 2D implica ver y proyección . El mundo se ve diferente cuando se ve desde diferentes puntos de vista. Para establecer un punto de ver , tenemos que especificar la posición del espectador y la dirección que el espectador está mirando . Se también es necesario especificar una dirección "arriba", una dirección que apuntará hacia arriba en el imagen final. Este puede ser pensamiento de como colocación una "cámara virtual" en el escena . Una vez que el vista está establecida, el mundo visto desde ese punto de vista se puede proyectar en 2D. Proyección es análogo a tomar una foto con la cámara. El último paso en los gráficos 3D es asignar colores a píxeles individuales en la imagen 2D. Este proceso se denomina rasterización, y todo el proceso de producción de una imagen se conoce como representando la escena. En muchos casos, el objetivo final no es crear una sola imagen, sino crear una animación , que consiste en una secuencia de imágenes que muestran el mundo en diferentes momentos. En una animación, hay son pequeños cambios de una imagen en la secuencia a la siguiente. Casi cualquier aspecto de a escena puede cambiar durante una animación, incluyendo coordenadas de primitivas, transformaciones, material, propiedades, y la vista. Para ejemplo , un objeto puede ser hecho a crecer más de el curso de una animación aumentando gradualmente el factor de escala en una transformación de escalado que se aplica al objeto. Y cambiar la vista durante una animación puede dar el efecto de moverse o volar a través de la escena. De curso , que puede ser difícil a computación el necesario cambios . No hay muchas técnicas para ayudar con el cálculo. Uno de el la mayoría importante es a usar un " física motor", que calcula el movimiento y la interacción de los objetos en función de las leyes de la física . ( Sin embargo, no aprenderá acerca de los motores de física en este libro.) 1.3 Hardware y Software Se utilizará OpenGL como base principal para la programación de gráficos 3D. El original versión de OpenGL fue lanzada en 1992 por una compañía llamada Silicon Graphics, que era conocida para sus estaciones de trabajo gráficas: potentes y costosas computadoras diseñadas para CAPÍTULO 1. INTRODUCCION 7 aplicaciones. (Hoy, es probable que tenga más potencia de computación gráfica en su teléfono inteligente .) OpenGL es compatible con el hardware gráfico en la mayoría de los dispositivos informáticos modernos, Computadoras de escritorio, computadoras portátiles y muchos dispositivos móviles. Este sección voluntad dar que un poco de antecedentes sobre el historial de OpenGL y sobre el hardware gráfico que lo soporta. En los primeros ordenadores de sobremesa, los contenidos de la pantalla fueron gestionados directamente por el Cpu. Para ejemplo , a dibujar una línea segmento en el pantalla , el CPU sería ejecutar un bucle a conjunto el color de cada píxel que se encuentra a lo largo de la línea. Innecesario a decir , gráficos podría tomar hasta un lote de el Tiempo de LA CPU. Y el rendimiento gráfico fue muy lento, en comparación con lo que esperamos hoy. Así que lo que ha cambiado? Computadoras son mucho más rápido en general, de curso , pero el grande cambio es que en computadoras modernas, el procesamiento de gráficos se realiza mediante un componente especializado llamado GPU, o Unidad de Procesamiento de Gráficos . Una GPU incluye procesadores para realizar cálculos gráficos; en hecho, puede incluir un gran número de estos procesadores que funcionan en paralelo a acelerar operaciones gráficas. Se también incluye su propio dedicado memoria para almacenamiento cosas como imágenes y listas de coordenadas. Los procesadores GPU tienen un acceso muy rápido a los datos que se almacenan en GPU memoria—mucho más rápido que su acceso a los datos almacenados en la memoria principal del ordenador. Para dibujar una línea o realizar alguna otra operación gráfica, la CPU simplemente tiene que enviar comandos, junto con los datos necesarios, a la GPU, que es responsable de la rying fuera de esos comandos. El CPU descargas la mayoría de el gráfico trabajo a el GPU, que está optimizado para llevar a cabo ese trabajo muy rápidamente. El conjunto de comandos que el GPU bajo - los stands conforman la API de la GPU. OpenGL es un ejemplo de una API de gráficos, y la mayoría de las GPU apoyar OpenGL en el sentido de que pueden entender los comandos de OpenGL, o al menos que Los comandos OpenGL se pueden traducir eficientemente en comandos que la GPU puede entender. OpenGL no es la única API de gráficos. La alternativa más conocida es probablemente Direct3D, una API de gráficos 3D utilizada para Microsoft Windows. OpenGL está más ampliamente disponible, ya que no se limita a Microsoft, sino a Direct3D es compatible con la mayoría de las tarjetas gráficas, y a menudo ha introducido nuevas características antes de OpenGL. He dicho que OpenGL es una API, pero de hecho es una serie de API que tienen ha sido objeto a la extensión y revisión repetidas . El actual versión , en temprano 2018, es 4.6, y que es muy diferente de la versión 1.0 de 1992. Además , no es a especializados versión llamado Openg GL ES para "sistemas integrados" como teléfonos móviles y tabletas. Y también hay WebGL, para su uso en navegadores web, que es básicamente un puerto de OpenGL ES 2.0. Además , a nueva API denominada Vulkan se ha definido como un reemplazo para OpenGL; Vulkan es a complejo , API de bajo nivel diseñada para la velocidad y la eficiencia en lugar de la facilidadde uso, y es probable que no reemplazar completamente OpenGL durante algún tiempo, si alguna vez. Se voluntad ser útil a saber algo sobre cómo y por qué OpenGL ha cambiado. En primer lugar, usted debe saber que OpenGL fue diseñado como un sistema "cliente/ servidor". El servidor, que es responsable de controlar la visualización del ordenador y realizar gráficos computations, lleva a cabo comandos emitidos por el cliente. Típicamente , el servidor es una GPU, incluyendo sus procesadores gráficos y memoria. El servidor ejecuta OpenGL comandos . El cliente es el CPU en el mismo equipo, junto con el programa de aplicación que está ejecutando. OpenGL comandos provienen del programa que se ejecuta en la CPU. Sin embargo, , que es en realidad posible para ejecutar programas OpenGL de forma remota a través de una red. Que es , que puede ejecutar un aplicación en un ordenador remoto (el cliente OpenGL), mientras que los cálculos gráficos y se realizan en el equipo que realmente está utilizando (el servidor OpenGL). La idea clave es que el cliente y el servidor son componentes independientes, y hay un canal de comunicación entre dichos componentes. Los comandos OpenGL y los datos que CAPÍTULO 1. INTRODUCCION 8 que necesitan se comunican desde el cliente (la CPU) al servidor (la GPU) a través de que canal. El capacidad de el canal puede ser un limitando factor en gráficos rendimiento. Piensa de dibujar una imagen en la pantalla. Si el LA GPU puede dibujar el imagen en microsegundos , pero que tarda milisegundos para enviar los datos de la imagen de la CPU a la GPU, gran velocidad de la GPU es irrelevante—la mayor parte del tiempo que se tarda en dibujar la imagen es comunicación hora. Por esta razón, uno de los factores impulsores de la evolución de OpenGL ha sido el deseo para limitar la cantidad de comunicación necesaria entre la CPU y la GPU. Uno enfoque es almacenar información en la memoria de la GPU. Si algunos datos es va a ser utilizado varios veces, se puede transmitir a la GPU una vez y almacenarse en la memoria allí, donde será inmediatamente accesible a la GPU. Otro enfoque es a tratar de a disminuir el número de comandos OpenGL que se deben transmitir a la GPU para dibujar una imagen determinada. OpenGL dibuja primitivos como triángulos. Especificar a primitivo significa especificando coordinados y atributos para cada uno de sus vértices. En el OpenGL 1.0 original, un comando separado se utilizaba para especificar las coordenadas de cada vértice, y se necesitaba un comando cada vez que valor de un atributo cambiado. Para dibujar un solo triángulo sería requieren tres o más comandos . Dibujar un objeto complejo compuesto por miles de triángulos requeriría muchos miles de comandos. Incluso en OpenGL 1.1, que se convirtió en posible a dibujar tales un objeto con un solo comando en lugar de miles. Todos el datos para el objeto sería ser cargado en matrices , que podría enviarse en un solo paso a la GPU. Desafortunadamente , si el objeto fue va a ser extraviado más de una vez, entonces los datos tendrían que ser retransmitidos cada vez que el objeto fue dibujado. Este fue fijo en OpenGL 1.5 con Vértice Zona de influencia Objetos . Un VBO es un bloque de memoria en la GPU que puede almacenar las coordenadas o los valores de atributo para un conjunto de vértices. Esto permite reutilizar los datos sin tener que retransmitirlos desde la CPU a el GPU cada vez que se utiliza. Del mismo modo, OpenGL 1.1 introdujo objetos de textura para que sea posible almacenar varios imágenes en la GPU para su uso como texturas. Este significa que textura imágenes que son va a se puede reutilizar varias veces una vez en la GPU, de modo que la GPU puede cambiar fácilmente entre imágenes sin tener que volver a cargarlas. • ? A medida que se añadieron nuevas capacidades a OpenGL, la API creció en tamaño. Pero el crecimiento fue todavía superado por la invención de nuevas y más sofisticadas técnicas para hacer gráficos. Algunos de estas nuevas técnicas se añadieron a OpenGL, pero el problema es que no importa cuántos características que agregue, siempre habrá demandas de nuevas características, así como quejas que todos los las nuevas características están haciendo las cosas demasiado complicadas ! OpenGL era una máquina gigante, con piezas siempre se pegan en ella, pero todavía no complacer a todo el mundo. El real solución fue a hacer que la máquina sea programable. Con OpenGL 2.0, que se convirtió en posible a escribir programas que se ejecutará como parte del cálculo gráfico en la GPU. El programas se ejecutan en el GPU a velocidad de GPU. Un programador que quiera utilizar una nueva técnica gráfica puede escribir un programa para implementar la función y simplemente entregarla a la GPU. El API de OpenGL no tienen para ser cambiado. El sólo cosa que el API ha a apoyo es el capacidad a enviar programas a la GPU para la ejecución. Los programas se llaman shaders (aunque el término no describe realmente lo que la mayoría de en realidad lo hacen). Los primeros sombreadores que se introdujeron fueron sombreadores de vértices y fragmentos shaders. Cuando a primitivo es dibujado , algunos trabajo tiene a hacer en cada uno vértice de el primitivo , como aplicar una transformación geométrica al vértice coordina o utilizar los atributos y entorno de iluminación global para calcular el color de ese vértice. Un sombreador de vértices es un programa CAPÍTULO 1. INTRODUCCION 9 que puede hacerse cargo del trabajo de hacer tales cálculos "por vértice". Del mismo modo , algunos trabajo tiene para cada píxel dentro de la primitiva. Un sombreador de fragmentos puede hacerse cargo del trabajo de realizar tales cálculos "por píxel". (Los sombreadores de fragmentos también se denominan sombreadores de píxeles .) La idea de hardware gráfico programable fue muy exitosa, tan exitosa que en OpenGL 3.0, el procesamiento habitual por vértice y por fragmento estaba en desuso (lo que significa que su uso fue desalentado). Y en OpenGL 3.1, fue eliminado del estándar OpenGL, aunque todavía está presente como una extensión opcional. En la práctica, todas las características originales de OpenGL sigue siendo compatible con las versiones de escritorio de OpenGL y probablemente seguirá disponible en el futuro. On el incrustado sistema lado , sin embargo, , con OpenGL ES 2.0 y más tarde , el uso de sombreadores es obligatorio,y una gran parte de la API de OpenGL 1.1 ha sido completamente Quitado. WebGL , el versión de OpenGL para uso en navegadores web, es basado en en OpenGL ES 2.0, y también requiere sombreadores para hacer cualquier cosa. Sin embargo , que voluntad comenzar nuestro estudio de OpenGL con versión 1.1. Más de el conceptos y muchos de el detalles de que versión son sigue siendo relevante,y ofrece un punto de entrada más fácil para alguien nuevo en la programación de gráficos 3D . Los sombreadores OpenGL están escritos en GLSL (OpenGL Shading Language). Como OpenGL sí mismo , GLSL ha pasado por varias versiones. Nosotros voluntad gastar algunos tiempo más tarde en el curso estudiar GLSL ES 1.0, la versión utilizada con WebGL 1.0 y OpenGL ES 2.0. GLSL utiliza una sintaxis similar al lenguaje de programación C. • ? Como comentario final sobre el hardware de GPU, debo tener en cuenta que los cálculos que se hacen para diferentes vértices son prácticamente independientes, y por lo que potencialmente se puede hacer en paralelo. El lo mismo es cierto de los cálculos para diferentes fragmentos. De hecho, las GPU pueden tener cientos o miles de procesadores que pueden funcionar en paralelo. Es cierto que , el individual procesadores son mucho menos potente que una CPU, pero luego los cálculos típicos porvértice y porfragmento no son muy complicados. El grandes número de procesadores , y el grandes cantidad de paralelismo que es posible en los cálculos gráficos, hace que el rendimiento gráfico impresionante incluso en GPU bastante baratas.