Você está na página 1de 38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Search

Pgina de Inicio del Sitio Developer Desarrollador Noticias Homepage

El

desarrollador sesin C onvirtete Desarrollador Registrado

Herramientas para Desarrolladores Documentacin DirectX OpenGL GPU C omputing de mano Events C alendar

Decimoquinto Tutorial
El Decimoquinto Tutorial est disponible ahora, aqu, en lnea. Usted puede comprar una versin bellamente impresa de este libro , y otros en la serie, en un acto de cortesa de descuento 30% de InformIT y AddisonWesley. Por favor visite nuestra Documentos Recientes pgina para ver todos los ltimos documentos tcnicos y presentaciones de conferencias que pueden ayudarle con sus proyectos.

Suscripcin al Boletn Drivers Jobs (1) C ontacto Informacin Legal

Captulo 1. Introduccin
Este captulo tiene las siguientes cuatro secciones: "Qu es el Decimoquinto?" introduce el lenguaje de programacin por ordenador. "Vrtices, fragmentos, y el canal de grficos" , describe el flujo de datos de hardware grfico moderno y explica cmo el Decimoquinto encaja en este flujo de datos. "Desarrollo Histrico de CG" proporciona algunos antecedentes sobre cmo se desarroll el Decimoquinto. "El centro de gravedad para el Medio Ambiente" , explica cmo las aplicaciones van sobre el uso de los programas de C g travs del tiempo de ejecucin del C G y las interfaces de programacin de aplicaciones (API) de 3D e xistente.

C omentarios

1.1 Qu es el Decimoquinto?
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 1/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Este libro te ensea cmo utilizar un lenguaje de programacin llamado C G. El lenguaje Decimosexto hace posible para que usted pueda controlar la forma, el aspecto y el movimiento de los objetos dibujados usando hardware de grficos programables. Se casa el control de programacin de estos atributos con la velocidad y las capacidades de los procesadores grficos de hoy en da increble. Nunca antes los profesionales grficos de ordenador, si los artistas o programadores, tenan tanto control sobre las imgenes en tiempo real que generan. Decimosexto proporciona a los desarrolladores una plataforma de programacin completo que es fcil de usar y permite la creacin rpida de los efectos especiales y experiencias de calidad cinematogrfica en tiempo real en mltiples plataformas. Al proporcionar un nuevo nivel de abstraccin, el Decimoquinto elimina la necesidad de los desarrolladores programar directamente con el lenguaje grfico de ensamblado, y por lo tanto ms fcilmente se dirigen a OpenGL, DirectX, Windows, Linux, Macintosh OS X, y las plataformas de consolas como la Xbox. C G fue desarrollada en estrecha colaboracin con Microsoft C orporation y es compatible tanto con la API de OpenGL y Microsoft de Alto Nivel Shading Language (HLSL) para DirectX 9.0. C g significa "C para los grficos." El lenguaje de programacin C es un lenguaje de propsito general muy popular inventado en la dcada de 1970. Debido a su popularidad y el diseo limpio, C proporciona la base para varios lenguajes de programacin posteriores. Por ejemplo, C + + y Java basan su sintaxis y la estructura en gran medida de C . El C g se apoya sobre el lenguaje C tambin. Si est familiarizado con C o uno de los muchos idiomas derivados de C , entonces C G ser fcil de aprender. Por otro lado, si usted no est familiarizado con C o incluso lenguajes de programacin en general, sino que disfrute de grficos por ordenador y quieres aprender algo nuevo, leyendo de todos modos. Programas C g tienden a ser cortas y comprensibles. Gran parte de este captulo es de fondo que proporciona un contexto valioso para comprender el Decimoquinto y utilizarla con eficacia. Por otra parte, usted puede encontrar el Decimoquinto es ms fcil de aprender haciendo. Sintase libre para saltar al captulo 2 en cualquier momento si se siente ms cmodo buceo justo en el tutorial.

1.1.1 Un idioma para la programacin de grficos de hardware


C g es diferente de C , C + + y Java, ya que es muy especializado. Nadie se va a escribir una hoja de clculo o procesador
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 2/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

de textos en el Decimoquinto. En cambio, el Decimoquinto apunta la posibilidad de controlar mediante programacin la forma, el aspecto y el movimiento de los objetos prestados utilizando hardware de grficos. En trminos generales, este tipo de lenguaje se llama un lenguaje de sombreado . Sin embargo, el Decimoquinto puede hacer algo ms que sombras. Por ejemplo, los programas de C g pueden realizar la simulacin fsica, composicin y otras tareas nonshading. Piense en un programa de GC como una receta detallada para cmo hacer que un objeto mediante el hardware de grficos programables. Por ejemplo, puede escribir un programa C g para hacer una superficie aparece lleno de baches o para animar un personaje virtual. Ms adelante, en la Seccin 1.3, usted aprender ms sobre la historia de los lenguajes de sombreado y donde el Decimoquinto encaja en esta historia.

1.1.2 Flujo de Datos Modelo de CG


Adems de estar especializados para los grficos, C G y otros lenguajes de sombreado son diferentes de lenguajes de programacin convencionales, ya que se basan en un modelo computacional de flujo de datos. En un modelo de este tipo, el clculo se produce en respuesta a los datos que fluye a travs de una secuencia de pasos de procesamiento. Programas C g operan en vrtices y fragmentos (piense "pxeles" de ahora, si usted no sabe lo que es un fragmento) que se procesan cuando se representa una imagen. Piense en un programa de GC como un cuadro negro en el que los vrtices o fragmentos fluyen de un lado, de alguna manera se transform, y luego fluir hacia fuera en el otro lado. Sin embargo, el cuadro no es realmente un cuadro negro porque se llega a determinar, por medio de los programas de C g usted escribe, exactamente lo que sucede en su interior. C ada vez que un vrtice se procesa o la impresora de trama genera un fragmento mientras que la prestacin de una escena 3D, su programa Decimosexto vrtice o fragmento correspondiente ejecuta. Seccin 1.3 explica el modelo de flujo de datos de C G ms. C omputadoras personales-y ms recientes de todo el partido reciente consolas contienen una unidad de procesamiento grfico (GPU) que se dedica a tareas de grficos, como la transformacin y rasterizar modelos 3D. Sus programas C g realmente ejecutan dentro de la GPU del ordenador.

1.1.3 GPU y CPU Especializacin Generalizacin


Sea o no un ordenador o consola personal tiene una GPU, tiene que haber una C PU que ejecuta el sistema operativo y programas de aplicacin.
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 3/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

C PUs son, por diseo, propsito general. C PUs ejecutan aplicaciones (por ejemplo, procesadores de texto y paquetes de contabilidad) escritos en lenguajes de propsito general, como C + + o Java. Debido al diseo especializado de la GPU, es mucho ms rpido en tareas grficas, tales como la prestacin de escenas 3D, que una C PU de propsito general sera. Nuevas GPUs procesan decenas de millones de vrtices por segundo y rasterizan cientos de millones o incluso miles de millones de fragmentos por segundo. GPUs futuro sern an ms rpido. Este es abrumadoramente ms rpido que la velocidad a la que una C PU puede procesar un nmero similar de vrtices y fragmentos. Sin embargo, la GPU no puede ejecutar las mismas, programas de propsito general arbitrarias que una lata de la C PU. La naturaleza especializada y de alto rendimiento de la GPU es la razn por el Decimoquinto existe. Lenguajes de programacin de propsito general son demasiado abierta para la tarea especializada de vrtices de proceso y fragmentos. Por el contrario, el lenguaje C G est totalmente dedicado a esta tarea. Decimosexto tambin proporciona un modelo de ejecucin abstracto que coincide con el modelo de ejecucin de la GPU. Usted aprender acerca del modelo de ejecucin nica del GPU en la Seccin 1.2.

1.1.4 La Razn de Desempeo para el Decimoquinto


Para mantener la ilusin de la interactividad, una aplicacin 3D necesita para mantener un tipo de animacin de 15 o ms imgenes por segundo. Generalmente, consideramos 60 o ms fotogramas por segundo para ser "tiempo real", la velocidad a la que la interaccin con las aplicaciones parece ocurrir instantneamente. La pantalla de la computadora puede tener un milln o ms de pxeles que requieren volver a dibujar. Para las escenas 3D, la GPU tpicamente procesa cada pxel en la pantalla muchas veces para tener en cuenta cmo los objetos ocluyen entre s, o para mejorar la apariencia de cada pxel. Esto significa que las aplicaciones 3D en tiempo real pueden requerir cientos de millones de cambios de pxeles por segundo. Junto con el procesamiento de pxeles necesaria, los modelos 3D se componen de vrtices que deben ser transformados adecuadamente antes de ser ensamblados en polgonos, lneas y puntos que sern rasterizados en pxeles. Esto puede requerir la transformacin de decenas de millones de vrtices por segundo. Adems, este procesamiento grfico sucede en Adems de la considerable cantidad de esfuerzo que se requiere de la C PU para actualizar la animacin para cada nueva imagen. La realidad es que
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 4/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

necesitamos tanto la C PU y capacidades grficas orientado especializados de la GPU. Ambos son necesarios para hacer que las escenas en las tasas interactivos y estndares de calidad que los usuarios de las aplicaciones 3D y de la demanda de juegos. Esto significa que un desarrollador puede escribir una aplicacin o un juego 3D en C + + y luego usar C g para aprovechar al mximo la potencia de grficos adicional de la GPU.

1.1.5 Coexistencia con lenguajes convencionales


De ninguna manera el Decimoquinto sustituye a lenguajes de propsito general existentes. C G es una lengua auxiliar, diseado especficamente para las GPU. Los programas escritos para la C PU en los lenguajes convencionales como C o C + + pueden usar el tiempo de ejecucin de C G (que se describe en la Seccin 1.4.2) para cargar programas C g para las GPU para ejecutar. El tiempo de ejecucin de C G es un conjunto estndar de subrutinas para cargar, compilar, manipular y configurar programas de C g para su ejecucin por la GPU. Programas de alimentacin Aplicaciones C g para instruir GPUs sobre cmo lograr los efectos de renderizado programables que otro modo no seran posibles en una C PU a los tipos de representacin de una GPU es capaz de lograr. C g permite un estilo especializado de procesamiento en paralelo. Mientras que su C PU ejecuta una aplicacin convencional, que la aplicacin tambin orquesta el procesamiento paralelo de vrtices y fragmentos de la GPU, por los programas escritos en el Decimoquinto. Si un lenguaje de sombreado en tiempo real es una buena idea, por qu nadie invent el Decimoquinto antes? La respuesta tiene que ver con la evolucin del hardware de grficos de ordenador. Antes de 2001, la mayora de los grficos de computadora de hardware-sin duda el tipo de hardware de grficos de bajo costo en los PC s y consolas de juego-era cableados a las tareas especficas de vrtice y el procesamiento de fragmentos. Por "hard-wired", queremos decir que los algoritmos se fijaron en el hardware, en lugar de ser programable de una manera que sea accesible para las aplicaciones grficas. A pesar de que estos algoritmos grficos cableados pueden ser configurados por las aplicaciones de grficos en una variedad de formas, las aplicaciones no podan reprogramar el hardware para realizar tareas no anticipados por los diseadores del hardware. Afortunadamente, esta situacin ha cambiado. Diseo de hardware de grficos ha avanzado, y el vrtice y las unidades de procesamiento de fragmentos en GPUs recientes son verdaderamente programable. Antes del advenimiento de
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 5/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

hardware de grficos programables, que no tena sentido en la prestacin de un lenguaje de programacin para ello. Ahora que ese tipo de hardware est disponible, existe una clara necesidad de que sea ms fcil para programar este hardware. C g hace que sea mucho ms fcil de programar las GPU de la misma manera que C hace que sea mucho ms fcil de programar C PUs. Antes de que existiera el Decimoquinto, abordando las capacidades programables de la GPU era posible slo a travs del lenguaje ensamblador de bajo nivel. La sintaxis crptica instruccin y la manipulacin manual de registro de hardware requerido por idiomas, tales como montaje de DirectX 8 vertex y pixel shaders y algunos hechos a extensiones OpenGL es una tarea dolorosa para la mayora de los desarrolladores. C omo la tecnologa GPU hizo programas en lenguaje ensamblador ms complejas ya y posible, la necesidad de un lenguaje de alto nivel se hizo evidente. La extensa programacin de bajo nivel que se haba requerido para lograr un rendimiento ptimo podra ahora ser delegada a un compilador, que optimiza la salida de cdigo y se ocupa de la planificacin de instrucciones tedioso. La figura 1-1 es una pequea parte de un complejo programa de fragmento de lenguaje de ensamblaje utilizado para representar la piel. C laramente, es difcil de comprender, en particular con las referencias especficas a los registros de hardware.

Ejemplo 1-1. Un fragmento de la Asamblea de cdigos de idiomas


... D E F I N EL U M I N A N C I A={ 0 . 2 9 9 ,0 . 5 8 7 ,0 . 1 1 4 ,0 . 0 } ; T E XH 0 ,f[ t e x 0 ] ,T E X 4 ,2 D ; T E XH 1 ,f[ T E X 2 ] ,T E X 5 ,C U B O ; D P 3 XH 1 . x y z ,H 1 ,l al u m i n a n c i a ; M u l XH 0 . w ,H 0 . w ,L U M I N A N C E . w ; M u l XH 1 . w ,H 1 . x ,H 1 . x ; M O V HH 2 ,f[ T E X 3 ]w x y z . ; M u l XH 1 . w ,H 1 . x ,H 1 . w ; D P 3 XH 0 . x y z ,H 2 . x z y w ,H 0 ; M u l XH 0 . x y z ,H 0 ,H 1 . w ; T E XH 1 ,f[ t e x 0 ] ,T E X 1 ,2 D ; T E XH 3 ,f[ t e x 0 ] ,T E X 3 ,2 D ; M u l XH 0 . x y z ,H 0 ,H 3 ; M a d xH 1 . w ,H 1 . w ,0 . 5 ,0 . 5 ;

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

6/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

M u l XH 1 . x y z ,H 1 ,{ 0 , 1 5 ,0 , 1 5 ,1 , 0 ,0 , 0 } ; M O V XH 0 . w ,H 1 . w ; T E XH 1 ,H 1 ,T E X 7 ,C U B O ; T E XH 3 ,f[ T E X 3 ] ,T E X 2 ,1 D ; M u l XH 3 . w ,H 0 . w ,H 2 . w ; M u l XH 3 . x y z ,H 3 ,H 3 . w ; ... Por el contrario, bien comentado cdigo C G es ms portable, ms legible, fcil de depurar, y ms fcil de reutilizar. Decimosexto le da las ventajas de un lenguaje de alto nivel como C al tiempo que ofrece el rendimiento de cdigo ensamblador de bajo nivel.

1.1.6 Otros aspectos de CG


C G es un lenguaje de programacin "en la pequea." Eso hace que sea mucho ms sencillo que un lenguaje moderno de propsito general como C + +. Debido a que el Decimoquinto se especializa en la transformacin de vrtices y fragmentos, actualmente no incluye muchas de las caractersticas complejas requeridas para las tareas masivas de ingeniera de software. A diferencia de C + + y Java, C G no admite las clases y otras caractersticas utilizadas en la programacin orientada a objetos. C g implementaciones actuales no proporcionan punteros o incluso la asignacin de memoria (aunque futuras implementaciones pueden, y las palabras clave son reservados apropiadamente). Decimoquinto no tiene absolutamente ningn apoyo para las operaciones de entrada / salida de archivo. En general, estas restricciones no son limitaciones permanentes en el idioma, sino ms bien son indicativos de las capacidades de los ms altos de rendimiento de las GPU de hoy. C omo la tecnologa avanza a permitir ms capacidad de programacin en general en la GPU, se puede esperar C g para crecer adecuadamente. Debido a que el Decimoquinto se basa estrechamente en C , las actualizaciones futuras de C G son propensos a adoptar las caractersticas del lenguaje de C y C + +. Decimosexto proporciona matrices y estructuras. Tiene todas las construcciones de control de flujo de una lengua moderna: bucles, condicionales y llamadas a funciones. Decimosexto soporta de forma nativa los vectores y matrices, ya que estos tipos de datos y operaciones matemticas relacionadas son fundamentales para grficos y la mayora del hardware de grficos compatible con directamente tipos de datos vectoriales. C G tiene una biblioteca de funciones, llamada la biblioteca estndar, que es muy
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 7/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

adecuado para el tipo de operaciones necesarias para grficos. Por ejemplo, la biblioteca estndar incluye un Decimosexto r e f l e j a rla funcin para el clculo de vectores de reflexin. Programas C g ejecutan en un relativo aislamiento. Esto significa que el procesamiento de un vrtice o fragmento particular tiene ningn efecto sobre otros vrtices o fragmentos procesados al mismo tiempo. No hay efectos secundarios a la ejecucin de un programa de GC . Esta falta de interdependencia entre los vrtices y fragmentos hace que los programas C g extremadamente bien adaptados para la ejecucin de hardware por hardware altamente segmentado y paralelos.

1.1.7 El entorno de ejecucin limitado de programas Cg


C uando se escribe un programa en un lenguaje diseado para C PUs modernos utilizando un sistema operativo moderno, se espera que un programa ms o menos arbitraria, con tal de que es correcta, compilar y ejecutar correctamente. Esto se debe a las C PU, por diseo, ejecutar programas de uso general para los que el sistema en su conjunto tiene ms de recursos suficientes. Sin embargo, las GPU son especializados y no de uso general, y el conjunto de caractersticas de las GPU todava est evolucionando. No todo lo que se puede escribir en el Decimoquinto puede ser compilado para ejecutarse en una GPU dado. Decimosexto incluye el concepto de "perfiles de hardware", uno de los cuales especifica al compilar un programa de GC . C ada perfil corresponde a una combinacin particular de arquitectura de GPU y la API de grficos. Su programa no slo debe ser correcta, pero tambin debe limitarse a las restricciones impuestas por el perfil particular utilizado para compilar su programa de GC . Por ejemplo, un perfil fragmento dado que puede limitar a no ms de cuatro textura accede por fragmento. C omo GPUs evolucionan, perfiles adicionales sern apoyados por el Decimoquinto que corresponden a las arquitecturas de GPU ms capaces. En el futuro, los perfiles sern menos importantes como las GPU se hacen ms completo. Pero por ahora necesitarn programadores C g para limitar los programas para garantizar que puedan compilar y ejecutar en GPUs actuales. En general, los perfiles de los futuros sern superseries de los perfiles actuales, de modo que los programas escritos para los perfiles de hoy se compilar sin modificacin por perfiles futuros. Esta situacin puede parecer limitante, pero en la prctica los programas de C g se muestran en este libro de trabajo en decenas de millones de GPUs y producir
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 8/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

efectos de renderizado convincentes. Otra de las razones para limitar el tamao del programa y el alcance es que los ms pequeos y ms eficientes sus programas C g son, ms rpido se ejecutar. Grficos en tiempo real es a menudo sobre el equilibrio de una mayor complejidad de la escena, las tasas de animacin, y un mejor sombreado. As que siempre es bueno para maximizar la eficiencia de la prestacin a travs de la programacin Decimosexto juiciosa. Tenga en cuenta que las restricciones impuestas por los perfiles son realmente limitaciones de GPUs actuales, no C g. El lenguaje C G es lo suficientemente potente para expresar tcnicas de sombreado que an no son posibles con todas las GPUs. C on el tiempo, la funcionalidad de la GPU va a evolucionar lo suficiente para que los perfiles C g ser capaz de ejecutar programas C g increblemente complejas. C G es un lenguaje para ambas GPUs actuales y futuras.

1.2 Vrtices, fragmentos, y el canal de grficos


Para poner el Decimoquinto en el contexto adecuado, es necesario entender cmo las GPU representan las imgenes. En esta seccin se explica cmo el hardware grfico est evolucionando y luego explora el ducto de hardware de representacin grfica moderna.

1.2.1 La evolucin de la Informtica Grfica Hardware


Hardware de grficos de computadora est avanzando a un ritmo increble. Tres fuerzas estn impulsando este rpido ritmo de la innovacin, como se muestra en la Figura 1-2. En primer lugar, la industria de semiconductores se ha comprometido a duplicar el nmero de transistores (la unidad bsica de hardware) que encajan en un microchip de cada 18 meses. Este redoblar constante de potencia de los ordenadores, histricamente conocida como la Ley de Moore, significa hardware ms barato y ms rpido, y es la norma para nuestra edad.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

9/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Innovacin Hardware Figura 1-2 Fuerzas conduccin Grficos La segunda fuerza es la gran cantidad de clculos necesarios para simular el mundo que nos rodea. Nuestros ojos se consumen y nuestros cerebros comprenden imgenes de nuestro mundo en 3D a una velocidad asombrosa y con una agudeza sorprendente. Es improbable que lleguemos a alcanzar un punto en los grficos por ordenador se convierte en un sustituto de la realidad. La realidad es demasiado real. Sin desanimarse, los profesionales grficos por ordenador siguen la altura del desafo. Por suerte, la generacin de imgenes es un problema embarazosamente paralelos. Qu queremos decir con "vergonzosamente paralelas" es que los diseadores de hardware de grficos en varias ocasiones pueden dividir el problema de la creacin de imgenes realistas en ms pedazos de trabajo que son ms pequeos y ms fciles de abordar. Entonces los ingenieros de hardware pueden organizar, en paralelo, el cada vez mayor nmero de transistores disponibles para ejecutar todos estos diversos pedazos de trabajo. Nuestra tercera fuerza es el deseo sostenido que todos tenemos que ser estimulados y entretenidos visualmente. Esta es la fuerza que "conecta" la fuente de nuestro continuo redoblar de los recursos de hardware del equipo a la tarea de aproximar la realidad visual cada vez ms realista que antes. C omo ilustra la Figura 1-2, estos conocimientos nos permiten predecir con confianza que el hardware de grficos de ordenador se va a poner mucho ms rpido. Estas innovaciones ir abriendo el apetito colectivo de experiencias 3D ms interactivas y atractivas. Satisfacer esta demanda es lo que motiv el desarrollo de la lengua C G.

1.2.2 Cuatro Generaciones de Computer Graphics Hardware


http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 10/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

A mediados de la dcada de 1990, el hardware de grficos ms rpido del mundo consista en mltiples chips que trabajaron juntos para hacer que las imgenes y las mostrar en una pantalla. Los sistemas ms complejos de grficos por ordenador consistan en docenas de fichas, repartidas en varias juntas. C omo pasaba el tiempo y la tecnologa de semiconductores ha mejorado, los ingenieros de hardware incorporan la funcionalidad de complicados diseos multichip en un nico chip de grficos. Esta evolucin dio lugar a enormes economas de integracin y escala. Es posible que se sorprenda al saber que la GPU supera ya la C PU en el nmero de transistores presentes en cada microchip. C antidad de transistores es una medida aproximada de la cantidad de material informtico se dedica a un microchip. Por ejemplo, Intel lleno su 2.4 GHz Pentium 4 con 55 millones de transistores, NVIDIA utiliza ms de 125 millones de transistores en la GPU GeForce FX originales. NVIDIA introdujo el trmino "GPU" a finales de 1990 cuando el trmino legado "controlador VGA" ya no era una descripcin exacta del hardware de grficos en un PC . IBM haba introducido Array (VGA) de hardware de grficos de vdeo en 1987. En ese momento, el controlador VGA era lo que ahora llamamos un frame buffer "tonto". Esto significaba que la C PU fue el responsable de la actualizacin de todos los pxeles. Hoy en da la C PU rara vez se manipula pixeles directamente. En lugar de ello, los diseadores de hardware de grficos construyen los "smarts" de las actualizaciones de pxeles en la GPU. Observadores de la industria han identificado cuatro generaciones de evolucin de la GPU hasta ahora. C ada generacin aporta mejores prestaciones y evolucin de programacin del conjunto de caractersticas de la GPU. C ada generacin tambin influye e incorpora la funcionalidad de los dos principales interfaces de programacin 3D, OpenGL y DirectX. OpenGL es un estndar abierto para la programacin en 3D para las computadoras de Windows, Linux, UNIX y Macintosh. DirectX es un conjunto en evolucin de las interfaces de programacin de multimedia de Microsoft, incluyendo Direct3D para la programacin 3D.

Pre-GPU aceleracin de grficos


Antes de la introduccin de GPUs, empresas como Silicon Graphics (SGI) y Evans & Sutherland diseados hardware de grficos especializados y costosos. Los sistemas de grficos desarrollados por estas empresas introdujeron muchos de los conceptos, tales como la transformacin vrtice y la asignacin de texturas, que damos por sentado hoy en da. Estos sistemas son muy importantes para el desarrollo histrico de los
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 11/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

grficos por ordenador, pero debido a que eran tan caros, que no lograron el xito de mercado masivo de las GPUs de un solo chip diseado para PC s y consolas de videojuegos. Hoy en da, las GPU son mucho ms poderosas y mucho ms barato que cualquier sistema anterior.

Primera generacin de GPUs


La primera generacin de GPUs (hasta 1998) incluye TNT2 de NVIDIA, ATI Rage y Voodoo3 de 3dfx. Estas GPUs son capaces de rasterizar tringulos pretransformadas y la aplicacin de una o dos texturas. Tambin implementan el conjunto de caractersticas de DirectX 6. C uando se ejecuta la mayora de las aplicaciones 3D y 2D, estas GPU alivian por completo a la C PU de la actualizacin de los pxeles individuales. Sin embargo, las GPU en esta generacin sufren de dos claras limitaciones. En primer lugar, carecen de la capacidad de transformar los vrtices de los objetos 3D; lugar, las transformaciones de vrtices se producen en la C PU. En segundo lugar, tienen un conjunto muy limitado de las operaciones matemticas para combinar texturas para calcular el color de los pxeles rasterizados.

Segunda Generacin GPUs


La segunda generacin de GPUs (19992000) incluye la NVIDIA GeForce 256 y GeForce2, ATI Radeon 7500, y Savage3D de S3. Estas GPUs descargan transformacin vrtice 3D e iluminacin (T & L) de la C PU. Transformacin vrtice Fast fue una de las funciones clave que diferencian las estaciones de trabajo de gama alta de ordenadores antes de esta generacin. Tanto OpenGL y DirectX 7 compatibilidad de transformacin vrtice hardware. Aunque el conjunto de las operaciones matemticas para combinar texturas y colorear pxeles ampliados en esta generacin para incluir texturas del mapa cubo y operaciones matemticas firmados, las posibilidades son todava limitados. Dicho de otra manera, esta generacin es ms configurable, pero todava no verdaderamente programable.

Tercera Generacin GPUs


La tercera generacin de GPUs (2001) incluye la NVIDIA GeForce3 y GeForce4 Ti, Xbox de Microsoft, y la ATI Radeon 8500. Esta generacin proporciona programabilidad de vrtices en lugar de simplemente ofrecer ms capacidad de configuracin. En lugar de apoyar los modos de transformacin y de iluminacin convencionales especificadas por OpenGL y DirectX 7, estas GPU permiten la aplicacin especifica una secuencia de instrucciones para vrtices de procesamiento. C onsiderablemente ms capacidad de configuracin a nivel de pxeles est disponible, pero estos
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 12/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

modos no son lo suficientemente potente como para ser considerado verdaderamente programable. Debido a que estas GPUs compatibles con la programabilidad de vrtices, pero carecen de verdadera capacidad de programacin de pxeles, esta generacin es de transicin. DirectX 8 y el multivendor A R B _ v e r t e x _ p r o g r a m extensin OpenGL exponen programacin a nivel de vrtice a las aplicaciones. DirectX 8 pixel shaders y varias extensiones OpenGL especficas del proveedor exponen configurabilidad nivel fragmento de esta generacin.

Cuarta generacin de GPUs


La cuarta y actual generacin de GPUs (2002 en adelante) incluye a la familia GeForce FX de NVIDIA con la arquitectura C ineFX y Radeon 9700 de ATI. Estas GPUs proporcionan tanto a nivel de vrtice y capacidad de programacin a nivel de pxeles. Este nivel de programacin se abre la posibilidad de la descarga de las operaciones de transformacin de vrtices y pxeles de sombreado complejos de la C PU a la GPU. DirectX 9 y varias extensiones OpenGL exponen la capacidad de programacin a nivel de vrtice y a nivel de pxeles de estas GPUs. Esta es la generacin de GPUs donde Decimosexto pone realmente interesante. La Tabla 1-1 recoge seleccionados GPUs NVIDIA que representan estas diversas generaciones de GPU.

Tabla 1-1. Caractersticas y Evolucin de rendimiento de las GPU NVIDIA seleccionada, por generacin
Nombre Antialiasing Polgono del Proceso Transistores Tasa de Nota Cambio producto relleno

Generacin

Ao

Primero

Late 1998 Early 1999 Late 1999

RIVA TNT

0,25 m

7M

50 M

6M

[1 ]

Primero

RIVA TNT2 GeForce 256

0,22 m

9M

75 M

9M

[2 ]

Segundo

0,22 m

23 M

120 M

15 M

[3 ]

Segundo

Principios GeForce2 de 2000 Principios GeForce3 de 2001 Early 2002 Principios GeForce4 Ti GeForce

0,18 m

25 M

200 M

25 M

[4 ]

Tercera

0,15 m

57 M

800 M

30 M

[5 ]

Tercera

0,15 m

63 M

1.200 M

60 M

[6 ]

C uarto
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

0,13 m

125 M

2.000 M

200 M

[7 ]

13/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

de 2003 Notas

FX

La tabla utiliza los siguientes trminos: Proceso -la dimensin mnima de elemento en micras ( m , millonsimas de metro) para el proceso de semiconductor que se utiliza para fabricar cada microchip Transistores -una medida aproximada, en millones (M), de diseo de los chips 'y la complejidad de fabricacin Antialiasing tasa de relleno -a la capacidad de la GPU para rellenar los pxeles, en millones (M) de pxeles RGBA de 32 bits por segundo, en el supuesto de dos muestras antialiasing; nmeros en cursiva indican las tasas de relleno que se-clasificar De porque el hardware no tiene verdadera representacin de suavizado Tasa Polgono -a la capacidad de la GPU para dibujar tringulos, medida en millones (M) de tringulos por segundo Las notas destacan las mejoras ms significativas en cada diseo. Las tasas de rendimiento pueden no ser comparables con diseos de otros fabricantes de hardware. GPUs futuras generalizar an ms los aspectos programables de GPUs actuales, y C G harn de esta programacin adicional fcil de usar.

1.2.3 El Pipeline de hardware de grficos


Una tubera es una secuencia de etapas que operan en paralelo y en un orden fijo. C ada etapa recibe su entrada de la etapa anterior y enva su salida a la etapa subsiguiente. Al igual que una cadena de montaje, donde decenas de automviles se fabrican a la vez, con cada automvil en una etapa diferente de la lnea, una tubera de hardware grfico convencional procesa una gran cantidad de vrtices, primitivas geomtricas, y fragmentos de una forma segmentada. La figura 1-3 muestra la tubera de hardware de grficos utilizado por GPU de hoy. La aplicacin 3D enva la GPU una secuencia de vrtices por lotes en primitivas geomtricas: normalmente polgonos, lneas y puntos. C omo se muestra en la Figura 1-4, hay muchas formas de especificar primitivas geomtricas.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

14/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Pipeline Hardware Figura 1-3 La Grficos

Figura 1-4 Tipos de primitivas geomtricas C ada vrtice tiene una posicin, sino tambin por lo general tiene varios otros atributos tales como un color, una secundaria (o especular de color), uno o mltiples conjuntos de coordenadas de textura, y un vector normal. El vector normal indica qu direccin se enfrenta a la superficie en el vrtice, y se suele utilizar en los clculos de iluminacin.

Vertex Transformacin
Transformacin Vertex es la primera etapa de procesamiento en la tubera de hardware de grficos. Transformacin Vertex realiza una secuencia de operaciones matemticas en cada vrtice. Estas operaciones incluyen la transformacin de la posicin de vrtice en una posicin de la pantalla para el uso de la impresora de trama, la generacin de coordenadas de textura para el texturizado, y encendiendo el vrtice para determinar su color. Vamos a
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 15/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

explicar muchas de estas tareas en los captulos siguientes.

Asamblea primitivo y Rasterization


Los vrtices transformados fluyen en secuencia a la siguiente etapa, llamado ensamblaje primitiva y la rasterizacin . En primer lugar, la etapa de montaje primitiva ensambla vrtices en primitivas geomtricas basadas en la informacin de dosificacin primitiva geomtrica que acompaa a la secuencia de vrtices. Esto se traduce en una secuencia de tringulos, lneas o puntos. Estas primitivas pueden requerir de recorte a la vista de cono truncado (regin visible de la vista del espacio 3D), as como cualquier planos de corte especificado por la aplicacin habilitados. La impresora de trama tambin puede descartar polgonos en funcin de si se enfrentan hacia delante o hacia atrs. Este proceso se conoce como sacrificio. Polgonos que sobreviven a estos pasos de recorte y de sacrificio deben rasterizar. Rasterizacin es el proceso de determinar el conjunto de pxeles cubiertos por una primitiva geomtrica. Los polgonos, lneas y puntos son cada rasterizan de acuerdo con las reglas especificadas para cada tipo de primitiva. Los resultados de la rasterizacin son un conjunto de ubicaciones de pxeles, as como un conjunto de fragmentos. No existe una relacin entre el nmero de vrtices tiene un primitivo y el nmero de fragmentos que se generan cuando se rasteriza. Por ejemplo, un tringulo formado por slo tres vrtices podra tomar toda la pantalla, y por lo tanto generar millones de fragmentos! Ms temprano, les dijimos que pensar en un fragmento como un pxel si usted no sabe exactamente lo que era un fragmento. En este punto, sin embargo, la distincin entre un fragmento y un pxel se convierte en importante. El trmino pxel es la abreviatura de "picture element". Un pxel representa el contenido de la memoria intermedia de trama en una ubicacin especfica, tales como el color, la profundidad, y cualquier otros valores asociados con esa ubicacin. Un fragmento es el estado requerido potencialmente para actualizar un pxel particular. El trmino "fragmento" se utiliza porque la rasterizacin rompe cada primitiva geomtrica, tal como un tringulo, en fragmentos de tamao de pxel para cada pxel que las cubiertas primitivas. Un fragmento tiene una ubicacin asociada pxel, un valor de profundidad, y un conjunto de parmetros interpolados tales como un color, un color secundario (especular), y uno o ms conjuntos de coordenadas de textura. Estos diversos parmetros interpolados se derivan de los vrtices transformados que componen el usado primitiva geomtrica particular, para generar los fragmentos. Usted puede
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 16/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

pensar en un fragmento como un "pixel potencial." Si un fragmento pasa las diferentes pruebas de rasterizacin (en la etapa de operaciones de trama, que se describir en breve), el fragmento actualiza un pxel en la memoria intermedia de trama.

Interpolacin, texturizado y Colorear


Una vez que una primitiva rasterizarla en una coleccin de cero o ms fragmentos, la interpolacin, texturizado y colorear etapa interpola los parmetros de fragmentos en caso necesario, lleva a cabo una secuencia de operaciones de texturizacin y matemticas, y determina un color final de cada fragmento. Adems de la determinacin de color final del fragmento, esta etapa tambin puede determinar una nueva profundidad o incluso puede descartar el fragmento para evitar la actualizacin correspondiente pxel de la memoria intermedia de trama. Teniendo en cuenta la posibilidad de que la etapa puede descartar un fragmento, esta etapa emite uno o cero fragmentos de colores para cada fragmento de entrada que recibe.

Operaciones Raster
La operaciones de trama etapa realiza una secuencia final de las operacionespor fragmento inmediatamente antes de la actualizacin de la memoria de vdeo. Estas operaciones son una parte estndar de OpenGL y Direct3D. Durante esta etapa, las superficies ocultas se eliminan a travs de un proceso conocido como pruebas de profundidad . Otros efectos, tales como mezcla y sombreado basado en la plantilla, tambin se producen durante esta etapa. Las operaciones de trama etapa cheques cada fragmento basado en una serie de pruebas, incluyendo la tijera, alfa, plantilla, y pruebas de profundidad. Estas pruebas implican el color del fragmento final o profundidad, la ubicacin de pxel, y los valores por pxel, tales como el valor de profundidad y el valor de la plantilla del pxel. Si alguna prueba falla, esta etapa descarta el fragmento sin actualizar el valor del color del pxel (aunque puede ocurrir una operacin de estarcido escritura). Aprobar el examen de profundidad puede reemplazar el valor de profundidad del pixel con la profundidad del fragmento. Despus de las pruebas, una operacin de mezcla combina el color final del fragmento con valor de color del pxel correspondiente. Por ltimo, una operacin de buffer de escritura marco sustituye el color del pxel con el color mezclado. La Figura 1-5 muestra esta secuencia de operaciones.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

17/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Figura 1-5 estndar OpenGL y Direct3D operaciones de trama La figura 1-5 muestra que la etapa de operaciones de trama es en realidad s misma una serie de etapas de canalizacin. De hecho, todas las etapas descritas anteriormente se pueden desglosar en subetapas tambin.

Visualizando el canal de grficos


La Figura 1-6 representa las etapas de la canalizacin de grficos. En la figura, dos tringulos se rasterizan. El proceso comienza con la transformacin y la coloracin de vrtices. A continuacin, la etapa de montaje primitivo crea tringulos de los vrtices, como las lneas de puntos indican. Despus de esto, la impresora de trama "rellena" los tringulos con fragmentos. Por ltimo, los valores de registro de los vrtices se interpolan y se utilizan para la texturizacin y el colorante. Tenga en cuenta que muchos fragmentos se generan a partir de unos pocos vrtices.

Figura 1-6 Visualizacin del C anal de grficos

1.2.4 El Canal de grficos programables


La tendencia dominante en grficos de diseo de hardware hoy en da es el esfuerzo para exponer ms de programacin dentro de la GPU. La Figura 1-7 muestra las etapas de procesamiento de procesamiento de vrtice y fragmento en la tubera de un GPU programable.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

18/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Figura 1-7 El C anal de grficos programables La Figura 1-7 muestra ms detalles que la figura 1-3, pero lo ms importante, muestra el procesamiento de vrtices y el fragmento roto a cabo en unidades programables. El procesador de vrtices programables es la unidad de hardware que se ejecuta sus programas de vrtice C g, mientras que el procesador fragmento programable es la unidad que dirige sus programas de fragmentos de C g. C omo se explica en la seccin 1.2.2, los diseos de la GPU han evolucionado, y el vrtice y los procesadores de fragmentos dentro de la GPU han hecho la transicin de ser configurable para ser programable. Las descripciones en las dos secciones siguientes presentan las caractersticas funcionales crticas de vrtices programables y procesadores de fragmentos.

El procesador programable Vertex


La figura 1-8 muestra un diagrama de flujo para un procesador tpico vrtice programable. El modelo de flujo de datos para el procesamiento de vrtice comienza mediante la carga de los atributos de cada vrtice (tales como la posicin, el color, coordenadas de textura, y as sucesivamente) en el procesador de vrtice. El procesador de vrtices busca entonces repetidamente la siguiente instruccin y la ejecuta hasta que el programa termina vrtice. Instrucciones de acceso a varias series distintas de los bancos de registros que contienen valores vectoriales, como posicin, normal, o color. El atributo de vrtice registros son de slo lectura y contiene la aplicacin especificada conjunto de atributos para el vrtice. Los registros temporales se pueden leer y escribir y se utilizan para el clculo de los resultados intermedios. El resultado registros de salida son de slo escritura. El programa se encarga de redactar los resultados de estos registros. C uando el programa de vrtice termina, el
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 19/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

resultado registros de salida contienen el vrtice recin transformado. Despus de la configuracin de tringulos y la rasterizacin, los valores interpolados para cada registro se pasan al procesador de fragmentos.

Figura 1-8 Diagrama de flujo programable Vertex Procesador La mayor procesamiento de vrtices utiliza una paleta limitada de las operaciones. Operaciones matemticas vectoriales sobre vectores en coma flotante de dos, tres o cuatro componentes son necesarios. Estas operaciones incluyen sumar, multiplicar, multiplicar-sumar, producto escalar, mnimo y mximo. El soporte de hardware para la negacin del vector y swizzling componente racional (la capacidad de cambiar el orden de los componentes del vector arbitrariamente) generaliza estas instrucciones vector matemticas para proporcionar negacin, resta y productos cruzados. C omponente sabia escribir enmascaramiento controla la salida de todas las instrucciones. C ombinando cuadrados operaciones de raz recprocas y recprocos con la multiplicacin de vectores y productos de punto, respectivamente, permite la divisin de vectores por escalares y vectoriales normalizacin. Aproximaciones exponenciales, logartmicas y trigonomtricas facilitan la iluminacin, la niebla y los clculos geomtricos. Instrucciones especializadas pueden realizar funciones de iluminacin y de
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 20/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

atenuacin ms fcil de calcular. Ms funcionalidad, como direccionamiento relativo de constantes y de apoyo de control de flujo de la ramificacin y de enlace, tambin est disponible en los procesadores de vrtices programables ms recientes.

El procesador programable Fragmento


Procesadores de fragmentos programables requieren muchas de las mismas operaciones matemticas como procesadores de vrtices programables hacen, sino que tambin apoyan las operaciones de texturado. Operaciones de texturizacin permiten al procesador para acceder a una imagen de textura utilizando un conjunto de coordenadas de textura y luego para volver una muestra filtrada de la imagen de textura. GPU ms recientes ofrecen soporte completo para los valores de punto flotante; GPUs de mayor edad tienen tipos de datos de punto fijo ms limitados. Aun cuando las operaciones de punto flotante estn disponibles, las operaciones de los fragmentos a menudo son ms eficientes cuando se utilizan los tipos de datos de menor precisin. GPUs debe procesar tantos fragmentos a la vez que la ramificacin arbitraria no est disponible en las generaciones de GPU actuales, pero es probable que esto cambie con el tiempo como evoluciona el hardware. Decimosexto todava le permite escribir programas de fragmentos que se ramifican y iterate simulando dichas construcciones con operaciones de asignacin condicional o desenrollar bucle. La figura 1-9 muestra el diagrama de flujo para un procesador de corriente fragmento programable. Al igual que con un procesador de vrtices programables, el flujo de datos implica la ejecucin de una secuencia de instrucciones hasta que el programa termina. Una vez ms, hay un conjunto de registros de entrada. Sin embargo, en lugar de los atributos de vrtice, de slo lectura registros de entrada del procesador fragmento contienen interpolados parmetros por fragmento derivados de los parmetros de cada vrtice del fragmento del primitivo. Leer / escribir registros temporales almacenan valores intermedios. Las operaciones de escritura para escribir-slo registros de salida se convierten en el color y, opcionalmente, la nueva profundidad del fragmento. Instrucciones de programa Fragmento incluyen recuperaciones de textura.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

21/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Figura 1-9 Diagrama de flujo programable Fragmento Procesador

1.2.5 Decimosexto Proporciona Vertex y Fragmento Programacin


Estos dos procesadores programables en su GPU usted, el programador de la aplicacin requieren, para suministrar un programa para cada procesador para ejecutar. Qu ofrece el Decimoquinto es un lenguaje y un compilador que puede traducir el algoritmo de sombreado en una forma que el hardware de la GPU puede ejecutar. C on C G, en lugar de los programas a nivel mostrado en las Figuras 1-8 y 1-9, se puede programar en un lenguaje de alto nivel muy similar a C.

Desarrollo histrico 1.3 de CG


Patrimonio de C G proviene de tres fuentes, como se muestra en la Figura 110. En primer lugar, el Decimoquinto basa su sintaxis y la semntica del lenguaje de programacin C de propsito general. En segundo lugar, el Decimoquinto incorpora muchos conceptos de los lenguajes de sombreado sin conexin como la RenderMan Shading Language, as como los lenguajes de sombreado de hardware anteriores desarrollados por la academia. En tercer lugar, el Decimoquinto basa su funcionalidad de grficos en el OpenGL y Direct3D para interfaces de programacin 3D en tiempo real.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

22/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Figura 1-10 Fuentes de Patrimonio Tecnologa de C G La figura 1-11 muestra los idiomas para fines generales de programacin, interfaces de programacin de aplicaciones en 3D y los lenguajes de sombreado que inspiraron el desarrollo de C G.

Figura 1-11 Inspiraciones para el Desarrollo de C G Anteriormente mencionamos cmo el Decimoquinto aprovecha la sintaxis y la semntica de C . A lo largo de este libro, usted encontrar que el Decimoquinto mayora hace lo que esperan que los
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 23/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

programadores de C . Decimosexto difiere de C en situaciones donde la especializacin de cualquiera C G para las GPU o rendimiento justifique un cambio.

1.3.1 Microsoft y la colaboracin de NVIDIA para desarrollar CG y HLSL


NVIDIA y Microsoft colaboraron para desarrollar el lenguaje C G. Microsoft llama a su implementacin de alto nivel Shading Language o HLSL para abreviar. HLSL y C G son el mismo idioma, sino que reflejan los diferentes nombres de cada empresa utiliza para identificar el idioma y su tecnologa subyacente. HLSL es una parte de grficos de DirectX de Microsoft, un componente del framework multimedia DirectX 9. Direct3D es el componente 3D de grficos de DirectX de Microsoft. C G es independiente de la interfaz de programacin en 3D y se integra totalmente con cualquiera Direct3D u OpenGL. A solicitud debidamente por escrito C G se puede escribir una vez y luego trabajar con los modos OpenGL o Direct3D. Esta flexibilidad significa que la aplicacin C G de NVIDIA proporciona una manera de autor los programas que trabajan con ambas interfaces de programacin 3D dominantes y cualquiera que sea el sistema operativo que elija. Decimosexto funciona si elige Windows, Linux, Mac OS X, una consola de juegos o hardware 3D incrustado como su plataforma de computacin en 3D. Programas C g trabajan con hardware de mltiples proveedores de hardware porque capas C g limpiamente sobre cualquiera Direct3D u OpenGL. Programas C g trabajan en GPUs programables desde todos los principales proveedores de hardware de grficos, tales como 3Dlabs, ATI, Matrox y NVIDIA. El multivendor, cross-API, y la naturaleza multiplataforma de la lengua Decimosexto convierten en la mejor opcin para escribir programas para las GPU programables.

1.3.2 no interactivos Shading Idiomas


El estndar de interfaz de RenderMan describe el lenguaje de sombreado ms conocido para el sombreado no interactivo. Pixar desarroll el lenguaje a finales de 1980 para generar la animacin por ordenador de alta calidad con sombreado sofisticado para pelculas y anuncios. Pixar ha creado un sistema de renderizado completo con su implementacin del estndar de interfaz de RenderMan, el renderizador PRMan offline (fotorrealista RenderMan). El RenderMan Shading Language es slo uno de los componentes de este sistema.

rboles de sombra
La inspiracin para el RenderMan Shading Language vino de una idea
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 24/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

anterior llamado rboles de sombra . Rob C ook, a continuacin, en Lucasfilm Ltd., que ms tarde se separ de Pixar, public un documento de SIGGRAPH sobre rboles de sombra en 1984. Un rbol de sombra organiza diversas operaciones de sombreado como nodos dentro de una estructura de rbol. Figura 1-12 muestra un rbol de sombra para renderizar una superficie de cobre. Los nodos hoja son entradas de datos al rbol de sombra. Los nodos no hoja representan operaciones de sombreado simples. Durante el proceso de representacin, el procesador evala el rbol de sombra asociado con una superficie dada para determinar el color de la superficie en la imagen renderizada. Para evaluar un rbol de sombra, un procesador realiza la operacin de sombreado asociado con el nodo de nivel superior en el rbol de sombra. Sin embargo, para evaluar un nodo dado, el procesador debe primero evaluar nodos hijos del nodo. Esta regla se aplica de forma recursiva para evaluar el rbol de sombra en su totalidad. El resultado de una evaluacin de rboles de sombra en un punto dado en una superficie es el color de dicho punto.

Figura 1-12 A Shade Tree ejemplo, de la original de papel SIGGRAPH de Rob C ocinar Los rboles de sombra surgi de la constatacin de que un nico modelo de sombreado predefinido nunca sera suficiente para que todos los objetos y escenas que se podra querer hacer. Diagramas de rbol de sombra son ideales para la visualizacin de un flujo de datos de las operaciones de sombreado. Sin embargo, si los rboles de sombra son complejos, sus diagramas se convierten en difciles de manejar. Investigadores de Pixar y en otras partes reconocieron que cada rbol de sombra es un tipo limitado de programas. Esta toma de conciencia proporcion el
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 25/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

impulso para un nuevo tipo de lenguaje de programacin conocido como un lenguaje de sombreado.

El RenderMan Shading Language


El RenderMan Shading Language surgi de los rboles de sombra y la comprensin de que el control de composicin abierta de la apariencia de las superficies prestados en la bsqueda de realismo fotogrfico requiere programacin. Hoy en da la mayora de los recicladores fuera de lnea utilizados en la produccin real tienen algn tipo de soporte para un lenguaje de sombreado. El RenderMan Shading Language es el ms establecido y ms conocido por desconectado renderizado, y fue revisado y ampliado de manera significativa a finales de 1990.

Hardware-susceptible de sombreado Idiomas


Una implementacin de hardware de un algoritmo es ms eficiente cuando la tarea se descompone en una larga secuencia de etapas en las que la comunicacin de cada etapa se limita a su etapa previa y su etapa posterior (es decir, cuando puede ser canalizado). La tubera y basado fragmento-basada en vrtices se describe en la Seccin 1.2 es extremadamente susceptible a la aplicacin de hardware. Sin embargo, el algoritmo utilizado por Reyes fotorrealista RenderMan no es muy adecuado para la implementacin de hardware eficaz, principalmente debido a su manejo de la geometra de nivel superior. GPUs modernas dependen por completo en un pipeline de grficos basada en vrtices y fragmentos. Investigadores de la Universidad de C arolina del Norte (UNC ) comenzaron a investigar el hardware de grficos programables, a mediados de la dcada de 1990, cuando UNC estaba desarrollando una nueva arquitectura hardware de grficos programable llamado PixelFlow. Este proyecto foment una nueva lnea de investigacin la infografa en los lenguajes de sombreado en hardware susceptibles de Marc Olano y otros en la UNC . Desafortunadamente, PixelFlow era demasiado caro y no comercial. Posteriormente, los investigadores de Silicon Graphics trabajaron en un sistema para traducir shaders en mltiples pasadas de renderizado OpenGL. Aunque el hardware de OpenGL objetivo no fue programable en la forma GPU son hoy en da, el sistema de sombreado de OpenGL orquesta numerosos representacin pasa para alcanzar efecto deseado de un sombreado. Investigadores de la Universidad de Stanford, incluyendo Kekoa Proudfoot, Bill Marcos, Svetoslav Tzvetkov, y Pat
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 26/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Hanrahan, comenzaron la construccin de un lenguaje de sombreado diseado especficamente para las GPU de segunda generacin y tercera generacin. Este lenguaje, conocido como el de Stanford en tiempo real Shading Language (RTSL), podra compilar shaders escritos en RTSL en una o ms OpenGL pases. La investigacin en Stanford inspir el propio esfuerzo de NVIDIA para desarrollar un lenguaje de sombreado en hardware susceptibles de calidad comercial. Bill Marcos se uni a NVIDIA en 2001 para liderar el esfuerzo por definir y aplicar el lenguaje de sombreado que ahora llamamos el Decimoquinto. Durante este tiempo, NVIDIA ha colaborado con Microsoft para acordar una sintaxis del lenguaje comn y el conjunto de caractersticas.

1.3.3 Interfaces de Programacin de Grficos en 3D


La tercera influencia en el Decimoquinto fue el par de interfaces de programacin 3D estndar, OpenGL y Direct3D. La influencia de estas interfaces de programacin en C G est en curso, como se explica en la siguiente seccin.

1.4 El Decimoquinto Medio Ambiente


C G es slo un componente del software y la infraestructura de hardware para renderizar escenas complejas en 3D con las GPU programables en las tarifas en tiempo real. En esta seccin se explica cmo el Decimoquinto interacta con las aplicaciones 3D y juegos reales.

1.4.1 Interfaces de programacin estndar 3D: OpenGL y Direct3D


En los viejos tiempos de los grficos 3D en un PC (antes de que hubiera GPU), la C PU maneja toda la transformacin vrtice y tareas de pxeles empujando necesarios para representar una escena 3D. El hardware de grficos proporcionado slo el tampn de pxeles que el hardware est representada a la pantalla. Los programadores tenan que implementar sus propios algoritmos de renderizado de grficos 3D en el software. En cierto sentido, todo lo relacionado con vrtice y procesamiento fragmento de aquel entonces era completamente programable. Por desgracia, la C PU es demasiado lenta para producir efectos 3D convincentes. En estos das, las aplicaciones 3D ya no implementan sus propios algoritmos de representacin 3D utilizando la C PU, sino que se basan en los modos OpenGL o Direct3D, las dos interfaces de programacin 3D estndar, para comunicarse renderizado comandos a la GPU.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

27/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

OpenGL
A principios de 1990, Silicon Graphics ha desarrollado OpenGL en coordinacin con una organizacin llamada la Arquitectura Junta de Revisin de OpenGL (ARB), que comprenda todos los principales proveedores de sistemas de grficos por ordenador. Originalmente, OpenGL slo funcionaba en potentes estaciones grficas UNIX. Microsoft, un miembro fundador de la ARB, a continuacin, implementa OpenGL como una manera de apoyar a los grficos 3D para su sistema operativo Windows NT. Microsoft agreg ms adelante soporte OpenGL para Windows 95 y todos los sistemas operativos de escritorio de Microsoft. OpenGL no se limita a un solo sistema operativo o de ventanas. Adems de apoyar a las estaciones de trabajo UNIX y Windows PC , OpenGL es apoyado por Apple para sus ordenadores personales Macintosh. Los usuarios de Linux pueden utilizar la implementacin de cdigo abierto Mesa de OpenGL o una implementacin acelerada de hardware, tales como driver de OpenGL de NVIDIA para Linux. Esta flexibilidad hace OpenGL mejor interfaz de programacin multiplataforma de la industria para grficos 3D. Durante la ltima dcada, OpenGL ha evolucionado junto con hardware de grficos. OpenGL es extensible, lo que significa que los ejecutores de OpenGL pueden aadir nuevas funcionalidades a OpenGL de una manera gradual. Hoy, decenas de extensiones OpenGL permiten el acceso a todas las ltimas caractersticas de la GPU. Esto incluye extensiones estandarizadas-ARB para vrtice y fragmento de programacin. A medida que se establecieron las extensiones, a menudo se enrollan en el estndar OpenGL ncleo de modo que el estndar en su conjunto avances. En el momento de escribir esto, la versin actual de OpenGL es de 1.4. Los trabajos en curso para evolucionar OpenGL est en marcha en varios grupos de trabajo OpenGL ARB. Este trabajo incluye tanto a nivel de reunin y de interfaces programables de alto nivel. Debido a que el Decimoquinto opera como una capa por encima de tales interfaces, que seguir funcionando con las futuras revisiones de OpenGL de una manera compatible.

Direct3D
Microsoft comenz a desarrollar el interfaz de programacin de Direct3D sobre 1995 como parte de su iniciativa multimedia DirectX. Direct3D es una de las interfaces de programacin que componen DirectX. Microsoft introdujo DirectX y Direct3D para poner en marcha el mercado de consumo para grficos 3D, especialmente los juegos, en PC s con Windows. C onsola de juegos Xbox de Microsoft tambin es compatible con Direct3D. Direct3D es el ms popular de
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 28/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

la API de grficos para juegos en Windows, debido a su historia de hacer coincidir estrechamente las capacidades de hardware de grficos disponibles. C ada ao, ms o menos, Microsoft ha actualizado DirectX, incluyendo Direct3D, para mantenerse al da con el rpido ritmo de la innovacin de hardware de PC . La versin actual de DirectX en el momento de escribir este documento es DirectX 9, que incluye HLSL, la implementacin de Microsoft de la misma sintaxis del lenguaje y de las construcciones que se encuentra en el Decimoquinto.

Programacin 3D Interfaz Dtente


Hace unos aos, OpenGL y Direct3D compitieron para ver qu interfaz de programacin dominara, sobre todo en el dominio de las PC de Windows. La competencia sigue siendo bueno para ambas interfaces de programacin, y cada uno ha mejorado en rendimiento, calidad y funcionalidad. En el mbito de la programacin de la GPU que aborda el Decimoquinto, ambas interfaces de programacin tienen una capacidad comparable. Esto se debe tanto a OpenGL y Direct3D se ejecutan en el mismo hardware de la GPU y el hardware grfico determina la funcionalidad y el rendimiento disponible. OpenGL tiene una ligera ventaja en la funcionalidad, ya que los fabricantes de hardware son ms capaces de exponer todo su conjunto de caractersticas a travs de OpenGL, aunque las extensiones especficas del proveedor se suman cierta complejidad para los desarrolladores. La mayora de los desarrolladores de software ahora elegir una interfaz de programacin en 3D basada en la preferencia del programador, la historia, y su mercado objetivo y la plataforma de hardware, ms que por razones tcnicas. Decimosexto soporta cualquiera de las interfaces de programacin. Usted puede escribir programas C g para que funcionen, ya sea con la interfaz de programacin OpenGL o Direct3D. Esta es una gran ventaja para los desarrolladores de contenido 3D. Ellos pueden emparejar su contenido 3D con programas escritos en el Decimoquinto y luego hacer que el contenido no importa lo que utiliza la interfaz de programacin de la aplicacin final para la representacin 3D.

1.4.2 El compilador de Cg y Runtime


No GPU puede ejecutar programas C g directamente desde su forma textual. Un proceso conocido como compilacin debe traducir programas C g en una forma que la GPU puede ejecutar. El compilador traduce el Decimoquinto primero su programa C G en una forma aceptada por la eleccin de la aplicacin de interfaz de programacin en 3D, ya sea OpenGL o
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 29/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Direct3D. Luego, su aplicacin transfiere el OpenGL o Direct3D traduccin de su programa de C g para la GPU usando el OpenGL apropiado o comandos Direct3D. El driver de OpenGL o Direct3D realiza la traduccin final en el hardware ejecutable formar su GPU requiere. Los detalles de esta traduccin dependen de las capacidades combinadas de la GPU y la interfaz de programacin de 3D. C mo un programa Decimosexto compila su forma intermedia OpenGL o Direct3D depende del tipo y la generacin de GPU en su computadora. Puede ser que la GPU no es capaz de soportar un programa Decimosexto vlida particular, debido a las limitaciones de la propia GPU. Por ejemplo, su programa de fragmentos C G no se compilar si el programa accede a ms unidades de textura a la que admite GPU objetivo.

El apoyo a la compilacin dinmica de


C uando compila un programa con un lenguaje de programacin convencional, tal como C o C + +, la compilacin es un proceso sin conexin. Su compilador compila el programa en un archivo ejecutable que se ejecuta directamente en la C PU. Una vez compilado, el programa no necesita volver a compilar, a menos que cambie el cdigo del programa. Llamamos a esta compilacin esttica . C G es diferente, dado que fomenta la compilacin dinmica, aunque tambin se admite la compilacin esttica. El compilador C G no es un programa independiente, sino parte de una biblioteca conocida como el tiempo de ejecucin C G. Las aplicaciones y juegos 3D utilizando programas C g deben enlazar con el tiempo de ejecucin C G. Las aplicaciones que utilizan el Decimoquinto entonces llaman a rutinas de tiempo de ejecucin de C g, todo precedido de las letras c g, recopilar y manipular programas C g. La compilacin dinmica permite a los programas de C g a ser optimizados para el modelo particular de GPU instalada en la mquina del usuario.

CgGL y CgD3D, las 3D-APIespecficas Bibliotecas Cg


Adems de la base de tiempo de ejecucin C G, C G proporciona dos bibliotecas estrechamente relacionados. Si la aplicacin utiliza OpenGL, que va a utilizar la biblioteca C gGL invocar las rutinas de OpenGL apropiadas para aprobar el programa de C G traducida al controlador OpenGL. Del mismo modo, si la aplicacin utiliza Direct3D, que va a utilizar la biblioteca C gD3D invocar las rutinas Direct3D apropiadas para aprobar el programa de C G traducida al controlador Direct3D. Normalmente, debera utilizar el C gGL o la biblioteca
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 30/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

C gD3D, pero no tanto, porque la mayora de las aplicaciones utilizan ya sea OpenGL o Direct3D, no ambos. En comparacin con la biblioteca en tiempo de ejecucin Decimosexto ncleo que contiene el compilador de C g las bibliotecas C gGL y C gD3D son relativamente pequeos. Su trabajo consiste en hacer que el OpenGL o Direct3D apropiada requiere configurar programas C g para su ejecucin. Estas llamadas se transfieren de un programa Decimosexto traducida al controlador apropiado que se traducir an ms el programa en una forma de la GPU puede ejecutar. En su mayor parte, las bibliotecas C gGL y C gD3D tienen rutinas similares. Las rutinas de la biblioteca C gGL comienzan con c g G L; las rutinas de la biblioteca C gD3D comienzan con c g D 3 D.

Cmo Runtime Decimosexto Se adapta a su aplicacin


La figura 1-13 muestra cmo una aplicacin tpica 3D utiliza las bibliotecas C g. Si usted es un programador, usted desea aprender ms sobre el tiempo de ejecucin del C G y la biblioteca especfica para la API 3D la aplicacin utiliza para representar grficos en 3D. La mayor parte de este libro se centra en el propio idioma del C G y sobre cmo escribir programas de C g, pero Apndice B contiene ms informacin sobre la biblioteca de ejecucin C G.

Figura 1-13 C mo Decimosexto Se adapta a una C G aplicacin estndar

1.4.3 El conjunto de herramientas y de formato de archivo CgFX


Programas C g necesitan modelos 3D, texturas, y otros datos para operar. Un programa de C G sin datos asociados es intil. Programas de C g y los datos tambin requieren la correcta configuracin 3D de programacin de interfaz y el estado. A menudo es til
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 31/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

tener una manera de agrupar toda la informacin necesaria para hacer un modelo 3D, incluido su programa de QG asociada.

Lo Proporciona CgFX
C gFX es un formato de archivo estndar para la representacin de efectos completos y apariencias. C omo lo hicieron con C g, Microsoft y NVIDIA colaboran para desarrollar el formato C gFX. Archivos C gFX son basado en texto, con una sintaxis que es un superconjunto del Decimosexto de, y puede contener cualquier nmero de programas de C g. La . f xsufijo identifica los archivos C gFX. Un archivo de C gFX describe el estado render completa para un efecto particular: mltiples pasadas, estados de textura, y cualquier nmero de programas de vrtice y de fragmentos individuales se pueden definir para crear una apariencia completa o efecto. Se proporciona un conjunto de herramientas de desarrollo de acompaamiento para el uso y anlisis de los archivos C gFX. El kit de herramientas expone ganchos de interfaz de usuario para alojar aplicaciones, por lo que las aplicaciones C gFX-aware puede suministrar automticamente controles significativos y la semntica para los usuarios y desarrolladores por igual. Programas C g describen el vrtice o fragmento de procesamiento que tiene lugar en un nico paso de representacin, pero algunos algoritmos de sombreado complejos requieren mltiples pases de representacin. C gFX ofrece un formato para codificar efectos complejos de pasadas mltiples, incluida la designacin de qu programa C G se utiliza para cada paso de representacin. Ms especficamente, C gFX admite tres funciones adicionales ms all de lo que es compatible con el ncleo del lenguaje C G: 1. C gFX proporciona un mecanismo para especificar los pases de renderizado mltiples y mltiples implementaciones opcionales para un solo efecto. 2. C gFX le permite especificar los estados de renderizado no programables, como los modos de alfa-prueba y filtrado de texturas. La configuracin de estos hacen que los Estados pueden adoptar la forma de expresiones simples, que se evalan en la C PU cuando se inicializa el efecto. 3. C gFX permite anotaciones que se aaden a los shaders y parmetros de sombreado. Estas anotaciones proporcionan informacin adicional a las aplicaciones, incluidas las aplicaciones de creacin de contenido. Por ejemplo, una anotacin puede especificar el rango permitido de valores para
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 32/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

un parmetro de sombreado.

Mltiple Shader Instancing


El formato de archivo C gFX encapsula mltiples implementaciones de programas para un shader C g dado. Esto significa que puede tener un programa de sombreado Decimosexto escrito para una GPU de tercera generacin o de cuarta generacin, mientras que tambin incluye un programa sencillo que soporta una GPU de segunda generacin menos capaces. Una aplicacin de cargar el archivo C gFX puede determinar en tiempo de ejecucin de la aplicacin de sombreado ms apropiado usar basado en GPU disponible de la computadora. Instancias mltiple de programas C g con C gFX es una manera de abordar las variaciones funcionales en las GPU de generaciones diferentes o diferentes proveedores de hardware. Instancias mltiple tambin le permite desarrollar un programa especializado para el Decimoquinto un ejemplo-API para 3D en particular, si OpenGL expone la funcionalidad extra a travs de una extensin. Programas C g especializados para Direct3D, OpenGL estndar, u OpenGL con extensiones pueden ser contenidos en un solo archivo C gFX.

CgFX y creacin de contenidos digitales


El kit de herramientas C gFX consiste en el compilador C gFX, que soporta la sintaxis C gFX completo; la API de tiempo de ejecucin C gFX, para la carga y la manipulacin de archivos C gFX y mdulos enchufables para mayor creacin de contenido digital (DC C ) aplicaciones como Alias | Wavefront Maya y discreto de 3ds max. La figura 114 muestra estas haciendo uso de aplicaciones C gFX. Softimage | XSI 3.0 ofrece soporte directo para el Decimoquinto compilacin en su Render Tree.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

33/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Figura 1-14 aplicaciones de creacin de contenido digital que usar C g y C gFX Antes de C gFX, no haba forma estndar para una aplicacin de DC C para exportar el contenido en 3D con todo el conocimiento de sombreado asociado necesario para representar el contenido en tiempo real. Ahora las principales aplicaciones DC C utilizan C gFX en su proceso de creacin de contenidos y apoyan el formato de archivo C gFX. Esto significa que C gFX puede mejorar significativamente el flujo de trabajo artstico de aplicaciones DC C para juegos en tiempo real y otras aplicaciones 3D. Usando C gFX, los artistas pueden ver y modificar shaders C g y contenidos 3D asociada para ver, desde el interior de la herramienta DC C de su eleccin, el aspecto que tendr su trabajo en un juego o una aplicacin 3D.

Cmo CgFX adapta a su aplicacin


La figura 1-15 muestra cmo un archivo que contiene varios C gFX shaders de instancia es utilizado por una aplicacin junto con el tiempo de ejecucin de C G y su eleccin de la representacin de la API. La mayor parte de este libro se centra en el propio idioma del C G y sobre cmo escribir programas de C g, en lugar de C gFX, pero vea el Apndice C para ms informacin sobre el formato de archivo C gFX y su API en tiempo de ejecucin asociado.

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

34/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

Figura 1-15 C mo C gFX Se adapta a una aplicacin estndar

Adelante con el Tutorial


Habiendo terminado esta introduccin al lenguaje de programacin C g que ahora est listo para asumir los captulos de tutora, que le ensear cmo escribir programas de C g.

1.5 Ejercicios
Los ejercicios al final de cada captulo ayudarle a revisar sus conocimientos y desarrollar habilidades prcticas de programacin. 1. Responde a esta: Nombre dos interfaces de programacin 3D estndar para el que puede compilar programas C g. Qu sistemas operativos cada soporte de la interfaz de programacin? 2. Responde a esta: C ules son las principales etapas del pipeline de grficos? En qu orden se disponen las etapas? 3. Responde a esta: Dnde encajan los programas de vrtice y fragmento en la tubera? 4. Responde a esta: Qu es un vrtice? Qu es un fragmento? Distinguir un fragmento de un pxel. 5. Pruebe usted mismo: No hemos comenzado a escribir programas C g todava (vamos a llegar muy pronto en el prximo captulo), as que tome un descanso y ver una buena largometraje de animacin de grficos por ordenador, como Monsters, Inc.
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 35/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

1.6 Lectura adicional


C G se basa en una serie de conceptos en el diseo de lenguajes de ordenador, diseo de hardware de la computadora, y grficos por ordenador. Hacer justicia a todas estas contribuciones en el contexto de este tutorial no siempre es prctico. Lo intentamos en la seccin "Lectura adicional" al final de cada captulo es ofrecerle consejos para aprender ms acerca de las contribuciones que subyacen a los temas en cada captulo. Hay un montn de libros sobre C . El lenguaje de programacin C, tercera edicin (Prentice Hall, 2000), de Brian Kernighan y Dennis Ritchie, es un clsico, los autores inventaron el lenguaje C . Decimosexto incluye los conceptos de C y C + +. En la actualidad, en realidad puede haber ms libros sobre C + + que sobre C . El clsico + + libro de C es el C + + Programming Language, tercera edicin (Addison-Wesley, 2000), por Bjarne Stroustrup, que invent el lenguaje. Para obtener ms informacin sobre el RenderMan Shading Language, lea el compaero RenderMan: Gua del Programador de realistas Computer Graphics (Addison-Wesley, 1989), de Steve Upstill. Pat Hanrahan y Jim Lawson publicaron un artculo sobre RenderMan SIGGRAPH llamada "Lengua de sombreado e iluminacin C lculos" (AC M Press) en 1990. 1984 papel SIGGRAPH de Robert C ook titulado "rboles de sombra" (AC M Press) motiv el desarrollo de RenderMan. El desarrollo de hardware de grficos programables y sus lenguajes asociados ha sido un rea de investigacin activa y fructfera durante casi una dcada. Anselmo Lastra, Steven Molnar, Marc Olano, y Wang Yulan en la UNC publicaron un trabajo de investigacin a principios de 1995 titulado "Real-Time Programmable Shading" (AC M Press). Los investigadores de la UNC tambin publicaron varios artculos sobre su arquitectura de grficos programables PixelFlow. Marc Olano y Anselmo Lastra publicaron un artculo SIGGRAPH titulado "Un lenguaje de sombreado de hardware de grficos: El sistema de sombreado PixelFlow" (AC M Press) en 1998. Kekoa Proudfoot, Bill Marcos, Svetoslav Tzvetkov, y Pat Hanrahan publicaron un artculo en SIGGRAPH 2001 titulado "Un sistema en tiempo real de sombreado programable de procedimientos para hardware de grficos" (AC M Press) que describe un lenguaje de sombreado GPU orientada desarrollado en Stanford. Representacin en tiempo real, Segunda Edicin (AK Peters, 2002), escrito por Eric Haines y Tomas Akenine-Mller, es un excelente recurso para obtener ms informacin sobre el hardware de grficos y tcnicas interactivas.
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 36/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

El sistema de grficos OpenGL: Una especificacin documenta la interfaz de programacin de OpenGL 3D. El mejor tutorial para aprender programacin OpenGL es la Gua de programacin OpenGL: La Gua Oficial de Aprendizaje OpenGL, tercera edicin (AddisonWesley, 1999), de Mason Woo, Jackie Neider, Tom Davis, y Dave Shreiner. El www.opengl.org sitio Web sirve mucha ms informacin sobre OpenGL. Documentacin para la interfaz de programacin de Direct3D est disponible de Microsoft msdn.microsoft.com sitio Web. NVIDIA ofrece ms informacin sobre el tiempo de ejecucin C g C gFX, y el propio C G en su sitio Web Developer en developer.nvidia.com / CG .

Derechos de autor
Muchas de las denominaciones utilizadas por los fabricantes y vendedores para distinguir sus productos se consideran marcas comerciales. C uando esas designaciones aparecen en este libro, y Addison-Wesley tena conocimiento de una reclamacin de la marca, las designaciones se han impreso con letra inicial mayscula o en todas las capitales. Los autores y el editor han cuidado en la preparacin de este libro, pero hacer ninguna garanta expresa o implcita de ningn tipo y no asumimos ninguna responsabilidad por errores u omisiones. No se asume responsabilidad por daos incidentales o consecuentes relacionados con o que surjan de la utilizacin de la informacin o programas contenidos en el presente documento. El editor ofrece descuentos en este libro cuando se pide una cantidad para compras al por mayor y ventas especiales. Para obtener ms informacin, pngase en contacto con: EE.UU. C orporativo y Ventas Gobierno (800) 382-3419 corpsales@pearsontechgroup.com Para ventas fuera de los EE.UU., pngase en contacto con: Ventas Internacionales international@pearsontechgroup.com Visita Addison-Wesley en la Web: www.awprofessional.com Library of C ongress C ontrol Number: 2002117794 C opyright 2003 NVIDIA C orporation Imagen de la portada 2003 por NVIDIA C orporation Todos los derechos reservados. Ninguna parte de esta publicacin puede ser reproducida, almacenada en un sistema de recuperacin, o transmitida de
http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html 37/38

09/01/14

El Decimoquinto Tutorial - Captulo 1. Introduccin

ninguna forma, ni por ningn medio, ya sea electrnico, mecnico, fotocopia, grabacin, o de otra manera, sin el consentimiento previo del editor. Impreso en los Estados Unidos de Amrica. Publicado simultneamente en C anad. Para informacin sobre cmo obtener el permiso para el uso del material de este trabajo, por favor enve una solicitud por escrito a: Pearson Education, Inc. Derechos y C ontratos 75 Arlington Street, Suite 300 Boston, MA 02116 Telfono: (617) 848-7047 Texto impreso en papel reciclado en el RR Donnelley C rawfordsville en C rawfordsville, Indiana. 8 9 10111213 DOC 09 08 07 8 impresin, noviembre de 2007 Derecho de Autor, Dedicatorias y Prlogo Captulo 1. Introduccin C aptulo 2. Los Programas ms simple C aptulo 3. Parmetros, texturas, y las expresiones C aptulo 4. Transformaciones C aptulo 5. Iluminacin C aptulo 6. Animacin C aptulo 7. Las tcnicas de mapeo de entorno C aptulo 8. Bump Mapping C aptulo 9. Temas avanzados C aptulo 10. Perfiles y Performance Apndice A. Procedimientos iniciales con C g Apndice B. El tiempo de ejecucin de C G Apndice C . El C gFX Formato de Archivo Apndice D. C g Palabras clave Funciones Apndice E. C G Standard Library Lminas a C olor

http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

38/38

Você também pode gostar