Professional Documents
Culture Documents
Traduccin Vuelapluma
Madrid Mexico Santa Fe de Bogota Buenos Aires Caracas Lima Montevideo San Juan San Jos Santiago So Paulo White Plains
Datos de catalogacin bibliogrfica GRFICOS POR COMPUTADORA CON OPKNGL DONALD HKARN; M. PAULINE BAKF.R Pearson Educacin S.A., Madrid. 2006 ISBVIO: 84-205-3980-5 1SBVI3: 78-84-205-3980-5 Malcra: Informtica, 681.3 Formato: 195 \ 250 inm. Pginas: 918
A nuestra gente
Dwight, Rose, Jay y Millie
Contenido
Prefacio xix Ratones Trackballs y spaceballs Joysticks Guantes de datos Digitalizadores Escneres de imagen Paneles tctiles Lapiceros pticos Sistemas de voz 2.5 2.6 2.7 2.8 Dispositivos de copia impresa Redes grficas Grficos en Internet Software grfico Representaciones con coordenadas Funciones grficas Estndares de software Otros paquetes grficos 59 60 61 61 62 64 64 66 67 67 69 69 70 70 72 73 74 74 74 75 76 76 78 81 82 82
2
3 5 10 12 19 23 28 31 32 33 33
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10
34
35 35 38 41 42 44 47 47 50 51
2.9
Introduccin a OpenGL Sintaxis bsica de OpenGL Bibliotecas relacionadas Archivos de cabecera Gestin de la ventana de visualizacin empleando GLUT
2.1
2.2
Primitivas grficas
3.1 Sistemas de coordenadas de referencia Coordenadas de pantalla Especificaciones absolutas y relativas de coordenadas 3.2 Especificacin de un sistema bidimensional de referenda universal ea.Qpe.nGL
84
86 86 87
Procesador de pantalla de lneas de barrido 2.3 Estaciones de trabajo grficas y sistemas de visualizacin 2.4 Dispaositivos de entrada Teclados, cajas de botones y botones de seleccin
53 54 58 58
88
Contenido Funciones de gunto en QpenQj, Funciones OpenGL para lneas Algoritmos de dibujo de lneas Ecuaciones de las lneas Algoritmo DDA 94 88 91 3.17 3.18 3.19
3.16
Algoritmo de Bresenham para dibujo 96 de lneas Visualizacin de polilneas 100 3.6 Algoritmos paralelos de dibujo de lneas 100 3 . 7 _ Almacenamiento de los valores en el bu fer de imagen 3.8 3.9 Funciones OpenGL para curvas \|g^ritmos para^ene^acin de crculol Propiedades de los crculos Algoritmo del punto medio para crculos 3.10 jMgoritmos degeneracin de elipses Propiedades de las elipses Algoritmo del punto medio para la elipse 3.11 Otras curvas Secciones cnicas Polinomios y curvas de tipo sptine 3.12 3^13 Algoritmos paralelos para curvas Direccionamiento de pixeles y geometra de los objetos 102 103 104 104 106 1LL 111 113 120 121 123 124 124 124 4.1 4.2
3.24 3.25
Funciones OpenGL de relleno de reas poligonales Matrices de vrtices OpenGL Primitivas de matrices de pixeles Funciones OpenGL para matrices de pixeles Funcin de mapa de bits de OpenGL Funcin OpenGL para mapas de pixeles Operaciones OpenGL de manipulacin de bferes Primitivas de caracteres Funciones OpenGL de caracteres Particionamiento de imgenes Listas de visualizacin de OpenGL Creacin y denominacin de una lista de visualizacin OpenGL Ejecucin de listas de visualizacin OpenGL Borrado de listas de visualizacin OpenGL Funcin OpenGL de redimensionamiento de la ventana de visualizacin Resumen Programas de ejemplo Referencias Ejercicios
139 145 148 148 148 150 151 153 155 156 156 156 157 158 158 161 165 173 174
Coordenadas de cuadrcula de pantalla Mantenimiento de las propiedades geomtricas de los objetos visualizados 3.14 3.15 Primitivas de reas rellenas reas de relleno poligonales
178
180 180 180 181 182 182 183 183 184 185 186 187 188 188
128 129 129 130 131. 132 135 136 138 4.3
Clasificaciones de los polgonos Identificacin de polgonos cncavos Divisin de los polgonos cncavos Divisin de un polgono convexo en un conjunto de tringulos Pruebas dentro-fuera Tablas de polgonos Ecuaciones de un plano Caras poligonales anteriores y posteriores
Rl grosor de las lneas Estilo de las lneas Opciones de plumilla y brocha 4.7 4.8
Tcnicas de filtrado Ajuste de fase de los pxeles Compensacin de diferencias en la intensidad de las lneas Suavizado de los lmites de las reas 4.18 4.19 4.20 4.21 Funciones OpenGL de suavizado Funciones de consulta de OpenGL Grupos de atributos de OpenGL Resumen Referencias Ejercicios
Atributos de las curvas 193 Funciones OpenGL para los atributos de los puntos 195 Funciones OpenGL para los atributos de las lneas 196 Funcin de grosor de lnea de OpenGL La funcin de estilo de lnea de OpenGL Otros efectos de lnea de OpenGL 196 196 198 199 199 200 202 206
4.9
K H
5.1
Transformaciones geomtricas
Transformaciones geomtricas bidimensionales bsicas Traslaciones bidimensionales Rotaciones bidimensionales Representacin matricial y coordenadas homogneas Coordenadas homogneas Matriz de traslacin bidimensional Matriz de rotacin bidimensional Matriz de cambio de escala bidimensional Transformaciones inversas Transformaciones compuestas bidimensionales Traslaciones compuestas bidimensionales Rotaciones compuestas bidimensionales Cambios de escala compuestos bidimensionales Rotacin general sobre un punto de pivote bidimensional Cambio de escala general de puntos fijos bidimensionales Directrices generales para el cambio de escala bidimensional Propiedades de la concatenacin de matrices Transformaciones compuestas bidimensionales generales y eficiencia de clculo Cambio de escala bidimensional
Relleno de regiones con fundido de color 4.10 Algoritmo general de relleno de polgonos mediante lneas de barrido 4.1! Relleno de polgonos convexos mediante lneas de barrido
5.2
4.12 Relleno de regiones con lmites curvos mediante lneas de barrido 207 4.13 Mtodos de relleno de reas con lmites irregulares 207 Algoritmo de relleno por contorno 207 Algoritmo de relleno por inundacin 211 4.14 Funciones OpenGL para atributos de relleno de reas 211 Funcin de relleno con patrn de OpenGL 212 Patrones de textura e interpolacin de OpenGL 213 Mtodos OpenGL para modelos almbricos 214 La funcin de cara frontal de OpenGL 216 Atributos de los caracteres 217 Funciones OpenGL para los atributos de caracteres 220 Suavizado 220 Supermuestreo de segmentos de lnea recta 222 Mscaras de ponderacin de subpxeles Muestreo por rea de segmentos de lnea recta 223 224
5.3 5.4
Visualizacin bidimensional
Pipcline de visualizacin bidimensional La ventana de recorte Ventana de recorte en coordenadas de visualizacin Ventana de recorte en coordenadas universales Normalizacin y transformaciones de visor Mapeo de la ventana de recorte en un visor normalizado Mapeo de la ventana de recorte a un cuadrado normalizado Visualizacin de cadenas de caracteres Efectos de divisin de pantalla y mltiples dispositivos de salida
304
Construccin de matrices de rotacin 254 bidimensionales Ejemplo de programacin de matrices 255 bidimensionales compuestas 5.5
305 307 308 308 309 310 311 313 313 314 314 314 315 315
260
Inclinar Mtodos de rasterizacin para 265 transformaciones geomtricas Transformaciones de rasterizacin en OpenGL 266 Transformaciones entre sistemas de coordenadas bidimensionales Transformaciones geomtricas en un espacio tridimensional Traslaciones tridimensionales Rotaciones tridimensionales Rotaciones de ejes de coordenadas tridimensionales Rotaciones tridimensionales generales Mtodos de cuaternios para rotaciones tridimensionales Cambio de escala tridimensional Transformaciones compuestas tridimensionales Otras transformaciones tridimensionales Reflexiones tridimensionales Inclinaciones tridimensionales Transformaciones entre sistemas de coordenadas tridimensionales Transformaciones afines Funciones de transformaciones geomtricas en OpenGL Transformaciones bsicas en OpenGL Operaciones con matrices en OpenGL Filas de matrices en OpenGL Ejemplos de programas de transformaciones geomtricas OpenGL Resumen Referencias Ejercicios 267
272 274
284
5.18
Funciones de visualizacin bidimensional de OpenGL Modo de proyeccin de OpenGL Funcin de ventana de recorte de GLU Funcin de visor de OpenGL Creacin de una ventana de visualizacin con GLUT Establecimiento del modo y del color de la ventana de visualizacin con GLUT klentifkador de la ventana de visualizacin con GLUT Borrado de una ventana de visualizacin con GLUT Ventana de visualizacin actual con GLUT Reposicionamiento y cambio de tamao de una ventana de visualizacin con GLUT Gestin de mltiples ventanas de visualizacin con GLUT Subventanas de GLUT Seleccin de la forma del cursor de pantalla en una ventana de visualizacin Visualizacin de objetos grficos en una ventana de visualizacin de GLUT
318 319
Contenido Ejecucin del programa de aplicacin 319 Otras funciones de GLUT 319 7.2 7.3 Ejemplo de programa de visualizacin bidimensional en OpenGL 320 6.5 Algoritmos de recorte 322 6.6 6.7 Recorte de puntos bidimensionales Recorte de lneas bidimensionales Recorte de lneas de CohenSutherland Recorte de lneas de Liang-Barsky Recorte de lneas de Nicholl-LeeNicholl Recorte de lneas con ventanas de recorte poligonales no rectangulares Recorte de lneas utilizando ventanas de recorte con lmites no lineales 6.8 Recorte de reas de relleno poligonales Recorte de polgonos de SutherlandHodgman Recorte de polgonos de WeilerAtherton Recorte de polgonos utilizando ventanas de recorte poligonales no rectangulares Recorte de polgonos utilizando ventanas de recorte con lmites no lineales 6.9 Recorte de curvas 6.10 Recorte de textos 6.11 Resumen Referencias Ejercicios 323 323 324 330 333 335 335 336 338 343 Visualizacin tridimensional y estereoscpica Pipeline de visualizacin tridimensional Parmetros de coordenadas de visualizacin tridimensional Vector normal del plano de visualizacin
xi
363 El vector vertical Sistema de referencia de coordenadas 363 de visualizacin uvn Generacin de efectos de visualizacin 364 tridimensionales Transformacin de coordenadas 7.4 universales a coordenadas de visualizacin 366 7.5 7.6 Transformaciones de proyeccin Proyecciones ortogonales Proyecciones ortogonales axonomtricas e somtricas 368 368 369
Coordenadas de proyeccin ortogonal 369 Ventana de recorte y volumen de visualizacin de proyeccin ortogonal 370 Transformacin de normalizacin para una proyeccin ortogonal 7.7 345 346 347 349 352 352 Proyecciones paralelas oblicuas Proyecciones paralelas oblicuas en diseo Perspectivas caballera y cabinet Vector de proyeccin paralela oblicua Ventana de recorte y volumen de visualizacin de proyeccin paralela oblicua Matriz de transformacin para proyeccin paralela oblicua Transformacin de normalizacin para una proyeccin paralela oblicua 355 355 356 356 358 358 359 7.8 Proyecciones en perspectiva 372 374 374 376 376
345
Visualizacin tridimensional
7.1 Panormica de los conceptos de visualizacin tridimensional Visualizacin de una escena tridimensional Proyecciones Pistas de profundidad Identificacin de lneas y superficies visibles Representacin de superficies Despieces y secciones transversales
354
Transformacin de coordenadas para la proyeccin en perspectiva 380 Ecuaciones de la proyeccin en perspectiva: casos especiales 381 Puntos de fuga para las proyecciones en perspectiva Volumen de visualizacin para proyeccin en perspectiva 383 383
xi
Contenido Matriz de transformacin para la proyeccin en perspectiva Funciones para poliedros regulares de GLUT Ejemplo de programa de poliedros con GLUT Superficies curvadas Superficies cudricas Esfera Elipsoide 392 395 396 396 397 398 398 399 399 401 8.5 Toro Supercudricas Superelipse Superelipsoide 8.6 Funciones OpenGL para superficies cudricas y superficies cbicas Funciones para superficies cudricas de GLUT 423 424 424
416
Frustrum de proyeccin en perspectiva simtrico Frustrum de proyeccin en perspectiva oblicua Coordenadas de transformacin normalizadas para proyeccin en perspectiva 7.9 Transformacin del visor y coordenadas de pantalla tridimensionales 7.10 Funciones de visualizacin tridimensional OpenGL
Funcin de transformacin de visualizacin OpenGL Funcin de proyeccin ortogonal OpenGL Funcin OpenGL de proyeccin en perspectiva simtrica Funcin general de proyeccin de perspectiva OpenGL Visores OpenGL y ventanas de visualizacin Ejemplo de programa OpenGL para visualizacin tridimensional 7.11 Algoritmos de recorte tridimensional
Funcin de GLUT para la generacin de una tetera con una superficie cbica 425 Funciones para la generacin de superficies cudricas de GLU Ejemplo de programa que utiliza las funciones de creacin de superficies cudricas de GLUT y GLU 8.7 8.8 Obejtos din forma (biobby) Representaciones con splines Splines de interpolacin y de aproximacin Condiciones de continuidad paramtricas Condiciones de continuidad geomtrica Especificaciones de splines Superficies con splines Recorte de superficies con splines 8.9 Mtodos de interpolacin con splines cbicos Splines cbicos naturales Interpolacin de Hermite Splines cardinales Splines de Kochanek-Bartels 8.10 Curvas con splines de Bzier Ejemplo de un programa de generacin de curvas de Bzier Ecuaciones de las curvas de Bzier 434 434 435 436 437 437 438 438 441 444 445 445 446 450 425
Recorte en coordenadas homogneas tridimensionales 402 Cdigos de regin tridimensional Recorte tridimensional de puntos y lneas 402 403
Recorte de polgonos tridimensionales 406 407 Recorte de curvas tridimensionales 7.12 7.13 Planos de recorte arbitrarios Planos de recorte ocpionales en OpenGL Resumen Referencias Ejercicios 407 409 410 412 412
414
416
xiii
Tcnicas de diseo utilizando curvas de Bzier Curvas de Bzier cbicas 8.11 8.12 Superficies de Bzier Curvas con splines B
493
Ecuaciones de una curva con splines B 454 Curvas con splines B peridicos y uniformes Curvas con splines B cbicos y peridicos Curvas con splines B abiertos y uniformes Curvas con splines B no uniformes 8.13 8.14 Superficies con splines B Splines Beta 457 460 461 464 464 465 465
Dimensin fractal Construccin geomtrica de fractales 497 deterministas autosimilares Construccin geomtrica de fractales 499 estadsticamente autosimilares Mtodos de construccin de fractales 501 afines Mtodos de desplazamiento aleatorio 504 del punto medio 506 Control de la topografa del terreno Fractales autocuadrticos Fractales autoinversos 8.24 8.25 Gramticas de formas y otros mtodos procedimentales Sistemas de partculas Modelado basado en las caractersticas fsicas Visualizacin de conjuntos de datos 507 519 521 524 526 529 529
Condiciones de continuidad de los splines Beta Representacin matricial de splines beta cbicos y peridicos 8.15 8.16 8.17
466
8.26 8.27
Splines racionales 467 Conversin entre representaciones de splines 469 Visualizacin de curvas y superficies con splines Regla de Horner Mtodos de subdivisin Funciones OpenGL de aproximacin con splines 470 470 472 474 474 477 480
Representaciones visuales de campos vectoriales 533 Representaciones visuales de campos de tensores 535 Representaciones visuales de campos de datos multivariantes 536 8.28 Resumen Referencias 537 540 542
8.18
Funciones OpenGL para curvas con splines de Bzier Funciones OpenGL para superficies con splines de Bzier Funciones GLU para curvas con splines B Funciones GLU para la creacin de superficies con splines B Funciones GLU para el recorte de superficies 8.19 8.20 8.21 8.22 8.23 Replete-litaciones de barrido Mtodos de geometra constructiva de slidos rboles octales rboles BSP Mtodos de geometra fractal
546
482 484 485 486 489 492 492 9.2 9.3 9.4 9.5 9.6
558 559
Contenido Mtodos de rboles octales Mtodo de proyeccin de rayos Comparacin de los mtodos de deteccin de visibilidad Superficies curvas 562 563 564 565 565 Reflexin especular y modelo de Phong Reflexiones difusa y especular combinadas Reflexiones especular y difusa para mltiples fuentes luminosas Emisin de luz superficial
Diagramas de contorno de superficies 566 9.13 Mtodos de visibilidad para imgenes almbricas 566 Algoritmos de visibilidad de superficies para representaciones almbricas 567 Algoritmo de variacin de intensidad con la profundidad para representaciones almbricas 567 9.14 Funciones OpenGL de deteccin de visibilidad 568 569 569
Modelo bsico de iluminacin con focos y con atenuacin de la intensidad 594 Consideraciones relativas al color RGB Otras representaciones del color Luminancia 10.4 Superficies transparentes Materiales translcidos Refraccin de la luz Modelo bsico de transparencia 10.5 10.7 Efectos atmosfricos Parmetros de la cmara 10.6 Sombras 10.8 Visualizacin de la intensidad de la luz Distribucin de los niveles de intensidad del sistema Correccin gamma y tablas de sustitucin de vdeo Visualizacin de imgenes de plano continuo 10.9 Patrones de semitono y tcnicas de aleatorizacin 594 596 596 597 597 598 600 601 601 602 602 603 604 605 606 607 610 613 614 614 617 617 618 620
Funciones OpenGL de eliminacin de polgonos Funciones bpenGL de gestin del bfer de profundidad
Mtodos OpenGL para visibilidad de superficies en representaciones almbricas 570 Funcin OpenGL para variacin de la intensidad con la profundidad 571 9.15 Resumen 571 Referencias 573 Ejercicios 573
576
578 578 579 579
Aproximaciones de semitonos Tcnicas de aleatorizacin 10.10 Mtodos de representacin de polgonos Representacin superficial con intensidad constante Representacin de superficies por el mtodo de Gouraud Representacin superficial de Phong Representacin superficial rpida de Phong 10.11 Mtodos de trazado de rayos Algoritmo bsico de trazado de rayos
Fuentes luminosas puntuales Fuentes luminosas infinitamente distantes Atenuacin radial de la intensidad
Fuentes de luz direccionales y efectos de foco 580 Atenuacin angular de la intensidad 581 Fuentes luminosas complejas y el modelo de Warn 582 10.2 10.3 Efectos de iluminacin superficial Modelos bsicos de iluminacin 583 584 584 584
Clculos de interseccin entre rayos y superficie 622 Intersecciones entre rayos y esferas 623
Contenido Intersecciones entre rayos y poliedros 625 Reduccin de los clculos de interseccin con los objetos Mtodos de subdivisin espacial Simulacin de los efectos de enfoque de la cmara Trazado de rayos con antialiasing Trazado de rayos distribuido Trminos de la energa radiante Modelo bsico de radiosidad Mtodo de radiosidad mediante refinamiento progresivo 10.13 Mapeado de entorno 10.14 Mapeado de fotones 626 626 630 632 634 638 639 643 646 646 Funciones de representacin superficial OpenGL Operaciones de semitonos en OpenGL 10.21 Funciones de texluras en OpenGL Funciones OpenGL para texturas lineales Funciones OpenGL para texturas superficiales Funciones OpenGL para texturas volumtricas
xv
667 668 668 669 672 673 674 674 675 675 676 676 677 677 678 679 679 679
Opciones de color OpenGL para patrones de texturas Opciones OpenGL para el mapeado de texturas Envolvimiento de texturas en OpenGL Copia de patrones de texturas OpenGL desde el bfer de imagen Matrices de coordenadas de texturas en OpenGL Denominacin de los patrones de textura OpenGL Subpatroncs de textura en OpenGL Patrones de reduccin de texturas en OpenGL Bordes de texturas en OpenGL
10.15 Adicin de detalles a las superficies 647 10.16 Modelado de los detalles superficiales mediante polgonos 650 10.17 Mapeado de texturas Patrones de textura lineales Patrones de textura superficial Patrones de textura volumtricos Patrones de reduccin de texturas Mtodos de texturado procedimental 10.18 Mapeado de relieve 10.19 Mapeado del sistema de referencia 10.20 Funciones OpenGL de iluminacin y representacin de superficies Funcin OpenGL para fuentes luminosas puntuales 650 650 651 654 655 655 656 658 659 659
Texturas proxy en OpenGL Texturado automtico de superficies cudricas Coordenadas de textura homogneas
Especificacin de la posicin y el tipo de una fuente luminosa en OpenGL 659 Especificacin de los colores de las fuentes luminosas en OpenGL Especificacin de coeficientes de atenuacin radial de la intensidad para una fuente luminosa OpenGL Fuentes luminosas direccionales en OpenGL (focos) Parmetros de iluminacin globales en OpenGL Funcin OpenGL de propiedad de una superficie Modelo de iluminacin OpenGL Efectos atmosfricos en OpenGL Funciones de transparencia OpenGL 660
Opciones adicionales para texturas en OpenGL 680 10.22 Resumen 680 Referencias 683 Ejercicios 684
gil
688
689
11.1 11.2
Clasificacin lgica de los dispositivos de entrada 689 Dispositivos localizadores 690 Dispositivos de trazo 690 Dispositivos de cadena de caracteres 690
xvi
Contenido Dispositivos evaluadores 690 691 692 694 694 695 695 695 695 696 696 696 696 698 699 699 700 700 705 710 710 711 711 717 717 720 720 723 724 724 724 725 726 726 12.7
#
11.9
Dispositivos de eleccin Dispositivos de seleccin 11.3 Funciones de entrada para datos grficos Keiilinientacin mediante eco Funciones de retrollamada
Modos de entrada
734
735 735 737 738 738 738 739 739 740 740 741 741 741 742 742 744 744 745 745 745 745 746 747 747 748 749 750 751 751 752 752
11.4 Tcnicas interactivas de construccin de imgenes Mtodos bsicos de posicionamiento Arrastre de objetos Restricciones Cuadrculas Mtodos de banda elstica Campo de gravedad Mtodos interactivos de dibujo 11.5 11.6 Hntomos de realidad virtual Funciones OpenGL para dispositivos de entrada interactiva
El espectro electromagntico Caractersticas psicolgicas del color 12.2 Modelos de color Colores primarios Conceptos intuitivos del color 12.3 Primarios estndar y diagrama cromtico El modelo de color XYZ Valores XYZ normalizados Diagrama cromtico de la CI Gamas de colores Colores complementarios Longitud de onda dominante Pureza El modelo de color RGB El modelo de color YIQ y los modelos relacionados Los parmetros YIQ Transformaciones entre los espacios de color RGB e YIQ Los sistemas YUV e YCrC Los modelos de color CMY y CMYK Los parmetros CMY Transformaciones entre los espacios de color CMY y RGB I :! modelo de color HSV Los parmetros HSV I Seleccin de sombras, tintas y tonalidades
b
Funciones de ratn GLUT Funciones de teclado GLUT Funciones GLUT para tabletas grficas Funciones GLUT para una spaceball Funciones GLUT para cajas de bolones Funciones GLUT para diales 11.7 Funciones de men OpenGL
12.4 12.5
Operaciones de seleccin en OpenGL 7 Creacin de un men GLUT Creacin y gestin de mltiples mens GLUT Creacin de submens GLUT Modificacin de los mens GLUT 11.8 Diseo de una interfaz grfica de usuario El dilogo con el usuario Ventanas e iconos Adaptacin a los distintos niveles de experiencia Coherencia Minimizacin de la memorizacin
12.6
Transformaciones entre los espacios de color HSV y RGB 12.8 12.9 El modelo de color HLS Seleccin y aplicaciones del color Referencias Ejercicios
12.10 Resumen
44
Contenido
xv
13
13.1
754
15
5.1
790
756 756
15.2
13.2 13.3
Generacin de animaciones mediante operaciones de barrido Diserto de secuencias de animacin Tcnicas tradicionales de animacin Funciones generales de animacin por computadora Lenguajes de animacin por computadora Sistemas de fonogramas clave Morfismo Simulacin de aceleraciones Especificaciones de movimientos Especificacin directa del movimiento Sistemas dirigidos por objetivos Cinemtica y dinmica Animacin de figuras articuladas Movimientos peridicos Procedimientos de animacin en OpenGL Resumen Referencias Ejercicios
757 757 759 760 760 761 762 764 767 767 768 768 769 771 772 775 776 777
Mtodos de reduccin de color Reduccin uniforme de color Reduccin de color por popularidad Reduccin de color de corte medio Tcnicas de compresin de archivos 15.3 Codificacin de longitud de recorrido Codificacin LZW
Otros mtodos de compresin mediante reconocimiento de patrones 795 Codificacin Huffman 795 Codificacin aritmtica Trasformada discreta del coseno 5.4 Composicin de la mayora de formatos de archivo JPEG: Joint Photographic Experts Group CGM: Computer-Graphics Metafile Format TIFF: Tag Image-File Format PNG: Portable Network-Graphics Format XBM: X Window System Bitmap
Format XPM: X Window System Pixmap Format 804 804 804 804 805 805 805 805 805 806 806 Formato Adobe Photoshop MacPaint: Macintosh Paint Format PICT: Formato Picture Data BMP: Formato Bitmap PCX: Formato de archivo PC Paintbrush TGA: Formato Truevision GraphicsAdapter GIF: Graphics Interchange Format
Modelado jerrquico
14.1 Conceptos bsicos de modelado Representaciones de los sistemas Jerarquas de smbolos 14.2 Paquetes de modelado 14.3 Mtodos generales de modelado jerrquico Coordenadas locales Transformaciones de modelado Creacin de estructuras jerrquicas 4.4 Modelado jerrquico mediante listas de visualizacin OpenGL 14.5 Resumen Referencias Ejercicios
778
779 779 781 782 784 784 785 78S 787 787 788 788 A. 1
15.5
809
809
xvii
Coti tenido Coordenadas de pantalla cartesianas bidimensionales Sistemas de referencia cartesianos bidimensionales estndar Coordenadas polares en el plano xy Sistemas de referencia cartesianos tridimensionales estndar Coordenadas de pantalla cartesianas tridimensionales Sistemas de coordenadas curvilneas tridimensionales ngulo slido Derivada direccional 809 809 810 811 812 812 814 814 814 814 816 816 817 818 818 819 820 820 821 822 822 823 823 824 824 825 Operador de Laplace Operador divergencia Operador rotacional A. 11 Teoremas de transformacin integrales Teorema de Stokes Teorema de Creen para una superficie plana Teorema de divergencia Ecuaciones de transformacin de Green rea de un polgono Centroide de un polgono A. 13 Clculo de las propiedades de los A. 14 poliedros 838 Mtodos numricos 839 Resolucin de sistemas de ecuaciones lineales 839 Determinacin de races de ecuaciones no lineales 841 Evaluacin de integrales 842 844 845 835 836 836 831 831 832 832 833 833 833 835
A.2
Puntos y vectores Propiedades de los puntos Propiedades de los vectores Suma de vectores y multiplicacin escalar Producto escalar de dos vectores Producto vectorial de dos vectores
A.3 A.4
Tensores Vectores base y tensor mtrico Determinacin de los vectores base para un espacio de coordenadas Bases ortonormales Tensor mtrico
A.5
Matrices Multiplicacin por un escalar y suma de matrices Multiplicacin de matrices Traspuesta de una matriz Determinante de una matriz Nmeros complejos Aritmtica compleja bsica Inversa de una matriz
Resolucin de ecuaciones diferenciales ordinarias Resolucin de ecuaciones diferenciales parciales Mtodos de ajuste de curvas por mnimos cuadrados para conjuntos de datos
846
A.6
Unidad imaginaria 825 Conjugado complejo y mdulo de un nmero complejo 826 Divisin compleja 826 Representacin en coordenadas polares de un nmero complejo 826 A.7 A.8 A.9 Cuaternios Representaciones no paramtricas Representaciones paramtricas Operador gradiente 827 828 829 829 830
A. 10 Operadores diferenciales
Prefacio
La infografa, es decir, ios grficos por computadora, continua siendo una de las reas ms excitantes y de ms rpido crecimiento de la moderna tecnologa. Desde la aparicin de la primera edicin de este libro, los mtodos infogrficos se han convertido en una caracterstica estndar del software de aplicacin y de los sistemas informticos en general. Los mtodo infogrficos se aplican de forma rutinaria en el diseo de la mayora de los productos, en los simuladores para actividades de programacin, en la produccin de vdeos musicales y anuncios de televisin, en las pelculas, en el anlisis de datos, en los estudios cientficos, en las intervenciones mdicas y en muchsimas otras aplicaciones. Hoy en da, se utiliza una gran variedad de tcnicas y de dispositivos hardware en estas diversas reas de aplicacin, y hay muchas otras tcnicas y dispositivos actualmente en desarrollo. En particular, buena parte de las investigaciones actuales en el campo de la infograla estn relacionadas con la mejora de la efectividad, del realismo y de la velocidad de generacin de imgenes. Para conseguir una vista realista de una escena natural, un programa grfico puede simular los efectos de las reflexiones y refracciones reales de la luz en los objetos fsicos. Como consecuencia, la tendencia actual en los grficos por computadora consiste en incorporar mejores aproximaciones de los principios fsicos dentro de los algoritmos grficos, con el fin de simular mejor las complejas interacciones existentes entre los objetos y el entorno de iluminacin.
xx
Prefacio
El paquete OpenGL proporciona una amplia y eficiente coleccin de funciones independientes del dispositivo para la creacin de imgenes infogrficas, utilizando un programa escrito en un lenguaje de propsito general tal como C o C+ + . OpenGL ofrece bibliolecas auxiliares para el manejo de operaciones de entrada y de salida, que requieren interaccin con los dispositivos, y para procedimientos grficos adicionales como la generacin de formas cilindricas, objetos esfricos y B-splines.
Ejemplos de programacin
En esta tercera edicin se proporcionan ms de veinte programas C + + completos, utilizando la biblioteca de rutinas grficas disponible en el popular paquete OpenGL. Estos programas ilustran las aplicaciones de las tcnicas bsicas de construccin de imgenes, las transformaciones geomtricas bidimensionales y tridimensionales, los mtodos de visualizacin bidimensionales y tridimensionales, las proyecciones en perspectiva, la generacin de splines, los mtodos fractales, la entrada interactiva mediante el ratn, las operaciones de seleccin, la visualizacin de ments y submens y las tcnicas de animacin. Adems, se proporcionan ms de 100 fragmentos de programas C + + / O p e n G L para ilustrar la implementacin de algoritmos infogrficos de recorte, efectos de iluminacin, representacin superficial, mapeado de texturas y muchos otros mtodos infogrficos.
Conocimientos requeridos
No asumimos que el lector tenga ninguna familiaridad previa con los grficos por computadora, pero s que debe tener unos ciertos conocimientos de programacin y de estructuras bsicas de datos, tales como matrices, listas de punteros, archivos y organizaciones de registros. En los algoritmos infogrficos se utilizan diversos mtodos matemticas, y estos mtodos se explican con un cierto detalle en el apndice. Los temas matemticos cubiertos en el apndice incluyen tcnicas diversas que van desde la geometra analtica hasta el anlisis numrico, pasando por el lgebra lineal, el anlisis vectorial y tensorial, los nmeros complejos, los cuaternios y el clculo bsico. Esta tercera edicin puede utilizarse tanto como un texto para estudiantes que no tengan conocimientos previos de infografa, cuanto como referencia para los profesionales de los grficos por computadora. El nfasis del libro se pone en los principios bsicos necesarios para disear, utilizar y comprender los sistemas infogrficos, junto con numerosos programas de ejemplo que ilustran los mtodos y aplicaciones relativos a cada tema.
Prefini
xxi
para cubrir adecuadamente los fundamentos de los mtodos infogrficos bidimensionales y tridimensionales, incluyendo las representaciones mediante splines, la representacin de superficies y el trazado de rayos. Tambin pueden ofrecerse cursos dedicados a temas especiales, para los que se requiera un conocimiento bsico de infografa como prerrcquisito. centrando esos curso en una o dos reas seleccionadas como por ejemplo tcnicas de visualizacin, geometra Iraclal, mtodos basados en splines, trazado de rayos, radiosidad y animacin por computadora. II Capitulo I ilustra la diversidad de aplicaciones infbgrfcas existentes, examinando los numerosos tipos distintos de imgenes que se generan mediante software grfico. En el Captulo 2 se presenta el vocabulario bsico del campo de la infografa, junto con una introduccin a los componentes hardware y software de los sisicmas grficos, una introduccin detallada a OpenGL y un programa OpenGL complejo de ejemplo. Los algoritmos fundamentales para la representacin y visualizacin de objetos simples se proporcionan en los Captulos 3 y 4. Estos dos captulos examinan los mtodos para generar componentes grlcos de las imgenes tales como polgonos y crculos; para establecer el color, tamao y otros atributos de los objetos; y para implementar dichos mtodos en OpenGL. El Captulo 5 analiza los algoritmos para realizar transformaciones geomtricas tales como la rotacin y el cambio de escala. En los Captulos 6 y 7, se proporcionan explicaciones detalladas de los procedimientos utilizados para mostrar vistas de escenas bidimensionales y tridimensionales. Los mtodos para la generacin de imgenes de objetos complejos, tales como superficies cudricas, splines, fractales y sistemas de partculas se explican en el Captulo 8. En el Captulo 9 exploramos las diversas tcnicas infogrficas que se utilizan para identificar los objetos visibles en una escena tridimensional. Los modelos de iluminacin y los mtodos para aplicar condiciones de iluminacin en la escena se examinan en el Captulo 10, mientras que los mtodos para la entrada grfica interactiva y para el diseo de interfaces grficas de usuario se repasan en el Captulo 11. Los diversos modelos de color que resultan tiles en la infografa se analizan en el Captulo 12, donde tambin se proporcionan consideraciones relativas al diseo de imgenes en color. Las tcnicas de animacin por computadora se exploran en el Captulo 13. Los mtodos para el modelado jerrquico de sistemas complejos se presentan en el Captulo 14 y, finalmente, en el Captulo 15 se hace un repaso de los principales formatos de archivos grficos.
Agradecimientos
Son muchas las personas que han contribuido a este proyecto de diversas formas a lo largo de los aos. Nos gustara expresar de nuevo nuestro agradecimiento a las organizaciones y personas que nos han proporcionado imgenes y otros materiales, as como a los estudiantes de los diversos cursos y seminarios sobre infografa y visualizacin que hemos impartido, los cuales nos han proporcionado numerosos comentarios tiles. Estamos en deuda con todos aquellos que nos han proporcionado comentarios, que han realizado revisiones, que nos han hecho llegar sugerencias para mejorar el material cubierto en el libro y que nos han ayudado de numerosas turas formas, y queramos de forma expresa disculparnos con todas aquellas personas a las que nos hayamos olvidado de mencionar. Damos nuestro agradecimiento a Ed ngel, Norman Badler, Phillip Barry, Brian Barsky, Hedley Bond. Bart Braden, Lara Burton, Robert Burton, Greg Chwelos, John Cross, Steve Cunningham, John DeCatrel, Vctor Duvaneko, Gary Eerkes, Parris Egbert, Tony Faustini, Thomas Foley, Thomas Erank, Don Gillies, Andrew Glassner, Jack Goldfeather, Georges Grinstein, Eric Haines, Robert Herbst, Larry llodges, Carolllubbard. Eng-Kiat Koh,MikeKxogh, Michael Laszlo, Suzanne Lea, Michael May, Nelson Max, David McAllister, JelTrey McConneil, Gary McDonald, C. L. Morgan, Greg Nielson, James Oliver, Lee-Hian Quek, Laurence Rainville, Paul Ross, David Salomn, Gnther Schrack, Steven Shaler, CliVShaTer, Pete Shirley, Carol Smith, Stephanie Smullen, JcTSpears,WilliamTaffe,WaiWanTsang, Spencer Thomas, Sam Uselton, David Wen, fiill Wicker, Andrew Woo, Angelo Yfantis, Marek Zaremba, Michael Zyda y a los numerosos revisores annimos. Tambin queremos dar las gracias a nuestro editor Alan Apt, a Toni llolm y al equipo de Colorado por su ayuda, sus sugerencias, su apoyo y, por encima de todo, su paciencia durante la preparacin de esta tercera edicin. Tambin deseamos dar las gracias a nuestros editores de produccin a su equipo, Lynda Castillo, Camille Trentacoste, Heather Scott, Xiaohong Zhu, Vince
xxii
Prefacio
O'Brien, Patricia Bums, Kathy Ewing y David Abel; agradecemos de verdad su valiosa ayuda y su cuidada atencin al detalle.
Advertencia ai lector
La versin en ingls del libro, Computer Graphics with OpenGL, est impresa en color. Sin embargo, Grficos por computadora en OpenGL, que es la versin traducida al espaol se ha impreso en blanco y negro, por lo que todas las imgenes y fotografas se presentan en escala de grises. El lector debe entonces sobreenteder que cuando en el texto se hace referencia a cdigos de colores, siempre debe pensarse en la imagen o fotografa en color.
CAPTULO
Una escena de una pelcula de dibujos animados generada por computadora de Saguaro-Emerlaincr. (Cortesa de SOFTIMAGE. Inc.)
Grficos y diagramas Diseo asistido por computadora Entornos de realidad virtual Visuali/acin de datos Educacin y formacin
Arte por computadora Entretenimiento Procesamiento de imgenes Interfaces grficas de usuario Resumen
, Los grficos por computadora se han convertido en una potente herramienta para la produccin rpida y econmica de imgenes- Prcticamente no existe ninguna tarea en la que la representacin grfica de la informacin no pueda aportar alguna ventaja y, por tanto, no sorprende encontrar grficos por computadora en muchos sectoresAAunque las primeras aplicaciones de ciencia e ingeniera requeran equipos caros y aparatosos, los avances en la tecnologa informtica han hecho de los grficos interactivos una herramienta muy til. Actualmente, los grficos por computadora se usan a diario en campos tan diversos como las ciencias, las artes, la ingeniera, los negocios, la industria. la medicina, las administraciones pblicas, el entretenimiento, la publicidad, la educacin, la formacin y en aplicaciones caseras. E incluso podemos transmitir imgenes alrededor del mundo a travs de Internet. La Figura 1.1 presenta un breve resumen de diversas aplicaciones grficas en simulaciones, formacin y representacin de datos. Antes de entrar en detalle sobre cmo hacer grficos con una computadora, vamos a hacer una pequea visita a una galera de aplicaciones grficas.
4 CAPTULO 1 Introduccin a los grficos por computadora Otro ejemplo de grficos de datos 3I) es la representacin de superficie, como la que se ilustra en la Figura 1.5, en la que se muestra una superficie equipotencial y su contorno bidimensional proyectado. La Figura l .6 muestra un diagrama de tiempos para la planificacin de tareas. Los diagramas de tiempo y los gralbs de planificacin de tareas se usan para la direccin de proyectos y para monilorizar y ordenar en el tiempo el progreso de los mismos.
FIGURA 1.2. Grficos bidimensionales de lnea, diagramas de barras y diagramas de larta. {Cortesia de UNIRS. /.VC.)
FIGURA 1.3. Conjuntos de datos codificados usando dos colores presentados como diagramas de barras tridimensionales en la superficie de una regin geogrfica . {Reimpreso con permiso de ISSCO Graphics, San Diego. California.)
FIGURA 1.4. Dos grficos tridimensionales diseados con electo dramtico. {Reimpreso con permiso de ISSCO Graphics. San Diego. California.)
MECMAHIZg QAWTT
FIGURA 1.5. Representacin de contornos tridimensionales en un plano de tierra, con un campo de potencial. (Reimpreso con permiso Je !SSCO Graphics, San Diego. California.)
FIGURA 1.6. Un diagrama de tiempos para la planificacin de tareas y otras informaciones relevantes para las tareas de un proyecto. (Reimpreso con permiso de ISSCO Graphics. San Diego. California)
FIGURA 1.7. Modelo almbrico con cdigo de colores de ensamblado de una rueda de automvil. (Cortesia de Evans y Sutherland.)
i rus
C - J -'
U C '
hCti ICU
(a) (b) FIGURA 1.8. Modelos almbricos con cdigo de colores del diseo del cuerpo de un avin y un automvil. (Cortesa de (a) Corporacin Peritek y (b) Evans y Sutherland.)
FIGURA 1.9. testaciones de trabajo CAD con mltiples ventanas. (Cortesa de Intergraph Corporation.) Los paquetes de software CAL) suelen proporcionar al diseador un enlomo multiventana, como se ve en las Figuras 1.9 y 1.10. Las diferentes ventanas pueden mostrar secciones aumentadas o diferentes vistas de los objetos. Circuitos como el mostrado en la Figura 1.10 y redes de comunicacin, de suministro de agua y otras herramientas se construyen colocando de forma repetida unas pocas formas grficas. Las formas empleadas en un diseo representan los diferentes componentes del circuito o de la red. Los paquetes de diseo suelen suministrar formas estndar de mecnica, electricidad, electrnica y circuitos lgicos. Para otro tipo de aplicaciones, el diseador puede crear smbolos personalizados para construir la red o el circuito. El sistema es entonces diseado mediante sucesivas copias de los componentes posieionadas en el plano y unidas automticamente entre si mediante enlaces proporcionados por el paquete grfico. Esto permite que el diseador pueda probar diferentes configuraciones para el circuito y as optimizar al mnimo el nmero de componentes usados o el espacio requerido para el sistema. Las animaciones tambin se usan frecuentemente en las aplicaciones de CAD. Animaciones en tiempo real del modelo almbrico de las formas son muy tiles para comprobar rpidamente el funcionamiento de un vehculo o un sistema como se puede ver en la Figura 1.11.
Dado que las imgenes en modelo almbrico no muestran las superficies, los clculos para cada segmento de animacin pueden realizarse rpido para as producir movimientos suaves en la pantalla. Tambin el modelo almbrico permite ver en el interior del vehculo y observar los componentes internos durante el movimiento. Cuando los diseos del objeto estn completos o casi completos, se aplican condiciones reales de iluminacin y de representacin de superficies para producir visualizaciones que mostrarn la apariencia final del producto.. Ejemplos de esto se proporcionan en la Figura 1.12. Tambin se generan visualizaciones realistas para anunciar.automviles y otros vehculos usando efectos de lu/ y escenas de fondo (Figura 1.13). El proceso de fabricacin tambin va unido a la descripcin computerizada de los objetos diseados, de modo que el proceso de fabricacin del producto puede ser automatizado, utilizando mtodos que son conocidos como CAM (Computer-Aided Manufacturing. fabricacin asistida por computadora). El plano de una placa de circuito, por ejemplo, puede transformarse en la descripcin individualizada de los procesos necesarios para construir el circuito electrnico. Algunas piezas mecnicas se fabrican a partir de las descripciones de cmo las superficies se tienen que formar con las mquinas herramienta. La Figura 1.14 muestra las rutas
:
FIGURA 1.10. Aplicacin para el diseo de circuitos electrnicos, usando mltiples ventanas y componentes lgicos codificados mediante colores. (Cortesa de Sun Microsystems.)
FIGURA 1.11. Simulacion del comportamiento de un vehiculo a] eambiar de carril. (Cor/esta de Evans & Sutherland y Mechanical Dynamics. Inc.)
(a)
(b)
FIGURA 1.12. Presentaciones realistas de diseos de ingeniera. (Cortesa de (a) Intergraph Corporation (b) Evans & Sutherland.)
FIGURA 1.13. Mediante software grfico se aplican electos de iluminacin de estudio y tcnicas de visualizacin realista de superficies, con el fin de crear anuncios de productos terminados. Esta imagen generada por computadora de un Chrysler Lser fue generada a partir de datos proporcionados por la Compaa Chrysler. (Cortesa de Eric Haines, Autodesk Inc.)
FIGURA 1.14. Un esquema de CAD para describir el control numrico del mecanizado de una pieza. La superficie de la pieza est en un tono de gris y las trayectorias de la herramienta en otro. (Cortesa de Los Alamos National Laboratory.)
=?"ft3
"II
II T*1F
II || II II I II
II II
>
fi jj FIGURA 1.15. Hsquema CAD de arquitectura para el diseo de un edificio. (Cortesa de Precision Visuals. Inc Boulder, Colorado.)
II r
n .
que tienen que tomar las mquinas sobre las superficies de un objeto durante su construccin. Las mquinas con control numrico preparan la fabricacin de acuerdo con estos diseos de fabricacin. I Los arquitectos usan mtodos de grficos interactivos para disear los planos de distribucin de pisos, como se muestra en la Figura 1.15, en los que se indica la posicin de las habitaciones, puertas, ventanas, escaleras, estanteras, encimeras y otras caractersticas del edificio. Trabajando a partir de la visualizacin en un monitor del plano de un edificio, un diseador elctrico puede definir el cableado, los enchufes elctricos y los sistemas de prevencin de incendios. Tambin con un paquete de planificacin de instalaciones se puede optimizar el espacio en una oficina o en una fbrica. Vistas realistas de diseos arquitectnicos, como el de la Figura 1.16 permiten tanto a los arquitectos como a sus clientes estudiar la apariencia de un edificio o de un conjunto de edificios, como un campus o un complejo industrial. Adems para visualizaciones realistas de exteriores de edificios, los paquetes de arquitectura CAD proporcionan utilidades qae permiten experimentar con planos interiores tridimensionales y de iluminacin (Figura 1.17). Pueden disearse muchos otros tipos de sistemas y productos usando tanto paquetes generales de CAD como desarrollos especiales de software de CAD. La Figura 1.18, por ejemplo, muestra un patrn de alfombra diseado con un sistema CAD.
FIGURA 1.16. Presentaciones realistas tridimensionales de diseos de edificios, (a) Una perspectiva a nivel de calle del proyecto de un centro de negocios. (Cortesia de Skidmore, Owings <v Merrill), (b) Visualizacin arquitectnica de un atrio creado para una animacin por computadora por Marialine Prieur, Lyon, Francia. (Cortesia de Thomson Digital Image. Ine)
FIGURA 1.17. Un pasillo de un hotel que proporciona la sensacin de movimiento mediante el posieionamiento de lmparas a lo largo de una trayectoria ondulada y crea la sensacin de entrada posicionando una torre de luz a la entrada de cada Uabiiacin.iCortesia de Skidmore. Owings & Merrill.)
FIGURA 1.18. Patrn de alfombra oriental creado con mtodos de diseo con grficos por computadora. {Cortesa de a Lexidata Corporation).
FIGURA 1.19. Prcticas con un tractor en un entorno de realidad virtual. Gulido los controles se mueven el operador ve la pala delantera, el cazo trasero y los alrededores a travs del equipo de la cabeza. {Cortesa de National Center jar Supercomputing Applications, Universidad de Illinois en Urbana-Champaign y Caterpillar. Inc.l
11
FIGURA 1.20. Una vista en el visiocasco del cazo trasero presentada al operador del tractor en un entorilo de realidad virtual. (Cortesa de National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign y Caterpillar, Inc.)
FIGURA 1.21. Vista del operador de la pala delantera compuesta de varias secciones para generar una vista Je gran angular en un monitor estndar. (Cortesa de National Center for Supercomputing Applications, Universidad de Illinois en UrbanuChampaign y Caterpillar, Inc.)
FIGURA 1.22. Vista del tractor en un monitor estndar (Cortesa de National Center for Supercomputing Applications. Universidad de Illinois en Urbana-Champaign y Caterpillar. Inc.) Con los sistemas de realidad virtual, tanto los diseadores como los dems pueden moverse alrededor e inleracluar con los objetos de diferentes maneras. Los diseos arquitectnicos pueden examinarse mediante un pasco simulado a travs de habitaciones o alrededor de los exteriores del edificio para poder apreciar mejor el efecto global de un diseo particular. Mediante un guante especial, podemos, incluso agarrar objetos en una escena y girarlos o moverlos de un sitio a otro.
FIGURA 1.23. Diagrama que usa un cdigo de colores con 16 millones de puntos de densidad de brillo relativo observado de la Nebulosa Whirlpool donde se revelan dos galaxias distintas. {Cortesa ce Los Alamos National Laboratory)
FIGURA 1.24. Representacin de funciones de curvas matemticas en varias combinaciones de colores (en escala de grises en la imagen). (Cortesa de Melvin L. Prueiit, Los Alamos National Laboratory.)
FIGURA 1.25. Para producir esta funcin tridimensional se utilizaron efectos de iluminacin y tcnicas de representacin de superficies. (Cortesa de Wolfram Research Inc.. el creador de Mathematica)
13
Existen muchas clases distintas de conjuntos de dalos, por lo que los esquemas de visuali/acin efectivos dependen de las caractersticas de los datos. Una coleccin de datos puede contener valores escalares, vectores, tensores de orden superior o cualquier combinacin de estos tipos de datos. Los conjuntos de datos pueden estar distribuidos sobre una regin bidimensional en el espacio, una regin tridimensional o un espacio de dimensin superior. La codificacin mediante colores es una manera de visualizar un conjunto de dalos. Otras tcnicas de visualizacin incluyen la representacin de perfiles, la representacin de superficies de valor constante u otras regiones del espacio y formas especialmente diseadas para la representacin de diferentes tipos de datos. Las tcnicas de visualizacin tambin se usan como ayuda para la comprensin de procesos complejos y funciones matemticas. Una representacin en color (en escala de grises en la figura) de una funcin matemtica se muestra en la Figura 1.24. En la Figura 1.25 se puede ver la representacin de una superficie. El objeto de la Figura 1.26 se gener mediante procedimientos (raciales usando cuaternios. En la Figura 1.27 se muestra una estructura topolgica. Los cientficos estn desarrollando mtodos para la v isualizacin de dalos de carcter genrico. La Figura 1.28 muestra una tcnica genrica para la representacin y el modelado de datos distribuidos sobre una superficie esfrica.
FIGURA 1.26. Un objeto de cuatro dimensiones proyectado en un espacio de tres dimensiones y representado en una pantalla de video de dos dimensiones, con cdigo de colores. El objelo se gener utilizando cuaternios y procedimientos cuadrticos de fractales, con un ociante sublra/ado para mostrar la complejidad del conjunto de Julia. (Cortesa de John C. Hart. Departamento de Ciencias de la Computacin, Universidad de Illinois, UrhanaChampaign.)
FIGURA 1.27. Cuatro vistas en tiempo real de una animacin interactiva que estudia las superficies mnimas (snails) en las tres esferas proyectadas en un espacio euclideo tridimensional. (Cortesia de George Francis, Departamento de Matemticas y del National Center far Snpercompitfing Applications, Universidad de Illinois. Urbana-Champaign. 1993.)
14
CAPTULO 1
FIGURA 1.28. Un mtodo para realizar representaciones grficas y modelar datos distribuidos sobre una superficie esfrica (Cortesa de Grieg Nelson, Departamento de Ciencias de la Computacin, Universidad del Estado de Arizona.)
FIGURA 1.29. Visualizacin de superficies de corriente que fluyen a travs de una lanzadera espacial. Proporcionado por Jeff llultquist y Fre Rable, NASA Ames (Cortesa de Sam Use/ton, Nasa Ames Research Center.)
FIGURA 1.30. Modelo numrico de las corrientes de aire dentro de una tormenta. (Cortesa de Mol Wilhelmsom, Departamento de Ciencias Atmosfricas y del National Center for Supercomputing Applications, Universidad de Illinois, Urbana-Champaign. ) Desde la Figura 1.29 hasta la 1.42 se muestran diversas aplicaciones para la visualizacin. Estas figuras muestran: corrientes de aire Huyendo sobre la superficie de una lanzadera espacial, modelado numrico de una tormenta, un despliegue de los efectos de la propagacin de fracturas en los metales, la representacin en cdigo de colores de la densidad de un tluido sobre un perfil aerodinmico, secciones cruzadas de un conjunto de datos, modelado de protenas, visualizacin interactiva de estructuras moleculares dentro de un entrono de realidad virtual, un modelo del suelo del ocano, una simulacin de un incendio en un pozo petrolfero en Kuwait, un estudio de la contaminacin del aire, un estudio del crecimiento del maiz, una reconstruccin de las ruinas del Can del Chaco en Arizona y un diagrama de las estadsticas de los accidentes de trfico.
15
FIGURA 1.31. Modelo numrico de la superficie de una tnrmenta.(Cor/?/a de Bob Wilhelmsom, Departamento de Ciencias Atmosfricas y del National Center for Supercomputing Applications, Universidad de Illinois. UrbanaChampaif>n.)
FIGURA 1.32. Visualizacin con cdigo de colores de la densidad de energa de fatiga en el estudio de la propagacin de una grieta en una plancha de metal. Modelado por Bob Haber. (Cortesia del National Center for Supercomputing Applications, Universidad de Illinois, Urbana-Champaign.)
FIGURA 1.33. Simulacin de la dinmica de un Huido, mostrando la representacin grfica con cdigo de colores de la densidad del fluido que se extiende sobre una malla de planos alrededor del ala de un avin, desarrollado por Lee-Han Quek, John Fickemeyer y JefFery Tan. (Cortesa de Information Technology Institute. Repblica de Singapur.)
16
CAPITULO 1
FIGURA 1.34. Software cortador de secciones, mostrando valores con cdigo de colores sobre las secciones transversales de un conjunto de datos. (Cortesia ae fass, Incj
FIGURA 1.35. Visualizacin de la estructura de una protena creada por Jay Siegel y Kim Baldridge, SDSC. {Cortesa de Siephanie Sides, Supercomputer Center de San Diego.)
FIGURA 1.36. Cientfico imeractuando con vistas cstcrascpicas de estructuras moleculares dentro de un enlomo de realidad virtual, llamado CAVE, caverna. (Cortesa d Wilfiam Sherman y de National Center for Supercomputing Applications, Universidad de Illinois, Urbana-Champaign.)
17
FIGURA 1.37. Imagen de un par esleroscpieo. que muestra la visuali/aein de suelo ocenico, obtenida do las imgenes de un satlite, creada por David Sundwcll y Chris Small. Institucin Scripps de la Oceanografa y Jim Mcleod. SDS( . (Cortesa tie Stephanie Sides, San Diego Supercomputer C enter)
FIGURA 1.38. Simulacin de los efectos de los incendios en los po/os petrolferas de Kuwait, desarrollada por Gary Cilat/meier, Chuck Hanson y Paul llinker. (Cortesa de Mike Ktgfk Advanced Compuling Laboratory en Los Alamos National Laboratory.)
18
FIGURA 1.39. Visualizacin de la contaminacin sobre !a superficie de la tierra diseada porTom Palmer, Cray Research Inc. /NCSC, Chris Landreth, NCSC, and Dave Bock, NCSC. El contaminante SO., se representa con color azul, la precipitacin de la lluvia acida es un color plano en el mapa de la superficie, y la concentracin de lluvia se representa como cilindros huecos. (Cortesa del Supereomputing Center/ MCNC de Candna del Norte.)
FIGURA 1.40. Un marco de la animacin que muestra el crecimiento de una mazorca de maz. (Cortesa de National Center for Supereomputing Applications, Universidad de Illinois, Urbana-Champaign.)
FIGURA 1.41. Visualizacin de la reconstruccin de las ruinas del Can del Chaco en Arizona. (Cortesa de Melvin L. Prueitt, Los Alamos National Laboratory. Datos proporcionados por Stephen H. Lekson.)
By mapping the class proportionr. onto the group bars, we can see the correlation between the pedestrain injury and other attributes!
I'.-*'
Q+otietirnl
OICUIOUOCH
ArtSlVSIS
J
V,W#r
ti 'i"
to
r.r
w,.
2T
I FIGURA 1.42. Prototipo para la visualizacin de tablas multidimensionales de datos, llamado WinViz y desarrollado por el equipo de visualizacin del Instituto de Tecnologas de la Informacin, Repblica de Singapur. Se usa aqu para hacer correlaciones de informacin estadstica de peatones implicados en accidentes de trfico. (Cortesa de Lee-Hean Quek. Oracle Corporation, Redwood Shores, California,)
tit
I i
Mi.
I
..... ,
i
a
-|
,| i I I I
h 1 lili iff m m 11
V '
i? n \ lj i ?
tez
FIGURA 1.43. Diagrama con cdigo de colores (escala de grises en la imagen) para explicar el funcionamiento de un reactor nuclear. (Cortesa de Los Alamos National Laboratory. )
20
CAPTULO 1
FIGURA 1.45. Simulador de lauque militar con sistema visual de imgenes. (Cortesa de Mediatech y GE Aerospace.) Escenas generadas para simuladores de aeronaves, barcos y naves espaciales se muestran en las Figuras 1.48 hasta la 1.50. El simulador de un automvil y sus imgenes asociadas se dan en la Figura 1.51. La parte (a) de esta figura muestra el interior del simulador y la pantalla de visualizacin visible a travs del parabrisas. Una escena tpica del trfico en una calle se muestra en la Figura 1.51(b). A pesar de que los simuladores de automviles
pueden ser usados como sistemas de entrenamiento, se utilizan comnmente para estudiar ei comportamiento de los conductores ante situaciones crticas. Las reacciones del conductor en diversas condiciones de trfi co pueden ser utilizadas como base para disear un vehculo maximizando la seguridad en el trfico.
FIGURA 1.47. El rea del instructor detrs de la cabina de un simulador pequeo de vuelo. El equipo permite al instructor monitori/ar las condiciones de vuelo y establecer los parmetros del avin y del entorno. (Cortesia de Frasca Internationa/.)
22
CAPITULO 1
FIGURA 1.49. Imgenes generadas para un simulador naval. (Cortesa de Evans & Sutherland.)
23
(a) (b) FIGURA 1.51. Interior del simulador de una automvil (a), una vista de una escena de calle (b) puede presentarse al conductor. (Cortesia de Evans & Sutherland.)
FIGURA 1.52. Dibujo animado generado con un programa de dibujo (paintbrush), representa de manera simblica cmo un artista trabaja en un monitor de vdeo. (Cortesa de Gould Inc. Imaging and Graphics Division y Aurora Imaging)
2 4 CAPTULO 1
(b) FIGURA 1.53. Demostraciones en eomic de un artista creando un dibujo con un sistema painthrush. En (a) el dibujo se hace en una tableta grfica mientras ellos mismos observan el desarrollo de la imagen en la pantalla de video. En (b) el artista y ellos mismos est sohreimpuestos en la lamosa pintura de Thomas Nast de San Nicols, la cual fue introducida en el sistema a travs de una cmara de video. (Cortesa de Gottld Inc.. Imaging A Graphics Divisin y Aurora Imaging). Un sistema de dibujo, con un sistema Wacom inalmbrico y pluma sensible a la presin, se emplearon para producir la pintura electrnica de la Figura 1 .54, que simula las pinceladas dadas por Van Gogh. La pluma transforma los cambios de presin en la mano a lneas de ancho variable, diferentes tamaos de pincel y gradaciones de color. La Figura 1 .55 muestra una acuarela generada con este tipo de pluma electrnica que permite al artista crear no slo acuarelas sino tambin, pastel, leos, simular efectos de secado, humedad e incluso huellas. La Figura 1.56 proporciona un ejemplo de mtodos de dibujo combinados con imgenes escanciadas. Los creadores de bellas artes utilizan diversas tcnicas para crear imgenes por computadora. Para crear dibujos como el que aparece en la Figura 1 .57. los artistas utilizan un combinacin de tcnicas de paquetes de modelado tridimensional, inapeo de texturas, programas de dibujo y software CAD. En la Figura 1 .58 tenemos una pintura generada con un trazador usando un software diseado a medida que puede crear arte automtico, sin la intervencin de ningn artista. La Figura 1 .59 muestra un ejemplo de arte matemtico. Este artista utiliza una combinacin de funciones matemticas y procedimientos fractales, el software Mathemalica, impresoras de inyeccin de tinta y otros sistemas para crear diversos objetos tridimensionales y formas bidimensionales. as como pares de imgenes estereoscpicas. En la Figura 1 .60 se muestra otro ejemplo de arte electrnico creado con la ayuda de rea-
25
FIGURA 1.55. Acuarela electrnica, pintada por John Derry de Time Arts, Inc. con pluma inalmbrica sensible a la presin y el software Lumena con pincel aguado. (Cortesa de Wacom Technology Corporation.)
FIGURA 1.56. Fl creador de esta pintura, titulada Avalancha Electrnica realiza una afirmacin sobre nuestra relacin con la tecnologa, utilizando una computadora personal con tableta grfica y el software Lumena para combinar la generacin de grficos para hojas, ptalos de flor y componentes electrnicos con imgenes escaneadas. {Cortesa de la Williams Galery. C; 1991 Trukenbrod, The Schooi ofthe Arf Institute of Chicago.)
FIGURA 1.57. De una serie llamada Fsferas de influencia, esia pintura electrnica titulada Whigma/aree fue creada con una combinacin de mtodos utilizando una tableta grfica, modelado tridimensional, mapeado de texturas y una serie de transformaciones geomtricas. {Cortesa de ta Williams Gallery. > 1992 Wynne Ragland, Jr.)
26
FIGURA 1.58. Produccin de arle electrnico con un trazador y software diseado especficamente para el artista para imitar su estilo. El trazador tiene mltiples plumas e instrumentos de pintura incluyendo pinceles chinos. (Cortesa de la Williams Gallery Romn Verostko. Minneapolis College of Art & Design.)
FIGURA 1.59. Hsta creacin de Andrew Hanson est basada en una visualizacin del ltimo teorema de Fermat, x" + /' = r" , n = 5. Departamento de Ciencias de la Computacin de la Universidad de Indiana. La imagen fue renderizada con Mathematiea y Software Wavefront. (Cortesa dla Williams Galleiy ) 1991 Stewart Dickinson.)
ciones matemticas. La propuesta artstica de este creador frecuentemente se disea en relacin con las variaciones de frecuencia y otros parmetros de una composicin musical para producir vdeo que integra patrones visuales y auditivos. Las arles grficas tambin utilizan estas tcnicas de pintura para generar logos y otros diseos, diseos de pginas combinando textos y grficos, anuncios de televisin y otras aplicaciones. En la Figura 1.61 se muestra una estacin de trabajo para disear pginas que combinan textos y grficos Como en muchas otras aplicaciones de los grficos por computadora, el arte comercial frecuentemente emplea tcnicas fotorrealistas para presentar imgenes de un diseo, producto o escena. La Figura 1.62 muestra el ejemplo del diseo de un logotipo tridimensional, la Figura 1.63 presenta tres imgenes generadas por computadora para el anuncio de un producto. Las animaciones generadas en una computadora se utilizan frecuentemente en la produccin de los anuncios de televisin. Estos anuncios son generados, cuadro a cuadro, y cada cuadro se visualiza y almacena como un archivo de imagen. En cada sucesivo cuadro, las posiciones de cada objeto son ligeramente desplazadas para simular los movimientos que tienen lugar en la animacin. Cuando todos los cuadros que participan en la secuencia de animacin se han renderizado, se transfieren a una pelcula o se almacenan en un bffer de video para su reproduccin. Las pelculas de animacin requieren 24 cuadros por cada segundo de la secuencia. Si la animacin se va reproducir en un monitor de vdeo, por lo menos se necesitan 30 cuadros por segundo. )
27
FIGURA 1.60. Usando funciones matemticas, procedimientos fractales, supercomputadoras, este compositor-artista experimenta con varios diseos para sintetizar formas y colores con composicin musical. {Cortesa de Brian Evans, Vanderhilt University.)
FIGURA 1.61. Fstacin de trabajo para composicin de pginas. (Cortesa de Visual Technology.)
FIGURA 1.62. Presentacin tridimensional de un logotipo. (Cortesa de Vertigo Technology, Inc.) (Un mtodo grfico muy empleado en muchos anuncios de televisin es el morfismo (morftng), donde un objeto se transforma (metamorfiza) en otro. F.ste mtodo se utiliza en anuncios publicitarios para transformar aceite en un motor de automvil, un automvil en un tigre, un charco de agua en un neumtico y la cara de una persona en la de otra. Un ejemplo de morfismo lo tenemos en la siguiente seccin. Figura 1.69.
1.7 ENTRETENIMIENTO
Las producciones de televisin, las pelculas de cine y los vdeos musicales usan de manera rutinaria los grficos por computadora. Algunas veces estas imgenes se combinan con actores reales y escenas filmadas, a veces, (otla la pelcula est generada mediante renden/acin por computadora y tcnicas de animacin. Muchas series de televisin utilizan mtodos para producir efectos especiales basados en los grficos por computadora, como en la figura 1.64, de la serie Deep Spuce N'i/w. Algunos programas de televisin utilizan tcnicas de animacin para combinar figuras de personas, animales, o personajes de dibujos animados, generados por computadora con actores reales, tambin se transforma la cara de un actor en otra forma. Muchos programas tambin utilizan los grficos por computadora para generar edificios, rasgos del terreno u otros fondos de escenas. La figura 1.65 muestra una vista muy realista generada por computadora del Dadu (hoy Pekn) en el siglo trece para una emisin japonesa de televisin. Los efectos especiales, las animaciones, personajes y escenas generadas por computadora estn ampliamente extendidas en las pelculas de hoy en da. La Figura 1.66 ilustra la escena preliminar generada por computadora tic la pelcula Star Trek la furia del Klan. Los mtodos de renderizado se aplican a los modelos
FIGURA 1.64. Fscena grafka de la serie de TV Deep Space Nine. (Cortesiu of Rhythm & Hues Studios.)
1.7 Entretenimiento
29
FIGURA 1.65. Imagen de una reconstruccin generada por computadora del Dadu (hoy Pekn) en el siglo trece para una emisin japonesa de televisin, de Taise ( orporation (Tokio, Japn) y renderi/ado con el softwaic Tl)l. (Cortesa de Thomson Digital muge. Inc.)
FIGURA 1.66. Grficos generados para la pelcula de Paramount Piclures Star Trek la furia del Khan. (Cortesa de Evans- and Sutherland.)
(a)
(b)
FIGURA 1.67. Escenas de pelcula generadas por computadora: (a) El sueo de Red, (Cortesia de Pixar) Copyright < Pixar I9X7. (b) Knickknack. (Cortesa de Pixar. Copyright & Pixar I98*>.) almbricos del planeta y de la nave espacial, para producir el aspecto final con el que aparecen los objetos en la pelcula. Para producir las escenas de las dos pelculas, ganadoras de premios, que se muestran en la Figura I.67 se utilizaron tcnicas avanzadas de modelado y renderizacin de superficies. Otras pelculas emplean modelado, renderizado y animacin para producir por completo personajes con aspecto humano. Para dar a los actores generados por computadora, tonos de piel humanos, rasgos realistas en las caras, e imperfecciones en la piel como, lunares, pecas o acn se emplean tcnicas fotorrealistas. La Figura 1.68 muestra una escena de la pelcula Final Fantasy: The Spirits Withhr en la que se emplean estas tcnicas fotorrealistas para simular de manera cercana la apariencia de un actor humano.
3 0 CAPTULO 1
FIGURA 1.68. Una escena de la pelcula <uFinal Fantasy; The Spirits Within mostrando tres de los personajes animados del reparto Dr. Aki Ross, Gray Edwards y Dr. Sid. {Cortesa of Square Pictures, Inc. > 2001 FFFP Reservados todos los derechos.)
(d)
(e)
FIGURA 1.69. Ejemplos de morfismo en el vdeo de David Byrne She is mad. Cortesa de David Byrne, Index Video, y Pacific Dala Images. Tambin se emplean mtodos de grficos por computadora para simular actores humanos. Utilizando archivos de los rasgos faciales de un actor y un programa de animacin se pueden generar secuencias de pelcula que contengan rplicas generadas por computadora de esa persona. En el hipottico caso de que el actor enferme o se accidente durante el rodaje, estos mtodos de simulacin se pueden utilizar para sustituirlo en las subsiguientes escenas. Los vdeos musicales utilizan los grficos por computadora de diversas formas. Se pueden combinar objetos grficos con accin real, o emplearse grficos y tcnicas de procesamiento de imgenes para transformar
31
una persona en un objeto o viceversa (morflsmoJyUn ejemplo de modismo lo tenemos en la secuencia de escenas de la Figura l .69 producidas para el vdeo de David Byrne. She is mad.
FIGURA 1.70. Una fotografa borrosa de una placa de matrcula de automvil se transforma en legible tras la aplicacin de tcnicas de procesamiento de imgenes. (Cortesa de Los Alamos National Labora/ory.)
3 2 CAPITULO 1
FIGURA 1.71. Cuadro de una animacin en la que se visualiza niveles de activacin cardiaca dentro de regiones de volmenes semitransparentes del corazn de un perro. Datos mdicos proporcionados por William Smith, Ed Simpson, and G. Allan Johnson. Duke University. Software de renderizacin de imgens proporcionado por Tom Palmer, Cray Research, Inc./NCSC. (Cortesia de Dave Bock, Supercomptithg Center/MCNC de Carolina del Norte.)
FIGURA 1.72. Imagen de un par estereoscpico mostrando los huesos de una mano humana, renderizado por [nmo Yoon, D. E. Thompson y W. N. Waggcnspack. Jr.. LSU, de un conjunto de datos obtenidos a partir de tomogralas CT por Rehabilitaron Research, GWLNIIDC. Estas imgenes muestran un posible camino para la reconstruccin quirrgica de un tendn. (Cortesia de IMRLAB, Meelumical Engineering, Universidad del Estado de Louisiana.)
Los escneres de medicina nuclear recopilan datos de la radiacin emitida por radionucleoides ingeridos y los datos son presentados como imgenes con cdigo de colores. El procesamiento de imgenes y los grficos por computadora son frecuentemente utilizados en aplicaciones mdicas para modelar y estudiar funciones fsicas, para disear extremidades artificiales y para planificar y practicar tcnicas quirrgicas. Esta ltima aplicacin es conocida como CAS (Computer Aid Surgery. ciruga asistida por computadora). Utilizando las tcnicas de procesamiento de imgenes se pueden obtener secciones transversales en dos dimensiones del cuerpo. Estas secciones del cuerpo se manipulan utilizando modelos grficos para simular procedimientos quirrgicos reales e intentar diferentes cortes?En las Figuras 1.71 y 1.72 se muestran ejemplos de estas aplicaciones mdicas.
Referencias 3 3
FIGURA 1.73. Inicrlaz grfica de usuario, mostrando mltiples ventanas, ments c iconos. {Cortesa de muge-ln (Orporation.) que representaba ventaja de los iconos es que necesitan menos espacio cu la pantalla que la correspondiente descripcin textual ypuede ser entendido de una manera ms rpida si se ha diseado adecuadamente. Una ventana de visuali/aein se puede convertir en o a partir de la representacin de un icono, los mens pueden contener listas tanto de descripciones textuales como de iconos. La Figura 1.73 ilustra la tpica inlerfaz grlca de usuario, con mltiples ventanas, mens e iconos. En este ejemplo los mens permiten la seleccin de opciones de procesamiento, valores de color y parmetros grficos. Los iconos representan opciones para pintar, dibujar, acercar, escribir cadenas de texto y otras operaciones relacionadas con la construccin de una pintura.
1.10 RESUMEN
Hemos hecho una prospeccin sobre muchas de las reas en las que se aplican los grficos por computadora, incluyendo la visuali/acin de datos, C'AD, realidad virtual, visualizacin cientfica, educacin, arte, entretenimiento, procesamiento de imgenes e interfaces grficas de usuario. Sin embargo, hay muchos otros campos que no hemos mencionado y con los que podramos llenar este libro con ejemplos de aplicaciones. En los captulos siguientes exploraremos los equipos y los mtodos utilizados en las aplicaciones de este captulo, asi como otras muchas aplicaciones.
REFERENCIAS
Aplicaciones de mtodos grficos en varias reas, incluyendo arte, ciencia, matemticas y tecnologa son tratados en Bouquet (1978), Yessios (1979), (iarner y Nelson (1983). Grotch (1983) ), Tufte (1983 y 1990). Wolfram (1984), Huitrie y Nahas (1985), Cilassner (1989), y llearn and Baker (1991). Los mtodos grficos para la \ isualizacin de la msica se dan en Mitroo. Hermn, y Badler (1979). Disertaciones sobre diseo y fabricacin asistidas por computadora (t'AD/C'AM) en varias industrias se presentan en Pao (1984). Las tcnicas grficas para simuladores de vuelo se presentan en Schaehter (1983). Fu y Rosenfeld (1984) expone sobre la simulacin de visin, y Weinberg (1971$) da cuenta de simulacin del transbordador espacial. Los iconos grficos y los conceptos simblicos se presentan en Lodding (1983) y en Loomis, et ul. (1983). Para obtener informacin adicional sobre aplicaciones mdicas vase Hawrylyshyn, Tasker y Organ (1977); Presin, Fagan, Huang y Pryor (1984); y Rhodes. et al. (1983).
CAPTULO
stema de representacin de grficos por computadora dotado de una pantalla panormica y curvada, y su panel de control. (Cortesa de Silicon Graphics, Ine y Tridimemion Systems. 2003 567. Todos los derechos reservados.)
Dispositivos de visualizacin de video Sistemas de barrido de lneas Estaciones de trabajo grficas y sistemas de \ isualizacin Dispositivos de entrada Dispositivos de copia impresa
La potencia y la utilidad de los grficos por computador estn ampliamente reconocidas, como lo demuestra la amplia gama de hardware grfico y sistemas software disponibles en la actualidad para aplicaciones en casi lodos los campos. Las capacidades grficas tanto para aplicaciones bidimensionales como tridimensionales son comunes en computadores de propsito general como calculadoras de mano. Con los computadores personales, podemos utilizar una gran variedad de dispositivos de entrada interactivos y paquetes de software grficos. Para aplicaciones que requieren una calidad superior, podemos escoger entre varios sistemas y tecnologas sofisticadas con hardware grfico para propsitos especiales. En este captulo, analizamos las caractersticas bsicas de los componentes hardware y de los paquetes de software para grficos.
FIGURA 2 .1. Una estacin de trabajo para grficos por computadora. (Cortesa de Silicon Graphics, Inc., WhySot Films, and 525 Post Production. < 2003 SGI. Todos los derechos reseados.)
Ctodo
nodo do enfoque \
L
Ti tomento de calentamiento Rejilla de Control
nodo de aceleracin
FIGURA 2.3. Funcionamiento de un can de electrones con nodo de aceleracin. posicin ulutl Udu por el b&Z dC ClcGtronCS. Puesto que la l u / emitida por el fsforo se desvanece muy rpidamente, se requiere algn mtodo para mantener la imagen en la pantalla. Una forma de hacer esto consiste en almacenar la informacin de la imagen en forma de distribucin de carga dentro del T R C . Esta distribucin de carga se puede utilizar para mantener el fsforo activado. Sin embargo, el mtodo ms utilizado en la actualidad para mantener el resplandor del fsforo es volver a dibujar la imagen redirigiendo rpidamente el haz de electrones de nuevo sobre los mismos puntos de la pantalla, liste tipo de pantalla se llama TRC de refresco. La frecuencia a la cual una imagen es redibujada en la pantalla se llama velocidad de refresco. Los componentes principales de un can de electrones en un TRC* son el ctodo de metal calentado v una rejilla de control (figura 2.3). II calor se suministra al ctodo dirigiendo una corriente a travs de una bobina de cable, llamada el filamento, dentro de la estructura cilindrica del ctodo. Esto causa el desprendimiento de los electrones de la superficie del ctodo caliente. En el vaco, dentro de la cubierta del T R C los electrones libres y cargados negativamente son acelerados hacia el recubrimiento de fsforo mediante una tensin altamente positiva. La tensin de aceleracin se puede generar con un revestimiento de metal cargado positivamente dentro de la cubierta del T R C cerca de la pantalla de fsforo, o se puede utilizar un nodo de aceleracin, como el de la Figura 2.3. para suministrar la tensin positiva. A veces el can de electrones se disea para que el nodo de aceleracin \ el sistema de enfoque se encuentren dentro en la m i s m a unidad. La intensidad del haz de electrones se controla mediante la tensin de la rejilla de control, la cual es un cilindro de metal encajado sobre el ctodo. Una tensin muy negativa aplicada a la rejilla de control interrumpir el haz, al repeler e impedir que los electrones pasen a travs de un pequeo agujero dispuesto al final de la estructura de la rejilla de control. Una tensin negativa menor en la rejilla de control simplemente reduce el nmero de electrones que pasan a travs de ella. Ya que la cantidad de luz emitida por el revestimiento de
fsforo depende del nmero de electrones que chocan con la pantalla, el brillo de tari punto de la pantalla se ajusta variando la tensin en la rejilla de control. Este brillo, o nivel de intensidad, se especifica para las posiciones individuales de la pantalla mediante instrucciones del software grfico, como se estudia en el Capitulo 3. El sistema de enfoque en un TRC obliga al haz de electrones a converger a una pequea superficie cuando incide sobre el fsforo. De otro modo, los electrones se repeleran entre si y el haz se expandira a medida que se aproximase a la pantalla. El enfoque se consigue ya sea con campos elctricos o campos magnticos. Mediante enfoque electrosttico, el haz de electrones se pasa a travs de un cilindro metlico cargado positivamente para que los electrones se encuentren en una posicin de equilibrio a lo largo del eje del cilindro. Esta disposicin forma una lente electrosttica, como se muestra en la Figura 2.3, y el haz de electrones se enfoca en el centro de la pantalla del mismo modo que una lente ptica enfoca un haz de luz a una distancia focal concreta. Se pueden conseguir efectos similares de enfoque de la lente con un campo magntico creado por una bobina montada alrededor del exterior de la cubierta del TRC. La lente magntica de enfoque habitualmente produce el punto en la pantalla de menor tamao. En sistemas de alta precisin se utiliza hardware adicional de enfoque para mantener el haz enfocado en todas las posiciones de la pantalla. La distancia que el haz de electrones debe viajar hasta los distintos puntos de la pantalla varia a causa de que el radio de curvatura en la mayora de los TRC es mayor que la distancia del sistema de enfoque al centro de la pantalla. Por tanto, el haz de electrones se enfocar de manera adecuada slo en el centro de la pantalla. Conforme el haz se mueve hacia los bordes extemos de la pantalla, las imgenes mostradas se vuelven borrosas. Para compensar este efecto, el sistema puede ajustar el enfoque de acuerdo con la posicin del haz en la pantalla. Del mismo modo que ocurre con el enfoque, se puede controlar la deflexin del haz de electrones ya sea con campos elctricos o con campos magnticos. Los tubos de rayos catdicos se construyen habitualmentc con bobinas de dellexin magntica, montadas sobre el exterior de la cubierta del TRC. como se ilustra en la Figura 2.2. Se emplean dos pares de bobinas para este propsito. Un par se monta en la parte superior y en la inferior del cuello del TRC. y el otro par se monta en los lados opuestos del cuello. El campo magntico producido por cada par de bobinas produce una fuerza transversal de dellexin que es perpendicular tanto a la direccin del campo magntico como a la direccin del trayecto del haz de electrones. La dellexin horizontal se logra con un par de bobinas, y la dellexin vertical con el otro par. Los niveles de dellexin apropiados se alcanzan al ajustar la corriente que atraviesa las bobinas. Cuando se emplea dellexin electrosttica, se montan dos pares de placas paralelas dentro de la carcasa del TRC. Un par de placas se monta horizontalmente para controlar la dellexin vertical, y el otro par se monta vertical mente para controlar la dellexin horizontal (Figura 2.4). Se producen puntos de luz en la pantalla al transferir la energa del haz del TRC al fsforo. Cuando los electrones del haz colisionan con el recubrimiento de fsforo, se detienen y su energa cintica es absorbida por el fsforo. Parte de la energa del haz se transforma por friccin en energa calorfica, y el resto provoca que los electrones de los tomos de fsforo se muevan hacia niveles cunticos de energa superiores. Poco
Sistema de enfoque
Pantalla fosforescente
Can de electrones
Ha/ de electrones
3 8 CAPITULO 2
7YV
FIGURA 2.5. Distribucin de intensidad de un punto de fsforo iluminado en una pantalla Je TRC, FIGURA 2.6. Dos puntos de fsforo iluminado se pueden distinguir cuando su separacin es mayor que el dimetro en que se reduce la intensidad un 60 por ciento del mximo. tiempo despus, los electrones de fsforo excitados comienzan a regresara su estado estable y despiden su exceso de energa en Forma de pequeos cuantos de energa luminosa llamados fotones. Lo que vemos en la pantalla es el efecto combinado de todas las emisiones de luz de los electrones: un punto resplandeciente que rpidamente se desvanece despus de que lodos los electrones excitados de fsforo hayan vuelto a su nivel estable de energa. La frecuencia (o color) de la luz emitida por el fsforo es proporcional a la diferencia de energa entre el estado cuntico excitado y el estado estable. Hay disponibles diferentes clases de fsforo para su uso en tubos de rayos catdicos. Adems del color, la diferencia mayor entre los fsforos es su persistencia: cunto tiempo permanecern emitiendo luz (es decir, cunto tiempo pasar antes de que lodos los electrones excitados hayan regresado a su estado estable?) despus de que el haz del TRC se ha retirado? La persistencia se define como el tiempo que transcurre para que la luz emitida desde la pantalla disminuya a una dcima parte de su intensidad original. Los fsforos de menor persistencia requieren velocidades de refresco mayores para mantener una imagen en la pantalla sin parpadeo. Un fsforo con baja persistencia puede ser til en animacin, mientras que los fsforos de alta persistencia son ms adecuados para mostrar imgenes estticas de alta complejidad. Aunque algunos fsforos poseen valores de persistencia mayores de 1 segundo, los monitores grficos de propsito general se suelen construir con una persistencia del orden de 10 a 60 microsegundos. La Figura 2 . 5 muestra la distribucin de intensidad de un punto en la par talla. La intensidad es mayor en el centro del punto y decrece segn una distribucin gaussiana hacia los bordes del punto. Esta distribucin se corresponde con la distribucin transversal de la densidad de electrones del haz del TRC. El mximo nmero de puntos que se pueden mostrar sin que se solapen en un TRC se conoce comojresolucin. Una definicin ms precisa de resolucin es el nmero de puntos por centmetro que se pueden dibujar horizontal y verticalmcntc. aunque a menudo slo se expresa como el nmero total de puntos en cada direccin. La intensidad del punto posee una distribucin gaussiana (figura 2 . 5 ) . de manera que dos puntos adyacentes parecern distintos siempre y cuando su separacin sea mayor que el dimetro en que cada punto tiene una intensidad aproximada del (>()% de la del centro del punto. Esta superposicin se presenta en la figura 2 . 6 . El tamao del punto tambin depende de la intensidad. Cuantos ms electrones por segundo se aceleren hacia el fsforo, mayor ser el dimetro del haz del TRC y el punto iluminado ser de mayor tamao. Adems, la energa de excitacin aumentada tiende a extenderse hacia los tomos de fsforo vecinos que no se encuentran en el camino del haz. lo cual aumenta ms an el dimetro del punto. Por tanto, la resolucin de un TRC depende del tipo de fsforo, la intensidad a mostrar y los sistemas de enfoque y deflexin. La resolucin habitual en los sistemas de alia calidad es I 2 K 0 por 1 0 2 4 . aunque hay disponibles resoluciones mayores en muchos sistemas. Los sistemas de alta resolucin se suelen denominar sistemas de alia definicin I I tamao I'MCO (t un monitor grfico, por otra parte, se expresa como la longitud de la diagonal de la pantalla y vara desde aproximadamente 12 hasta 27 pulgadas o ms. Un monitor TRC se puede conectar a mltiples computadoras, por lo que el nmero de puntos de pantalla que se pueden dibujar realmente tambin depende de las capacidades del sistema al cual est conectado.
2.1
39
lia. una lila cada vez y de arriba hacia abajo. Cada fila se denomina lnea de barrido. Ya que el haz de electrones se mueve a lo largo de una linea de barrido, la intensidad del haz se activa y se desactiva (o se establece a un nivel intermedio) para crear un patrn de puntos iluminados. La definicin de la imagen se almacena en un rea de la memoria llamada bfer de refresco o bfer de imagen, donde el trmino imagen hace referencia al rea de la pantalla en su totalidad. Este rea de memoria contiene el conjunto de niveles de color de los puntos de la pantalla. Estos niveles de color almacenados se obtienen del bfer de refresco y se utilizan para controlar ia intensidad del haz de electrones a medida que se mueve de un punto a otro por la pantalla. De este modo, la imagen se pinta en la pantalla de lnea a lnea de barrido, como se muestra en la Figura 2.7. Cada punto de pantalla que se puede iluminar por el haz de electrones se denomina pxel o pe (formas abreviadas de picture element; elemento de imagen). Dado que el bfer de refresco se empica"para almacenar el conjunto de niveles de color de la pantalla, a veces tambin se denomina bfer de imagen. Tambin, otras clases de informacin del pxel, adems del color, se almacenan en posiciones del bfer, por lo que todas estas zonas diferentes del bfer a veces se denominan de forma colectiva bfer de cuadro. La capacidad de un sistema de barrido de lneas para almacenar la informacin de color para cada punto de pantalla hace que ste sea muy adecuado para la representacin realista de escenas que contienen sutiles sombreados y patrones de color. Los sistemas de televisin y las impresoras son ejemplos de otros sistemas que utilizan mtodos de barrido de lineas. Los sistemas de barrido se caracterizan comnmente por su resolucin, la cual es el nmero de pxeles que se pueden dibujar. Otra propiedad de los monitores de vdeo es su relacin de aspecto, la cual se define a menudo como el nmero de columnas de pxeles dividido entre el nmero de lneas de barrido que se pueden mostrar en el sistema (a veces el trmino relacin de aspecto se utiliza para hacer referencia al nmero de lneas de barrido dividido entre el nmero de columnas de pxeles). La relacin de aspecto tambin se puede describir como el nmero de puntos horizontales frente al nmero de puntos verticales (o viceversa) necesario para generar lneas de igual longitud en ambas direcciones de la pantalla. Por tanto, una relacin de aspee-
4 0 CAPTULO 2
to de 4/3, por ejemplo, significa que una lnea horizontal pintada con cuatro puntos posee la misma longitud que una lnea vertical dibujada con tres puntos; la longitud de la lnea se mide con alguna unidad fsica tal como el centmetro. Similarmenlc. la relacin de aspecto de cualquier rectngulo (incluyendo el rea total de la pantalla) se puede definir para que sea la anchura del rectngulo dividida entre su altura. La gama de colores o de niveles de gris que se puede mostrar en un sistema de barrido depende tanto del tipo de fsforo utilizado en el TRC como del nmero de bits por pxel disponibles en el bfer de imagen. En sistemas de blanco y negro puros, cada punto de la pantalla o est activado o desactivado, por lo que slo se necesita un bit por pixel para ajustar la intensidad de los puntos de pantalla. Un bit de valor I, por ejemplo, indica que el haz de electrones se debe activar en aquella posicin, y un valor de 0 desactiva el haz. Bits adicionales permiten que la intensidad del haz de electrones pueda variar dentro de una gama de valores entre activado y desactivado. Los sistemas de alta calidad incluyen hasta 24 bits por pxel. por lo que pueden requerir varios mcgabytes de almacenamiento para el bfer de imagen, dependiendo de la resolucin del sistema. Por ejemplo, un sistema con 24 bits por pxel y una resolucin de pantalla de 1024 por 1024 requieren 3 megabytes de almacenamiento para el bfer de refresco. El nmero de bits por pxel de un bfer de imagen se denomina a veces profundidad del rea de bfer o el nmero de planos de bit. Tambin, el bfer de un bit por pxel se denomina comnmente bitmap y un bfer de imagen con mltiples bits por pxel es un pixmap. Pero los trminos bitmap y pixmap se emplean tambin para describir otras matrices rectangulares, en las cuales un bitmap es cualquier patrn de valores binarios y un pixmap es un patrn multicolor. Cada vez que se refresca la pantalla, tendemos a ver cada cuadro o imagen como una continuacin suave de los patrones del cuadro anterior, siempre y cuando la velocidad de refresco no sea demasiado baja. Por debajo de, aproximadamente. 24 cuadros por segundo, podemos habitualmcnte percibir una separacin entre las sucesivas imgenes de pantalla, y cada imagen parece parpadear. Las antiguas pelculas de cine mudo, por ejemplo, muestran este efecto, ya que gran parte de ellas fueron fotografiadas a una velocidad de 16 cuadros por segundo. Cuando se desarrollaron en los aos veinte los sistemas sonoros, la velocidad de las imgenes en movimiento se increment a 24 cuadros por segundo, lo cual elimin el parpadeo y los movimientos a tirones de los actores. Los primeros sistemas de barrido de lneas para computadora se disearon con una velocidad de refresco de. aproximadamente, 30 cuadros por segundo. Esto produce resultados suficientemente buenos, pero la calidad de la imagen se ha mejorado, en cierta manera, con las velocidades ms elevadas de refresco de los monitores de \ ideo, porque la tecnologa de representacin en un monitor es bsicamente diferente de la de una pelcula. Un proyector de pelculas puede mantener la representacin continua de un cuadro de la pelcula hasta que se muestra el siguiente cuadro. Pero en un monitor de vdeo, un punto de fsforo comienza a desvanecerse tan pronto como se ilumina. Por tanto, las pantallas de barrido de lneas habituales refrescan la pantalla a una velocidad de 60 a SO cuadros por segundo, aunque algunos sistemas actuales poseen velocidades de refresco de hasta 120 cuadros por segundo. Y algunos sistemas grficos han sido diseados con una velocidad de refresco variable. Por ejemplo, una velocidad de refresco ms elevada se podra utilizar en una aplicacin estereoscpica para que las dos vistas (una para cada posicin del ojo) de una escena se puedan mostrar alternativamente sin parpadeo. Pero, habitualmcnte, se utilizan otros mtodos tales como mltiples bferes de imagen para tales aplicaciones. A veces, la velocidades de refresco se indican en unidades de ciclos por segundo, o hercios (Hz), donde un ciclo se corresponde con un cuadro. Empleando estas unidades, indicaramos una velocidad de refresco de 60 cuadros por segundo como simplemente 60 Hz. Al final de cada linca de barrido, el haz de electrones vuelve al lado izquierdo de la pantalla para comenzar a mostrar la siguiente linca de barrido. La vuelta a la parte izquierda de la pantalla, despus de refrescar cada lnea de barrido, se denomina retrazado horizontal del haz de electrones. Y al final de cada cuadro (mostrado en a segundos), el haz de electrones vuelve a la esquina superior izquierda de la pantalla (retrazado vertical) para comenzar el siguiente cuadro. En algunos sistemas de barrido de lneas y televisiones, cada cuadro se muestra en dos pasos mediante un procedimiento de refresco entrelazado. En la primera pasada, el haz barre una de cada dos lneas de arriba hacia abajo. Despus del retrazado vertical, el haz barre el resto de las lincas (Figura 2.8). El entrelazado de las lneas de rastreo de este modo nos permite mostrar la pantalla completa en la mitad de tiempo que
41
FIGURA 2.8. Entrelazado de las lineas de barrido en un monitor de barrido. En primer lugar, se muestran los punios de las lineas de barrido con numeracin par (lnea continua); y despus se muestran todos los puntos de las lincas con numeracin impar (lnea discontinua).
transcurrira si barrisemos todas las lneas una vez, de arriba hacia abajo. Esta tcnica se utiliza fundamentalmente en el caso de velocidades de refresco bajas. Por ejemplo, en un monitor de 30 cuadros por segundo no entrelazado se observa algn parpadeo. Sin embargo, con entrelazado, cada una de las dos pasadas se puede realizar en segundos, lo cual hace que la velocidad de refresco se aproxime a 60 cuadros por segundo. Esta es una tcnica efectiva para evitar parpadeos, siempre que las lneas de barrido adyacentes contengan informacin de representacin similar.
(c)
(d)
FIGURA 2.9. Un sistema de barrido aleatorio dibuja las lineas componentes de un objeto especfico en cualquier orden que se especitlque.
4 2 CAPITULO 2
de barrido aleatorio en cualquier orden (Figura 2.9). Una plumilla de un trazador funciona de un modo similar y constituye un ejemplo de dispositivo de impresin de barrido aleatorio. La velocidad de refresco en un sistema de barrido aleatorio depende del nmero de lneas que deba mostrar. La definicin de la imagen se almacena como un conjunto de rdenes de dibujo de lneas en una zona de memoria denominada lista de visualizacin. archivo de refresco de visualizacin, archivo vectorial, o programa de visualizaicin. Para mostar una imagen concreta, el sistema recorre el conjunto de comandos del archivo de visualizacin. dibujando una linea componente cada vez. Despus de que todos los comandos de dibujo de lneas se han procesado, el sistema vuelve al comando de la primera lnea de la lista. Las pantallas de barrido aleatorio se disean para dibujar todas las lneas componentes de una imagen de 30 a 60 veces por segundo, con hasta 100.000 lneas cortas en la lista de visualizacin. Cuando se debe mostrar un pequeo conjunto de lineas, cada ciclo de refresco se retrasa para evitar frecuencias de refresco muy elevadas, las cuales podran quemar el fsforo. Los sistemas de barrido aleatorio se disearon para aplicaciones de dibujo de lneas, tales como diseos de arquitectura e ingeniera, y no son capaces de mostrar escenas con matices realistas. Ya que la definicin de una imagen se almacena como un conjunto de instrucciones de dibujo de lneas, en lugar de como un conjunto de niveles de intensidad para todos los puntos de pantalla, las pantallas vectoriales disponen generalmente de resoluciones ms altas que los sistemas de barrido. Del mismo modo, las pantallas vectoriales producen dibujos de lineas ms suaves, ya que el haz del TRC sigue la trayectoria de la linea, En cambio, un sistema de barrido produce lneas dentadas que se muestran como conjuntos de puntos discretos. Sin embargo, la mayor flexibilidad y las capacidades mejoradas de dibujo de lneas de los sistemas de barrido han provocado el abandono de la tecnologa vectorial.
2.1
43
Caones de eleeirones
FIGURA 2.10. I uncionamienlo de un T R C della-delia de mscara de sombra. Tres caones de eleeirones. alineados con los pairones triangulares de punios de color de la pantalla, se dirigen hacia cada tringulo de puntos mediante una mscara de sombra. activar slo su punto de color correspondiente cuando pasa a travs de la mscara de sombra. Otra configuracin para los tres caones de electrones es una disposicin en linea en la cual los tres caones de electron o . y los correspondientes punios de color rojo-verde-azul, se encuentran alineados a lo largo de una linea de barrido en lugar de en un patrn triangular. Esta disposicin en linea de los caones de electrones es ms fcil de mantener alineada y. habitualinente. se emplea en los TRC de color de alta resolucin. Mediante la variacin de los niveles de intensidad de los tres haces de electrones podemos obtener combinaciones de color en la mscara de sombra del TRC. Si se apagan dos de los Iros caones, obtenemos slo el color procedente del nico fsforo activado (rojo, verde, o azul). Al activar los tres puntos con iguales intensidades de los haces, vemos el color blanco. El color amarillo se produce con iguales intensidades en los puntos verde y rojo solamente, el color magenta se produce con iguales intensidades en los puntos azul y rojo, y e! color cian cuando los puntos azul > verde se activan del mismo modo. En un sistema de bajo coste, cada uno de los tres haces de electrones puede que nicamente permita estar activado o desactivado, de modo que slo puede mostrar ocho colores. Sistemas ms sofisticados pueden permitir que se establezcan niveles de intensidad intermedios en los haces de electrones, por lo que son capaces de mostrar varios millones de colores. Los sistemas grficos en color se pueden usar con varias clases de pantallas de TRC. Algunas computadoras de bajo coste para el hogar y videojuegos se han diseado para utilizarlos con una televisin en color y un modulador de Rl- (radio-frecuencia). El propsito del modulador RE es simular la seal procedente de una emisora de televisin. Esto quiere decir que la informacin del color y la intensidad de la imagen se debe combinar y superponer a la seal portadora de la frecuencia de multidifusin que la televisin requiere como entrada. Entonces la circuitera del telev isor toma esta seal procedente del modulador de RF. extrac la informacin de la imagen y la pinta en la pantalla. Como era de esperar, est manipulacin adicional de la informacin de la imagen por parte del modulador de RE y de la circuiteria de la televisin decrementa la calidad de las imgenes mostradas. Los monitores compuestos son adaptaciones de los televisores que permiten evitar la circuitera de multidifusin. Estos dispositivos de pantalla an requieren que la informacin de la imagen se combine, pero no se necesita seal portadora. Dado que la informacin de la imagen se combina en una seal compuesta y, a continuacin el monitor la separa, la calidad de la imagen resultante no es todava la mejor que se puede alcanzar.
4 4 CAPTULO
Los TRC de color para sistemas grficos se disean como los monitores RGB. Estos monitores emplean mtodos de mscara de sombra y toman el nivel de intensidad de cada can de electrones (rojo, verde, y azul) directamente de la computadora sin ningn procesamiento intermedio. Los sistemas grficos de barrido de alta calidad poseen 24 bits por pxel en el bfer de imagen, permitiendo 256 configuraciones de tensin para cada can de electrones y cerca de 17 millones de posibles colores para cada pxel. Un sistema en color RGB con 24 bits de almacenamiento por pfxel se le denomina, generalmente, sistema de color completo o sistema de
color real.
Pantallas planas
Aunque la mayor parte de los monitores grficos se construyen an con los TRC, estn surgiendo otras tecnologas que podrian pronto reemplazar a los monitores de TRC. El trmino pantalla plana se refiere a la clase de dispositivos de vdeo que han reducido su volumen, peso y requisitos de potencia comparados con un TRC. Una caracterstica significativa de las pantallas planas es que son ms linas que los TRC y podemos colgarlas en la pared o llevarlas en la mueca. Dado que es posible escribir en algunas pantallas planas, se encuentran tambin disponibles como bloc de notas de bolsillo. Algunos usos adicionales tic las pantallas planas son los siguientes: pequeos televisores, pantallas de calculadoras, pantallas de vdeojuegos de bolsillo, pantallas de computadoras porttiles, las pantallas disponibles en los brazos de los asientos de los aviones para ver pelculas, paneles para anuncios en los ascensores y pantallas grficas para aplicaciones que requieren monitores altamente portables. Podemos clasificar las pantallas planas en dos categoras: pantallas emisivas y pantallas no emisivas. Las pantallas emisivas (o emisores) son dispositivos que transforman la energa clctfica_enjuz. Como ejemplos de pantallas emisivas se pueden citar las pantallas de plasma, las pantallas eleetroluminisecntes de pelcula lina y los diodos que emiten luz. Tambin se han ideado TRC planos, en los que los haces de electrones se aceleran paralelos a la pantalla v se dellcctan )0 sobre la pantalla. Pero no se ha demostrado que los TRC planos sean tan exitosos como otros dispositivos emisivos. Las-pantallas no emisivas (o no emisores) emplean efectos pticos para transformar la luz del sol o la luz de alguna otra fuente en patrones grficos. El ejemplo mas importante de una pantalla plana no emisiva es el dispositivo de cristal liquido. Las pantallas de plasma, tambin llamadas pantallas de descarga de gas. se construyen rellenando el espacio entre dos placas de cristal con una mezcla de gases que habitualmcnte incluye el nen. Una serie de tiras de material conductor se colocan de forma vertical en un panel de cristal, y en el otro panel de cristal se sitan de forma horizontal (figura 2.11). Si se aplican tensiones de disparo a un par de interseccin de conductores verticales y horizontales se provoca que el gas en la interseccin de los dos conductores se descomponga en un plasma de electrones e iones que emiten luz. La definicin de la imagen se almacena en un bfer de refresco y las tensiones de disparo se aplican para refrescar los pxeles (en las intersecciones de los conductores) 60 veces por segundo. Se emplean mtodos de corriente alterna para proporcionar la aplicacin ms rpida de tensiones de disparo y. por tanto, generar pantallas ms brillantes. La separacin entre los pixeles se debe al campo elctrico de los conductores. La figura 2.12 muestra una pantalla de plasma de alta definicin. I na desventaja de las pantallas de plasma fue que eran estrictamente dispositivos monocromos, pero en la actualidad existen pantallas de plasma con capacidades multicolor. l a s pantallas eleetroluminisecntes de pelcula lina se construyen de forma similar a las pantallas de plasma. La diferencia consiste en que el espacio entre las placas de cristal se rellena con fsforo, tal como sulfato de zinc dopado con manganeso, en lugar de con gas (figura 2.13). Cuando se aplica una tensin suficientemente alta a un par de electrodos que se cruzan, el fsforo se transforma en conductor en el rea de la interseccin de los dos electrodos. La energa elctrica es absorbida por los tomos de manganeso, los cuales liberan entonces la energa como un punto luminoso similar al efecto del plasma luminiscente en la pantalla de plasma. Las pantallas eleetroluminisecntes requieren ms potencia que las pantallas de plasma, y en color son ms difciles de conseguir. La tercera clase de dispositivos emisivos es el diodo emisor de luz (LED). Los pxeles de la pantalla se crean mediante una matriz de diodos, y la resolucin de la imagen se almacena en el bfer de refresco. Como
l
2.1
45
en el caso del refresco de la linea de barrido de un TRC, la informacin se Ice del bfer de refresco y se transforma en niveles de tensin que se aplican a los diodos para producir patrones de lu/ en la pantalla. Las pantallas de cristal lquido (LCD) se utilizan habitualmente en sistemas pequeos, tales como computadoras porttiles y calculadoras (Figura 2.14). Estos sistemas no emisivos producen una imagen
Conductores
Placa de vidrio
Fsforo
Placa de vidrio
FIGURA 2.12. Una pantalla de plasma con una resolucin de 2048 por 204S y una diagonal de pantalla de I.5 m,
FIGURA 2.13.
tems. )
4 6
CAPTULO 2
Cllslal lquido
irunvpurcntc FIGURA 2.14. Una calculadora d e ****** P mano con una pantalla LCD. (Corl^lcdc los disposim os dc pantalla dc cristal lquido.
F I G U R A 1 1 e f e c t 0 dc l u / sc c m | c a cn cl d i s c o dc ,a m a
mediante el paso de luz polarizada desde las cercanas o desde una fuente de luz interna a travs de un material de cristal lquido que se puede alinear para bloquear o trasmitir la luz. El trmino crista/ liquido hace referencia al hecho dc que en estos compuestos las molculas estn dispuestas segn una estructura cristalina, a pesar de que Huyen como en un lquido. Las pantallas planas utilizan habilualmente compuestos de cristal liquido nemticos (con aspecto de hebras) y que tienden a mantener los largos ejes de molculas con forma de cuerda alineados. Una pantalla plana se puede construir con un cristal lquido nemtico. como se demuestra cl la Figura 2.15. Dos placas de cristal, cada una de las cuales contiene un polarizador de luz que est alineado en ngulo recto con la otra placa, encierran el material de cristal lquido. En una placa de cristal se han dispuesto conductores transparentes en tilas horizontales, y en la otra placa se han dispuesto dichos conductores en columnas verticales. Cada interseccin de dos conductores determina un pixel. Normalmente, las molculas se alinean como se muestra en el estado encendido de la Figura 2.15. La luz polarizada que pasa a travs de material se retuerce para que pase a travs del polarizador opuesto. La luz entonces se refleja de vuelta hacia el visor. Para apagar el pixel, aplicamos una tensin a los dos conductores que se intersectan, para alinear las molculas para que la luz no se retuerza. Esta clase de dispositivos de pantalla plana se denominan LCD dc matriz pasiva. La definicin de la imagen se almacena en un bfer de refresco, y la pantalla se refresca a una velocidad de 60 cuadros por segundo, como en los dispositivos emisivos. La retroiluminacin tambin se aplica habitualmente en los dispositivos electrnicos de estado slido, para que el sistema no dependa completamente de las fuentes del luz extemas. Los colores se pueden mostrar mediante el empleo de diferentes materiales o tintes y mediante la colocacin de una triada
2.1
47
de pxclcs de color en cada posicin de la pantalla. Otro mtodo para construir los LCD consiste en coloca un transistor en cada pxel. empleando tecnologa de transistores de pelcula Una. Los transistores se empican para ajustar la tensin de los pxclcs y para prevenir que la carga se fugue de manera gradual de las celdas de cristal lquido, listos dispositivos se denominan pantallas de matriz activa.
Espejo flexible
vibratorio
4 8 CAPTULO 2
FIGURA 2.17. E) SpaccCiraph. sistema grfico inleractivo que muesira objetos en tres dimensiones empleando un espejo
flexible y vibrante. {Cortesa ele Genisco Computers Corporation.)
FIGURA 2.18. Visionado simulado de una proyeccin estereoscpica. (Cortesa ele StereoGrapies Corporation.) na generada por computadora para proyeccin estereoscpica. Para incrementar la comodidad en la visuali/acin, se han eliminado las zonas de los bordes derecho e izquierdo de una escena que son visibles slo por un ojo. Una forma de producir un efecto estereoscpico en sistemas de barrido consiste en mostrar cada una de las dos vistas en ciclos altemos de refresco. La pantalla se ve a travs de unas gafas, con cada lente diseada
para actuar com) un obturador rpido, el cual est sincronizado para impedir ta visin de una de las imgenes. La Figura 2.20 muestra un par de galas estereoscpicas construidas con obturadores de cristal lquido y un emisor de infrarrojos que sincroniza las gafas con las vistas de la pantalla. La visualizacin estereoscpica tambin forma parte de los sistemas de realidad virtual, en los que los usuarios pueden introducirse en una escena e interactuar con el entorno. Un casco (Figura 2.21) que contiene
Virtual Research.)
50
CAPTULO 2
FIGURA 2.22. Un bilogo molecular analizando estructuras moleculares dentro de un sistema de realidad virtual llamado Trimension ReaCTor. Los guantes para pellizcar en el falso espacio) habilitan al cientfico para agarrar y redistribuir los objetos virtuales en una escena
proyectada. (Cortesa de Silicon Graphics, Inc. and Trimension Systems ReaCTor > 2003 SGI. Todos los derechos reservados.)
FIGURA 2.23. Un sistema de seguimiento por ultrasonidos empleado en gafas estereoscpicas para registrar los cambios en la posicin de la cabe/a del observador.
(Cortesa de StereoGraphics Corporation.)
un sistema ptico para generar las vistas estereoscpicas se puede utilizar en conjuncin con dispositivos de entrada interactivos para localizar y manipular los objetos en la escena. Un sistema de sensores dispuesto en el casco registra la posicin del observador, para que se puedan ver las partes frontal y trasera de los objetos como si el observador caminara alrededor e interactuase con la pantalla. Otro mtodo para crear entornos de realidad v irtual consiste en utilizar proyectores para generar una escena dentro de una distribucin de paredes, como en la Figura 2.22. donde el observador interacta con la pantalla empleando unas gafas estereoscpicas y unos guantes de dalos (Seccin 2.4). Se pueden organizar entornos de realidad virtual interactivos y de bajo coste empleando un monitor grfico, gafas estereoscpicas y un dispositivo de seguimiento montado en la cabeza. La Figura 2.23 muestra un dispositivo de seguimiento por ultrasonidos con seis grados de libertad. 1:1 dispositivo de seguimiento est situado encima del monitor de video y se emplea para registrar los movimientos de la cabeza, con el fin de que la posicin del observador de la escena se cambie segn los movimientos de la cabeza.
51
CPU
Dispositivos de E/S
t t
Monitor
FIGURA 2.24. Arquitectura de un sistema grfico simple de barrido. imagen se puede colocar en cualquier parte del sistema de memoria, y el controlado? de video accede al biilcr de imagen para refrescar la pantalla. Adems del controlador de vdeo, los sistemas de barrido mas sofisticados emplean otros procesadores tales como procesadores y aceleradores para implemenlar diversas operaciones grficas.
Controlador de vdeo
La Figura 2.25 muestra la organizacin utilizada habitualmcnte en los sistemas de barrido. Una zona fija del sistema de memoria se reserva para el bfer de imagen y se permite que el controlador de vdeo acceda a directamente a la memoria del bfer de imagen. Las posiciones del bfer de imagen y sus correspondientes posiciones de pantalla se referencian en coordenadas cartesianas, En un programa de aplicacin, utilizamos los comandos de un paquete de software grfico, para establecer las coordenadas de posicin de los objetos mostrados, relativas al origen del sistema de ejes cartesianos de referencia. A menudo, el origen de coordenadas se fija en la esquina inferior izquierda de la pantalla mediante los comandos del software, aunque podemos situar el origen en cualquier posicin para una aplicacin concreta. En la Figura 2.26 se muestra un sistema de coordenadas cartesianas de referencia con su origen en la esquina inferior izquierda de la pantalla. La superficie de la pantalla se representa como el primer cuadrante de un sistema de dos dimensiones, con los valores positivos del eje x que es creciente de izquierda a derecha y con los valores positivos del eje y creciendo de abajo hacia arriba. A las posiciones de los pxeles se les asignan valores de x que varan desde 0 a v a lo largo de la pantalla, de izquierda a derecha, y valores enteros de y que varan desde 0 hasta >' , de abajo hacia arriba. Sin embargo, el hardware realiza el refresco de la pantalla, as como algunos sistemas de software, utilizando como referencia para las posiciones de los pxeles la esquina superior izquierda de la pantalla.
m max
CPU
M C I I I O I ia
del sistema
Bfer de imagen
1 I
Controlador de vdeo
1 1
Disposilivos de E/S
FIGURA 2.25. Arquitectura de un sistema de harrido con una porcin lija del sistema de memoria reservada para el bfer de iniaaen.
Registro
x
i i
!
Registro
Registro de pixeles
Intensidad
t
Bfer de imagen J FIGURA 2.26. Ejes cartesianos de referencia con origen en la esquina inferior izquierda de un monitor de video.
En la Figura 2.27. se representan mediante un diagrama las funciones bsicas de refresco de un controlador de vdeo. Se utilizan dos registros para almacenar los valores de las coordenadas de los pixeles de la pantalla. Inicialmente. se establece el valor del registro x en 0 y el registro y con el valor de la linea superior de barrido. Se obtiene el contenido del bfer de imagen en esta posicin de pixel y se utiliza para establecer la intensidad del haz del TRC. Entonces el registro v se incrementa en una unidad, y el proceso se repite para el siguiente pxel en la lnea superior de barrido. Este procedimiento se repite para cada pixel a lo largo de la lnea superior de barrido. Despus de que se ha procesado el ltimo pxel de las linca superior de barrido, se establece el valor del registro X en 0 y el registro y con el valer de la siguiente lnea de barrido, situada debajo de la lnea superior de barrido de la pantalla. Entonces se procesan los pixeles a lo largo de esta lnea de barrido y el procedimiento se repite para cada sucesiva lnea de barrido. Despus de procesar todos los pixeles a lo largo de la lnea inferior de barrido, el controlador de video restablece los registros con la primera posicin de pxel de la lnea superior de barrido y el proceso de refresco comienza de nuevo. Ya que la pantalla se debe refrescar a una velocidad de al menos 60 cuadros por segundo, puede que el procedimiento mostrado en la Figura 2.27 no pueda ser realizado por los chips de RAM habituales, si su tiempo de ciclo es demasiado lento. Para acelerar el procesamiento de los pixeles, los conlroladores de vdeo pueden obtener mltiples valores de pxel del bfer de refresco en cada pasada. Eas mltiples intensidades de los pixeles se almacenan en registros separados y se utilizan para controlar la intensidad del haz del TRC para un grupo de pixeles adyacentes. Cuando se ha procesado este grupo de pixeles. se obtiene del bfer de imagen el siguiente bloque de valores de pxel. Un controlador de vdeo se puede disear para realizar otras funciones. El controlador de vdeo puede obtener los valores de los pixeles desde diferentes zonas de memoria en diferentes ciclos de refresco para varias aplicaciones. En algunos sistemas, por ejemplo, hay disponibles mltiples bferes de imagen para que un bfer se pueda utilizar para refresco y mientras los valores de los pixeles se estn cargando en los otros bferes. Entonces el bfer de refresco actual puede intercambiar su funcin con otro de los bferes. Esto proporciona un mecanismo rpido para la generacin de animaciones en tiempo real, por ejemplo, ya que se pue-
2.2
Sistemas
de barrido de lincas
53
den cargar sucesivamente diferentes vistas del movimiento de los objetos en un bfer sin necesidad de interrumpir el ciclo de refresco. Otra tarea de los consoladores de vdeo consiste en la transformacin de bloques de pceles, para que las zonas de pantalla se puedan ampliar, reducir, o mover de una posicin a otra durante los ciclos de refresco. Adems, el controlador de vdeo a menudo contiene una tabla de bsqueda, de modo que los valores de los pxeles en el bfer de imagen se utilizan para acceder a la tabla de bsqueda en lugar de para controlar la intensidad del haz del TRC directamente. Esto proporciona un rpido mecanismo para cambiar los valores de intensidad de la pantalla. Las tablas de bsqueda se estudian con ms detalle en el Captulo 4. Finalmente, algunos sistemas se disean para permitir al controlador de vdeo mezclar la imagen del bfer de imagen con una imagen procedente de una cmara de televisin o de otro dispositivo de entrada.
Bfer de imagen
J
\
Controlador de vdeo
Monitor
CPU
Procesador de pantalla
Dispositivos de F7S
54
FIGURA 2.29. Un carcter indefinido como una rejilla rectangular de las posiciones de sus pixeles.
Los procesadores de pantalla tambin se disean para realizar otras funciones adicionales. Dentro de estas funciones se incluye la generacin de vanos estilos de linea (discontinua, punteada o continua), mostrar reas de color y aplicar transformaciones a los objetos de una escena. Tambin, los procesadores de pantalla se disean habitualmente para actuar como interfaz con dispositivos de entrada interactivos, tales como un ratn. Con el propsito de reducir los requisitos de memoria de los sistemas de barrido, se han ideado mtodos para organizar el bfer de imagen como una lista enlazada y codificar la informacin del color. Un esquema de organizacin consiste en almacenar cada linea de barrido como un conjunto de pares de nmeros. El primer nmero de cada par puede ser una referencia al valor del color y el segundo nmero puede especificar el nmero de pixeles adyacentes en la lnea de barrido que se deben mostrar en ese color. Esta tcnica, llamada codificacin de longitud de recorrido, puede proporcionar un considerable ahorro de espacio de almacenamiento si la imagen est constituida principalmente por largos recorridos de un nico color cada uno. Se puede seguir un planteamiento similar cuando los colores de los pixeles cambian de forma lineal. Otro planteamiento consiste en codificar el barrido como un conjunto de zonas rectangulares (codificacin de celdas). Las desventajas de la codificacin de recorridos son que los cambios de color son difciles de registrar y los requisitos de almacenamiento aumentan a medida que las longitudes de los recorridos decrecen. Adems, es difcil para el controlador de pantalla procesar el barrido cuando estn involucrados muchos recorridos cortos. Por otra parte, el tamao de bfer de imagen ya no es importante, puesto que el coste de la memoria se ha reducido considerablemente. No obstante, los mtodos de codificacin pueden ser tiles en el almacenamiento digital y en la transmisin de la informacin de la imagen.
2.3 Estaciones de trabajo grficas y sistemas de visualization 55 Los sistemas grficos de alta definicin, con resoluciones de hasta 2560 por 2048, se utiL/an habitualmentc para la generacin de imgenes mdicas, ei control de trfico areo, la simulacin y el diseo CAD. En la Figura 2.32 se muestra una pantalla plana de 2048 por 2048. Muchas estaciones de trabajo grficas tambin incluyen amplias pantallas de visualizacin. a menudo con caractersticas especializadas. La Figura 2.33 muestra un sistema de pantalla amplia para visualizacin estereoscpica, y la Figura 2.34 es un sistema de pantalla panormica multicanal. Las pantallas multipanel se utilizan en una gran variedad de aplicaciones que no requieren arcas de visualizacin del tamao de una pared. Estos sistemas se disean para presentar grficos en reuniones, conferencias, convenciones, demostraciones comerciales, almacenes al detalle, museos, tambin las hay en terminales de pasajeros. Una pantalla multipanel se puede utilizar para mostrar una gran vista de una nica escena o varias imgenes individuales. Cada panel del sistema muestra una porcin de la imagen total, como se muestra en la Figura 2.35. Las grandes pantallas grficas tambin se pueden encontrar en forma de pantallas de
FIGURA 2.31. Una estacin de trabajo de un artista, constituida por un monitor, un teclado, una tableta grfica con cursor de mano, y una mesa ligera, adems de dispositivos para el almacenamiento de datos y telecomunicaciones. (Cortesia de D1COMED Corporation.)
FIGURA 2.32. Un monitor grfico de alta resolucin (2048 por 2048). (Cortesia de BarcoView.)
FIGURA 2.33. El SGI Kcality Cenler 200D, constituido por un ImmersaDesk R2 que muestra en una gran pantalla estereoscpica una vista de los contornos de presin de un torrente sanguneo vascular simulado y superpuesto sobre un eonjunto de datos anatmicos y dibujados con volumen. (Cortesa de Silicon Graphics. Inc. y el catedrtico Charles Taylor de la Universidad de Stanford O 2003 SGL Todos los derechos reseados.)
56
CAPTULO 2
FIGURA 2.34. Una vista en pantalla panormica de un sistema molecular mostrado en un SGI Reality Center 3300W de
tres canales. {Cortesa de Silicon Graphics. Inc. y Molecular Simulations. 2003 SGI. Todos los derechos reservados.)
FIGURA 2.35. Un sistema de pantalla mullipanel llamado Super Wall (supermuro). {Cortesa de RGB Spectrum.)
FIGURA 2.36. Un estudio de seguridad de un estado mostrado en un sistema de gran pantalla de visualizacin curvada.
(Cortesa de Silicon Graphics, Inc. O 2003. Todos los derechos reservados.)
visualizacin curvadas, tales como el sistema de la Figura 2.36. Un sistema de pantalla curvada grande puede ser til para la visualizacin por un grupo de personas que estudian una aplicacin grfica concreta, en las Figuras 2.37 y 2.38 se muestran ejemplos de tales pantallas. Un centro de control, constituido por una batera de monitores estndar, permite a un operador visualizar partes en la pantalla grande y controlar el audio, el vdeo, la iluminacin y los sistemas de proyeccin mediante el empleo de un men de pantalla tctil. Los sistemas con proyectores proporcionan una pantalla multicanal y sin junturas que incluye la fusin de los bor-
des. la correccin de la distorsin y el balance del color. Un sistema de sonido envolvente se utiliza para proporcionar el entorno de audio. La Figura 2.39 muestra un sistema de visualizacin pandado de 360 del simulador de la torre de control de la NASA, el cual se emplea para el entrenamiento y para probar modos de resolver problemas de trfico areo y de rodadura en los aeropuertos.
FIGURA 2.37. Un sistema grfico de pantalla curvada que muestra un paseo interactivo por una planta de gas natural. (Cortesa de Silicon Graphics, Inc., Trimension Systems, y el CadCentre. Cortaillod, Suiza. 2003 SG/. Todos os derechos reservados.)
FIGURA 2.38. Una visualizacin geofsica presentada en una pantalla semicircular de 25 pies . que proporciona un campo de visin de 160 en horizontal y 40 en vertical. (Cortesa de Silicon Graphics, Inc., Landmark Graphics Corporation, y Trimension Systems/0 2003 SGI. Todos los derechos reservados.)
FIGURA 2.39. La pantalla de visualizacin de 360 del simulador de la torre de control del aeropuerto de la NASA, llamado el FutureFlight Central Facility. (Cortesa de Silicon Graphics. Inc. y NASAj 2003 SGI. Todos tos derechos reservados. )
2.4
Dispositivos de entrado
59
FIGURA 2.40. Teclado diseado ergonmicamente y dotado de reposamuecas separable. Li inclinacin de cada parte del teclado se puede ajustar de forma separada. AI lado del teclado se muestra un ratn de un nico boln, que dispone de un cable para conectarlo a la computadora. {Cortesia de Apple Computer, Inc.)
(a)
(b)
FIGURA2.41. Una caja de botones (a) y un conjunto de ruedas de seleccin (b). (Cortesa de Vector General.)
Ratones
La Figura 2.40 presenta el tpico diseo de un ratn de un solo botn, el cual es un pequeo dispositivo de mano, que se mueve habitualmente sobre una superficie plana para posicionar el cursor de la pantalla. Para registrar la cantidad y la direccin del movimiento se utilizan ruedas o rodamientos en la parte inferior del ratn. Otro mtodo para detectar el movimiento del ratn es la utilizacin de un sensor ptico. En algunos sistemas pticos, el ratn se mueve sobre una alfombrilla especial que contiene una retcula de lneas verticales y horizontales. El sensor ptico delecta los movimientos sobre las lneas de la retcula. Otros ratones pticos pueden funcionar sobre cualquier superficie. Y algunos son inalmbricos y se comunican con el procesador de la computadora empleando tecnologa de radio digital. Dado que un ratn se puede pulsar y liberar en otra posicin sin cambiar el movimiento del cursor, se utiliza para realizar cambios relativos en la posicin del cursor en la pantalla. En la parte superior del ratn se
60
dispone de uno, dos, tres o eualro botones para sealar la ejecucin de funciones, tales como registrar la posicin del cursor o invocar una funcin. La mayora de los sistemas grficos de propsito general incluyen en la actualidad un ratn y un teclado como dispositivos de entrada principal. Se pueden incluir caractersticas adicionales en el diseo bsico de un ratn para incrementar el nmero de parmetros de entrada disponibles. El ratn Z de la Figura 2.42 dispone de tres botones, una rueda de pulgar en su lateral, un trackball en su parle superior y una bola de ratn estndar por debajo. Este diseo proporciona seis grados de libertad para seleccionar posiciones en el espacio, rotaciones y otros parmetros. Con el ratn Z, podemos seleccionar un objeto mostrado en un monitor de vdeo, rotarlo y moverlo en cualquier direccin. Tambin podramos utilizar el ratn Z para modificar la posicin de visualizacin y la orientacin en una escena tridimensional. Entre las aplicaciones del ratn Z se incluyen la realidad virtual, los sistemas CAD y la animacin.
Trackballs y spaceballs
Un trackball es un dispositivo de bola que se puede girar con los dedos o la palma de la mano para producir el movimiento del cursor de pantalla. Unos potencimetros, conectados a la bola, miden lo que hay que girar y en qu direccin. Los teclados de las computadoras porttiles estn a menudo equipados con un trackball para eliminar el espacio adicional que requiere un ratn. Un trackball se puede montar tambin en otros dispositivos, tales como el ratn Z mostrado en la Figura 2.42, o se puede obtener como un accesorio independiente que contiene dos o tres botones de control. El spaceball se puede considerar como una ampliacin del trackhall de dos dimensiones, que proporciona seis grados de libertad. A diferencia del trackhall, no se mueve realmente. Unas galgas extensiomtricas
FIGURA 2.42. El ratn Z dispone de tres botones, una bola de ratn por debajo, una rueda de pulgar en el lateral y un trackball en su parte superior. [Cortesia de Multipoint Technolog}' Corporation. )
FIGURA 2.43. Un joystick mvil. (Cortesia de CalComp Group, Sanders Associates. Inc.)
2.4
Dispositivos de entrado
61
niiilcn la cantidad de presin aplicada al spuceball para proporcionar los dalos de entrada para definir el posicionamiento espacial y la orientacin a medida que se empuja y tira de la hola en varias direcciones. Los speh ceballs se utilizan para el posicionamiento tridimensional y en las operaciones de seleccin en sistemas de realidad virtual, modelado, animacin. ( A l ) y otras aplicaciones.
Joysticks
Vn joystick o palanca de mando es otro dispositivo de posicionamiento. el cual consiste en una palanca vertical y pequea (llamada stick) montada sobre una base. El joystick se usa para dirigir el cursor por la pantalla. La mayora de \as joysticks, tales como el mostrado en la Figura 2 . 4 3 , seleccionan posiciones en la pantalla con movimientos verdaderos de la palanca; y otros responden a la presin sobre la palanca. Algunos se montan sobre un teclado y otros se disean como dispositivos independientes. La distancia que se mueve la palanca en cualquier direccin respecto de su posicin de equilibrio se corresponde con el movimiento relativo del cursor de la pantalla en dicha direccin. Unos potencimetros montados en la base de la palanca miden la cantidad de movimiento, y unos muelles devuelven la palanca a su posicin en central cuando sta se libera. Estos dispositivos disponen de uno o ms botones que se pueden programar para que funcionen como interruptores de cuitada para invocar acciones que se deben ejecutar una vez que se ha seleccionado una posicin en la pantalla. En otros tipos de joysticks mviles, la palanca se utiliza para activar interruptores que provocan el movimiento del cursor de la pantalla a una velocidad constante en la direccin seleccionada. A veces, se dispone de ocho interruptores, dispuestos formando un crculo, para que la palanca pueda seleccionar una cualquiera de las ocho direcciones para el movimiento del cursor. Las palancas de mando sensibles a la presin, tambin llamados joystick isomtricos, disponen de una palanca que no se puede mover. En estos dispositivos se mide un empujn o un lirn de la palanca mediante el empleo de galgas extensiomtricas y se convierte en movimiento del cursor de la pantalla y en la direccin en que se aplica la presin.
Guantes de datos
La Figura 2 .44 muestra un guante de datos que se puede utilizar para agarrar un objeto virtual. El guante dispone de una serie de sensores que delecta los movimientos de la mano y de los dedos. Para proporcionar informacin acerca de la posicin y de la orientacin de la mano se utiliza un acoplamiento electromagntico entre antenas de transmisin y antenas de recepcin. Cada una de las antenas de transmisin y recepcin se puede considerar constituida por un conjunto de tres bobinas mutuamente perpendiculares, que forman un sistema de referencia cartesiano tridimensional. Los datos de entrada procedentes del guante se utilizan para posicionar o manipular objetos en una escena virtual. La proyeccin bidimensional de la escena se puede visualizar en un monitor de vdeo, o su proyeccin tridimensional se puede visualizar con un casco.
FIGURA 2 . 4 4 . Una escena de realidad virtual mostrada en un monitor de video bidimensional, con entrada de datos procedentes de un guante de
datos y un spacehali. (Cortesia de The Computer Graphics Center. Darmstadt. Alemania.)
62
CAPITULO 2
FIGURA 2.45. La tableta de escritorio SummaSketch III con diecisis botones y cursor manual. {Cortesa
deSnmmagraphics Corporation.)
FIGURA 2.46. La tableta Microgrid III con diecisis botones y cursor manual, diseada para digitali/ar
grandes dibujos. {Cortesa de Summagraphics Corporation. )
Digitalizadores
l n digitalizador es un dispositivo que se utiliza habitualmente para dibujar, pintar o seleccionar posiciones de forma interactiva. Estos dispositivos se pueden disear para introducir coordenadas de espacios bidimensionales o tridimensionales. En aplicaciones de ingeniera o de arquitectura, un digitalizador se utiliza a menudo para escanear un dibujo o un objeto e introducir un conjunto discreto de coordenadas. Las posiciones introducidas se unen entonces con segmentos para generar una aproximacin de una c u n a o una superficie. La tableta grfica (tambin denominada tableta de datos) es un tipo de digitalizador, que se utiliza para introducir coordenadas bidimensionales mediante la activacin de un cursor manual o una pluma en posiciones concretas de una superficie plana. Un cursor manual dispone de una cruz para sealizar posiciones, mientras una pluma es un dispositivo con forma de lapicero que se apunta en posiciones de la tableta. Las Figuras 2.45 y 2.46 muestran ejemplos de tabletas de escritorio y para apoyar en el suelo, que utilizan cursores manua-
2.4.
Dispositivos de entrada
63
les y que disponen de dos. cuatro o diecisis botones. En las Figuras 2.47 y 2.48 se muestran ejemplos de tabletas con plumas para la entrada de datos. El sistema de digitali/acin para artistas de la Figura 2.48 utiliza la resonancia electromagntica para detectar la posicin tridimensional de la pluma. Esto permite a un artista producir diferentes trazos de pincel mediante la aplicacin de diferentes presiones sobre la superficie de la tableta. El tamao de la tableta vara desde 12 por 12 pulgadas en los modelos de escritorio hasta 44 por 60 pulgadas o ms en los modelos que se apoyan en el suelo. Las tabletas grficas proporcionan un mtodo altamente preciso para seleccionar coordenadas, con una precisin que vara desde cerca de 0.2 mm en modelos de escritorio hasta cerca de 0,05 mm o menos en modelos mayores. Muchas de las tabletas grficas se construyen con una cuadrcula rectangular de cables embebidos en la superficie de la tableta. Se generan pulsos electromagnticos en secuencia a lo largo de los cables, y se induce una seal elctrica en una bobina de cable en la pluma activada o en el cursor para registrar la posicin en la tableta. Dependiendo de la tecnologa, se puede utilizar la amplitud de la seal, pulsos codificados o cambios de fase para determinar la posicin en la tableta. Una tableta acstica (o snica) utiliza las ondas sonoras para detectar la posicin de la pluma. Se pueden utilizar tiras de micrfonos o micrfonos puntuales para detectar el sonido emitido por una chispa elctrica desde la pluma. La posicin de la pluma se calcula midiendo el tiempo que larda en llegar el sonido generado a las diferentes posiciones de los micrfonos. Una ventaja de las tabletas acsticas bidimensionales es que los micrfonos se pueden situar en cualquier superficie para formar el rea de trabajo de la tableta. Por ejemplo, los micrfonos se podran situar en la pgina de un libro mientras se digitaliza una figura en esta pgina. Los digitalizadores tridimensionales emplean transmisiones snicas o electromagnticas para registrar las posiciones. Un mtodo de transmisin electromagntica es similar al empleado en los guantes de datos: un acoplamiento entre el transmisor y el receptor se utiliza para calcular las posiciones de una pluma a medida que sta se mueve sobre la superficie de un objeto. La Figura 2.49 muestra un digitalizador registrando en las posiciones de la superficie de un objeto tridimensional. A medida que se seleccionan los puntos de un objeto no metlico, se muestra en la pantalla de una computadora el contorno almbrico de su superficie. Una vez que se ha construido la superficie exterior del objeto, sta se puede representar empleando efectos de iluminacin para crear una imagen realista del objeto. La resolucin de este sistema vara desde 0,8 mm hasta 0,08 mm. dependiendo del modelo.
FIGURA 2.48. Un sistema digitalizador para aitistas, con una pluma inalmbrica sensible a la presin. (Cortesa de
Wacom Technology Corporation. )
FIGURA 2.49. Un sistema de digitalizacin tridimensional para su uso con computadoras de Apple Macintosh.
(Cortesa de Mira Imaging.)
64
FIGURA 2.50. Un escner de mano que se puede utilizar para introducir texto o imgenes grficas. (Cortesa tle ThunJerware, Inc.)
Escneres de imagen
Se pueden almacenar dibujos, grficos, fotografas o texto para procesarlos con una computadora empleando un escner de imagen. La informacin se almacena al pasar un mecanismo de exploracin ptico sobre stos. Los niveles de escala de grises o los colores se registran y se almacenan en una matriz. Una vez que se dispone de una representacin intenta de una imagen, podemos aplicar transformaciones para rotar, cambiar de escala o recortar la imagen en una zona particular de la pantalla. Tambin podemos aplicar diversos mtodos de procesamiento de imgenes para modificar la matriz de representacin de la imagen. Despus de introducir texto mediante un escner, se pueden realizar varias operaciones de edicin sobre los documentos almacenados. Los escneres estn disponibles en una gran variedad de tamaos y capacidades. En la Figura 2.50 se muestra un pequeo escner de mano, mientras en las Figuras 2.51 y 2.52 se muestran modelos ms grandes.
Paneles tctiles
Como su propio nombre indica, los paneles tctiles permiten visualizar objetos o posiciones de pantalla que se pueden seleccionar con el toque de un dedo. Una aplicacin habitual de los paneles tctiles es la seleccin de opciones de procesamiento que se representan como un men de iconos grficos. Algunos monitores, como las pantallas de plasma de la Figura 2.53, se disean con pantallas tctiles. Otros sistemas se pueden adaptar a la entrada tctil mediante la colocacin de un dispositivo transparente (Figura 2.54), que contiene un mecanismo sensible al tacto, sobre un monitor de vdeo, y los datos de entrada tctiles se pueden registrar mediante el empleo de mtodos pticos, elctricos, o acsticos. Los paneles tctiles pticos emplean diodos emisores de luz (LED) infrarroja dispuestos en lnea a lo largo del borde vertical y el borde horizontal del cuadro. Estos detectores se utilizan para registrar qu haces se interrumpen cuando el panel se toca. Los dos haces que se cruzan y que son interrumpidos identifican las
FIGURA 2.52. Un escner de gran formato. (Cortesia de Aztek, ine. Lago Forest. California.)
US
111 ft
(a) FIGURA 2.53. Paneles de plasma con pantallas tctiles. (Cortesa de Photonics Systems.) coordenadas horizontal y vertical de la posicin seleccionada. Las posiciones se pueden seleccionar con unaprecisin de, aproximadamente, 1/4 de pulgada. Cuando los Lf:D estn espaciados una distancia muy (b)
FIGURA 2.54. Paneles taeliles resistivos de superposicin. (Cortesa de E/o TouchSystems. Inc.)
FIGURA 2.55. Un lpiz ptico con un botn. {Cortesa ce Interactive Computer Products.)
pequea, es posible interrumpir dos haces verticales y dos horizontales de Corma simultnea. En este caso, se registra la posicin media entre los dos haces interrumpidos. La frecuencia a la que funcionan los LED corresponde al infrarrojo, con el fin de que la luz no sea visible por el usuario. Un panel tctil elctrico se construye con dos placas transparentes separadas una distancia pequea. Una de las placas est recubierta con un material conductor y la otra placa est recubierta con un material resistivo. Cuando se toca la placa exterior, sta se ve forzada a hacer contacto con la placa interior. Este contactocrea una tensin a lo largo de la placa resistiva que se transforma en las coordenadas de la posicin seleccionada de la pantalla. En los paneles tactiles acsticos se generan ondas de sonido de alta frecuencia en direcciones horizontales y verticales a lo largo de una placa de cristal. El loque de la pantalla provoca que una parte de cada onda se refleje desde el dedo hacia los emisores. La posicin de la pantalla en el punto de contacto se calcula a partir de la medicin del intervalo de tiempo que transcurre entre la emisin de cada onda y su reflexin hacia el emisor.
Lapiceros pticos
La Figura 2.55 muestra el diseo de un tipo de lpiz ptico. Estos dispositivos con forma de lapicero se utilizan para seleccionar posiciones de la pantalla mediante la deteccin de la luz procedente de los puntos de la pantalla de TRC. Son sensibles a la pequea rfaga de luz. emitida por el recubrimiento de fsforo en el instante que el haz de electrones choca en un punto concreto. Otras fuentes de luz, tales como la luz ambiental de la habitacin, no se detectan habitualmente por un lpiz ptico. Un lpiz ptico activado, que est situado en un punto de la pantalla cuando el haz de electrones lo est iluminando, genera un pulso elctrico que provoca que las coordenadas del haz de electrones se registren. Como en los dems dispositivos de posicionamiento del cursor, las coordenadas registradas por un lapicero ptico se pueden usar para posicionar un objeto o seleccionar una opcin de procesamiento. Aunque todava se utilizan los lapiceros pticos, no son tan populares como lo fueron hace tiempo, ya que presentan algunas desventajas comparados con otros dispositivos de entrada que se han desarrollado. Por ejemplo, cuando se sita un lpiz ptico en un punto de la pantalla, parte de la imagen de la pantalla queda oscurecida por la mano y el lapicero. Adems, un uso prolongado de un lpiz ptico puede causar fatiga en el brazo. Tambin, los lapiceros pticos requieren implementaciones especiales de algunas aplicaciones, ya que no puede detectar posiciones dentro de zonas negras. Para que un lapicero ptico permita seleccionar posiciones en cualquier zona de la pantalla, la intensidad de la luz emitida por cada pxel debe ser distinta de cero dentro de dicha zona. Adems, a veces los lapiceros pticos producen falsas lecturas debido a la iluminacin ambiental de la habitacin.
67
FIGURA 2.56. In sistema de reconocimiento de vo/ (Cortesia ile Thrcshold Technology. Ine.)
Sistemas de voz
Los reconocedores de vo/ se utilizan en algunas estaciones de trabajo grficas como dispositivos de entrada para rdenes de voz. La entrada procedente de un sistema de VOZ se puede utilizar para iniciar la ejecucin de operaciones grficas o para la introduccin de datos. Estos sistemas funcionan mediante la comparacin de la entrada frente a un diccionario predefinido de palabras y frases. Un diccionario se crea pronunciando varias veces las palabras correspondientes a los comandos. A continuacin, el sistema analiza cada palabra y establece un diccionario de patrones de frecuencia de las palabras, junto con las correspondientes funciones qu se deben llevar a cabo. Despus, cuando se da una orden de voz, el sistema busca una coincidencia en el patrn de frecuencia. Para cada usuario del sistema se necesita un diccionario independiente. En un sistema de voz la entrada se realiza habitualmente hablando a un micrfono montado en unos cascos, como el mostrado en la Figura 2.56. y ste se disea para minimizar el ruido ambiental. Los sistemas de voz presentan ventajas frente a otros dispositivos de entrada, ya que el usuario no necesita cambiar su atencin de un dispositivo a otro para introducir un comando.
68 CAPTULO 2 Introduccin a los sistemas grficos filas horizontales a lo largo del rollo de papel enrollado en un tambor. Hl chorro de tinta cargada elctricamente se desva mediante un campo elctrico para producir patrones de matriz de puntos. Y un dispositivo electrosttico coloca una carga negativa sobre el papel, segn una lnea completa cada vez a lo largo de la hoja de papel. Entonces se expone el papel a un tner cargado positivamente. Esto provoca que el tner sea atrado hacia las zonas cargadas negativamente, donde se adhiere para producir la salida especificada. Otra tecnologa de salida es la impresora e/ectrotrmica. En estos dispositivos, se aplica calor a la cabeza de impresin de matriz de puntos para producir la salida de patrones en un papel sensible al calor. Podemos obtener una salida en colores limitados en impresoras de impacto mediante la utilizacin de cintas de diferentes colores. Los dispositivos que no son de impacto utilizan varias tcnicas para combinar tres pigmentos de color diferentes (cian, magenta y amarillo), para producir una gama de patrones de color. Los dispositivos lser y electrostticos depositan los tres pigmentos en pasadas independientes; y los mtodos de inyeccin ponen los tres colores simultneamente en una nica pasada a lo largo de cada linca de impresin. Los borradores de diseos y otros dibujos se generan habitualmente con trazadores de inyeccin de plumillas. Un trazador de plumillas dispone de una 0 ms plumillas montadas sobre un carro, que abarca una hoja de papel. Las plumillas de diferentes colores y grosores se utilizan para producir una gran variedad de rellenos y estilos de lnea. Las plumillas que se pueden utilizar con un trazador de plumillas son de tinta hmeda y de punta de fieltro. El papel del trazador puede estar desenrollado o enrollado sobre un tambor o cinta. Los rodillos pueden ser mviles o estacionarios, mientras la plumilla se mueve hacia adelante y hacia atrs a lo largo de la barra. El papel se mantiene en su posicin utilizando dispositivos mecnicos, vaco o una carga electrosttica. En la Figura 2 . 5 8 se muestra un ejemplo de trazador de plumillas de sobremesa y superficie plana. En la Figura 2 . 5 9 se muestra un trazador de plumillas de mayor tamao y con alimentador de rodillo.
FIGURA 2.57. Una imagen generada con una impresora de matriz de puntos, que ilustra cmo la densidad de patrones de puntos se puede \ariar para producir zonas claras y zonas oscuras. {Cortesa Je Apple
Computer. Inc.)
69
FIGURA 2.59. Ira/ador de plumillas con alimcniador de rodillo y de gran tamao que dispone de un cargador automtico de S plumillas multicolores y de una resolucin de 0,0127 mm.
(Cortesia Je Suinniagraphics Corporation.)
70
ment y, opeionalmente. la localizacin (directorio) en el servidor. Por ejemplo, el URL http://www.siggyaph.org indica un documento que se debe transferir utilizando el protocolo de transferencia de hipertexto (hypertext transfer protocol: /////;) y que el servidor es www.siggraph.org, el cual es la pgina principal del grupo SI(i(iRAPM (Special Interest (iroup in (iraphics) de la Association for Computing Maehinery. Otro tipo habitual de URL comienza porftp://. Este tipo identifica un sitio ftp>. de donde se pueden descargar programas u otra clase de archivos mediante el uso del protocolo de transferencia de archivos FTP (File Transfer Protocol). Los documentos de Internet se pueden construir con el lenguaje HTML (Hypertext Markttp Language), El desarrollo del IITML ha proporcionado un mtodo simple de descripcin de documentos que contienen texto, grficos y referencias (hyperlinks; hipervnculos) a otros documentos. Aunque se pudo hacer que los documentos estu\ ieran disponibles mediante el empleo de HTML y el direccionamiento URL, y era difcil inicialmente encontrar informacin en Internet. Posteriormente, el centro National Center for Supercomputing Applicaciones (NCSA) desarroll un navegador llamado Mosaic que facilit a los usuarios la bsqueda de recursos en Internet. Despus el navegador Mosaic evolucion para convertirse en el navegador Netscape. El lenguaje HTML proporciona un mtodo simple para desarrollar grficos en Internet, pero dispone de capacidades limitadas. Por tanto, se han desarrollado otros lenguajes para aplicaciones grficas para Internet. Estos lenguajes los estudiaremos en el Seccin 2.S.
71
coordenadas cartesianas antes de que se puedan utilizar como entrada del paquete de grficos. Algunos paquetes diseados para aplicaciones especificas pueden permitir el uso de otros sistemas de coordenadas que son apropiados para tales aplicaciones. Por lo general, se utilizan varios sistemas de referencia cartesianos en la construccin y representacin de una escena, En primer lugar, podemos definir las formas de los objetos individuales, tales como rboles o mobiliario, con un sistema de referencia de coordenadas independiente para cada objeto. Las coordenadas en estos sistemas de referencia se denominan coordenadas de modelado o. a veces, coordenadas locales o coordenadas maestras. Una vez que se ha especificado la forma individual de los objetos, podemos construir (modelar) una escena mediante la colocacin de los objetos en sus posiciones apropiadas en un sistema de referencia de coordenadas universales. Este paso implica la transformacin de las coordenadas en los sistemas de coordenadas de modelado indi\ duales en posiciones y orientaciones especificadas en las coordenadas del sistema de coordenadas universales. A modo de ejemplo, podramos construir una bicicleta mediante la definicin de cada una de sus partes (ruedas, cuadro, asiento, manillar, ruedas dentadas, cadena, pedales) con un sistema de coordenadas de modelado independiente. Despus, estas partes se unen en el sistema de coordenadas universales. Si ambas ruedas son del mismo tamao, slo necesitamos describir una de ellas en el sistema de coordenadas local. A continuacin, la descripcin de la rueda se introduce en la descripcin de la bicicleta en coordenadas universales en dos lugares. En escenas no demasiado complicadas, los objetos componentes se pueden definir directamente en la estructura del objeto en coordenadas universales, sin realizar los pasos del sistema de coordenadas de modelado y la transformacin del modelado. Las descripciones geomtricas en el sistema de coordenadas de modelado y en el sistema de coordenadas universales se pueden expresar con valores cualesquiera en punto flotante 0 entero, sin tener en cuenta las restricciones de un dispositivo de salida Concreto. En algunas escenas, podramos querer especificar la geometra de los objetos en fracciones de pie. mientras que en otras aplicaciones podramos querer emplear milmetros, kilmetros, o aos luz. Despus de haber especificado todas las parles de una escena, la descripcin del conjunto en coordenadas universales se procesa mediante varias subrutinas para su visualizacin en los sistemas de referencia de uno 0 ms dispositivos de salida. Este proceso se denomina pipeline de visualizacin. I n primer lugar, las posiciones en coordenadas universales se convierten a las coordenadas de visualizacin correspondientes a la vista que deseamos de la escena, que utilizan como base la posicin y la orientacin de una hipottica cmara. A continuacin, las posiciones de objeto se transforman segn una proyeccin biclimensional de la escena que se corresponde con lo que veremos en el dispositivo de salida. Entonces, la escena se almacena en coordenadas normalizadas, en las que cada coordenada se encuentra dentro de un rango de valores comprendido entre - I y I o dentro del rango de valores desde 0 a I, dependiendo del sistema. Las coordenadas normalizadas tambin se denominan coordenadas de dispositivo normalizadas, ya que la utilizacin de esta representacin hace que el paquete grfico sea independiente del rango de coordenadas del dispositivo de salida. Tambin necesitamos identificar las superficies visibles y eliminar las parles de la imagen fuera de los limites de la v isla que queremos mostrar en el dispositivo de visualizacin. Finalmente, la imagen se explora para almacenarla en el bfer de refresco de un sistema de rasterizacin para su representacin. Los sistemas de coordenadas de los dispositivos de representacin se denominan generalmente coordenadas de dispositivo o coordenadas do pantalla en el caso de un monitor de vdeo. A menudo, tanto las coordenadas normalizadas como las coordenadas de pantalla se especifican en un sistema de referencia de coordenadas a izquierdas para que un incremento positivo de las distancias desde el plano vv(la pantalla o plano de visualizacin) se pueda interpretar como un alejamiento de la posicin de visualizacin. La Figura 2.60 muestra de forma resumida la secuencia de transformaciones de coordenadas desde las coordenadas de modelado a las coordenadas de dispositivo, para una pantalla que debe contener la vista de los dos objelos tridimensionales. En esta ilgura. una posicin inicial en coordenadas de modelado (v, . v. :) se transforma en coordenadas universales, despus en coordenadas de visualizacin y proyeccin, luego ?n coordenadas normalizadas a izquierdas y. finalmente, en la posicin en coordenadas del dispositivo meliante la secuencia:
(
72
Coordenadas de v i s u a l i / a c i n y proyeccin
Coordenadas
de m o d e l a d o
Monitor de v d e o
Trazador
Otra salida
FIGURA 2.60. Secuencia de transformaciones desde las coordenadas de modelado hasta las coordenadas del dispositivo para una escena tridimensional. Las formas de los objetos se pueden definir individualmente en los sistemas de referencia de coordenadas de modelado. Despus, las formas se sitan dentro de la escena en coordenadas universales. A continuacin, las especificaciones en coordenadas universales se transforman mecante la pipeline de visuali/acin en coordenadas de visuali/acin y proyeccin, y despus en coordenadas nonnali/adas. Como ltimo paso, los controladores de dispositivo individuales transfieren la representacin de la escena en coordenadas normalizadas a los dispositivos de salida para su representacin.
Las coordenadas de dispositivo (.v . y ) son enteros dentro del rango (0.0) a (.v , v ) para un dispositivo concreto. Ademas de las posiciones bidimensionales (.v,,,. r ) de la superficie de v isualizacin. la informacin de profundidad para cada posicin en coordenadas de dispositivo se almacena para su uso en varios algoritmos de visibilidad y procesamiento de superficies.
J( lh m<ix mjx (/l
Funciones grficas
Un paquete grfico de propsito general proporciona a los usuarios una gran variedad de funciones para la creacin y manipulacin de imgenes, listas subrulinas se pueden clasificar segn multitud de criterios, tales como estar relacionadas con la salida de grficos, la entrada, los atributos, las transformaciones, v isualizacin. subdivisin de imgenes, o control general. Las partes bsicas para la construccin de imgenes lo consliuyen lo que se denomina primitivas de salida urlica. Dentro de ellas estn incluidas las cadenas de caracteres y las entidades geomtricas, talos como los puntos, las lineas rectas, las lneas curvas, los rellenos con color (liabitualmcnte polgonos), y las formas que se definen mediante matrices de puntos con color. Algunos paquetes grficos proporcionan adicionalmentc funciones para mostrar formas ms complejas tales como esferas, conos y cilindros. Las subrutinas para la generacin de primitivas de salida proporcionan las herramientas bsicas para la construccin de imgenes. Los atributos son propiedades de las primitivas de salida: es decir, un atribulo describe cmo se mostrar una primitiva concreta. Dentro de stos se incluyen las especificaciones de color, de estilos de linca, de estilos de texto y de patrones de relleno de reas. Podemos cambiar el tamao, la posicin, o la orientacin de un objeto dentro de una escena empleando las transformaciones geomtricas. Algunos paquetes grficos proporcionan un conjunto adicional de funciones para realizar transformaciones de modelado, las cuales se utilizan pitra construir una escena en la que
73
las descripciones de los objetos individuales se expresan en coordenadas locales. Habitualmente, dichos paquetes proporcionan un mecanismo para la descripcin de objetos complejos (tales como un circuito elctrico o una bicicleta) con una estructura de rbol (jerrquica). Otros paquetes simplemente proporcionan las subrulinas de transformacin geomtrica y dejan los detalles de modelado al programador. Despus de que una escena se ha construido, empleando las subrutinas para la especificacin de las formas de los objetos y de sus atributos, un paquete grfico proyecta una vista de la imagen en un dispositivo de salida. Las transformaciones de \ istiali/aein se utilizan para seleccionar una vista de la escena, la clase de proyeccin que se va a utilizar y la posicin en un monitor de vdeo donde la \ isla se debe mostrar. Hay disponibles otras subrulinas para la gestin del rea de v isualizacin de pantalla mediante la especificacin de su posicin, tamao y estructura. En escenas tridimensionales, los objetos visibles se identifican y se aplican las condiciones de iluminacin. Las aplicaciones grficas interactivas utilizan \arias clases de dispositivos de entrada, entre los que se incluyen un ratn, una tableta o un joysfick. Las funciones de entrada se utilizan para controlar \ procesar el flujo de datos procedente de estos dispositivos interactivos. Algunos paquetes grficos tambin proporcionan subrutinas para la subdivisin de la descripcin de una imagen en un conjunto de panes componentes con un nombre. Se puede disponer de otras subrulinas para la manipulacin de varias formas de estas componentes de la imagen. Finalmente, un paquete grfico contiene unas tareas de mantenimiento, tales como borrar una zona de la pantalla con un color seleccionado e iniciaiizar parmetros. Podemos agrupar las funciones para llevar a cabo stas tareas de apoyo con el nombre de operaciones de control.
Estndares de software
El objetivo principal del software grfico estandarizado es la portabilidad. Cuando los paquetes se disean con funciones grficas estndar, el soltw are se puede trasladar fcilmente de un sistema hardware a otro y usar en diferentes implemantacioncs y aplicaciones. Sin estndares, los programas diseados para un sistema hardware a menudo no se pueden trasladar a otro sistema sin realizar una amplia reescritura de los programas. En muchos pases las organizaciones nacionales e internacionales de planificacin de estndares han cooperado en un esfuerzo para desarrollar un estndar de grficos por computadora que sea aceptado de forma generalizada. Despus de un considerable esfuerzo, este trabajo sobre los estndares condujo al desarrollo del sistema GKS (Ciraphical Kernel System) en 1<>X4. liste sistema se adopt como el primer estndar de software grfico por la organizacin ISO (International Standards Organization) y por varias organizaciones nacionales de estndares, entre las que se incluye el instituto ANS (American National Standards Intitule). Aunque (iKS se dise originalmente como un paquete de grficos bidimensionales, pronto se desarroll una extensin tridimensional de GKS. El segundo estndar de software que se desarroll y aprob por las organizaciones de estndares fue el sistema PHIGS (Programmer's Hierarehical Interactive (iraphics Standard), el cual es una extensin de GKS. PHKiS proporciona mayores capacidades para el modelado de objetos jerrquico, especificaciones de color, representacin de superficies y manipulacin de imgenes. Ms tarde, se desarroll una extensin de PHIGS. llamada PI1IGS + . para proporcionar capacidades de representacin de superficies tridimensionales no disponibles en PHKiS. Cuando se desarrollaron los paquetes (iKS y PHIGS. las estaciones de trabajo grficas de Silicon (iraphics, Inc. (SGI) llegaron a ser cada vez ms populares. Estas estaciones de trabajo estaban dotadas de un conjunto de su rutinas llamado GL ((iraphics l.ibrary). que muy pronto lleg a ser un paquete ampliamente utilizado en la comunidad grfica. Por tanto. GL se convirti en un estndar grfico de tacto. Las subrutinas de GL se disearon para la representacin rpida y en tiempo real, y pronto este paquete se fue extendiendo a otros sistemas hardware. Como consecuencia, a comienzos de los aos -() se desarroll OpenGL. una versin de GL independiente del hardware. En la actualidad, la organizacin OpenGL Architecture Revievv Board mantiene > actualiza este paquele. Esta organizacin es un consorcio de representantes de muchas compaas y organizaciones grficas. OpenGL est diseado especialmente para el procesamiento deficiente
74
de aplicaciones tridimensionales, pero tambin puede manipular descripciones de escenas bidimensionales como un caso particular del caso tridimensional donde todas las coordenadas z son 0. Las funciones grficas de cualquier paquete se definen habitualmente como un conjunto de especificaciones que son independientes de cualquier lenguaje de programacin. Despus se define una correspondencia de lenguaje a un lenguaje de programacin de alto nivel particular. Esta correspondencia proporciona la sintaxis para acceder a las distintas funciones grficas desde dicho lenguaje. Cada correspondencia de lenguaje se define para hacer el mejor uso de las capacidades correspondientes del lenguaje y para manejar diversos elementos sintcticos, tales como tipos de datos, paso de parmetros y errores. La organizacin internacional de estndares ISO establece las especificaciones de implementacin de un paquete grfico en un lenguaje determinado. Las correspondencias de OpenGL para los lenguajes C y C + + son iguales Tambin hay disponibles otras enlaces de OpenGL, tales como las de Ada y Fortran. En los captulos siguientes, utilizaremos el enlace C/C++ para OpenGL como marco de trabajo para el estudio de los conceptos grficos bsicos y el diseo y aplicacin de los paquetes grficos. Ejemplos de programas en C+ + ilustran las aplicaciones de OpenGL y los algoritmos generales para la implementacin de funciones grficas.
Algunas funciones requieren que a uno (o ms) de sus argumenios se les asigne una constante simblica al especificar, por ejemplo, un nombre de parmetro, un valor para un parmetro, o un modo particular. Todas
75
estas constantes comienzan con las letras GL en maysculas. Adems, las palabras que forman parte de una constante con nombres .se escriben en maysculas, y el guin bajo (_) se utiliza como separador entre todas estas palabras del nombre. Los siguientes son unos pocos ejemplos de los varios cientos de constantes simblicas disponibles para uso con las funciones de OpenGL.
GL_2D, GL_RGB, GL_CCW, GWOLYGON, GL_AMB I ENT_AND_D IFFUSE
Las funciones de OpenGL tambin esperan tipos de datos especficos. Por ejemplo, un parmetro de una funcin de OpenGL podra esperar un valor que se especifica como un entero de 32 bits. Pero el tamao de la especilcacin de un entero puede ser diferente en las distintas mquinas. OpenGL tiene incorporada una serie de nombres para tipos de datos, para indicar tipos de datos especficos tales como
GLbyte, GLshort, GLint, GLfloat, GLdouble, Glboolean
Cada nombre de tipo de datos comienza con las letras maysculas GL y, a continuacin, un idenlifieador de tipo de datos estndar, escrito con letras minsculas. A algunos argumentos de funciones de OpenGL se les puede asignar valores empleando una matriz que enumera un conjunto de valores de datos. Esta opcin se utiliza para especificar una lista de valores como un puntero a una matriz, en lugar de especificar cada elemento de la lista explcitamente como un argumento. Un ejemplo tpico del uso de esta opcin es la especificacin de los valores de las coordenadas xyz.
Bibliotecas relacionadas
Existe un gran nmero de bibliotecas relacionadas para la realizacin de operaciones especiales, adems de la biblioteca bsica de OpenGL. La utilidad GLU (OpenGL Utility) proporciona subrutinas para la configuracin de las matrices de visual i/acin y proyeccin, descripcin de objetos complejos mediante lneas y aproximaciones poligonales, visualizacin de cudricas y splines 13 empleando aproximaciones lineales, procesamiento de operaciones de representacin de superficies y otras tareas complejas. Toda implementacin de OpenGL incluye la biblioteca GLU. Todos los nombres de las funciones de GLU comienzan con el prefijo glu. Tambin existe un conjunto de herramientas orientadas a objetos basado en OpenGL, llamado Open Inventor que proporciona subrutinas y formas de objetos predefinidos para su uso en aplicaciones tridimensionales interactivas. Este conjunto de herramientas est escrito en C + + . Para crear grficos utilizando OpenGL, necesitamos en primer lugar configurar una ventana de visualizacin en nuestra pantalla de vdeo. Se trata simplemente de la zona rectangular de la pantalla en la que nuestra imagen se mostrar. No podemos crear directamente la ventana de visualizacin con las funciones de OpenGL bsicas, ya que esta biblioteca contiene nicamente funciones grficas independientes del dispositivo, y las operaciones de gestin de ventanas dependen de la computadora que estemos utilizando. Sin embargo, existen varias bibliotecas de sistema de ventanas que soportan las funciones de OpenGL en una gran variedad de mquinas. La ampliacin de OpenGL al sistema de ventanas X (CLX. OpenGL Extensin to the X Window System) proporciona un conjunto de subrutinas que utilizan como prefijo las letras g l x . Los sistemas Apple pueden utilizar la inlerfaz para operaciones de gestin de ventanas Apple GL (AGL). Los nombres de las funciones en esta biblioteca utilizan como prefijo a g . En los sistemas que utilizan Microsoft Windows, las subrutinas de WGL proporcionan una inlerfaz de Windows a OpenGL. Estas subrutinas utilizan como prefijo las letras wgl. El gestor PGL (Presentation Manager to OpenGL) es una interfaz para el sistema operativo OS/2 de IBM, que utiliza el prefijo p g l en las subrutinas de la biblioteca. Y el kit de herramientas GLUT (OpenGL Utility Toolkit) proporciona una biblioteca de funciones para interactuar con cualquier sistema de ventanas. Las funciones de la biblioteca GLUT utilizan como prefijo g l u t . Esta biblioteca tambin contiene mtodos para describir y representar superficies y curvas cudricas. Ya que GLUT es una interfaz con otros sistemas de ventanas dependientes del dispositivo, podemos utilizar GLUT para que nuestros programas sean independientes del dispositivo. La informacin relacionada con la ltima versin de GLUT y los procedimientos de descarga de su cdigo fuente estn disponibles en la direccin web:
76
CAPTULO 2
http://realizy.sgi.com/opengl/glut3/glut3.html
Archivos de cabecera
En todos nuestros programas grficos, necesitaremos incluir el archivo de cabecera para la biblioteca de ncleo OpenGL. En la mayora de las aplicaciones tambin necesitaremos GLU. Y necesitaremos incluir el archivo de cabecera para el sistema de ventanas. Por ejemplo, en Microsoft Windows, el archivo de cabecera para acceder a las subrutinas de WGL es w i n d o w s . h. Este archivo de cabecera se debe indicar antes de los archivos de cabecera de OpenGL y GLU, ya que contiene macros que se necesitan en la versin de la biblioteca de OpenGL para Microsoft Windows. Por tanto, el archivo fuente en este caso debera comenzar con
tinclude tinclude include <windows.h> <GL/gl.h> <GL/glu.h>
Sin embargo, si utilizamos GLUT para gestionar las operaciones de gestin de ventanas, no necesitaremos incluir g l . h y g l u . h porque GLUT garantiza que estos archivos se incluirn correctamente. Por tanto, podemos reemplazar los archivos de cabecera de OpenGL y GLU por
tinclude <GL/glut.h>
Tambin podramos incluir gl .h y g l u . h , pero al hacerlo seramos redundantes y se podra ver afectada la portabilidad del programa. Adems, a menudo necesitaremos incluir archivos de cabecera que el cdigo C + + requiere. Por ejemplo,
tinclude tinclude ttinclude <stdio.h> <stdlib.h> <math.h> estudio,
A continuacin, podemos indicar que se cree una ventana de visualizacin en la pantalla con un ttulo en su barra de ttulo. Esto se realiza con la funcin
glutCreateWindow "Un p r o g r a m a d e e j e m p l o c o n OpenGL");
donde el nico argumento de esta funcin puede ser cualquier cadena de caracteres que queramos utilizar como ttulo de la ventana de visualizacin. Ahora hay que especificar qu va a contener la ventana de visualizacin. Para ello, creamos una imagen empleando la funciones de OpenGL y se pasa la definicin de la imagen a la subrutina llamada g l u t D i s p l a y F u n c , que asigna nuestra imagen a la ventana de visualizacin, Como ejemplo, suponga que disponemos del cdigo de OpenGL para describir un segmento en un procedimiento llamado l i n e S e g m e n t . Entonces la siguiente llamada a funcin pasa la descripcin del segmento a la ventana de visualizacin.
glutDisplayFunc (lineSegment);
11
Pero la ventana de visualizacin no est an en la pantalla. Necesita una funcin ms de GLUT para completar las operaciones de procesamiento de ventana. Despus de la ejecucin de la siguiente lnea, todas las ventanas de visualizacin que hayamos creado, incluyendo su contenido grfico, se activarn.
glutMainLoop { }r
Esta funcin debe ser la ltima en nuestro programa. Esta muestra los grficos iniciales y pone el programa en un bucle infinito que comprueba la entrada procedente de dispositivos, tales como un ratn o un teclado. Nuestro primer ejemplo no ser interactivo, por lo que el programa nicamente continuar mostrando la imagen hasta que cerremos la ventana de visualizacin. En los captulos siguientes, tendremos en consideracin cmo podemos modificar nuestros programas en OpenGL para gestionar la entrada interactiva. Aunque la ventana de visualizacin que creamos tendr una posicin y un tamao predeterminados, podemos establecer estos parmetros empleando funciones adicionales del kit de herramientas GLUT. Utilizamos la funcin g l u t l n i t W i n d o w P o s i t i o n para proporcionar una posicin inicial para la esquina superior izquierda de la ventana de visualizacin. Esta posicin se especifica en coordenadas enteras de pantalla, cuyo origen est en la esquina superior izquierda de la pantalla. Por ejemplo, la siguiente lnea especifica que la esquina superior izquierda de la ventana de visualizacin se debera colocar 50 pxeles a la derecha del borde izquierdo de la pantalla y 100 pxeles hacia abajo desde el borde superior de la pantalla.
glutlnitWindowPosition {50, 100);
Anlogamente, la funcin g l u t l n i t w i n d o w s i z e se utiliza para establecer la anchura y la altura en pxeles de la ventana de visualizacin. Por tanto, especificamos una ventana de visualizacin con una anchura inicial de 400 pxeles y una altura de 300 pxeles (Figura 2.61) con la lnea siguiente
glutlnitwindowsize (400, 300);
Despus de que la ventana de visualizacin est en la pantalla, podemos volver a cambiar tanto su posicin como su tamao. Tambin podemos establecer otras opciones de la ventana de visualizacin, tales como los bferes y una opcin de los modos de color, con la funcin g l u t l n i t D i s p l a y M o d e . Los argumentos de sta subrutina se asignan mediante constante simblicas de GLUT. Por ejemplo, la siguiente orden especifica que se utilice un nico bfer de refresco en la ventana de visualizacin y que se utilice el modo de color RGB (rojo, verde, azul) para seleccionar los valores de los colores. glutlnitDisplayMode {GLUT_SINGLE | GLUT_RGB), Los valores de las constantes que se pasan a esta funcin se combinan empleando la operacin lgica or. En realidad, el bfer nico y el modo de color RGB son opciones predeterminadas. Pero usaremos esta fun-
FIGURA 2.61. Una ventana de visualizacin de 400 por 300 pxeles en la posicin (50,100) relativa a la esquina superior izquierda de la pantalla de vdeo.
78
ein para recordar las opciones que se han establecido para nuestra visualizacin. Ms tarde, estudiaremos los modos de color ms detalladamente, as como otras opciones de visualizacin tales como el doble bfer para aplicaciones de animacin y seleccin de parmetros para la visualizacin de escenas tridimensionales.
Los tres primeros argumentos de esta funcin establecen cada una de las componentes de color roja, verde, y azul en el valor de LO. Por tanto, obtenemos el color blanco en la ventana de visualizacin. Si, en lugar de 1.0, establecemos cada una de las componentes de color en 0.0, obtendramos el color negro como color de fondo. Y si a cada una de las componentes roja, verde, y azul se les asigna un valor intermedio entre 0.0 y 1.0, obtendramos algn nivel de gris. Kl cuarto parmetro de la funcin g l C l e a r C o l o r se denomina el valor alfa del color especificado. Un uso del valor alfa es el parmetro de fundido (blening). Cuando activamos las operaciones de fundido de OpenGL, los valores alia se pueden utilizar para calcular el color resultante de dos objetos que se superponen. Un valor alfa de 0.0 indica que el objeto es totalmente transparente, mientras que el valor alfa de 1.0 indica que el objeto es opaco. Las operaciones de fundido no se utilizarn por el momento, por lo que el valor alfa es irrele\ante en nuestros primeros programas de ejemplo. Por ahora, establecemos simplemente el valor alfa en 0.0. Aunque la orden g l C l e a r C o l o r asigna un color a la ventana de visualizacin, sta no muestra la ventana de visualizacin en la pantalla. Para conseguir que el color asignado a la ventana se visualice, necesitamos invocar la siguiente funcin de OpenGL.
glClear (GL_COLOR_BUFFER_BIT) ,*
El argumento G L C O L O R B U F F E R B I T es una constante simblica que especilca que son los valores de los bits del bfer de color (bfer de refresco) los que se deben asignar a los valores indicados en la funcin g l C l e a r C o l o r . (Estudiaremos otros bferes en los captulos siguientes.) Adems de establecer el color de fondo de la ventana de visualizacin, podemos elegir entre una gran variedad de esquemas de color para los objetos que queremos mostrar en una escena. En nuestro ejemplo inicial de programacin, estableceremos simplemente el color del objeto en rojo, y se aplazar el estudio en profundidad de las variadas opciones de color hasta el Captulo 4:
glColor3f (1.0, 0.0, 0.0);
El sufijo 3 f de la funcin g l C o l o r indica que especificamos las tres componentes de color RGB mediante el empleo de valores en punto llotante (f). Estos valores se deben encontrar dentro del rango comprendido entre 0.0 y 1.0, y hemos establecido la componente roja en 1.0 y las componentes verde y azul en 0.0. En nuestro primer programa, simplemente mostramos un segmento bidimensional. Para ello, necesitamos decir a OpenGL como queremos proyectar nuestra imagen en la ventana de visualizacin, porque la generacin de una imagen bidimensional se trata en OpenGL como un caso especial de la visualizacin tridimensional. Por lo que, aunque slo queramos producir una lnea muy simple bidimensional, OpenGL procesa la imagen mediante todas las operaciones de visualizacin tridimensional. Podemos establecer que el tipo de proyeccin (modo) y otros parmetros de visualizacin que necesitemos con las dos funciones siguientes.
glMatrixMode gluOrtho2D (GL_PROJECTION); (0.0, 200.0, 0.0, 150.0);
79
Esto especifica que se debe utilizar una proyeccin ortogonal para mapear los contenidos de una zona rectangular bidimensional (2D) de las coordenadas universales a la pantalla, y que los valores de la coordenada x dentro de este rectngulo varan desde 0,0 hasta 200.0 y que los valores de la coordenada y varan desde 0.0 hasta 150.0. Objetos cualesquiera que definamos dentro de este rectngulo de coordenadas universales se mostrarn dentro de la pantalla de visualizaein. Cualquier cosa fuera de esle rango de coordenadas no se visualizar. Por tanto, la funcin de GLU g l u O r t h o 2 D establece que el sistema de coordenadas de referencia dentro de la ventana de visualizaein deber tener las coordenadas (0.0,0.0) en la esquina inferior izquierda de la ventana de visualizaein y (200,0, 150,0) en la esquina superior izquierda de la ventana. Ya que slo describimos un objeto bidimensional, el nico electo que tiene la proyeccin ortogonal es pegar nuestra imagen en la ventana de visualizaein definida anteriormente. Por ahora, utilizaremos un rectngulo de coordenadas universales con la misma relacin de aspecto que la ventana de visualizaein, para que no haya distorsin en nuestra imagen. Posteriormente, consideraremos cmo podemos mantener una relacin de aspecto que sea independiente de la especificacin de la ventana de visualizaein. finalmente, necesitamos llamar a las subrutinas apropiadas de OpenGL para crear nuestro segmento. El cdigo siguiente define un segmento bidimensional definiendo sus extremos con coordenadas cartesianas enteras de valores (180, 15) y (10, 145). En el Capitulo 3, presentaremos una explicacin detallada de estas funciones y de otras funciones de OpenGL para la generacin de primitivas grficas.
glBegin (GL_LINES) ; (1B0, (10, 15); 145);
Ahora es el momento de reunir todas las piezas. El siguiente programa de OpenGL est organizado en tres procedimientos. Colocamos todas las inicializaciones y los parmetros de configuracin relacionados en el procedimiento i n i t . Nuestra descripcin geomtrica de la imagen que queremos visualizar est en el procedimiento l i n e S e g m e n t , que es el procedimiento que ser referenciado por la funcin de G L U T g l u t D i s p l a y F u n c . Y el procedimiento m a i n contiene las funciones de GLUT que configuran la ventana de visualizaein y que muestran nuestro segmento en la pantalla. La Figura 2.62 muestra la ventana de visualizaein y el segmento rojo (gris en la figura) generado por este programa.
<GL/glut.h> (void)
//
(u otras
lneas,
dependiendo del
sistema
que
usemos
IBi
glClearColor glMatrixMode gluOrtho2D 1.0, (0.0,
jf
1.0, 1.0, (GL_PROJECTION); 200.0, 0,0,
|j
0.0); // // 150.0); // Establece el visualizacin Establece los
111(8
color de la ventana de en blanco. parmetros de proyeccin.
}
void { glClear glColor3f glBegin GL_COLOR_BUFFER_BIT) ; (1.0, 0.0, 0.0),// // (GL_LINES); (180, (10, 15);// 145); Especifica la geometra del segmento de lnea. glvertex2i glVertex2i glEnd ( ) ; ( ) / // // Procesa como todas las subrutinas de OpenGL tan rpidamente // Borra la ventana de v i s u a l i z a c i n . el color del segmento de lineSegment (void)
Establece lnea en
rojo.
glFlush
sea
posible.
v o i d main {
(int
argc,
char**
argv)
glutlnit
t&argc,
// // //
inicializa
glutlnitDisplayMode
E s t a b l e c e el
superior
izquierda
superior 300);
izquierda de
glutCreateWindow init ( ) ;
(An
E x a m p l e OpenGL // Ejecuta // // //
Program); el
Al final del procedimiento l i n e S e g m e n t hay una funcin, g l f l u s h , que todava no hemos estudiado. Es simplemente una subrutina que fuerza la ejecucin de nuestras funciones de OpenGL, las cuales almacenan las computadoras en bferes en diferentes posiciones, dependiendo de cmo est implementada OpenGL. En una red ocupada, por ejemplo, podra haber retrasos en el procesamiento de algunos bferes. Pero la llamada a g l F l u s h fuerza a que todos estos bferes se vacen y que las funciones de OpenGL se procesen.
2.10 Resumen
81
El procedimiento l i n e S e g m e n t que hemos creado para describir nuestra imagen se denomina funcin de respuesta a la visualizacin (display cailbackfuncon). Este procedimiento lo registra g l u t D i s p l a y F u n c como ia subrutina que se invoca siempre que sea preciso mostrar la ventana de visualizacin de nuevo. Esto puede ocurrir, por ejemplo, si se mueve la ventana de visualizacin. En captulos posteriores mostraremos otros tipos de funciones de respuesta y las subrutinas de GLUT asociadas que se emplean para registrar stas. Por lo general, los programas que utilizan OpenGL se organizan como un conjunto de funciones de respuesta que se invocan cuando ocurren determinadas acciones.
2.10 RESUMEN
En este captulo introductorio, hemos examinado las principales caractersticas del hardware y del software de los sistemas de grficos por computadora. Entre los componentes hardware se incluyen los monitores de vdeo, los dispositivos de copia impresa, varias clases de dispositivos de entrada y componentes para interactuar con entornos virtuales. Algunos sistemas de software, tales como paquetes CAD y programas de dibujo se disean para aplicaciones especficas. Otros sistemas de software proporcionan una biblioteca de subrutinas grficas generales que se puedan utilizar dentro de un lenguaje de programacin, tal como C+ + para generar imgenes para cualquier aplicacin. El dispositivo de visualizacin de grficos predominante es el monitor de refresco de barrido, que se basa en la tecnologa de la televisin. Un sistema de barrido utiliza un bfer de imagen para almacenar los valores del color de cada punto de la pantalla (pxel). Entonces las imgenes se pintan en la pantalla mediante la obtencin de esta informacin a partir del bfer de imagen (tambin llamado bufer de refresco) a medida que el haz de electrones del TRC barre cada lnea de exploracin, desde arriba hacia abajo. Las pantallas vectoriales ms antiguas construyen las imgenes mediante el dibujo de segmentos de lnea recta entre los puntos extremos que se especifican. Hay disponibles otros muchos dispositivos de visualizacin de vdeo. Concretamente, la tecnologa de visualizacin de las pantallas planas se desarrolla a un ritmo rpido, y estos dispositivos ahora se utilizan en una gran variedad de sistemas, entre los que se incluyen tanto las computadoras de escritorio como las computadoras porttiles. Las pantallas de plasma y los dispositivos de cristal lquido son dos ejemplos de pantallas planas. Existen otras tecnologas de visualizacin entre las que se pueden incluir los sistemas de visualizacin tridimensional y estereoscpica. Los sistemas de realidad virtual pueden incluir un casco estereoscpico o un monitor de vdeo estndar. Para la entrada grfica, disponemos de una gran gama de dispositivos entre los que elegir. Los teclados, las cajas de botones, y los botones se utilizan para introducir texto, valores de datos o programar opciones. El dispositivo ms popular para apuntar es el ratn, pero los trackballs, spacehalls, palancas de mando, teclas de control del cursor y las ruedas de pulgar tambin se utilizan para posicionar el cursor en la pantalla. En los entornos de realidad virtual, se utilizan habitualmente los guantes de datos. Otros dispositivos de entrada son los escneres de imagen, los digitalizadores, las pantallas tctiles, los lapiceros pticos y los sistemas de voz. Entre los dispositivos de copia impresa para estaciones grficas se incluyen las impresoras estndar y los trazadores, adems de dispositivos para producir diapositivas, transparencias y pelculas. Las impresoras producen una copia impresa mediante el empleo de una matriz de puntos, un lser, inyeccin de tinta o mtodos electrostticos o electrotrmicos. Los grficos y diagramas se pueden producir con un trazador de plumillas o con un dispositivo que sea una combinacin de impresora y trazador. Los paquetes estndar de programacin de grficos desarrollados y aprobados por ISO y ANS son GKS 31) GKS, PHIGS y PHIGS + . Otros paquetes que han evolucionado hacia estndares son GL y OpenGL. Otras muchas bibliotecas grficas estn disponibles para su uso con lenguajes de programacin, entre las que se incluyen Open Inventor, VRML, RenderMan, Java 2D y Java 3D. Otros sistemas, tales como Mathematica, MatLab y Maple, proporcionan a menudo un conjunto de funciones de programacin de grficos. Normalmente, los paquetes de programacin de grficos requieren que las especificaciones de coordenadas se expresen en sistemas de referencia cartesianos. Cada objeto de una escena se puede definir en un sis-
82
CAPITULO 2
tema de coordenadas cartesianas de modelado independiente, el cual se mapea entonces a su posicin en coordenadas universales para construir la escena. A partir de las coordenadas universales, los objetos tridimensionales se proyectan sobre un plano bidimensional, convertido a coordenadas normalizadas de dispositivo, y entonces transformado a las coordenadas finales del dispositivo de visualizacin. Las transformaciones desde las coordenadas de modelado a las coordenadas normalizadas de dispositivo son independientes de los dispositivos de salida concretos que se podran utilizar en una aplicacin. Entonces los consoladores de dispositivo se utilizan para convertir las coordenadas normalizadas en coordenadas de dispositivo enteras. Las funciones disponibles en los paquetes de programacin de grficos se pueden clasificar en las siguientes categoras: primitivas de salida de grficos, atributos, transformaciones de modelado y geomtricas, transformaciones de visualizacin, funciones de entrada, operaciones de estructuracin de imagen y operaciones de control. El sistema OpenGL consta de un conjunto de subrutinas independientes del dispositivo (llamado la biblioteca de ncleo), la biblioteca de utilidades (GLU) y el conjunto de herramientas de utilidades (GLUT). En el conjunto auxiliar de subrutinas proporcionado por GLU, hay funciones disponibles para la generacin de objetos complejos, para las especificaciones de parmetros en aplicaciones de visualizacin bidimensional, para realizar operaciones de representacin de superficies y para realizar algunas otras tareas de soporte. En GLUT, tenemos un conjunto extenso de funciones para la gestin de ventanas de visualizacin, interactuar con los sistemas de ventanas y para la generacin de algunas formas tridimensionales. Podemos utilizar GLUT para interactuar con cualquier computadora, o podemos utilizar GLX. Apple GL, WGL u otro paquete de software especfico de un sistema.
REFERENCIAS
Se dispone de informacin general acerca de las pantallas electrnicas en Tannas (1985) y en Sherr (1993). Los dispositivos de pantalla plana se estudian en Depp y Howard (1993). Informacin adicional acerca de la arquitectura de raterizacin de grficos se puede encontrar en Foley, Van Dam, Feiner y Hughes (1990). Las pantallas tridimensionales y estereoscpicas se estudian en Jhonson (1982) y en Grotch (1983). Las pantallas que forman parte de cascos y los entornos de realidad virtual se estudian en Cheng y otros (1989). Las fuentes estndar para informacin sobre OpenGL son Woo, Neider, Davis y Shreiner (1999) y Shremcr (2000). Open Inventor se explora en Wernecke (1994). MeGarthy y Descartes (1998) se pueden consultar para estudios de VRML. Se puede encontrar una presentacin de Renderfvlan en Upstill (1989). En Knudsen (1999), Hardy (2000), y Horstman y Cornell (2001) se muestran ejemplos de programacin con Java 21). La programacin de grficos empleando Java 31) se explora en Sowizral, Rushforth y Deering (2000); Palmer (2001); Selman (2002); y Walsh y Gehringer (2002). Para informacin sobre PH1GS y PH1GS + , vase Howard. Ilewin. Hubbold y Wyrwas (1991); Hopgood y Duce (1991); Gaskins (1992); y Blake (1993). Informacin acerca del estndar GKS bidimensional y la c\ olucin de los estndares grficos se encuentra disponible en Hopgood, Duce, Gallop y Sutclilfe (1983). Enderle, Kansy y PfalT(l984) es una cita bibliogrfica adicional para GKS.
EJERCICIOS
2.1 2.2 2.3 Enumere las caractersticas de funcionamiento de las siguientes tecnologas de pantalla: sistemas de barrido, sistemas de refresco vectorial, pantallas de plasma y pantallas de crisial lquido (LCD). Enumere algunas aplicaciones apropiadas para cada tecnologa de pantalla del I ejercicio 2.1. Determine la resolucin (pxeles por centmetro) en las direcciones .v ev para el monitor de vdeo que se utiliza en su sistema. Determine la relacin de aspecto y explique cmo se pueden mantener las proporciones relativas de los objetos en su sistema.
Ejercicios 2.4
83
Considere tres sistemas diferentes de barrido con resoluciones de 640 por 480, 1280 por 1024 y 2560 por 2048. Qu tamao de bfer de imagen (en bytes) es necesario para que cada uno de estos sistemas almacene 12 bits por pxel? Qu capacidad de almacenamiento se requiere para cada sistema si se han de almacenar 24 bits por pxel? Suponga un sistema de barrido RGB que debe ser diseado empleando una pantalla de 8 pulgadas por 10 pulgadas con una resolucin de 100 pxcles por pulgada en cada direccin. Si queremos almacenar 6 bits por pxel en el bfer de imagen, qu capacidad de almacenamiento (en bytes) necesitaremos para el bfer de imagen? Cunto tiempo ser necesario para cargar un bfer de imagen de 640 por 480 de 12 bits por pxel, si se pueden transirir Itr bits por segundo? Cunto tiempo ser necesario para cargar un bfer de imagen de 24 bits por pxel con una resolucin de 1280 por 1024 empleando la misma tasa de transferencia? Suponga que dispone de una computadora con palabras de 32 bits y una lasa de transferencia de 1 mip (un milln de instrucciones por segundo). Cunto tiempo ser necesario para llenar el bfer de imagen de una impesora lser de 300 dpi (dol per inch; puntos por pulgada) con un tamao de pgina de 8 1/2 pulgadas por 11 pulgadas? Considere dos sistemas de barrido con resoluciones de 640 por 480 y 1280 por 2024. A cuntos pxeles por segundo podra acceder en cada uno de estos sistemas un controlador de visualizacin que refresca la pantalla a una velocidad de 60 cuadros por segundo? Cul es el tiempo de acceso a cada pxel en cada sistema? Suponga que disponemos de un monitor de vdeo con un rea de visualizacin que mide 12 pulgadas de ancho por 9,6 pulgadas de altura. Si la resolucin es de 1280 por 1024 y la relacin de aspecto es I, cul es el dimetro de cada punto de pantalla? Cunto tiempo se necesitar para barrer cada fila de pxeles durante el refresco de la pantalla en un sistema de barrido con una resolucin de 1280 por 1024 y una velocidad de refresco de 60 cuadros por segundo? Considere un monitor de barrido no entrelazado con una resolucin de n por m (m lneas de barrido y n pxeles por lnea de barrido), una velocidad de refresco de r cuadros por segundo, un tiempo de retrazado horizontal de t , y un tiempo de relrazado vertical de t . Cul es la fraccin del tiempo total de refresco por cuadro que se consume en retrazar el haz de electrones?
h<l[ls tvrt
2.5
2.6
2.7
2.8
2.9
2.10 2.11
2.12
Cul es la fraccin del tiempo total de refresco por cuadro necesario para retrazar el haz de electrones en un sistema de barrido no entrelazado con una resolucin de 1280 por 1024, una velocidad de refresco de 60 Hz, y un tiempo de retrazado horizontal de 5 microsegundos y un tiempo de retrazado vertical de 500 microsegundos? Asumiendo que en cierto sistema de barrido RGB de color total (24 bits por pxel) tiene un bfer de imagen de 512 por 500, cuntas elecciones de color distintas (niveles de intensidad) tendramos disponibles? Cuntos colores diferentes podramos visualizar a la vez? Compare las ventajas y las desventajas de un monitor tridimensional que utiliza un espejo varifocal frente a un sistema estereoscpico. Enumere los diferentes componentes de entrada y salida que se utilizan habitualmente en sistemas de realidad virtual. Explique tambin cmo los usuarios inleractan con la escena virtual mostrada con diferentes dispositivos de salida, tales como los monitores bidimensionales y los monitores estereoscpicos. Explique cmo los sistemas de realidad virtual se pueden utilizar en aplicaciones de diseo. Qu otras aplicaciones tienen los sistemas de realidad virtual? Enumere algunas aplicaciones de las pantallas panormicas. Explique las diferencias entre un sistema de grficos general diseado para un programador y uno diseado para una aplicacin especfica, tal como el diseo en arquitectura. Explique las diferencias entre la biblioteca de ncleo de OpenGL, la biblioteca de utilidades de OpenGL (GLU) y el kit de herramientas de utilidades de OpenGL (GLUT). Qu orden podramos utilizar para establecer o cambiar el color de una ventana de visualizacin de OpenGL a gris claro? Qu orden podramos utilizar para cambiar el color de la ventana de visualizacin al color negro? Enumere las lneas que se necesitan para configurar la ventana de visualizacin de OpenGL con su esquina inferior derecha en la posicin en pxeles (200, 200), un ancho de ventana de 100 pxeles y una altura de 75 pxeles. Explique qu significa el trmino funcin de respuesta de visualizacin de OpenGL.
2.13
2.14 2.15
CAPTULO
Primitivas grficas
Una escena del video del hombre lobo. La figura animada de este primitivo licntropo est modelada con 61 huesos y ocho capas de piel. Cada imagen de la animacin infogrfica contiene 100.000 polgonos de superficie. {Cortesa de NVIDIA Corporation.)
Sistemas de coordenadas de referencia Especificacin de un sistema bidimensional de referencia universal en OpenGL Funciones de punto en OpenGL Funciones OpenGL para lneas Algoritmos de dibujo de lneas Algoritmos paralelos de dibujo de lneas Almacenamiento de los valores en el bfer de imagen Funciones OpenGL para curvas Algoritmos para generacin de crculos
3 . 1 4 Primitivas de reas rellenas 3 . 1 5 reas de relleno poligonales 3 . 1 6 Funciones OpenGL para relleno de reas poligonales 3 . 1 7 Matrices de vrtices OpenGL 3 . 1 8 Primitivas de matrices de pxeles 3 . 1 9 Funciones OpenGL para matrices de pxeles 3 . 2 0 Primitivas de caracteres 3 . 2 1 Funciones OpenGL de caracteres 3 . 2 2 Particionamiento de imgenes 3 . 2 3 Listas de visualizacin de OpenGL 3 . 2 4 Funciones OpenGL de redimensionamiento de la ventana de visualizacin 3 . 2 5 Resumen
3 . 1 0 Algoritmos de generacin de elipses 3 . 1 1 Otras curvas 3 . 1 2 Algoritmos paralelos para curvas 3 . 1 3 Direccionamiento de pxeles y geometra de los objetos
Un paquete software de propsito general para aplicaciones grficas, lo que algunas veces se denomina interfaz de programacin de aplicaciones infogrficas, proporciona una biblioteca de funciones que podemos utilizar dentro de un lenguaje de programacin como C + + para crear imgenes. Como hemos indicado en la Seccin 2.8, el conjunto de funciones de la biblioteca puede subdividirse en varias categoras. Una de las primeras cosas que necesitamos hacer al crear una imagen es describir las partes componentes de la escena que hay que mostrar. Los componentes de la imagen podran ser los rboles y el terreno, muebles y paredes, escaparates y escenas callejeras, automviles y carteles anunciadores, tomos y molculas o estrellas y galaxias. Para cada tipo de escena, tenemos que describir la estructura de los objetos individuales y las coordenadas de su ubicacin dentro de la escena. Las funciones de un pagete grfico que se utilizan para describir los distintos componentes de la^ imagen s e j g n o m m a n primitivas ^jTlcWo^mplemente~prlmit vas. Lasjjrjrnitivas grficas que describen la geometra de los objetos se denominan normalmenteprimitivas geomtricas. Las pHrTtjvas^omtrieas m F s T m ^ s ^ o i n a ^ i j e ^ i c a n posiciones de punjos^Lae^mntos de lneas rectas. Entre las primitivas geomtricas adicionales_que un paquete grfico puede incluir estnJos_c5^ulos y otras secciones cnicas, las superficies cudricas, las superficies y curvas de tipo spline yjas reas coloreadas poligonales. Y la mayora deTs~Sstemas grficos proporcionan tambin funciones para mostrar cadenas de caracteres. Despus de haber especificado la geometra de una imagen dentro de un sistema de coordenadas de referencia determinado, las primitivas grficas se proyectan sobre un plano bidimensional, que se corresponde con el rea de visualizacin de un dispositivo de salida, realizando la conversin lnea a lnea en una serie de posiciones de pxel enteras dentro del bfer de imagen. En este captulo, vamos a presentar las primitivas grficas disponibles en OpenGL y tambin hablaremos de los algoritmos de nivel de dispositivo que se utilizan para implementar dichas primitivas. La exploracin de los algoritmos de implementacin de una biblioteca grfica nos permitir comprender mejor las capacidades de estos paquetes software. Tambin nos dar una idea de cmo trabajan esas funciones, de cmo se las podra mejorar y de cmo podemos implementar nosotros mismos una serie de rutinas grficas para algu-
86 CAPTULO 3 Primitivas grficas na aplicacin especial. Las investigaciones realizadas en el campo de la infografa estn continuamente descubriendo tcnicas de implementacin nue\as o mejoradas para proporcionar mtodos para aplicaciones especiales, como las de los grficos por Internet, y para desarrollar mecanismos de visualizacin grfica ms rpidos y ms realistas.
Coordenadas de pantalla
Las ubicaciones sobre un monitor de vdeo se describen mediante coordenadas de pantalla que son nmeros enteros y que se corresponden con las posiciones de pxel dentro del bfer de imagen. Los valores de las coordenadas de pxel proporcionan el nmero de linea de exploracin (el valor v) y el nmero de columna (el valor A) dentro de una linea de exploracin. Los procesos hardware, como el de refresco de pantalla, normalmente direccionan las posiciones de pxel con respecto al extremo superior izquierdo de la pantalla. Las lneas de exploracin se identifican por tanto comenzando por 0, en la parte superior de la pantalla, y continuando hasta un cierto valor e n t e r o , ^ , en la parte inferior de la pantalla, mientras que las posiciones de pxel dentro de cada lnea de exploracin se numeran desde ( ) a . v , de izquierda a derecha. Sin embargo, con una serie de comandos software, podemos configurar cualquier sistema de referencia que nos resulte cmodo para las posiciones de pantalla. Por ejemplo, podramos especificar un rango entero para las posiciones de pantalla con el origen de coordenadas en la esquina inferior izquierda de una cierta rea (Figura 3.1), o bien podramos utilizar valores cartesianos no enteros para describir una imagen. Los valores de coordenadas que se utilicen para describir la geometra de una escena sern convertidos por las ni tinas de visualizacin a posiciones de pxel enteras dentro del bfer de imagen.
max max
Los algoritmos de lineas de exploracin para las primitivas grficas utilizan las descripciones de coordenadas que definen los objetos para determinar la ubicacin de los pxeles que hay que mostrar. Por ejemplo, dadas las coordenadas de los extremos de un segmento de lnea, un algoritmo de visualizacin debe calcular las posiciones para los pxeles comprendidos en la lnea definida entre los dos puntos extremos. Puesto que una posicin de pxel ocupa un rea finita en la pantalla, es preciso tener en cuenta esc tamao finito de los pxeles dentro de los algoritmos de implementacin. Por el momento, vamos a suponer que cada posicin entera en la pantalla hace referencia al centro de un rea de pxel (en la Seccin 3.I3 consideraremos otros esquemas alternativos de direccionamiento de pxeles). Una vez identificadas las posiciones de los pixeles para un objeto, hay que almacenar los valores de color apropiados dentro del bfer de imagen. Con este propsito vamos a suponer que tenemos disponible un procedimiento de bajo nivel de la forma
5 4 3 2 I
O
0
| 1
2 3 4 5
FIGURA 3.1. Posiciones de pxcl referenciadas con respecto a la esquina inferior izquierda de un rea de la pantalla.
setPixel
(x,
yj;
Este procedimiento almacena el valor actual de color dentro del bfer de imagen, en la posicin entera (.v, i), relativa a la posicin seleccionada para el origen de las coordenadas de la pantalla. En ocasiones, se hace necesario tambin consultar el valor actualmente almacenado en el bfer de imagen para una determinada ubicacin de pixel. Por tanto, vamos a suponer que se dispone de la siguiente funcin de bajo nivel para obtener un valor de color del bfer de imagen:
getPixel (x, y, color);
:
I n esta funcin, el parmetro recibe un valoi micro que se correspond' con los cdigos R< iB combinados almacenados para el pxcl especificado en la posicin ( A, y). Aunque slo necesitamos los valores de color en las posiciones (A\y) para una imagen bidimensional, se necesita informacin adicional de coordenadas de pantalla para las escenas tridimensionales. En este caso, las coordenadas de pantalla se almacenan como valores tridimensionales, haciendo referencia la tercera dimensin a la profundidad de las posiciones de objeto en relacin con una determinada posicin de visualizacin. Para una escena bidimensional, todos los valores de profundidad son 0.
88
3.2
En nuestro primer ejemplo de programa (Seccin 2.9), presentamos el comando g l u O r t h o 2 D , que es una funcin que podemos utilizar para fijar cualquier sistema de referencia bidimensional cartesiano. Los argumentos de esta funcin son los cuatro valores que definen los lmites de coordenadas x e y para la imagen que queremos mostrar. Puesto que la funcin g l u O r t h o 2 D especifica una proyeccin ortogonal, necesitamos tambin asegurarnos de que los valores de coordenadas se encuentren dentro de la matriz de proyeccin de OpenGL. Adems, podramos asignar ia matriz identidad como matriz de proyeccin antes de definir el rango de coordenadas del mundo. Esto garantizara que los valores de coordenadas no se acumularan con cualesquiera valores que pudiramos haber establecido previamente para la matriz de proyeccin. As. para nuestros ejemplos bidimensionales iniciales, podemos definir el sistema de coordenadas para la ventana de visualizacin en pantalla mediante las siguientes instrucciones:
g l M a t r i x M o d e (GL_PROJECTION); glLoadldentity gluOrtho2D ( ) xmax, ymin, ymax xmin,
La ventana de visualizacin estar entonces referenciada por las coordenadas (xmin. ymin) en la esquina inferior izquierda y por las coordenadas (xmax ymax) en la esquina superior derecha, como se muestra en la Figura 3.2. A continuacin, podemos designar una o ms primitivas grficas para visualizacin utilizando la referencia de coordenadas especificada en la instruccin g l u O r t h o 2 D . Si las coordenadas de extensin de una primitiva se encuentran dentro del rango de coordenadas de la ventana de visualizacin, podremos ver en sta toda la primitiva. En caso comrario, slo se mostrarn aquellas partes de la primitiva que caigan dentro de los lmites de coordenadas de la ventana de visualizacin. Asimismo, cuando establezcamos la geometra que describe una imagen, todas las posiciones para las primitivas OpenGL deben proporcionarse en coordenadas absolutas con respecto al sistema de referencia definido en la funcin g l u O r t h o 2 D .
%
3.3
Para especificar la geometra de un punto, simplemente proporcionamos las correspondientes coordenadas dentro del sistema de referencia del mundo. A continuacin, estas coordenadas, junto con las dems descripciones geomtricas que tengamos en nuestro esquema, se pasan a las rutinas de visualizacin. A menos que especifiquemos otros valores de atributos, las primitivas de OpenGL se muestran con un tamao y un color predeterminados. El color predeterminado para las primitivas es el blanco y el tamao de punto predeterminado es igual al tamao de un pxel de la pantalla. Se utiliza la siguiente funcin OpenGL para indicar los valores de coordenadas para una nica posicin:
glVertex* ( );
donde el asterisco (*) indica que esta funcin necesita cdigos de sufijo. Estos cdigos de sufijo se utilizan para identificar la dimensin espacial, el tipo de datos numrico que hay que utilizar para los valores de las coordenadas y una posible forma vectorial para la especificacin de las coordenadas. La funcin g l V e r t e x debe situarse entre una funcin g l B e g i n y una funcin g l E n d . El argumento de la funcin g l B e g i n se utiliza para identificar el tipo de primitiva grfica que hay que visualizar, mientras que g l E n d no toma ningn argumento. Para dibujar puntos, el argumento de la funcin g l B e g i n es la constante simblica GL _P0INTS. As. la manera de especificar en OpenGL la posicin de un punto es
glBegin glEnd ( (GL_POINTSi; );
g l V e r t e x * t ) ,-
89
Aunque el trmino vrtice hace referencia estrictamente a una esquina de un polgono, a un punto de interseccin de los lados de un ngulo, al punto de interseccin de una elipse con su eje principal o a otras posiciones de coordenadas similares dentro de estructuras geomtricas, se emplea la funcin g l V e r t e x para especificar coordenadas para las posiciones de los puntos. De esta forma, se utili/a una misma funcin para los puntos, las lneas y los polgonos; en la mayora de los casos, se emplean recubrimientos poligonales para describir los objetos de una escena. Las coordenadas cu OpenCiL pueden proporcionarse en dos. tres o cuatro dimensiones. Se utili/a un valor de sufijo de 2. 3 o 4 en la funcin g l V e r t e x para indicar la dimensionalidad de unas coordenadas. Una especificacin tetradimensional indica una representacin en coordenadas homogneas, donde el parmetro homogneo h (la cuarta coordenada) es un factor de escala para los valores tic coordenadas cartesianas. Las representaciones en coordenadas homogneas son tiles para expresar operaciones de transformacin en forma matricial. y hablaremos de ellas en detalles en el Captulo 5. Puesto que OpenGL trata el caso bidimcnsioirdl como un caso especial del tridimensional, cualquier \alor de coordenadas (.Y, y) es equivalente a (.v, v, 0) con h = 1. Tambin es necesario indicar el tipo de dato que se est usando para los valores numricos que especifican las coordenadas. Lsto se hace con un segundo cdigo de sufijo en la funcin g l V e r t e x . Los cdigos de sufijo para especificar el tipo de datos numricos son i (integer). s (short). f (float) y el (double). Finalmente, ios valores de las coordenadas pueden enumerarse explcitamente en la funcin g l V e r t e x , o bien puede utilizarse un nico argumento que referencie las coordenadas en forma matricial. Si utilizamos una especificacin matricial para las coordenadas, tenemos que aadir un tercer cdigo de sufijo: v (vector). En el siguiente ejemplo se dibujan tres puntos equiespaciados a lo largo de un trayecto lineal bidimensional con una pendiente igual a 2 (Figura 3.3). Las coordenadas se proporcionan como parejas de nmeros enteros:
glBegin GL_POINTS); (50, (75, (100, 100); 150); 200);
Alternativamente, podramos especificar las coordenadas de los puntos anteriores mediante matrices, ;omo en:
90
2 0 0
150100 -
50 - 1
50
1
100
1-
150
x
(GL_POINTS).
FIGURA 3 . 3 . Visualizaein de
int pointl int pont2 int point3 [ [ [ ] ] ] = = =
tres
e invocar a las (unciones Open(iL de dibujo de los tres puntos de la forma siguiente:
glBegin (GL_POINTS);
He aqui un ejemplo de especificacin de dos puntos en un marco de referencia tridimensional. En este caso, proporcionamos las coordenadas como valores explcitos en coma flotante.
glBegin (GL_POINTS); (-78.05, (261.91, 909.72, -5200.67, 14.60); 188.33);
Tambin podramos definir una clase o estructura ( s t r u c t ) C + + para especificar puntos en varias dimensiones. Por ejemplo:
c l a s s wcPt2D public: GLfloat x, y; {
Inutilizando esta definicin de clase, podramos especificar un punto en coordenadas bidimensionales universales mediante las instrucciones:
wcPt2D pointPos; 120.75; 45.30; (pointPos.x, pointPos.y);
(GL_POINTS> ,-
Y podemos emplear las funciones OpenGL de dibujo de puntos dentro de un procedimiento C + + para implementar el comando s e t P i x e l .
91
Como vemos, se obtiene un segmento de lnea entre el primer y el segundo puntos y otro segmento de lnea entre los puntos tercero y cuarto. En este caso, el nmero de puntos especificados es impar, por lo que se ignoran las coordenadas del ltimo punto. Con la constante primitiva OpenGL G L L I N E S T R I P . lo que se obtiene es una polilnea. En este caso, el grfico es una secuencia de segmentos de linca conectados que van desde el primer punto de fa lista hasta el ltimo. El primer segmento de la polilnea se traza entre el primer y el segundo puntos; el segundo segmento de lnea ir desde el segundo al tercer punto, etc., hasta llegar al ltimo vrtice. El grfico estar vaco si no incluimos las coordenadas de al menos dos puntos. Utilizando los mismos cinco conjuntos de coordenadas que en el ejemplo anterior, se obtiene el grfico de la Figura 3.4(b) con el cdigo
p3 p3 p3
FIGURA 3.4. Segmentos de linca que pueden visualizarse en OpenGL utilizando una lista de cinco vrtices, (a) Un conjunto de lincas no conectado generado con la constante de lnea primitiva GL_LINES. (b) Una polilnea generada con GL_LINE_STRIP. (c) Una polilnea cerrada generada con GL_LINE_LOOP.
La tercera primitiva de lnea O p e n G L e s G L _ L I N E _ L O O P . que genera una poiilnea c e r r a d a . Se aade una lnea adicional a la secuencia de lneas del ejemplo anterior, de modo que se conecta el ltimo vrtice de la polilinea con el primero. La Figura 3.4(e) muestra el grfico correspondiente a nuestra lista de puntos cuando se selecciona esta opcin para el trazado de lneas.
glBegin (GL_LINE_LOOP); (pl); (p2); (p3>; p4); (p5);
Como hemos indicado anteriormente, los componentes de las imgenes se describen en un marco de referencia universal que al final se hace corresponder con el sistema de coordenadas del dispositivo de salida. Entonces, la informacin geomtrica relativa a la imagen se convierte en posiciones de pxel. En la siguiente seccin, vamos a examinar los algoritmos de conversin que se utilizan para implementar las funciones de linea OpenGL.
un
93
FIGURA 3.5. Efecto de escalonamiento que se produce cuando se genera una lnea mediante una serie de poscioncs de pixel.
FIGURA 3.6. Trayecto lineal entre dos vrtices (*<> V o > y (*end- ^cnd>-
siendo m la pendiente de la lnea y b el punto de interseccin con el eje Puesto que los dos extremos del segmento de lnea tienen las coordenadas (x , y ) y ( x , v )> como se muestra en la Figura 3.6, podemos determinar los valores de la pendiente m y de punto b de interseccin con el eje y mediante las frmulas siguientes:
0 Q cnd emi
m=
"
(3.2)
b = y -m>x
Q
(i i)
Los algoritmos para la visualizacin de lneas rectas estn basados en la Ecuacin 3.1 y en los clculos indicados por las Ecuaciones 3.2 y 3.3. Para cualquier intervalo horizontal Sx a lo largo de una lnea, podemos calcular el correspondiente intervalo vertical 5y a partir de la Ecuacin 3.2, de la forma siguiente: 8y-mSx (i -4)
De forma similar, podemos obtener el intervalo v correspondiente a un valor 8\' especificado mediante la frmula:
Estas ecuaciones forman la base para determinar las tensiones de deflexin en los monitores analgicos, como por ejemplo los sistemas de visualizacin vectorial, donde pueden conseguirse cambios arbitrariamente pequeos en la tensin de deflexin. Para lneas con un valor de pendiente \m\< I, & puede definirse de forma proporcional a una pequea tensin de deflexin horizontal, y entonces la correspondiente deflexin vertical ser proporcional al valor de by calculada a partir de la Ecuacin 3.4. Para las lneas cuyas pendientes tienen un mdulo \m\ > 1, puede asignar a 5v un valor proporcional a una pequea tensin de deflexin vertical, con lo que la correspondiente tensin de deflexin horizontal ser proporcional a &, que se calcula a partir de la Ecuacin 3.5. Para las lneas con m = I, Sx = 8y y las tensiones de deflexin horizontal y vertical sern iguales. En cada uno de los casos, se generar una lnea perfectamente recta y con pendiente m entre los dos extremos especificados. En los monitores digitales, las lneas se dibujan mediante pxeles, y los pasos en la direccin horizontal o vertical estn restringidos por la separacin entre los pxeles. En otras palabras, debemos "muestrear" la lnea en posiciones discretas y determinar el pxel ms cercano a la lnea en cada posicin de muestreo. Este proceso de digitalizacin de las lneas rectas se ilustra en la Figura 3.7, utilizando posiciones de muestreo discretas a lo largo del eje x.
94
CAPITULO 3
Primitivas grficas
FIGURA 3.7. Segmento de lnea recta con cinco posiciones de mueslreo a lo largo del eje x entre x y x .
Q cnil
Algoritmo DDA
El algoritmo de anlisis diferencia/ digital (DDA, Digital Diflerential Analizar) es un algoritmo de digitalizacin de lneas basado en calcular Sy o Sx utilizando la Ecuacin 3.4 o la Ecuacin 3.5. Las lneas se muestrean a intervalos unitarios segn una de las coordenadas y los correspondientes valores enteros ms prximos al trayecto lineal se calculan para la otra coordenada. Vamos a considerar primero una lnea con pendiente positiva, como se muestra en la Figura 3.6. Si la pendiente es menor o igual que 1, muesireemos a intervalos unitarios segn el eje de las x (Sx = I) y calculamos los valores sucesivos de y como:
$ =y +m
m k
l$
El subndice k adopta valores enteros comenzando en 0 para el primer punto e incrementndose en una unidad cada vez hasta que se alcanza el extremo de la lnea. Puesto que m puede ser cualquier nmero real entre 0.0 y 1.0, cada valor calculado de_y debe redondearse al entero ms prximo, lo que nos dar la posicin de un pxel de pantalla en la columna x que estemos procesando. Para las lineas con una pendiente positiva superior a 1.5, invertimos los papeles x e>\ es decir, muestreamos a intervalos unitarios de y {8y = 1) y calculamos los valores de x consecutivos mediante: (3.7)
En este caso, cada valor de x calculado se redondea a la posicin de pixcl ms cercana en la lnea de exploracin v actual. Las Ecuaciones 3.6 y 3.7 estn basadas en la suposicin de que las lneas deben procesarse desde el extremo situado ms a la izquierda basta el extremo situado ms a la derecha (Figura 3.6). Si invertimos este procesamiento, de modo que se tome como punto inicial el situado a la derecha, entonces tendremos Sx = - 1 y
a*)
o (cuando la pendiente sea superior a 1) tendremos Sy = -1 con {3.9) m Se realizarn clculos similares utilizando las Ecuaciones 3.6 a 3.9 para determinar las posiciones de los pxeles a lo largo de una lnea con pendiente negativa. As, si el valor absoluto de la pendiente es inferior a 1 y el punto inicial se encuentra a la izquierda, haremos r = 1 y calcularemos los valores de .y mediante la Ecuacin 3.6. Cuando el punto inicial est a la derecha (para la misma pendiente), haremos Sx I y obtendremos los valores y utilizando la Ecuacin 3.8. Para una pendiente negativa con valor absoluto superior a I, usaremos Sy = I y la Ecuacin 3.9 o y = I y la Ecuacin 3.7.
95
liste algoritmo se resume en el siguiente procedimiento, que acepta como entrada dos posiciones enteras en la pantalla correspondientes a los dos extremos de un segmento lineal. Las diferencias horizontales y verticales entre los dos extremos se asignan a los parmetros dx y dy. La diferencia con mayor valor absoluto determina el valor del parmetro s t e p s . Partiendo de la posicin (xO, yo), determinemos el desplazamiento requerido en cada paso para generar el siguientepxel de la lnea. Este proceso se ejecuta en bucle un nmero de veces igual a s t e p s . Si el mdulo de dx es superior al mdulo de dy y xO es inferior a xEnd, los valores de los incrementos en las direcciones * cy son I y w, respectivamente. Si el cambio mayor se realiza en la direccin ,v, pero x O es superior a xEnd, entonces se utilizan los decrementos - 1 y m para generar cada nuevo punto de la lnea. En los restantes casos, utilizamos un incremento (o decremento) unitario en la direccin v y lili incremento (o decremento) para x igual a ~.
<stdlib.h> <math.h> round (int (const xO, xO, f l o a t a) int yO, int { return xEnd, yO, xO, int int (a yEnd) k; yO; + 0.5); )
lineDDA
i n t dx = xEnd float if
dy yEnd x
steps, y
{fabs steps
fabs fabs * *
else steps = xlncrement ylncrement float float float float (steps); (steps);
(round 0;
(x) ,
round k++)
(y)); {
k < steps;
setPixel
El algoritmo DDA es un mtodo para el clculo de posiciones de pxeles ms rpido que implementar directamente la Ecuacin 3.1. Se elimina la multiplicacin de la Ecuacin 3.1 haciendo uso de las propias caractersticas del proceso de digitalizacin, aplicndose los incrementos apropiados en las direcciones x o y para pasar de una posicin de pxel a la siguiente a lo largo de la lnea. Sin embargo, la acumulacin de errores de redondeo en las sucesivas sumas del incremento de coma flotante pueden hacer que las posiciones de pxel sufran cierta deriva con respecto al verdadero trayecto lineal, para segmentos lineales largos. Adems, las operaciones de redondeo y la aritmtica en coma flotante inherentes a este procedimiento siguen consumiendo mucho tiempo. Podemos mejorar la velocidad del algoritmo DDA separando los incrementos ni y en sus partes entera y fraccionaria, reduciendo as todos los clculos a operaciones con nmeros enteros. En la Seccin 4.10 se explica el mtodo para calcular los incrementos ; en pasos enteros. Adems, en la siguiente seccin vamos a considerar una tcnica ms genrica de digitalizacin de lneas que puede aplicarse tanto a lneas como a curvas.
96
CAPTULO 3
Primitivas grficas
13 12 II 10 10
11
12
13 FIGURA 3.9. Una seccin de una pantalla donde hay que dibujar un segmento lineal de pendiente negativa, partiendo del pxel situado en la columna 50 de la lnea de exploracin 50.
FIGURA 3.8. Una seccin de una pantalla donde hay que dibujar un segmento lineal, comenzando a partir del pxel situado en la columna 10 de la lnea de exploracin 11.
En la posicin de rnuestreo x + I, etiquetamos las separaciones verticales de los pxeles con respecto al trayecto lineal matemtico con los nombres d y / (Figura 3.11). La coordenada^ de la lnea matemtica en la columna de pxel x + 1 se calcula como:
k ower lipper k
97
.v - -
xk + I
lowcr
FIGURA 3.10. Una seccin de la pantalla que muestra un pxel de la columna x correspondiente a la lnea de exploracin y y que hay que dibujar como parte del trayecto de un segmento lineal con pendiente 0 < m < I.
k A
4*
=(y +i)-y
4
= y
+ \-m{x
+!)-/>
(3.12)
Para determinar cul de los dos pxelcs est ms prximo a la lnea, podemos realizar una comprobacin muy eficiente que se basa en la diferencia entre las dos separaciones de los pxeles: 4m ~ d
m
= 2m(x +1) - 2y + 2b -1
t k k
(3.13)
Podemos obtener un parmetro de decisin p para el paso A-simo del algoritmo de digitalizacin de lineas reordenando la Ecuacin 3.13 para que slo haya que realizar clculos enteros. Podemos hacer esto realizando la sustitucin m = Ay/Ax, donde Ay y Ax son las separaciones vertical y horizontal entre los dos extremos de la lnea, y definiendo el parmetro de decisin como P *ML*-< cr) = 2Ayx -2Ax-y +c
t PP t k
(3.14)
te y tiene el valor 2Ay + Ax(2b 1), que es independiente de la posicin del pxel y se eliminar en los clculos recursivos de p . Si el pxel de y est "ms prximo" al trayecto lineal que el pxel d e y + I (es decir, ^lower ^ c n l o n c e s e ' parmetro de decisin p ser negativo. En dicho caso, dibujaremos el pxel inferior; en caso contrario, dibujaremos el superior. Los cambios de coordenadas a lo largo de la lnea se producen en pasos unitarios en las direcciones " o y.
k k A < k
Por tanto, podemos obtener los valores de los sucesivos parmetros de decisin utilizando clculos enteros
Pk-\
=2&yx -2&x
M
1+
Pero si restamos la Ecuacin 3.14 de sta ltima ecuacin, tendremos: &*t -Pk Y como x
k+l
=2Ay(^,-x )-2Ax(y
k
k b i
-y )
k
= x + 1, nos queda:
k
=+2-2(->\)
donde el t r m i n o y
k+{
98
Este clculo recursivo de los parmetros de decisin se reali/a en cada posicin entera x comen/ando por el extremo izquierdo de la linea. 1:1 primer parmetro./> , se evala a partir de la Ecuacin 3.14 en la posicin
0
Resumimos el algoritmo de Bresenham para lineas con una pendiente positiva inferior I en el siguiente
recuadro. Las constantes 2Av y 2Ay - 2Ax se calculan una nica vez para cada lnea que hay que digitali/ar. por lo que las operaciones aritmticas slo requieren sumas y restas enteras de estas dos constantes.
2. Configurar el color para la posicin (x y ) del bfer del imagen, es decir, dibujar el primer punto.
0% 0
3. Calcular las constantes , , 2Ay y 2Ay - 2, y obtener el valor inicial del parmetro de decisin, que ser
P
k k
= 2A
- " A*
k k
4. Para cada x a lo largo de la lnea, comenzando en = 0, realizar la siguiente comprobacin. Si p < 0, el siguiente punto que hay que dibujar ser (x + Uy ) y
+\ =/>* + 2 En caso contrario, el siguiente punto que habr que dibujar es (x +
k
1) y
Pk+\
5. Realizar el Paso 4 . -1 veces.
= P
+ 2Ay-2Ax
Ejemplo 3 .1 Dibujo de lneas m e d i a n t e el algoritmo de Bresenham Para ilustrar el algoritmo, vamos a digitalizar la linea definida por los vrtices (20, 10) y (30, 18). Esta lnea tiene una pendiente de 0,8, con:
AA
= 10, Ay = 8
El parmetro de decisin inicial tiene el valor: Po =2Ay-Ax = 6 y los incrementos para calcular los sucesivos parmetros de decisin son: 2Ay = 16, 2 A y - 2 A r = -4
Dibujamos el punto inicial (*<,,><)) = (20, 10) y determinamos las posiciones sucesivas de los pxeles a lo largo de la lnea teniendo en cuenta los valores del parmetro de decisin:
0 1 2 3 Pk 6 2 -2 14
<**+! )
(21. II) (22. 12) (23. 12) (24, 13)
4 5 6
Pk 10 6 2
\Pk
-2
14 10
i
9
99
2 0 21 22
FIGURA 3.12. Posiciones do los pxeles a lo largo de la lnea comprendida entre los vrtices (20, 10) y (30, 18), dibujada con el algoritmo de Bresenham.
En la Figura 3.12 se muestra una grfica de los pxeles generados para este proyecto lineal.
En el siguiente procedimiento se da una implementacin del algoritmo de dibujo de lneas de Bresenham para pendientes comprendidas en el rango 0 < m < 1.0. En este pxel se introducen las coordenadas de los extremos de la lnea y los pxeles se dibujan comenzando a partir del extremo izquierdo.
<stdlib.h> <math.h> d i b u j o de l n e a s x0, int yO, int de Bresenham para int yEnd) |in| < 1.0
A l g o r i t m o de neBres
(int
xEnd,
{
i n t dx int p = int int /* if x y x, = 2 y; extremo usar como p o s i c i n inicial. */ fabs * dy 2 (xEnd dx; twoDyMinusDx * 2 * (dy dx) ; * dy, xG), dy fabs(yEnd yO);
twoDy
XEnd
)
else X y {
a
i
setPixel while if (x < xEnd) (p < p + 0) twoDy;
else
y++; p += twoDyMinusDx;
i
setPixel (x, y);
} ) El algorilmo de Bresenham puede generalizarse a lneas de pendiente arbitraria considerando la simetra existente entre los diversos octantes y cuadrantes del plano x. Para una lnea con pendiente positiva superior a 1.0, intercambiamos los papeles de las direcciones x e y. En otras palabras, avanzamos paso a paso por la direccin y con incrementos unitarios y calculamos los valores de x sucesivos ms prximos a la trayectoria tic la lnea. Asimismo, podramos tambin revisar el programa para dibujar los pxeles comenzando a partir de cualquiera de los dos extremos. Si la posicin inicial para una lnea con pendiente positiva es el extremo derecho, habr que decrementar tanto x como y a medida que avanzamos paso a paso de derecha a izquierda. Para garantizar que siempre se dibujen los mismos pxeles independientemente de cul extremo se utilice como punto inicial, elegiremos siempre el pixcl superior (o inferior) de los dos candidatos cuando las dos separaciones verticales con respecto al trayecto de la lnea sean iguales ( / = ^ )- P pendientes negativas, los procedimientos son similares, salvo porque ahora una de las coordenadas se decrementa a medida que la otra se incrementa. Finalmente, los casos especiales pueden tratarse por separado: las lneas horizontales (Ay = 0), las lneas verticales (Ax = 0) y las lneas diagonales (|Av = |Av|) pueden cargarse directamente en el bfer de imagen sin necesidad de procesarlas mediante el algoritmo de dibujo de lneas.
a r a
) o w c r
u p p c r
Visualizacin de polilneas
La implementacin de un procedimiento de dibujo de polilneas se realiza invocando // - l veces un algoritmo de dibujo de lneas, con el fin de visualizar las lneas que conectan los // vrtices. Cada llamada sucesiva pasa al procedimiento la pareja de coordenadas necesaria para dibujar el siguiente segmento lineal, utilizando como primer punto el ltimo punto de la anterior pasada. Despus de haber cargado en el bufer de imagen los valores de color para las posiciones de pxeles situadas a lo largo del primer segmento lineal, procesamos los subsiguientes segmentos lineales comenzando con la siguiente posicin de pxel situada despus del primer vrtice de este segmento. De esta forma, nos evitamos asignar dos veces el valor de color a algunos de los vrtices. En la Seccin 3.13 presentaremos con ms detalle algunos mtodos que se utilizan para evitar el solapamiento de los objetos visualizados.
101
un extremo izquierdo con coordenadas (A* , V ). particionaremos la linea a lo largo de la direccin X positiva. La distancia entre ias posiciones x iniciales de las particiones adyacentes puede calcularse como:
0 0
Ar + ir - 1
AA-=
'
p
i?)
donde Ax es la anchura de la lnea y el valor Ax de anchura de la particin se calcula empleando una divisin entera. Si numeramos ias particiones y los procesadores como 0. 1.2, hasta n - 1, podemos calcular la coordenada x inicial de la particin A-sima mediante la frmula:
p
x = x +kAx
k 0 p
(18)
Como ejemplo si tenemos n = 4 procesadores con Av = 15, la anchura de las particiones ser 4 y los valores .v iniciales de las particiones sern x . JV + 4, x + 8 y x + 12. Con este esquema de particionamiento. la anchura del ltimo subintervalo (el situado ms a la derecha) ser menor que la de los otros en algunos casos. Adems, si los extremos de cada lnea no tienen valores enteros, los errores de truncamiento pueden hacer que existan anchuras de particin variables a lo largo de la lnea. Para aplicar el algoritmo de Bresenham a las particiones, necesitamos el valor inicial de la coordenada v y el valor inicial del parmetro de decisin para cada particin. El cambio Ay en la particin v para cada particin se calcula a partir de la pendiente /; de la lnea y de la anchura Ax de la particin:
0 0 0 0 p p
Ay=mAv
/(
(3.19)'
&M
El parmetro de decisin inicial para el algoritmo de Bresenham al principio del subintervalo A-simo se obtiene a partir de la Ecuacin 3.14: p = (kAx )(2Ay) - round AAv )(2Av) + 2Ay - Av
k p (
(3.21)
Cada procesador calcular entonces las posiciones de los pxeles para su subintervalo asignado, utilizando el valor inicial del parmetro de decisin que acabamos de calcular y las coordenadas iniciales {.x ,y ). Los clculos en coma flotante pueden reducirse a operaciones aritmticas enteras utilizando los valores iniciales y y p pero sustituyendo m = Ay/Ax y reordenando los trminos. Podemos ampliar el algoritmo paralelo de Bresenham para una lnea con pendiente superior a 1.0 particionando la linea en la direccin y y calculando los valores x iniciales para las distintas particiones. Para las pendientes negativas, incrementaremos los valores de la coordenada en una direccin y decrementaremos en la otra. Otra forma de implementar algoritmos paralelos en sistemas digitales consiste en asignar a cada procesador un grupo concreto de pxeles de la pantalla. Con un nmero suficiente de procesadores, podemos asignar cada procesador a un pxel dentro de una determinada zona de la pantalla. Esta tcnica puede adaptarse a la visualizacin de lneas asignando un procesador a cada uno de los pxeles comprendidos dentro de los limites de las extensiones de coordenadas de la lnea y calculando ias distancias de los pxeles con respecto al trayecto lineal. El nmero de pxeles dentro del recuadro de contomo de una lnea es Av Av (Figura 3.13). La distancia perpendicular el entre la linca de la Figura 3.13 y un pxel de coordenadas (.v, y) se obtiene mediante la frmula: d = Ax + By + C (3.22)
k k k k
donde
longitudlinea
102
FIGURA 3.13. Recuadro de contorno para una lnea ci separaciones Av y Ay entre los dos extremos.
eiHl
longitudlinea x Ay-y Ar
0 0
Una ve/ evaluadas las constantes A, li y (' para la linea, cada procesador debe realizar dos multiplicaciones y dos sumas para calcular la distancia ddel pxel. El pxel ser dibujado si J e s inferior a un parmetro determinado que espccitlque el grosor de la linea. En lugar de particionar la pantalla en pxeles. podemos asignar a cada procesador una lnea de exploracin o una columna de pxeles. dependiendo de la pendiente de la linca. Cada procesador calcular entonces la interseccin de la linea con la Illa horizontal o columna vertical de pxeles que se le han asignado. Para una linea con pendiente \m\ < 1.0. cada procesador simplemente despeja el valor de y en la ecuacin de la linea a partir de un valor de columna v. Para una lnea con pendiente de magnitud superior a 1.0. cada procesador despeja .v en la ecuacin de la lnea, dado un cierto valor y que especifica la lnea de exploracin. Estos mtodos directos, aunque resultan lentos en las mquinas secucnciales, pueden realizarse de manera etlciente utilizando mltiples procesadores.
a d d r . v) = addr<(),())+ v(.v
mjx
+ I) + x
(3-23)
Si nos movemos a lo largo de una linea de exploracin, podemos calcular la direccin en el bfer de imagen para el pxel (.y + I ,y) como el siguiente desplazamiento a partir de la direccin correspondiente a la posicin (.v, y):
103
(0,0)
(L.O)
(2.0)
/
<W<
\
<<> I)
ADDNO.O)
addr (A. v)
Bfer de imagen
Panuilla
FIGURA 3.14. Posiciones en pantalla de los pxeles almacenados Idealmente en orden ascendente de lilas dentro del bfer de imagen. addr(.v + l.y) = addr.v, y) +1
{3.24) (3.25)
Si nos movemos en diagonal hasta la siguiente lnea de exploracin a partir de (.v,y), tendremos la direccin del bfer de imagen correspondiente a <.v + I, y + I) sin ms que aplicar la frmula: a d d r + I. y + 1 ) = addr(.v. v) + X,
donde la constante # + 2 se precalcula una nica ve/ para todos los segmentos de lnea. Podemos obtener clculos incremntales similares a partir de la Ecuacin 3.23 para pasos unitarios en las direcciones negativas de x e y. Cada uno de los clculos de direcciones implica nicamente una suma entera. Los mtodos para implementar estos procedimientos dependen de las capacidades de cada sistema concreto y de los requisitos de diseo del paquete software. En aquellos sistemas que pueden mostrar un rango de valores de intensidad para cada pixel, los clculos de las direcciones del bfer de imagen incluirn la anchura de los pxeles (nmero de bits), adems de la ubicacin del pixel en pantalla.
104
(a)
(b)
(c)
F I G U R A 3 . 1 5 . Un arco circular aproximado mediante (a) tres segmentos de lnea recta, (b) seis segmentos de lnea y (c) doce segmentos de lnea.
cientes para la generacin de crculos y elipses y luego echaremos un vistazo a los procedimientos utilizados para mostrar otras secciones cnicas, polinomios y splines.
(x-x ) +(y-y ?
c c
=r
(3.26)
Podemos utilizar esta ecuacin para calcular la posicin de los puntos sobre una circunferencia, recorrien-
Pero este no es el mejor mtodo para generar un crculo. Uno de los problemas con este mtodo es que requiere unos considerables clculos en cada paso. Adems, el espaciado entre los pxeles dibujados no es uniforme, como se ilustra en la Figura 3.17. Podramos ajustar el espaciado intercambiando . r e y (recorriendo los valores y y calculando los valores A) cuando el valor absoluto de la pendiente del crculo sea superior a 1. pero esto simplemente incrementa la cantidad de clculos y de procesamiento requerida por el algoritmo.
FIGURA 3.17. Parle superior de un crculo dibujada mediante la Ecuacin 3.27 y con ( A> y ) = (0 0).
c
Otra forma de eliminar el espaciado desigual mostrado en la Figura 3.I7 consiste en calcular los puntos de la circunferencia utilizando las coordenadas polares r y 0 (Figura 3.16). Si expresamos la ecuacin de la circunferencia en forma paramtrica polar, obtenemos la pareja de ecuaciones: x = x
t
+rcos0 (3.28)
y = y +rsin0
Cuando se genera una grfica con estas ecuaciones utilizando un paso angular lijo, se dibujar un circulo con puntos equiespaciados a lo largo de toda la circunferencia. Para reducir el nmero de clculos, podemos utilizar una gran separacin angular entre los puntos de la circunferencia y conectar los puntos mediante segmentos de lnea recta con el fin de aproximar la trayectoria circular. Para obtener un trazado ms continuo en un monitor digital, podemos fijar como paso angular el v a l o r ; . Esto nos da posiciones de pxel que estn separadas aproximadamente una unidad. Pero aunque las coordenadas polares proporcionan un espaciado homogneo de los puntos, los clculos trigonomtricos siguen siendo bastante laboriosos. Para cualquiera de los mtodos anteriores de generacin de crculos, podemos reducir los clculos considerando la simetra que los crculos presentan. La forma del circulo es similar en cada uno de los cuadrantes. Por tanto, si determinamos las posiciones de la curva en el primer cuadrante, podemos generar la seccin circular del segundo cuadrante del plano i observando que ambas secciones son simtricas con respecto al eje y. Y la secciones circulares de los cuadrantes tercero y cuarto pueden obtenerse a partir de las secciones de los dos primeros cuadrantes considerando la simetra con respecto al eje v. Podemos llevar este razonamiento un paso ms all y observar que tambin existe simetra entre los ociantes. Las secciones circulares situadas en octantes adyacentes dentro de un mismo cuadrante son simtricas con respecto a la lnea de ngulo 45 que divide los dos ociantes. Lstas condiciones de simetra se ilustran en la Figura 3.18, en la que un punto en la posicin ( A , y) sobre un sector de un octavo de crculo se hace corresponder con los otros siete puntos del circulo situados en los restantes octantes del plano v. Aprovechando la simetra del crculo de esta forma, podemos generar todas las posiciones de pxel alrededor del crculo calculando nicamente los puntos correspondientes al sector que va desde x = 0 a .v = y. La pendiente de la curva en este ociante tiene una magnitud igual o inferior a 1.0. Para ,v = 0, la pendiente del crculo es 0 y para x = y, la pendiente es - 1 , 0 . Determinar las posiciones de los pxeles sobre una circunferencia utilizando las consideraciones de simetra y la Ecuacin 3.26 o la Ecuacin 3.28 sigue requiriendo una gran cantidad de clculos. La ecuacin cartesiana 3.26 implica realizar multiplicaciones y races cuadradas, mientras que las ecuaciones paramtricas contienen multiplicaciones y clculos trigonomtricos. Otros algoritmos de generacin de circunferencias ms eficientes se basan en clculos incremntales de parmetros de decisin, como en el algoritmo de Bresenham para lneas; estos clculos basados en parmetros de decisin slo implican realizar operaciones simples con enteros.
106
(V.
1)
-x.y)f x.
FIGURA 3.18. Simetra de un crculo. El clculo de un punto ( . v . y) del crculo en uno de los ociantes nos da los puntos del crculo que se muestran para los otros siete ociantes.
-Y)
(-y. 1y,
-X)
-x)
Podemos adaptar el algoritmo de dibujo de lneas de Bresenham a la generacin de crculos definiendo los parmetros de decisin para hallar el pxel ms cercano a la circunferencia en cada paso de muestreo. Sin embargo, la Ecuacin 3.26 del crculo es no lineal, por io que hara falta calcular races cuadradas para hallar las distancias de los pxeles con respecto a la trayectoria circular. Et algoritmo de Bresenham para circuios evita estos clculos de races cuadradas comparando los cuadrados de las distancias de separacin de los pxeles. Sin embargo, se puede realizar una comparacin directa de distancias sin necesidad de hallar races cuadradas. La idea bsica que subyace a este mtodo consiste en comprobar si el punto medio situado entre dos pxeles est situado dentro o fuera del crculo. Este mtodo se puede, asimismo, generalizar ms fcilmente a otras cnicas y para un crculo de radio entero, esta tcnica del punto medio genera las mismas posiciones de pxel que el algoritmo de Bresenham para crculos. Para un segmento de lnea recta, el mtodo del punto medio es completamente equivalente al algoritmo de Bresenham para lneas. Asimismo, el error mximo a la hora de determinar las posiciones de los pxeles para cualquier seccin cnica utilizando el test del punto medio est limitado a un medio de la separacin entre pxeles.
Cualquier punto (.v, v) en la frontera del crculo de radio r satisfar la ecuacin / (v. v) - 0. Si el punto se encuentra en el interior del crculo, la funcin tomar un valor negativo, mientras que si el punto se encuentra fuera del circulo, el valor de la funcin ser positivo. En resumen, la posicin relativa de cualquier punto (.v, v) puede determinarse comprobando el signo de la funcin generadora del crculo:
cjrc
< 0. si U.y) se encuentra dentro del crculo = 0. si (.v. v) se encuentra sobre la circunferencia > 0. si (.v. v) se encuentra fuera del crculo Las comprobaciones de la Ecuacin 3.30 se realizan para los puntos intermedios situados en la vecindad de la trayectoria circular en cada paso de muestreo. As. la funcin generadora del crculo es un parmetro de (3.30)
107
x + y- r = 0
2
Pumo m e d i o
+ I
x +
t
FIGURA 3.19. Punto medio entre los dos pixeles candidatos para la posicin de mustreos + a lo largo de una trayectoria circular.
decisin en el algoritmo del punto medio, y podemos determinar los clculos incremntales necesarios para esta funcin, como hicimos con el algoritmo de generacin de lineas. La Figura 3.19 muestra el punto medio entre los dos pixeles candidatos para la posicin de muestreo x + I. Suponiendo que acabemos de dibujar el pxel tv. necesitaremos a continuacin determinar si el pxel en la posicin {x + I, y ) se encuentra ms cerca o ms lejos del crculo que el situado en la posicin {.x + I, y - I). Nuestro parmetro de decisin ser la licuacin 3.29 de generacin del crculo, evaluado en c: punto medio entre estos dos pixeles:
k k k k
tun
Si p 0. este punto medio se encontrar en el interior del crculo y el pxel situado en la lnea de exploracin y estar ms cerca de la frontera del circulo. Fn caso contrario, el punto intermedio se encuentra fuera del circulo o sobre la misma circunferencia, y seleccionaremos el pxel correspondiente a la lnea de exploracin y - I. Los sucesivos parmetros de decisin se obtienen ulili/ando clculos incremntales. Podemos obtener una trmula recursiva para el siguiente parmetro de decisin evaluando la funcin circular en la posicin de muestreo x + 1 = x + 2:
k k k k k
= [<* + n+ir +
t
:y**,"
-r'
donde y . , es y o y - 1, dependiendo del signo de p . Los incrementos para obtener p , son 2 v , + I (si p es negativo) o 2 v , + 1 2y La evaluacin de los trminos 2x y 2 v tambin puede hacerse incrementalmente mediante las frmulas:
k k k k k i A+ k Ai kl k+ + |
2x^=2*,+2 2y . =2y -2
i l A
En la posicin inicial (0, /). estos dos trminos tienen los valores 0 y 2/*, respectivamente. Cada valor sucesivo para el trmino 2v , se obtiene sumando 2 al valor anterior y cada valor sucesivo del trmino 2y , , se obtiene restando 2 al valor anterior.
A( k
108 CAPTULO 3 Primitivas grafitos El parmetro de decisin inicial se obtiene evaluando ia funcin de generacin del crculo en la posicin inicial (.v,,. _) = ( 0 , r): A, = / , ( '
= l+| r - | I - r
0M
{}
Si el radio r est especificado como un valor entero, podemos simplemente redondear p de la forma siguiente: p = \-r
(para / entero)
dado que lodos los incrementos son enteros. Como en el algoritmo de lneas de Bresenham, el mtodo del punto medio calcula las posiciones de los pixeles a lo largo de la circunferencia utilizando sumas y restas enteras, suponiendo que los parmetros del crculo estn especificados en coordenadas enteras de pantalla. Podemos resumir los pasos del algoritmo del punto medio para generacin de crculos de la forma siguiente.
( w ) = (o,
c
3. Para cada posicin xy comenzando en k = 0, realizar la siguiente comprobacin. Si p < 0, el siguiente punto a lo largo de un crculo centrado en (0,0) ser {x y ) y,
k k+iJ k
P^=P 2x +\
t ktl
donde
=2x y2y
k
k+]
=2y -2.
k
4. Determinar los puntos simtricos en los otros siete ociantes. 5. Mover cada posicin de pxel (x, y) calculada hasta la trayectoria circular centrada en (x ,y ) y dibujar los valores de coordenadas:
c c
x=x+x ,
c
y = y+y
2x =0,
n
2y =20
0
En la siguiente tabla se enumeran los valores sucesivos del parmetro de decisin del punto medio y las correspondientes coordenadas a lo largo de la circunferencia. k 0 ! 2 3 4 5 6 P* -9 -6 -l 6 -3 8 5 (I. 10) (2, l < > > (3,10) (4, 9) (5,9) (6.8) (7,7)
2
** 1
+
% M
2 4 6 8 10 12 14
20 20 20 18 18 16 14
En la Figura 3.20 se muestra una grfica de las posiciones de pxel generadas en el primer cuadrante.
y = X
s
7
o O O
P;
O
7 7
/
"O
\s
y \
i
\
s J s
/
i 0
10
F I G U R A 3.20. Posiciones de los crculos (crculos rellenos) a lo largo de un arco circular centrado en el origen y con radio r = 10, calculadas mediante el algoritmo del punto medio para generacin de crculos. Los crculos abiertos (huecos) muestran las posiciones simtricas en el primer cuadrante.
110
El siguiente segmento de cdigo ilustra los procedimientos que podran emplearse para implementar el algoritmo del punto medio para generacin de crculos. AI procedimiento c i r c l e M i d p o i n t hay que pasarle el valor del radio del crculo y las coordenadas del centro del crculo. Entonces, se calcula una posicin de pxel dentro del primer octanle de la trayectoria circular y se pasa dicha posicin al procedimiento c i r c l e P l o t P o i n t s . Istc procedimiento almacena el color correspondiente al crculo en el bfer de imagen para todas las posiciones simtricas dentro del circulo, efectuando llamadas repetidas a las rutina s e t P i x e l , que est implementada con las funciones de dibujo de puntos de OpenGL.
include class f
<GL/glut.h>
screenPt
screenPt
x = y =
}
void setCoords (GLint xCoordValue, GLint yCoordValue) { X = xCoordValue; y = yCoordValue;
}
GLint g e t x ( ) const { return X;
}
GLint g e t y return ( ; ( ) { const {
}
void incrementx
X++ ;
}
void decrementy -; ( ) {
b
void s e t P i x e l { glBegin glEnd
>
(GLint xCoord,
GLint yCoord)
glVertex2i (
void circleMidpoint
(GLint
xc,
GLint
yc,
GLint
radius)
{
screenPt circPt;
GLint p = l -
radius; (0,
// radius);
para
P1
circPt.setCoords
coordenadas del
superior screenPt);
crculo.
void /*
GLint,
Dibujar
en cada
cuadrante
del
crculo.
*/
circlePlotPoints /* Calcular el
siguiente ( ) {
while
(circPt.getx
< circPt.gety );
2 * circPt.getx (
( J; (
1;
circPt.deciementy p + 2 *
(circPt.getx
- circPt.gety
))
+ 1;
}
circlePlotPoints (xc, ye, circPt);
void c i r c l e P l o t P o i n t s
(GLint
xc,
GLint
ye,
screenPt
circPt)
),
ye + c i r c P t - g e t y ye ye ye circPt.gety
( ( ( ( ( (
), ) , i , , ), ),
circPt.gety circPt.gety
ye + c i r c P t . g e t x ye + c i r c P t . g e t x ye ye
- circPt.getx
circPt.getx
112
CAPTULO 3
Mmmvasgrficas
v
P=( . r . v>
d. + / , = constante
{
(3.34)
2
Expresando las distancias </, y d-> en trminos de las coordenadas de los locos F, = (*,, y ) y F-, = (x , v->). tendremos: yjix-x, ) + ( y - v , y + yj{x-x ) + ( . v - y )
2 2 : : 2
= constante
Elevando esta ecuacin al cuadrado, despejando la raz cuadrada restante y volviendo a elevar al cuadrado, podremos reescribir la ecuacin general de la elipse de la forma A r + By + C.vy + Dx + Ex + F = 0
:
(3.36)
donde los coeficientes A.B.C.D.Ey F se evalan en trminos de las coordenadas de los focos y de las dimensiones de los ejes mayor y menor de la elipse. El eje mayor es el segmento de linea recta que se extiende desde un lado de la elipse hasta el otro a travs de los focos. El eje menor abarca la dimensin ms pequea de la elipse, bisecando perpendicularmente el eje mayor en su punto medio (centro de la elipse) situado entre los dos focos. Un mtodo interactivo para especificar una elipse con una orientacin arbitraria consiste en introducir ios dos focos y un punto de la elipse. Con estos tres conjuntos de coordenadas, podemos evaluar la constante de la Ecuacin 3.35. Entonces, se pueden calcular los valores de los coeficientes de la Ecuacin 3.36 y utilizarlos para generar los pxeles a lo largo de la trayectoria elptica. Las ecuaciones de la elipse se pueden simplificar enormemente si se alinean los ejes mayor y menor con los ejes de coordenadas. En la Figura 3.22 se muestra una elipse en "posicin estndar", con los ejes mayor y menor orientados en paralelo a los ejes.v cy. El parmetro r de este ejemplo indica el semieje mayor, mientras que el parmetro r indica el semieje menor. La ecuacin de la elipse mostrada en la Figura 3.22 puede escribirse en trminos de las coordenadas del centro de la elipse y de los parmetros r y r de la forma
x x v
siguiente:
(3.37)
Utilizando las coordenadas polares / y 0. podemos tambin describir la elipse en su posicin estndar con las ecuaciones paramtricas: x = x +r cos?
t x
y = y +r sinfl
t
(3.3S)
\ e
- J 1
" " ^
i
(-v. ->
%i V
X
FIGURA 3.24. Simetra de una elipse. El clculo de un
FIGURA 3.23. El crculo circunscrito y el ngulo de excentricidad 8 para una elipse con r > r .
x y
punto ( . v , y) en un cuadrante nos da los puntos de la elipse que se muestran para los otros tres cuadrantes.
El ngulo ft denominado ngulo de excentricidad de la elipse, se mide a lo largo del permetro de un circulo circunscrito. Si r > ty, el radio del crculo circunscrito es r = r (Figura 3.23). En caso contrario, el crculo circunscrito tiene como radio r = r . Al igual que con el algoritmo del crculo, pueden utilizarse consideraciones de simetra para reducir los clculos. Una elipse en posicin estndar presenta simetra entre los distintos cuadrantes pero, a diferencia del crculo, los dos ociantes de cada cuadrante no son simtricos. Por tanto, deberemos calcular las posiciones de los pxeles a lo largo del arco elptico que recorre un cuadrante y luego utilizar las consideraciones de simetra para obtener las posiciones de la curva en los tres cuadrantes restantes (Figura 3.24).
K K v
El mtodo del punto medio para la elipse se aplica en dos partes para todo el primer cuadrante. La Figura 3.25 muestra la divisin del primer cuadrante de acuerdo con la pendiente de una elipse con r < r . Procesamos este cuadrante tomando pasos unitarios en la direccin x all donde la pendiente de la curva tenga una magnitud inferior a 1.0 y luego tomando pasos unitarios en la direccin y cuando la pendiente tenga una magnitud superior a 1.0.
x y
Las regiones 1 y 2 (Figura 3.25) pueden procesarse de diversas formas. Podemos empezar en la posicin (0. r ) y avanzar en el sentido de las agujas del reloj a lo largo del primer cuadrante de la trayectoria elptica, pasando de utilizar pasos unitarios segn x a pasos unitarios segn y cuando la pendiente sea inferior a - 1 . 0 . Alternativamente, podramos empezar en (r , 0) y seleccionar los puntos en sentido contrario a las agujas del reloj, pasando de utilizar pasos unitarios segn y a pasos unitarios segn x cuando la pendiente sea superior a -1.0. Si tuviramos varios procesadores trabajando en paralelo, podramos calcular las posiciones de los pxeles en ambas regiones simultneamente. Como ejemplo de implementacin secuencial del algoritmo del punto medio, vamos a tomar como posicin inicial (0, r ) y a recorrer la trayectoria de la elipse en el sentido de las agujas del reloj para todo el primer cuadrante.
v v
Podemos definir una funcin de la elipse a partir de la Ecuacin 3.37 con (x , y ) = (0, 0), de la forma siguiente:
c c
Pendime = -
y r.
r,
i \
1
X 1
1 1
punto m e d i o
#- 0
x +l
k
FIGURA 3.25. Regiones de procesamiento para la elipse. En la regin I. la magnitud de la pendiente de la elipse es interior a 1.0; en la regin 2. la magnitud de la pendiente es superior a 1.0.
FIGURA 3.26. Punto medio entre los pxeles candidatos para la posicin de mueslreo x + I a lo largo de una trayectoria elptica.
(3.39)
que tiene las siguientes propiedades: < 0, si (.v.y) est dentro de la elipse = 0. si U._v) est sobre la elipse > 0. si ( A \>) est lucra de la elipse As, la funcin de la elipse / ( A \ y) se puede utilizar como parmetro de decisin para el algoritmo del punto medio, En cada posicin ue mueslreo, seleccionamos el siguiente pxel de la trayectoria elptica de acuerdo con el signo de la funcin de la elipse, evaluado en el punto medio entre los dos pxeles candidatos. Comenzando en (0, rA tomamos pasos unitarios en la direccin v hasta que alcanzamos la frontera entre las regiones I y 2 (Figura 3.25). Despus, pasamos a utilizar pasos unitarios en la direccin y para el resto de la curva dentro del primer cuadrante. En cada paso, necesitamos comprobar el valor de la pendiente de la curva. La pendiente de la elipse se calcula a partir de la Ecuacin 3.39:
DJ
(3.40)
2r^ (3.41
dx
2r v
(3.42)
La Figura 3.26 muestra el punto medio entre los dos pxeles candidatos en la posicin de mueslreo x + 1. dentro de la primera regin. Suponiendo que hayamos seleccionado la posicin (.v .. v ) en el paso anterior, determinamos la siguiente posicin a lo largo de la trayectoria elptica evaluando el parmetro de decisin (es decir, la funcin de la elipse dada en la Ecuacin 3.39) en dicho punto intermedio:
k A A
Ph
4) '
=r;(V
' (* ~2 )
(143)
3.10 Algoritmos de generacin de elipses 115 S i p \ < 0, el punto medio estar dentro de la elipse y el ximo a la frontera de la elipse. En caso contrario, el punto cionaremos el pxel situado en la lnea de exploracin y En la siguiente posicin de muestreo (x + + I = x + evala como:
k k k { k
pxel de la linea de exploracin y estar ms prmedio est fuera de la elipse o sobre ella y selecI. 2), el parmetro de decisin para la regin I se
k
elipse
= r,-[U + I) +
t
/; /;
+
(3.44)
donde , puede ser v oy - I, dependiendo del signo d e p \ . Los parmetros de decisin se incrementan de la forma siguiente:
k k
incremento = ^; -v . +r;-2r;>^ ,
l 1 :
si \ >()
P k
Los incrementos para los parmetros de decisin pueden calcularse utilizando nicamente sumas y restas, como en el algoritmo de los crculos, ya que los valores para los trminos 2r~x y 2r y pueden obtenerse incrementalmente. En la posicin inicial (0, estos dos tnninos tienen como valor:
x
2r;.v = 0
(3J5)
A medida que se incrementan X c \\ los valores actualizados se obtienen sumando 2r~al valor actual del tnnino de incremento de la Ecuacin 3.45 y restando 2/ ~del valor actual del trmino de incremento de la Ecuacin 3.46. Los valores de incremento actualizados se comparan en cada caso y nos moveremos de la regin 1 a la regin 2 cuando se satisfaga la condicin 3.42. En la regin 1, el valor inicial del parmetro de decisin se obtiene evaluando la funcin de la elipse en la posicin inicial U , v ) = (0, r^:
0 0
pK
r;-rx+r;
(3.47)
En la regin 2, muestreamos a intervalos unitarios en la direccin y negativa y el punto medio se tomar ahora entre pxeles horizontales para cada paso de muestreo (Figura 3.27). Para esta regin, el parmetro de decisin se evala como:
y
- I
apunto medio
FIGURA 3.27. Pumo medio entre pixeles candidatos en ta posicin de muestreo y I a lo largo de una trayectoria elptica.
k
=Xi,,,-,|- < + 7 - . V , - I
{148)
Si pl > 0, el punto medio se encontrar fuera de la elipse y seleccionaremos el pxel correspondiente a x . Si pl < 0. el punto medio estar sobre la elipse o dentro de ella y seleccionaremos la posicin de pxel
k k
- A+l-
Para determinar la relacin entre parmetros de decisin sucesivos dentro de la regin 2. evaluamos la Juncin de la elipse en el siguiente punto de muestreo y - I = y - 2:
k f ( k
PIU
=/cmpsc-Vx.i+T-.v , )
(3.49)
t*i
-V.
2
4
+ 2
(3J0)
donde x ,, vale 'x o x + l, dependiendo del signo de p2 . Cuando entramos en la regin 2, se toma como posicin inicial (.v ,y ) la ltima posicin seleccionada en la regin 1. y el parmetro de decisin inicial en la regin 2 ser entonces:
k k k 0 ()
9% = f,
=r
(3JI)
Para simplificar el clculo de/>2. podemos seleccionar las posiciones de los pixeles en sentido contrario a las agujas del reloj, comen/ando en (r , 0). Los pasos unitarios se tomaran entonces en la direccin y positiva, hasta alcanzar la ltima posicin seleccionada en la regin I. El algoritmo de punto medio puede adaptarse para generar una elipse en posicin no estndar, utilizando la funcin de la elipse dada por la Ecuacin 3.36 y calculando las posiciones de los pixeles a lo largo de toda la trayectoria elptica. Alternativamente, podemos reorientar los ejes de la elipse para ponerlos en posicin estndar, utilizando los mtodos de transformacin explicados en el Captulo 5, despus de lo cual se aplicav
ra el algoritmo del punto medio para elipses con el fin de determinar las posiciones de la curva; finalmente, las posiciones de pxel calculadas se convertiran para obtener las posiciones correspondientes segn la orientacin original de la elipse. Suponiendo que nos den r r y el centro de la elipse en coordenadas de pantalla enteras, slo hacen falta clculos incremntales enteros para determinar ios valores de los parmetros de decisin en el algoritmo del punto medio para generacin de elipses. Los incrementosr , 2r] y 2r] se evalan una nica vez al principio del procedimiento. En el siguiente resumen, se en unieran los pasos para dibujar una elipse utilizando el algoritmo del punto medio.
x y 2
1 '
3. En cada posicin x dentro de la regin 1. comenzando en k = 0, realizar la siguiente comprobacin. Si p\ < 0, el siguiente punto a lo largo de la elipse centrada en (0, 0) es (x y ) y,
k k k+ k
/>'*.!
=P k+ ^+ y
l 2r 2x y
r 2
- 1) y.
Ph*i=Ph con
+2r;*
+ l
-2r?y
i t l
+ r
2 ^ = 2 ^ + 2 ^ .
2r/^ 2r^+2r/
l =
debiendo continuar este proceso hasta que 2r^x > 2ry . 4. Calcular el valor inicial del parmetro de decisin en la regin 2 mediante la frmula:
% En cada posicin y de la regin 2, comenzando en k = 0. realizar la siguiente comprobacin. Si p2 > 0, el siguiente punto a lo largo de la elipse centrada en (0, 0) ser (x *y - I) y.
k k k k
I)y
utilizando los mismos clculos incremntales para xey que en la regin 1. Este proceso debe continuar hasta que v = 0. 6. Para ambas regiones, determinar los puntos simtricos en los otros tres cuadrantes. 7. Mover cada posicin de pxel (*, v) calculada a la trayectoria elptica centrada en (x y ) y dibujar los valores de coordenadas:
r t
*=
y = y+y
Ejemplo 3.3 Dibujo de una elipse mediante el algoritmo del p u n t o medio Dados los parmetros de entrada para la elipse r = 8 y r = 6, vamos a ilustrar los pasos del algoritmo del punto medio para el clculo de la elipse determinando las posiciones digilalizadas a lo largo del trayecto elptico en el primer cuadrante. Los valores e incrementos iniciales para los clculos del parmetro de decisin son:
x y
2r \r = 0
k
2r y = 2r r
i
(con incremento - 2 r = - 1 2 8 )
Q 0
Para la regin I, el punto inicial para la elipse centrada en el origen ser (x ,y ) = (0, 6) y el valor inicial del parmetro de decisin ser:
PK=r;-r;r r;=-m
La tabla siguiente muestra los valores sucesivos del parmetro de decisin para el punto medio y las posiciones de los pixeles a lo largo de la elipse. k
0
P* -332 -224 -44 208 -108 288 244 (1.6) (2.6) (3.6) (4.5) (5,5) (6,4) (7.3) 72 144 216 288 360 432 504 768 768 768 640 640 5I2 384
1 2 3 4 5 6
= ^ ( 7 1 . 2 J =-15l
+
Las posiciones restantes a lo largo del trayecto elptico en el primer cuadrante se pueden calcular entonces como:
119
0 I 2
576 576
256 128
12
FIGURA 3.28. Posiciones de los pxcles a lo largo de un Inyecto elptico centrado en el origen con r fty r 6, utilizando el algoritmo del punto medio para calcular las ubicaciones dentro del primer cuadrante.
m x f
En la Figura 3.28 se muestra una grfica de las posiciones calculadas para la elipse dentro del primer cuadrante.
En el siguiente segmento de cdigo, se proporcionan procedimientos de ejemplo para la implementacin del algoritmo del punto medio para el clculo de una elipse. Es necesario introducir en el procedimiento e l l i p s f * M i d p o i n t los parmetros de la elipse R x . R y , x C e n t e r e y C e n t e r . Entonces se calculan las posiciones a lo largo de la curva en el primer cuadrante y dichas posiciones se pasan al procedimiento c l l i p s e P l o t P o i n t s . Se utilizan consideraciones de simetra para obtener las posiciones de la elipse en los otros tres cuadrantes, y la rutina s e t P i x e l asigna el color de la elipse a las posiciones del bfer de imagen correspondientes a estas posiciones de pantalla.
inline int /* El * */ de
round
(const
f l o a t a)
return
int
(a que
0.5);
} el las centro
valores y menor, el
definen
calculando
posiciones de
elipse
mediante
algoritmo del
punto medio.
void e l l i p s e M i d p o i n t
(int
xCenter,
int
yCenter,
int
Rx,
int
Ry)
{
i n t Rx2 Rx * RX; i n t Ry2 Ry * R y ; i n t twoRx2 = 2 * R x 2 ; i n t twoRy2 = 2 nt p; 0; * Ry2,-
iut x
ellipsePlotPoints /* Region 1 */ {
(xCenter,
yCenter,
x,
y) ;
p = round while
(Ry2
(Rx2
* Ry)
( 0 . 2 5 * Rx2>) ;
X++;
px += tWORy2;
if
(p <
0)
y-; py -=
p + - Ry2
}
ellipsePlotPoints } /* Regi6n 2 */ (x+0.5) * (x+0.5) + Rx2 * (y-1) * (y-1) - Rx2 * R y 2 ) ; (xCenter, yCenter, x, y) ;
(Ry2 * {
(y > 0)
p += RX2 else {
p += Rx2
ellipsePlotPoints
} }
void ellipsePlotPoints (int xCenter, int yCenter, int x, int y);
{
setPixel setPixel setPixel setPixel (xCenter + x, (xCenter x, x, yCenter + yCenter + yCenter yCenter y); y) ; y); y);
(xCenter + (xCenter
- x,
121
Podemos obtener !as posiciones a lo largo de los trayectos c u n o s directamente a partir de las ecuaciones explcitas y = J(x)< o mediante ecuaciones paramtricas. Alternativamente, podemos aplicar el mtodo incremental del punto medio para dibujar las curvas descritas mediante funciones implcitas j[x y) = 0. Un mtodo simple para dibujar una lnea curva consiste en aproximarla mediante segmentos de lnea recta. En este caso suelen resultar tiles las representaciones paramtricas, con el fin de obtener posiciones equiespaeiadas a lo largo del trayecto curvo, posiciones que utilizaremos para definir los extremos de los segmentos lineales. Tambin podemos generar posiciones equiespaeiadas a partir de una ecuacin explcita seleccionando la variable independiente de acuerdo con la pendiente de la curva. Cuando la pendiente de .y = /(.v) tenga una magnitud inferior a l, seleccionaremos x como variable independiente y calcularemos los valores y para incrementos iguales de.v. Para obtener un espaciado igual cuando la pendiente tenga una magnitud superior a I, utilizaremos la funcin inversa, x = f \v) y ealcularemos los valores de x para pasos constantes de y. Para generar una grfica de un conjunto de valores de dalos discretos se utilizan aproximaciones mediante lneas rectas o curvas. Podemos unir los puntos discretos con segmentos lineales o podemos utilizar tcnicas de regresin lineal (mnimos cuadrados) para aproximar el conjunto de datos mediante una nica lnea recta. Las tcnicas no lineales de mnimos cuadrados se utilizan para mostrar el conjunto de dalos mediante alguna funcin de aproximacin, que usualmente es un polinomio. Al igual que con los crculos y las elipses, muchas funciones poseen propiedades de simetra que pueden aprovecharse para reducir el nmero de clculos de coordenadas a lo largo de los trayectos curvos. Por ejemplo, la funcin de distribucin de probabilidad normal es simtrica en torno a la posicin central (la media) y todos los puntos de un ciclo de una curva sinusoidal pueden generarse a partir de los puntos contenidos en un intervalo de 90.
y
Secciones cnicas
En general, podemos describir una seccin cnica (o cnica) mediante la ecuacin de segundo grado: Ax + By +Cxy+Dx + Ey + F = 0
2 2
(3.52)
donde los valores de los parmetros zf, B, C\ ), E y F determinan el tipo de curva que tenemos que dibujar. Dado este conjunto de coeficientes, podemos determinar la cnica concreta definida por la ecuacin evaluando el discriminante B 4AC:
2
Por ejemplo, obtenemos la ecuacin del crculo 3.26 cuando A = B = l, C = 0, D = 2x E - ~2y . y F = x] + y . - r * . La Ecuacin 3.52 tambin describe las cnicas degeneradas: puntos y lneas rectas.
2 (
En algunas aplicaciones, los arcos circulares y elpticos pueden especificarse cmodamente proporcionando los valores angulares inicial y final del arco, como se ilustra en la Figura 3,29, y dichos arcos se definen en ocasiones indicando las coordenadas de sus extremos. En cualquiera de los casos, podemos generar el arco utilizando un algoritmo del punto medio modificado, o bien podemos dibujar un conjunto de segmentos lineales que aproximen el arco. Las elipses, las hiprbolas y las parbolas son particularmente tiles en ciertas aplicaciones de animacin. Estas curvas describen movimientos orbitales y otros tipos de movimientos para objetos sobre los que actan fuerzas gravitatorias, electromagnticas o nucleares. Las rbitas planetarias del sistema solar, por ejemplo, pueden aproximarse mediante elipses y un objeto proyectado en un campo gravitatorio uniforme describe una trayectoria parablica. La Figura 3.30 muestra un trayecto parablico en posicin estndar para un campo gravitatorio que acta en la direccin y negativa. La ecuacin explcita para la trayectoria parablica del objeto mostrado puede escribirse como:
122
CAPTULO 3
Primitivas grficas
FIGURA 3.29. Un arco circular centrado en el origen, definido mediante el ngulo inicial 0 el ngulo final 8 y el radio r.
V 2
FIGURA 3.30. Trayecto parablico de un objeto arrojado en un campo gravitatorio descendente, con posicin inicial (%>' ).
0
.V = .VO +a{x-x y
(t ()
+b(x-x )
0
(3.54)
con constantes a y h determinadas por la velocidad inicial v del objeto y por la aceleracin g debida a la fuerza gravitatoria uniforme. Tambin podemos describir dicho tipo de movimientos parablicos mediante ecuaciones paramtricas, utilizando un parmetro temporal /, medido en segundos a partir del punto inicial de proyeccin:
~2
xl) 2
8i
Aqu, v y son las componentes iniciales de la velocidad y el valor de g cerca de la superficie de la Tierra es aproximadamente de 980 cm/scc . A continuacin, las posiciones del objeto a lo largo de la trayectoria parablica se calculan para intervalos de tiempo seleccionados. Las curvas hiperblicas (Figura 3.31) son tiles en diversas aplicaciones de visualizacin cientfica. El movimiento de objetos a lo largo de trayectorias hiperblicas se produce en conexin con la colisin de partculas cargadas y tambin en relacin con ciertos problemas gravitatorios. Por ejemplo, los cometas o meteoritos que se mueven alrededor del Sol pueden describir trayectorias parablicas y escapar hacia el espacio exterior, para no volver nunca. La rama concreta (izquierda 0 derecha, en la Figura 3.31) que describe el movimiento de un objeto depende de las fuerzas que intervengan en el problema. Podemos escribir la ecuacin estndar para la hiprbola de la Figura 3.31, centrada en el origen, de la forma siguiente: V (3,56) y_ r 1 v rama derecha. Puesto que esta ecuacin difiere de la donde x < f para la rama izquierda y x > r para la Ecuacin 3.39 para una elipse estndar nicamente en el signo correspondiente a los trminos x e_y~, podemos generar los puntos a lo largo de un trayecto hiperblico utilizando un algoritmo de dibujo de elipses ligeramente modificado. Las parbolas y las hiprbolas poseen un eje de simetra. Por ejemplo, la parbola descrita por la Ecuacin 3.55 es simtrica con respecto al eje:
\2
Los mtodos utilizados en el algoritmo del punto medio para el dibujo de elipses pueden aplicarse directamente para obtener puntos a lo largo de uno de Lis lados del eje de simetra de las trayectorias hiperblicas
123
FIGURA 3.31. Ramas izquierda y derecha de una hiprbola en posicin estndar con el eje de simetra dispuesto segn el eje x.
FIGURA 3.32. Una curva de tipo spline formada mediante secciones polinmicas cbicas individuales definidas entre una serie de puntos especificados.
y parablicas, dentro de las dos regiones: ( I ) cuando la magnitud de la pendiente de la curva es inferior a 1 y (2) cuando la magnitud de la pendiente es superior a 1. Para esto, primero seleccionamos la forma apropiada de la Ecuacin 3.52 y luego empleamos la funcin seleccionada para establecer las expresiones correspondientes a los parmetros de decisin en las dos regiones.
(I
= a a x - a x"'+ x"
tl+ + + al a k n
(3.57)
donde /; es un entero no negativo y los valores a son constantes, con a * 0. Se obtiene una curva cuadrtica cuando n = 2, un polinomio cbico cuando ;/ = 3, una curva cudrica cuando n = 4, etc. Y en el caso de n = I tendremos una lnea recta. Los polinomios son tiles en diversas aplicaciones grficas, incluyendo el diseo de formas de objetos, la especificacin de trayectos de animacin y la representacin de tendencias a partir de un conjunto discreto de puntos de dalos. El diseo de formas de objetos o de trayectorias de movimiento se suele realizar especificando primero unos cuantos puntos con el fin de definir el contorno general de la curva y luego ajustando los puntos seleccionados mediante un polinomio. Una forma de realizar el ajuste de la curva consiste en construir una seccin curva de polinomio cbico entre cada par de puntos especificados. Cada seccin curva se describe entonces en forma paramtrica de la manera siguiente: x-a
Kti
+a u + a u
yl x2
+fl
<3
(3.58)
donde el parmetro u vara a lo largo del intervalo que va de 0 a 1.0. Los valores de los coeficientes de u en las ecuaciones precedentes se determinan a partir de las ecuaciones de contorno aplicables a las secciones curvas. Una condicin de contorno es que dos secciones curvas adyacentes tengan las mismas coordenadas de posicin en la frontera entre ambas, y una segunda condicin consiste en ajustar las pendientes de las dos curvas tambin en la frontera, con el fin de obtener una nica curva suave continua (Figura 3.32). Las curvas continuas que se forman a partir de polinomios se denominan curvas de tipo spline o simplemente splines. Hay otras formas de definir las curvas de tipo spline y en el Captulo 8 se analizan diversos mtodos de generacin de splines.
124
CAPTULO 3
Primitiva*grficas
5 4 3 2 I O
O
FIGURA 3.33. Seccin inferior izquierda de un rea de pantalla en la que las coordenadas se referencian mediante la interseccin de lineas de la cuadricula.
cuadrcula entre dos pxeles. La direccin correspondiente a cualquier pxel estar ahora en su esquina inferior izquierda, como se ilustra en la Figura 3.34 y un trayecto lineal se trazar ahora entre las intersecciones de la cuadricula. Por ejemplo, el trayecto lineal matemtico para una polilnea que tuviera los vrtices definidos mediante las coordenadas (0, 0), (5, 2) y ( l , 4) sera como la mostrada en la Figura 3.35. Utilizando las coordenadas de cuadrcula de pantalla, podemos identificare! rea ocupada por un pxel con coordenadas de pantalla (x,y) como el cuadrado de tamao unidad que tiene sus esquinas opuestas en los puntos (x,y) y (.v + l, y + I). Este mtodo de direccionamiento de pxeles tiene varias ventajas: evita que las fronteras de los pxeles estn definidas mediante valores semienleros, facilita la representacin precisa de los objetos y simplifica el procesamiento necesario para muchos algoritmos y procedimientos de digitalizacin. Los algoritmos para dibujo de lneas y generacin de curvas que hemos analizado en las secciones anteriores siguen siendo vlidos cuando se los aplica a posiciones de entrada expresadas mediante la cuadrcula de pantalla. Los parmetros de decisin de estos algoritmos sern ahora una medida de las diferencias de separacin con respecto a la cuadrcula de pantalla, en lugar de las diferencias de separacin con respecto a los centros de los pxeles.
126
20 21 22 23 24 25 26 27 28 2 ) 30
FIGURA3.35. I rscelo formado por dos segmentos de linea conectados entre posiciones de pantalla definidas mediante una cuadrcula.
FIGURA 3.36. Trayectoria lineal y visuali/aein correspondiente de los pxeles para las coordenadas (20. 10) y (30. 18) de sendos puntos extremos definidos mediante las lneas de la cuadrcula.
1 2
3
(a)
3
(c)
FIGURA 3.37. Conversin de un rectngulo (a) con vrtices en las coordenadas de pantalla (0. 0), (4. 0), (4. 3) y (0, 3), con una visuali/acin (b) que incluye las fronteras derecha y superior y con una visuali/aein (c) que mantiene las magnitudes geomtricas. Para un rea cerrada, podemos mantener las propiedades geomtricas de entrada visualizando el rea nicamente mediante aquellos pxeles que estn situados en el interior de las fronteras del objeto. Por ejemplo, e! rectngulo definido mediante los vrtices que se muestran en la Figura 3.37(a), expresados en coordenadas d pantalla, es mayor cuando lo mostramos relleno con pxeles hasta incluir las lneas de pxeles del borde que unen los vrtices especificados. Tal como est definido, el rea del rectngulo es de 12 unidades, pero si lo muestra como en la Figura 3.37(b) tendr un rea de 20 unidades. En la Figura 3.37(c), se mantienen las medidas originales del rectngulo, al mostrar nicamente ios pxeles internos. La frontera derecha del rectngulo de entrada se encuentra en.v = 4. Para mantener la anchura del rectngulo en la pantalla, fijamos la coordenada de cuadrcula del pxel de ms a la derecha del rectngulo con el valor .v = 3, ya que los pxeles de esta columna vertical abarcan el intervalo que va de.v = 3 a.t = 4. De forma similar, la frontera matemtica superior del rectngulo se encuentra en y = 3, asi que la fila de pxeles superior para el rectngulo mostrado estar en y = 2. Esta compensacin del tamao finito de los pxeles puede aplicarse a otros objetos, incluyendo aquellos que tienen fronteras curvas, para que la representacin digitalizada mantenga las especificaciones de entrada de los objetos. Un crculo con radio 5 y posicin central (10, 10) por ejemplo, se mostrara como la Figura 3.38 si empleamos el algoritmo del punto medio para generacin de crculos utilizando los centros de los pxeles como posiciones de las coordenadas de pantalla. Pero el crculo dibujado tiene un dimetro de II. Para dibujar el circulo con el dimetro definido de 10. podemos modificar el algoritmo del circulo con el fin de acortar cada lnea de exploracin y cada columna de pxeles, como en la Figura 3.39.
FIGURA 3.38. Una grfica obtenida medanle el algoritmo del punto medio para la ecuacin del circulo (.v - 10)- + 0' " 'O) 5 , utilizando las coordenadas de los centros de los pxeles.
2 = 2
FIGURA 3.39. Modificacin de la grfica del circulo de la figura 3.3S para mantener el dimetro del circulo especificado* que tiene valor 10.
Una forma de hacer esto consiste en generar los puntos en el sentido de las agujas del reloj a lo largo del arco circular del tercer cuadrante, comenzando en las coordenadas de pantalla (10. 5). Para cada punto generado, se obtienen los otros siete puntos simtricos del crculo reduciendo los valores de la coordenada J en l unidad a lo largo de las lineas de exploracin y reduciendo los valores de la coordenada v en I unidad a lo largo de las columnas de pxeles. Pueden aplicarse mtodos similares a los algoritmos de generacin de elipses con el fin de mantener las proporciones especificadas a la hora de visualizar una elipse.
128
(a)
(h>
(c)
FIGURA 3.40. Arcas rellenas de color homogneo especificadas con diversas fronleras. (a) Una regin circular rellena, (b) Un rea rellena delimitada por una polilnea cerrada, (c) Un rea rellena especificada mediante una frontera irregular curva.
FIGURA 3.41. Representacin almbrica de un cilindro, donde se mueslran nicamente las caras delanteras (visibles) de la malla poligonal utilizada para aproximar las superficies. bueno. La aproximacin de una superficie curva mediante caras poligonales se denomina en ocasiones tese/acin de la superficie, o ajuste de la superficie mediante una malla poligonaL La Figura 3.41 muestra las superficies lateral y superior de un cilindro metlico que se ha aproximado mediante una malla poligonal. La visualizacin de tales tipos de figuras puede generarse muy rpidamente mediante vistas almbricas, que slo muestran las aristas de los polgonos con el fin de proporcionar una indicacin general de la estructura de la superficie. Posteriormente, el modelo almbrico puede sombrearse para generar una imagen de una superficie material con aspecto natural. Los objetos descritos con un conjunto de parches de superficie poligonales se suelen denominar objetos grficos estndar 6 simplemente objetos grficos. Fin general, podemos crear reas rellenas con cualquier especificacin de contorno, como por ejemplo un crculo o un conjunto conectado de secciones de curvas de tipo spline. Y algunos de los mtodos poligonales explicados en la siguiente seccin pueden adaptarse para mostrar reas de relleno con contomos no lineales. En el Captulo 4 se explican otros mtodos de relleno de reas para objetos con contornos curvados.
res numricos, a errores en la seleccin de las coordenadas de los vrtices o, ms normalmente, a la aproximacin de una superficie curva mediante un conjunto de parches poligonales. Una forma de rectificar este problema consiste simplemente en dividir la malla de superficie especificada en una serie de tringulos. Pero en algunos casos puede haber razones para retener la forma original de los parches de la malla, as que se han desarrollado mtodos para aproximar una forma poligonal no plana mediante una figura plana. Hablaremos de cmo calcular estas aproximaciones planas en la subseccin dedicada a las ecuaciones del plano.
ib)
130
CAPTULO 3
Primitivas grficas
(K, x E i>()
2
<E xE ) >0
a 3 S
(E x
3 4
E ) <0
4 : 5 I T
(E xE )
ft
>0
(&, x E ) > 0
;
FIGURA 3.43. Identificacin de un polgono cncavo mediante el clculo de los productos vectoriales de las parejas sucesivas ce vectores representativos de las aristas.
(E x
6
E,) >0
:
vo o negativo) en los polgonos convexos. Por tanto, si algn producto vectorial nos da un valor positivo y otro nos da un valor negativo, tendremos un polgono cncavo. La Figura 3.43 ilustra el mtodo del producto vectorial de los vectores de las aristas para la identificacin de polgonos cncavos. Otra forma de identificar un polgono cncavo consiste en examinar las posiciones de los vrtices del polgono en relacin con la lnea de extensin de cualquier arista. Si algunos de los vrtices se encuentran a un lado de la lnea de extensin y otros estn en el otro lado, el polgono ser cncavo.
E,=V
t l l
-V
A continuacin calculamos los productos vectoriales de los sucesivos vectores de las aristas, siguiendo el orden del permetro del polgono. Si la componente Z de algn producto vectorial es positiva mientras que otros productos vectoriales tienen una componente z negativa, el polgono ser cncavo, mientras que en caso Contrari el polgono ser convexo. Esto presupone que no haya tres vrtices sucesivos o lineales, ya que en ese caso el producto vectorial de los dos vectores representativos de las aristas que conectan estos vrtices seria cero. Si todos los vrtices son colineales, tendremos un polgono degenerado (una lnea recta). Podemos aplicar el mtodo vectorial procesando los vectores de las aristas en sentido contrario a las agujas del reloj. Si cualquiera de los productos vectoriales tiene una componente z negativa (como la Figura 3.43), el polgono ser cncavo y podemos partirlo utilizando la linea del primero de los vectores con los que se ha calculado el producto vectorial. El siguiente ejemplo ilustra este mtodo para la divisin de un polgono cncavo.
E =0,1,0)
2
E, =(0.2,0) E , =(0.-2,0)
(
donde la componente z es 0, ya que todas las aristas se encuentran en el plano xy. El producto vectorial E- X E para dos vectores sucesivos es un vector perpendicular al plano xy con una componente z igual a - E ^ .
; k
E x E, = (0,0,1) E x E =(0,0,2)
3 4
E, x E j = ( 0 , 0 , - 2 ) E . , x E =(0,0,6)
5
E xE
5
&
=(0.0.6)
2 3
E x E , =(0,0,2)
6
Puesto que el producto vectorial E X E tiene una componente z negativa, partiremos el polgono segn la lnea correspondiente al vector E . La ecuacin de la linea correspondiente a esta arista tiene una pendiente de 1 e intercepta el eje> en - 1 . A continuacin determinamos la interseccin de esta lnea con las otras aristas del polgono, con el fin de partir el polgono en dos partes. No hay ningn otro producto vectorial negativo, por lo que los dos nuevos polgonos sern convexos.
2
2-
Tambin podemos dividir un polgono cncavo utilizando un mtodo rotacin!. Vamos a movernos en sentido contrario a las agujas del reloj siguiendo las aristas del polgono, y vamos a desplazar la posicin del polgono de modo que cada vrtice V se encuentre por tumo en el origen de coordenadas. A continuacin, rotamos el polgono alrededor del origen en el sentido de las agujas del reloj, de modo que el siguiente vrtice V ._ se encuentre sobre el eje .v. Si el siguiente vrtice, V , est por debajo del eje x, el polgono ser cncavo. En este caso, partiremos el polgono segn el eje x para formar dos nuevos polgonos y repetiremos el test de concavidad para cada uno de los dos nuevos polgonos. Los pasos anteriores se repiten hasta que hayamos comprobado todos los vrtices de la lista de polgonos. En el Captulo 5 se explican en detalle los mtodos para rotar y desplazar un objeto. La Figura 3.45 ilustra el mtodo rotacional para la divisin de un polgono cncavo.
A M +2
132
CAPTULO 3
Primitivas grficas
FIGURA 3.45. Divisin de un polgono cncavo mili/ando el mtodo rotacional. Despus de mover V\ hasta el origen de coordenadas y de rotar V, hasta situarlo en el eje x, vemos que V- est por debajo del eje ,v. as que dividimos el polgono segn la lnea de extensin del vector V, V, que es el eje x.
mando con ella un nuevo polgono (un tringulo). Entonces se borra el vrtice intermedio del tringulo de la lista de vrtices original, volvindose a aplicar el mismo procedimiento a esta lista de vrtices modificada para extraer otro tringulo. Continuamos formando tringulos de esta forma hasta que el polgono original quede reducido a slo tres vrtices, que definirn el ltimo tringulo del conjunto. Un polgono cncavo tambin puede dividirse en un conjunto de tringulos utilizando esta tcnica, siempre y cuando los tres vrtices seleccionados en cada caso formen un ngulo interior que sea inferior a 180 (un ngulo convexo).
Pruebas dentro-fuera
Son varios los procesos grficos que necesitan poder identificar las regiones interiores de los objetos. Identificar el interior de un objeto simple, como un polgono convexo, un crculo o una esfera resulta generalmente sencillo. Pero en ocasiones debemos tratar con objetos ms complejos. Por ejemplo, podramos definir una regin de relleno compleja con aristas que se cortarn, como en la Figura 3.46. Para este tipo de formas, no siempre est claro qu regiones del plano xy debemos denominar "interiores" y qu regiones hay que designar como "exteriores" segn el contorno del objeto. Dos algoritmos comnmente utilizados para identificar las reas interiores de una figura plana son la regla par-impar y la regla del nmero de vueltas distinto de cero. Podemos aplicar la regla par-impar, tambin denominada regla Je paridad impar, dibujando primero conceptualmente una lnea desde cualquier posicin P hasta un punto distante, situado fuera del recuadro de contorno de la polilnea cerrada. Entonces contamos el nmero de segmentos de lnea que se cortan con esta linea. Si el nmero de segmentos cruzados por esta lnea es impar, entonces consideramos P como un punto inferior. En caso contrario, P es un punto exterior. Para obtener un recuento preciso de las intersecciones con los segmentos, debemos asegurarnos de que la lnea elegida no pase por ninguno de los vrtices de los segmentos. La Figura 3.46(a) muestra las regiones interiores y exteriores obtenidas utilizando la regla par-impar para una polilnea cerrada que se aulo-intersecta. Podemos utilizar este procedimiento, por ejemplo, para rellenar con un color especificado la regin interior comprendida entre dos crculos concntricos o dos polgonos concntricos. Otro mtodo para definir las regiones interiores es la regla del nmero de vueltas distinto de cero, que cuenta el nmero de veces que el contorno de un objeto da la vuelta alrededor de un punto concreto en el sentido de las agujas del reloj. Este nmero se denomina nmero de vueltas y los puntos interiores de un objeto bidimensional pueden definirse como aquellos que tienen un valor de nmero de vueltas distinto de cero. Para aplicar la regla del nmero de vueltas distinto de cero, inicializamos el nmero de vueltas a 0 e imaginamos de nuevo una lnea dibujada desde cualquier posicin P hasta un punto distante situado ms all del recuadro de contorno del objeto. La lnea que elijamos no debe pasar a travs de ningn vrtice. A medida que nos movemos a lo largo de la lnea desde la posicin P hasta el punto distante, contamos el nmero de seg-
interior
FIGURA 3.46. Identificacin de las regiones exterior e interior de una polilnea cerrada que contiene segmentos que se auto-intersectan. mentes de lnea del objeto que cruzan la lnea de referencia en cada direccin. Aadiremos un I al nmero de vueltas cada vez que cortemos un segmento que cruza la lnea de derecha a izquierda y restaremos l cada vez que crucemos un segmento que corte la lnea de izquierda a derecha. El valor final del nmero de vueltas, despus de haber contando todos los cruces con los segmentos lineales de contomo, determinar la posicin relativa de P. Si el nmero de vueltas es distinto de cero, P se considerar un punto interior. En caso contrario, P ser considerado un punto exterior. La Figura 3.46(b) muestra las regiones interior y exterior definidas mediante la regla del nmero de vueltas distinto de cero para una polilnea cerrada que se auto-intersecta. Para objetos, como polgonos y crculos, la regla del nmero de vueltas distinto de cero y la regla par-impar proporcionan los mismos resultados, pero para formas ms complejas, los dos mtodos pueden proporcionar regiones interiores y exteriores distintas, como en el Ejemplo de la Figura 3.46. Una forma de determinar la direccin de los cruces con los segmentos de lnea que forman el contomo consiste en definir una serie de vectores para las aristas del objeto y para la propia lnea de referencia. Entonces, calculamos el producto vectorial del vector u que va desde P hasta un punto distante con el vector E correspondiente a la arista del objeto, para cada arista que se intersecte con la lnea. Suponiendo que tengamos un objeto bidimensional en el plano xy\ la direccin de cada producto vectorial estar en la direccin +z o en la direccin z. Si la componente z de un producto vectorial u x E para una interseccin concreta es positiva, dicho segmento cruza de derecha a izquierda y aadiremos I al nmero de vueltas. En caso contrario, el segmento cruza de izquierda a derecha y restaremos I del nmero de vueltas. Una forma algo ms simple de calcular la direccin de los cruces consiste en utilizar productos escalares en lugar de productos vectoriales. Para hacer esto, definimos un vector que sea perpendicular al vector u y que vaya de derecha a izquierda segn se mira a lo largo de la lnea que parte de P en la direccin de u. Si las componentes de u son (w , w ,), entonces el vector perpendicular a u tendr componentes ( , u ) (Apndice A). Ahora, si el producto escalar de este vector perpendicular y el vector de la arista es positivo, el cruce se produce de derecha a izquierda y sumaremos l al nmero de vueltas. En caso contrario, la arista cruza nuestra linea de referencia de izquierda a derecha y restaremos l del nmero de vueltas. La regla del nmero de vueltas distinto de cero tiende a clasificar como interiores algunas reas que la regla par-impar considera como exteriores, y puede ser ms verstil en algunas aplicaciones. En general, las figuras planas pueden definirse mediante mltiples componentes disjuntas y la direccin especificada para cada conjunto de contornos disjuntos puede utilizarse para designar las regiones interior y exterior. Como ejemplos tendramos los caracteres (como las letras del alfabeto y los smbolos de puntuacin), los polgonos anidados y los crculos o elipses concntricos. Para lneas curvas, la regla par-impar se aplica calculando las intersecciones con los trayectos
x v r x
134 CAPTULO 3 Primitivas grficas curvos. De forma similar, con la regla del nmero de vueltas distinto de cero necesitamos calcular vectores tangentes a las curvas en los puntos de cruce con la lnea de referencia que parte de la posicin P. Pueden utilizarse algunas variaciones de la regla del nmero de vueltas distinto de cero para definir las regiones interiores de otras maneras. Por ejemplo, podramos definir un punto como interior si su nmero de vueltas es positivo o si es negativo. O podramos usar cualquier otra regla para generar una diversidad de formas de relleno. Algunas veces, se utilizan operaciones booleanas para especificar un rea de relleno como combinacin de dos regiones. Una forma de implementar operaciones booleanas consiste en utilizar una variacin de la regla bsica del nmero de vueltas. Con este esquema, primero definimos un contorno simple sin intersecciones para cada una de las dos regiones. Entonces, si consideramos que la direccin de cada contorno va en el sentido de las agujas del reloj, la unin de las dos regiones estar formada por lodos aquellos puntos cuyo nmero de vueltas es positivo (Figura 3.47). De forma similar, la interseccin de dos regiones con contornos que vayan en sentido contrario a las agujas del reloj contendr aquellos puntos cuyo nmero de vueltas sea superior a I, como se muestra en la Figura 3.48. Para definir un rea de relleno que sea la diferencia entre las dos regiones, A B, podemos encerrar la regin A mediante un contorno que vaya en sentido contrario a las agujas del reloj y la regin B con un contorno que vaya en el sentido de las agujas del reloj. Entonces, la regin diferencia (Figura 3.49) ser el conjunto de todos los puntos cuyo nmero de vueltas sea positivo.
FIGURA 3.47. Un rea de relleno definida como una regin que tiene un valor positivo para el nmero de vueltas. Este rea de relleno es la unin, cada una de las cuales tiene un contorno que va en sentido contrario a las agujas del reloj.
FIGURA 3.48. Un rea de relleno de ti n ida como una regin con un nmero de vueltas superior a I. Fste rea de relleno es la interseccin entre dos regiones, cada una de las cuales tiene un contorno que va en sentido contrario a las agujas del reloj.
FIGURA 3.49. Un rea de relleno definida como una regin con un valor positivo para el nmero de vueltas, liste rea de relleno es la diferencia, A - R, de dos regiones, teniendo la regin A una direccin de contorno positiva (en sentido contrario a las agujas del reloj) y la regin B una direccin de contorno negativa (en el sentido de las agujas del reloj).
135
Tablas de polgonos
Normalmente, los objetos de una escena se describen como conjuntos de cara poligonales de superficie. De hecho, los paquetes grficos suelen proporcionar funciones para definir la forma de una superficie en forma de una malla de parches poligonales. La descripcin de eadaobjeto incluye la informacin de coordenadas que especifica la geometra de las caras poligonales y otros parmetros de la superficie como el color,iatransparencia > las propiedades de reflexin de la lu/. A medida que se introduce la informacin correspondiente a cada polgono, los datos se colocan en labias que se utilizarn en el subsiguiente procesamiento como visualizaein y manipulacin de los objetos de la escena. Estas jaba&.de.dalQs_de los polgonos pueden organizarse en dos grupos: tablas geomtricas y tablas de atributos. i Las tablas de dalos geomtricos contienen coordenadas de los vrtices y parmetros para identificar la orientacin espacial de las superficies poligonales, La informacin de atributos de un objeto incluye parmetros que especifican el grado de transparencia del objeto y la relleclividad y caractersticas de textura de su superficie. Los datos geomtricos de los objetos de una escena se pueden ordenar cmodamente en tres lisias; una tabla de vrtices, una tabla de aristas y una tabla de caras de la superficie,''Los valores de coordenadas de cada vrtice del objeto se almacenan en la tabla de vrtices. La tabla de aristas contiene punteros que hacen referencia a la tabla de vrtices y que permiten identificar los vrtices de cada arista del polgono. Por su parte, la tabla de caras de la superficie contiene punteros que hacen referencia a la tabla de aristas, con el fin de identificar las aristas que definen cada polgono. Este esquema se ilustra en la Figura 3.50 para dos caras poligonales adyacentes de la superficie de un objeto. Adems, se pueden asignar a los objetos individuales y a sus caras poligonales componentes unos identificadores de objeto y de cara para poder efectuar las referencias ms fcilmente. Enumerar los datos geomtricos en tres tablas, como en ia Figura 3.50, permite hacer referencia cmodamente a los componentes individuales (vrtices, aristas y caras de la superficie) de cada objeto. Asimismo, el objeto puede visualizarse de manera eficiente utilizando los datos de la tabla de aristas para identificar los con-
FIGURA3.50. Representacin en tabla de los datos geomtricos para dos caras poligonales adyacentes de una superficie, formadas por seis aristas y cinco vrtices.
136
CAPTULO 3
Primitivas grficas
,:
E :
2
vv ,s,
2
FIGURA 3.51. labia de aristas para las superficies de la Figura 3.50, expandida para incluir punteros que hagan referencia a la tabla de caras de la superficie.
Ey
tornos de los polgonos. Otra disposicin alternativa consiste en utilizar simplemente dos tablas: una tabla de vrtices y una tabla de caras de la superficie, pero este esquema resulta menos conveniente, y algunas de las aristas podran llegar a dibujarse dos veces en una representacin almbrica. Otra posibilidad consiste en utilizar nicamente una tabla de caras de la superficie, pero con esto se duplica la informacin de coordenadas, ya que se tendrn que enumerar los valores explcitos de coordenada para cada vrtice de cada cara poligonal. Asimismo, seria necesario reconstruir la relacin entre aristas y caras a partir de la lista de vrtices contenida en la tabla de caras de la superficie. Podemos aadir informacin adicional a las tablas de datos de la Figura 3.50 para poder extraer ms rpidamente la informacin. Por ejemplo, podramos expandir la tabla de aristas para incluir retropunteros que hagan referencia a la tabla de caras de la superficie, con el fin de poder identificar ms rpidamente las aristas comunes existentes entre los polgonos (Figura 3.51). Esto resulta particularmente til para los procedimientos de renderizacin que necesitan variar con suavidad el sombreado de la superficie al cruzar una arista desde un polgono a otro. De forma similar, la labia de vrtices podra expandirse para hacer referencia a las aristas correspondientes, con el fin de extraer ms rpidamente la informacin. Entre la informacin geomtrica adicional que suele almacenarse en las tablas de dalos se incluyen la pendiente de cada arista y los recuadros de contorno de las aristas de los polgonos, de las caras poligonales y de cada objeto de la escena. A medida que se introducen vrtices, podemos calcular las pendientes de las aristas y podemos analizar los valores de las coordenadas para identificar los valores x, y y z mnimos y mximos para cada lnea y polgono individual. Las pendientes de las aristas y la informacin de los recuadros de contorno son necesarias en el subsiguiente procesamiento, como por ejemplo en la renderizacin de las superficies y en los algoritmos de identificacin de superficies visibles. Puesto que las tablas de datos geomtricos pueden contener listados muy extensos de vrtices y aristas para los objetos y escenas ms complejos, es importante que se compruebe la coherencia y exhaustividad de los datos. Cuando se especifican las definiciones de los vrtices, aristas y polgonos, es posible, particularmente en las aplicaciones interactivas, que se cometan ciertos errores de entrada que pueden llegar a distorsionar la visualizacin de los objetos. Cuanta mayor informacin se incluya en las tablas de datos, ms fcilmente se podr comprobar si existen errores. Por tanto, la comprobacin de errores es ms fcil cuando se utilizan tres tablas de datos (vrtices, aristas y caras de la superficie), ya que es este esquema el que proporciona la mayor cantidad de informacin. Entre las comprobaciones que podra realizar un paquete grfico estn ( I ) que todo vrtice aparece como extremo de al menos dos aristas, (2) que toda arista forma parte de al menos un polgono, (3) que todos los polgonos son cerrados, (4) que cada polgono tiene al menos una arista compartida y (5) que si la tabla de aristas contiene punteros a los polgonos, toda arista referenciada por un puntero de un polgono tiene otro puntero inverso en la tabla de aristas que hace referencia al polgono.
Ecuaciones de un plano
Para producir una imagen de una escena tridimensional, los sistemas grficos procesan los datos de entrada, llevando a cabo diversos procedimientos. Entre estos procedimientos se incluyen la transformacin de las descripciones de modelado y de las descripciones en coordenadas universales a travs de la pipeline de visualizacin, la identificacin de las superficies visibles y la aplicacin de rutinas de renderizacin a cada una de las caras individuales de la superficie. Para algunos de estos procesos, hace falta disponer de informacin acerca de la orientacin espacial de los componentes de la superficie. Esta informacin se obtiene a partir de
1 37
los valores de coordenadas de los vrtices y a partir de las ecuaciones que describen las superficies de los polgonos. Cada polgono en una escena est contenido dentro de un plano de extensin infinita. La ecuacin general de un plano es: Av + By + Cz + D = 0
y
(3.59)
donde (x y, z) es cualquier punto del plano y los coeficientes A, B, C y D (denominados parmetros del pkvw) son constantes que describen las propiedades espaciales del plano. Podemos obtener los valores de A, ?, C y D resolviendo un conjunto de tres ecuaciones del plano, utilizando los valores de coordenadas de tres puntos no eolineales pertenecientes al plano. Para este propsito, podemos seleccionar tres vrtices sucesivos de un polgono convexo, (x y, z ) , ( x ^ ^ ' ~>) y ( py^ 3> sentido contrario a las agujas del reloj y resolver el siguiente sistema de ecuaciones lineales del plano, con el fin de hallar los cocientes AID, B/D y CID:
z x en v (
(AID)x,
+(BID)y
+(CID)z =-l
k
= 1,2,3
(3.60)
La solucin de este sistema de ecuaciones puede obtenerse mediante determinantes utilizando la regla de Cramer:
1
A=
1
B= x
2 x
1 z, 1 z
1
2
\
x
|
-V,
%
(3.61)
\
2
D = - x % x
2
I y
2
Expandiendo los determinantes, podemos escribir los clculos necesarios para hallar los coeficientes del plano, que tendrn la forma: A = y (z -z>) + y (z,-z ) + y (z -z )
l 2 2 i i i 2
B = z (x -x,) + z (x, - X , ) + g - x )
{ 2 2 2
(3.62)
D = -x,( Estos clculos son vlidos para cualesquiera tres puntos, incluyendo aquellos para los que JD = 0. Cuando se introducen las coordenadas de los vrtices y otras informaciones en la estructura de datos del polgono, pueden calcularse los valores de /, B, Cy D para cada cara poligonal y almacenarlos con el resto de los datos que definen el polgono. Es posible que las coordenadas que definen una cara poligonal no estn contenidas dentro de un mismo plano. Podemos resolver este problema dividiendo dicha cara en un conjunto de tringulos, o bien podemos tratar de encontrar un plano aproximador para la lista de vrtices. Un mtodo para obtener un plano aproximador consiste en dividir la lista de vrtices en subconjtmtos de tres vrtices y calcular los parmetros del plano A, B C y D para cada subconjunto. Los parmetros del plano aproximador se obtendrn entonces calculando el valor medio de cada uno de los parmetros del plano calculado. Otra tcnica consiste en proyectar la lista de vrtices sobre los planos de coordenadas. Entonces, asignamos a A un valor proporcional al rea de la proyeccin poligonal sobre el plano vz, asignamos al parmetro B un valor proporcional al rea de proyecy
138
cin sobre el plano xz y asignamos al parmetro C un valor proporcional al rea de proyeccin sobre el piano xy. Este mtodo de proyeccin se utiliza a menudo en las aplicaciones de trazado de rayos.
Estas comprobaciones de desigualdad son vlidas en todo sistema cartesiano que cumpla la regla de la mano derecha, supuesto que los parmetros del plano A B, C y D hayan sido calculados utilizando posiciones de coordenadas seleccionadas estrictamente en el sentido contrario a las agujas del reloj, cuando se mira la superficie desde la parte anterior a la posterior. Por ejemplo, en la Figura 3.52 cualquier punto situado fuera (delante) del plano correspondiente al polgono sombreado satisface la desigualdad x - I > 0, mientras que cualquier punto que est dentro (detrs) del plano tendr un valor de la coordenada x inferior a I.
f
N=M,/. C)
FIGURA 3.52. La superficie sombreada de este polgono del cubo unitario tiene como ecuacin del plano x - I = 0.
FIGURA 3.53. El vector normal N para un plano descrito por la ecuacin Ax + By + Cz + D es perpendicular al plano y tiene como componentes cartesianas (A, B. C7).
1 39
La orientacin de la superficie de un polgono en el espacio puede describirse mediante el vector normal del plano que contiene dicho polgono, como se muestra en la Figura 3.53. Este vector normal a la superficies perpendicular al plano y tiene como componentes cartesianas (A, 5, C), donde los parmetros A, B y C son los coeficientes del plano calculados en la Ecuacin 3.62. El vector normal apunta en una direccin que va desde el interior del plano hacia el exterior, es decir, desde la cara trasera del polgono hacia la cara delantera. Como ejemplo de clculo de las componentes del vector normal de un polgono (lo que tambin nos da los parmetros del plano) vamos a elegir tres de los vrtices de la cara sombreada del cubo unitario de la Figura 3.52. Estos puntos se seleccionan en sentido contrario a las agujas del reloj, segn miramos al cubo desde el exterior y al origen de coordenadas. Las coordenadas de estos vrtices, en el orden seleccionado, se utilizarn entonces en las Ecuaciones 3.62 para obtener los coeficientes del plano: A = I, B = 0, C '= 0, D = 1. As, el vector normal para este plano es N = (1, 0, 0) que est en la direccin del eje .v positivo. Es decir, el vector normal apunta desde el interior hacia el exterior y es perpendicular al plano x = I. Los elementos del vector normal tambin pueden obtenerse utilizando el producto vectorial. Suponiendo que tengamos una cara superficial poligonal convexa y un sistema cartesiano que cumpla con la regla de la mano derecha, seleccionemos de nuevo cualesquiera tres posiciones de vrtices, V., V y V lomadas en sentido contrario a las agujas del reloj, cuando se mira desde el exterior del objeto hacia el interior. Formando dos vectores, uno de V, a V-, y el segundo de V, a V,, podemos calcular N mediante el producto vectorial:
2 v
N=(V -V,)x(V,-V )
2 I
(3.63)
Esto genera los valores para los parmetros del plano /, B y C. Entonces podemos obtener el valor del parmetro D sustituyendo estos valores y las coordenadas de uno de los vrtices del polgono en la Ecuacin 3.59 del plano y despejando D. La ecuacin del plano puede expresarse en forma vectorial utilizando la normal N y el vector de posicin P de cualquier punto del plano, de la forma siguiente: N P = -D (3.64)
Para un polgono convexo, tambin podramos obtener los parmetros del plano utilizando el producto vectorial de dos vectores representativos de aristas sucesivas. Y con un polgono cncavo, podemos seleccionar los tres vrtices de modo que los dos vectores que participen en el producto vectorial formen un ngulo inferior a 180. En caso contrario, podemos tomar el negado de su producto vectorial para obtener la direccin correcta del vector normal correspondiente a la superficie poligonal.
140
ten y todos los ngulos interiores del polgono deben ser inferiores a 180. Adems, cada rea de relleno poligonal slo puede definirse mediante una nica lista de vrtices, lo que prohibe las especificaciones que contengan agujeros en el interior del polgono, como la que se muestra en la Figura 3.54. Para describir esta figura tendramos que utilizar dos polgonos convexos solapados. Cada polgono que especifiquemos tendr dos caras; una cara anterior y una cara posterior. En OpenGL, el color de relleno y otros atributos pueden configurarse de manera independiente para cada cara y es necesario efectuar una identificacin anterior/posterior tanto en las rutinas de visualizacin bidimensionales como en las tridimensionales. Por tanto, los vrtices del polgono deben especificarse en sentido contrario a las agujas del reloj, segn miramos hacia el polgono desde el "exterior". Esto identifica la cara anterior de dicho polgono. Puesto que las imgenes grficas incluyen a menudo reas rectangulares rellenas, OpenGL proporciona una funcin especial de generacin de rectngulos que acepta directamente especificaciones de vrtices en el plano xy. En algunas implementacones de OpenGL, la siguiente rutina puede ser ms eficiente que generar un rectngulo relleno mediante especificaciones g l V e r t e x .
glRect* (xl, yl, x2, y2);
Una de las esquinas de este rectngulo se encuentra en las coordenadas (x\,y\)y la esquina opuesta en la posicin (x2, y2). Una serie de cdigos de sufijo para g l R e c t especifican el tipo de datos de las coordenadas y si stas estn expresadas como elementos de matriz. Dichos cdigos son i (para integer), s (para short), f (para float), d (para double) y v (para vectores). El rectngulo se muestra con sus aristas paralelas a los ejes de coordenadas xy. Como ejemplo, la siguiente instruccin define el cuadrado que se muestra en la Figura 3.55.
glRecti (200, 100, 50, 250);
Si introducimos los valores de coordenadas para este rectngulo en matrices, podemos generar el mismo cuadrado mediante el siguiente cdigo.
int vertexl int vertex2 glRectiv [ [ ] ] = = (200, {50, 100}; 250};
(vertexl,
v e r t e x 2 ) ,-
Cuando se genera un rectngulo mediante la funcin g l R e c t , las aristas del polgono se forman entre los vrtices en el orden ( AM , yl), (x2,y\), (x2,y2\ (x\,y2\ volvindose despus al primer vrtice. As, en nuestro ejemplo, hemos generado una lista de vrtices en el sentido de las agujas del reloj. En muchas aplicaciones bidimensionales, la determinacin de las caras anterior y posterior no es importante, pero si queremos
FIGURA 3.54. Un polgono con un interior complejo, que no puede especificarse mediante una nica lista de vrtices.
asignar propiedades diferentes a las caras anterior y posterior del rectngulo, entonces tendremos que invertir el orden de los dos vrtices de este ejemplo, para obtener una ordenacin de los vrtices en sentido contrario a las agujas del reloj. En el Captulo 4 veremos otra manera de invertir la especificacin de las caras anterior y posterior del polgono. Todas las otras seis primitivas OpenGL de relleno de polgonos se especifican utilizando una constante simblica en la funcin g l B e g i n , junto con una lista de comandos g l v e r t e x . Con la constante primitiva OpenGL G L P O L Y G O N , podemos mostrar una nica rea de relleno poligonal como la que se presenta en la Figura 3.56(a). Para este ejemplo, suponemos que tenemos una lista de seis puntos, etiquetados como pl a p, los cuales especifican posiciones bidimensionales de los vrtices del polgono en sentido contrario a las agujas del reloj. Cada uno de los puntos se representa como una matriz de valores de coordenadas (x\y).
glBegin
(GL_POLYGON);
La lista de vrtices del polgono debe contener al menos tres vrtices. En caso contrario, no se mostrar nada en la imagen.
p6 p5 p6 p5
<c>
(d)
FIGURA 3.56. Visualizacin de reas de relleno poligonales utilizando una lista de seis posiciones de vrtices, (a) Un rea de relleno formada por un nico polgono convexo generada por la constante primitiva G L P O L Y G O N . (b) Dos tringulos desconectados generados con G L _ T R I A N G L E S . (c) Cuatro tringulos conectados generados con G L _ T R I A N G L E _ S T R I P . (d) Cuatro tringulos conectados generados con G L _ T R T A N G L E _ F A N .
142 CAPTULO 3
Primitivas grficas
Si reordcnamos la lista de vrtices y cambiamos la constante primitiva del ejemplo de cdigo anterior a G L _ T R I A N G L E S , obtenemos dos reas de relleno triangulares separadas, las cuales se muestran en la Figura 3.56(b).
glBegin (GL_TRIANOLE3); (pl); (p2>; (p6)j (p3); (p4) p5);
En este caso, los primeros tres puntos definen los vrtices de un tringulo, los siguientes tres puntos definen el siguiente tringulo, etc. Para cada rea de relleno triangular, especificamos las posiciones de los vrtices en sentido contrario a las agujas del reloj. Con esta constante primitiva se mostrar un conjunto de tringulos desconectados, a menos que se repitan las coordenadas de algunos vrtices. Si no incluimos al menos tres vrtices, no se mostrar nada en la imagen, y si el nmero de vrtices especificados no es un mltiplo de tres, el vrtice o los dos vrtices finales no se utilizarn. Reordenando de nuevo la lista de vrtices y cambiando la constante primitiva a G L _ _ T R I A N G L E _ S T R I P , podemos mostrar el conjunto de tringulos conectados que se presenta en la Figura 3.56(c).
glBegin (GL_TRIANGLE_STRIP}; (pl) ; (p2); (p6); (p3); (p5); p4);
Suponiendo que no se repita ninguno de los N vrtices de la lista, obtendremos N ~ 2 tringulos en la banda de tringulos dibujada por este comando. Obviamente, debemos tener N> 3 o no se podr mostrar ninguna imagen. En este ejemplo, N = 6y se obtienen cuatro tringulos. Cada uno de los sucesivos tringulos comparte una arista con el tringulo anteriormente definido, por lo que la ordenacin de la lista de vrtices debe ser la adecuada para garantizar una visualizacin coherente. Se definir un tringulo para cada vrtice enumerado despus de los dos primeros vrtices. As, los primeros tres vrtices deben enumerarse en el sentido contrario a las agujas del reloj, segn se mira a la cara frontal (exterior) del tringulo. Despus de eso, el conjunto de tres vrtices para cada tringulo subsiguiente estar dispuesto en sentido contrario a las agujas del reloj dentro de la tabla de polgonos. Esto se lleva a cabo procesando cada posicin /; de la lista de vrtices en el orden n = l, w = 2, , . . n = N 2 y disponiendo el orden del correspondiente conjunto de tres vrtices segn n sea un nmero par o impar. Si n es impar, la entrada de la tabla de polgonos para los vrtices del tringulo estar en el orden / / , / / + l, n + 2. Si n es par, los vrtices del tringulo se enumerarn en el orden n + + 2. En el ejemplo anterior, nuestro primer tringulo (n = I) se describir como compuesto por los vrtices (pl, p2, p6). El segundo tringulo {n = 2) tendr la ordenacin de vrtices (p6. p2, p3). El orden de los vrtices para el tercer tringulo (n = 3) ser (p6, p3, p5) y el cuarto tringulo (n - 4) aparecer en la tabla de polgonos con la ordenacin de vrtices (p5, p3, p4). Otra forma de generar un conjunto de tringulos conectados consiste en utilizar la estructura de ventilador ilustrada en la Figura 3.56(d), donde todos los tringulos comparlen un vrtice comn. Esta disposicin de tringulos se obtiene utilizando la constante primitiva G L _ _ T R I A N G L E _ F A N y la ordenacin original de los seis vrtices:
Para N vrtices, obtendremos de nuevo N - 2, supuesto que no se repita ninguna posicin de vrtice y que hayamos incluido al menos tres vrtices. Adems, los vrtices deben especificarse en el orden correcto para poder definir adecuadamente las caras anterior y posterior de cada tringulo. El primer vrtice enumerado (en este caso, p l ) formar parte de cada uno de los tringulos de la estructura en ventilador. Si volvemos a enumerar los tringulos y los vrtices como n = I, n = 2 , . . . n = N - 2, entonces los vrtices para el tringulo n aparecern en la tabla de polgonos en el orden I, n + l. // I- 2. Por tanto, el tringulo 1 estar definido mediante la lista de vrtices ( p l . p2, p3); el tringulo 2 tendr la ordenacin de vrtices (pl, p3, p4); el tringulo 3 tendr sus vrtices especificados en el orden ( p l , p4, p5) y el tringulo 4 estar descrito mediante la ordenacin de vrtices (pl, p5, p6). Adems de las funciones primitivas para tringulos y para la visualizacin de un polgono general, OpenL proporciona mecanismos para especificar dos tipos de cuadrilteros (polgonos de cuatro lados). Con la constante primitiva GL_QUADS y la siguiente lista de ocho vrtices, especificados mediante matrices de coordenadas bidimensionales, podemos generar la imagen que se muestra en la Figura 3.57(a).
glBegin (GL_QUADS) ; (pl); (p2); (p3); (p4); (p5); (p6); (p7) ; (p8);
Los primeros cuatro vrtices definen las coordenadas del primer cuadriltero, mientras que los siguientes cuatro puntos definen el segundo cuadriltero, etc. Para cada cuadriltero relleno, se especifican las posiciones de los vrtices en sentido contrario a las agujas del reloj. Si no se repiten las coordenadas de ningn vrtice, se mostrar con esto un conjunto de reas de relleno de cuatro lados no conectadas. Con esta primitiva, es necesario proporcionar al menos cuatro vrtices, ya que de lo contrario no se mostrar ninguna imagen; adems, si el nmero de vrtices especificado no es mltiplo de cuatro, los vrtices que sobran se ignorarn. Reordenando la lista de vrtices del ejemplo de cdigo anterior y cambiando la constante primitiva a GL_QUAD_STRIp, podemos obtener el conjunto de cuadrilteros conectados que se muestran en la Figura 3.57(b). "
glBegin (GL_QUADJ3TRIP); (pl); (p2>; (p4); (p3); (p5); (p6); (pB);
144
CAPTULO 3
Primitivas grficas
(p7)
glVertex2iv glEnd ( );
Se dibujar un cuadnllero para cada par de vrtices especificados despus de los primeros dos vrtices de la lista, y es necesario enumerar los vrtices en el orden correcto para poder generar una ordenacin de vrtices en sentido contrario a las agujas del reloj para cada polgono. Para una lista de /V vrtices, obtendremos y - 1 cuadrilteros, supuesto que N > 4. Si N no es un mltiplo de cuatro, los vrtices que sobren en la lista no se utilizarn. Podemos enumerar los polgonos rellenos y los vrtices de la lista como n = I, n = 2 , . . ., n = y - 1 . Entonces las tabla de polgonos enumerarn los vrtices para el cuadriltero // con el orden 2/7 - l, 2, 2/7 l 2, 2/7 + I. Para este ejemplo, N = 8 y tendremos tres cuadrilteros en la banda de cuadrilteros. As, nuestro primer cuadriltero (n = 1) tendr la ordenacin de vrtices ( p l , p2, p3, p4). El segundo cuadriltero (/7 = 2) tendr la ordenacin de vrtices (p4, p3, p6, p5) y la ordenacin de vrtices para el tercer cuadriltero (/; = 3) ser (p5, p6, p7, p8). La mayora de los paquetes grficos muestran las superficies curvadas mediante un conjunto de caras planas que las aproximan. Esto se debe a que las ecuaciones de los planos son lineales y el procesamiento de esas ecuaciones lineales es mucho ms rpido que procesar cudricas u otros tipos de ecuaciones de curvas. Por eso, OpenGL y otros paquetes proporcionan primitivas poligonales para facilitar la aproximacin de una superficie curva. Los objetos se modelan mediante mallas de polgonos y se define una base de datos de informacin geomtrica y de atributos para facilitar el procesamiento de las caras poligonales. En OpenGL, las
FIGURA 3.57. Visnalizacin de cuadrilteros rellenos utilizando una lista de ocho vrtices, (a) Dos cuadrilteros no conectados generados mediante G L _ Q U A D S . (b) Tres cuadrilteros conectados generados mediante GL_QUAD_3 TRIP.
1 45
primitivas que podemos utilizar con este propsito son la banda de tringulos, el ventilador de tringulos y la banda de cuadrilteros. Los sistemas grficos de alta calidad incorporan renderi/adores rpidos de polgonos implementados en hardware que tienen la capacidad de mostrar un milln o ms de polgonos sombreados por segundo (usualmente tringulos), incluyendo la aplicacin de texturas superficiales y de efectos especiales de iluminacin. Aunque la biblioteca bsica de OpenGL slo permite utilizar polgonos convexos, la utilidad de OpenGL (GLU) proporciona funciones para procesar polgonos cncavos y otros objetos no convexos con contornos lineales. Hay disponible una serie de rutinas de teselado de polgonos en GLU para convertir dichas formas en un conjunto de tringulos, mallas de tringulos, ventiladores de tringulos y segmentos de lneas rectas. Una vez descompuestos esos objetos, puede procesrselos mediante funciones OpenGL bsicas.
(l, {1,
0, 0,
0), 1),
(1 {1,
1, 1,
0), 1) );
Tambin podramos definir primero un tipo de datos para las coordenadas tridimensionales de los vrtices y luego proporcionar las coordenadas de cada vrtice como un elemento de una matriz unidimensional, como por ejemplo:
t y p e d e f GLint vertex3 pt vertex3 [8] = { [3]; {0, {0, 0, 0, 0}, l}, {0, (0, 1, 1, 0}, 1}, {1, {1, 0, 0, 0), l), {l, (1, 1, 1, 0), 1) };
A continuacin, necesitamos definir cada una de las seis caras del objeto. Para esto, podemos hacer seis llamadas a g l B e g i n (GL_POLYGON) o a g l B e g i n (GLQUADS). En cualquiera de los casos, debemos aseguramos de enumerar los vrtices de cada cara en sentido contrario a las agujas del reloj, segn se mira a la superficie desde el exterior del cubo. En el siguiente segmento de cdigo, especificamos cada cara del cubo como un cuadriltero y utilizamos una llamada a funcin para pasar los valores de subndice de la matriz a las rutinas primitivas OpenGL. La Figura 3.59 muestra los valores de los subndices de la matriz pt que define las posiciones de los vrtices del cubo.
v o i d quad (GLint ni, GLint n2, GLint n3, GLint n4)
i
glBegin (GLQUADS); (Pt (Pt (pt (pt tnll) (n2]> [n3]) ln4J I glVertex3iv glVertex3 iv givertex3iv glVertex3 iv glEnd ( );
}
v o i d cube ( quad (6, 2. 3, 7) ; ( )
146
fa m
As, la especificacin de cada cara requiere seis funciones OpenGL y tenemos seis caras que especificar. Cuando se aaden las especificaciones de color y de otros parmetros, el programa de visualizacin del cubo puede alcanzar fcilmente el centenar de llamadas a funciones OpenGL, o incluso ms. Y las escenas con muchos objetos complejos requerirn, obviamente, un nmero de llamadas muy superior. Como podemos ver a partir del anterior ejemplo del cubo, la descripcin completa de una escena podra requerir cientos o miles de especificaciones de coordenadas. Adems, es necesario configurar diversos atributos y parmetros de visualizacin para cada objeto individual. Como consecuencia, las descripciones de los objetos y de la escena podran requerir una cantidad enorme de llamadas a funcin, lo que impone una gran carga de procesamiento al sistema y puede ralentizar la ejecucin de los programas grficos. Un problema adicional que presentan las imgenes complejas es que las superficies de los objetos (como por ejemplo el cubo de la Figura 3.58) usualmente tienen coordenadas de vrtices compartidas. Utilizando los mtodos de los que hasta ahora hemos hablado, estas posiciones compartidas podran tener que especificarse mltiples veces. Para aliviar estos problemas, OpenGL proporciona un mecanismo para reducir el nmero de llamadas a funcin necesarias para procesar la informacin de coordenadas. Utilizando una matriz de vrtices podemos disponer la informacin que describe una escena de modo que slo sea necesario efectuar unas pocas llamadas a funcin. Los pasos necesarios son los siguientes: (1) (2) (3) Invocar la funcin g l E n a b l e C l i e n t S t a t e matrices de vrtices de OpenGL.
(GL_VERTEX_ARRAY)
Utilizar la funcin g l V e r c e x P o i n t e r para especificar la ubicacin y el formato de los datos que describen las coordenadas de los vrtices. Visualizar la escena utilizando una rutina tal como primitivas con muy pocas llamadas a funcin.
glDrawElements,
Utilizando la matriz pt definida anteriormente para el cubo, implementaramos estos tres pasos tal como se indica en el siguiente ejemplo de cdigo: z
/
oj
s
*
/ // /
1 47
FIGURA 3.59. Valores de los subndices para la matriz pt correspondiente a las coordenadas de los vrtices del cubo mostrado en la Figura 3.58.
GLubyte v e r t l n d e x 4, 0, 2, 6,
glDrawElements
(GLQUADS,
GL_UNSIGNED_BYTE,
Con el primer comando. g l E n a b l e C l i e n t S t a t e (GLVERTEXARRAY), activamos una determinada caracterstica (en este caso, una matriz de vrtice) en el lado cliente de un sistema cliente-servidor. Puesto que el cliente (la mquina que est ejecutando el programa principal) es quien guarda los datos correspondientes a la imagen, la matriz de vrtices tambin debe almacenarse all. Como hemos indicado en el Capitulo 2, el servidor (nuestra estacin de trabajo, por ejemplo) se encarga de generar los comandos y visualizar la imagen. Por supuesto, una misma mquina puede actuar a la vez como cliente y como servidor. La caracterstica de matrices de vrtices de OpenGL se desactiva mediante el comando:
glDisableClientState (GL_VERTEX_ARRAY);
A continuacin indicamos la ubicacin y el formato de las coordenadas de los vrtices del objeto, en la funcin g l V e r t e x P o i n t e r . El primer parmetro de g l V e r t e x P o i n t e r , que es 3 en este ejemplo, especifica el nmero de coordenadas utilizadas para la descripcin de cada vrtice. El tipo de dalos de las coordenadas de los vrtices se designa utilizando una constante simblica OpenGL como segundo parmetro de esta funcin. En nuestro ejemplo, el tipo de datos es G L _ I N T . El resto de los tipos de datos se especifican mediante las constantes simblicas G L B Y T E , G L _ S H O R T , G L F L O A T y G L _ D O U B L E . Con el tercer parmetro indicamos el desplazamiento en bytcs entre vrtices consecutivos. El propsito de este argumento es permitir utilizar diversos tipos de datos, empaquetando en una nica matriz informacin, por ejemplo, tanto de coordenadas como de colores. Puesto que slo estamos proporcionando los datos de coordenadas, asignamos un valor de 0 al parmetro de desplazamiento. El ltimo parmetro de la funcin g l V e r t e x P o i n t e r hace referencia a la matriz de vrtices, que contiene los valores de las coordenadas. Todos los ndices de los vrtices del cubo se almacenan en la matriz v e r t I n d e x . Cada uno de estos ndices es el subndice de la matriz, pt correspondiente a los valores de coordenadas del respectivo vrtice. F-sta lista de ndices se referencia como ltimo parmetro en la funcin g l D r a w E l e m e n t s y es utilizada a continuacin por la primitiva GL_ Q U A D S , que es el primer parmetro, con el fin de mostrar el conjunto de cuadrilicros que componen el cubo. El segundo parmetro especifica el nmero de elementos de la matriz v e r t l n d e x . Puesto que un cuadriltero requiere slo cuatro vrtices y hemos especificado 24, la funcin glDrawElements continuar mostrando caras del cubo adicionales para cada sucesivo conjunto de cuatro vrtices, hasta haber procesado los 24 vrtices disponibles. Con esto, conseguimos visualizar todas las caras
148
del cubo con una nica llamada a funcin. El tercer parmetro de la funcin g l D r a w E l e m e n t s proporciona e! tipo de los valores de ndice. Puesto que nuestros ndices son enteros de pequeo tamao, hemos especificado el tipo G L _ U N S I G N E D _ B Y T E . Los otros dos tipos de ndice que pueden utilizarse son G L _ U N S I G N E D _
S H O R T y GL U N S I G N E D INT.
Puede combinarse informacin adicional con los valores de coordenadas en las matrices de vrtices, con el fin de facilitar el procesamiento de la descripcin de una escena. Podemos especificar valores de color y otros atributos para los objetos en una serie de matrices a las que se puede hacer referencia en la funcin g l D r a w E l e m e n t s . Y tambin podemos entrelazar las diversas matrices para aumentar la eficiencia. En el siguiente captulo analizaremos los mtodos disponibles para implementar estas matrices de atributos.
Los parmetros w i d t h y h e i g h t de esta funcin proporcionan el nmero de columnas y de filas, respectivamente, en la matriz b i t S h a p e . A cada elemento de b i t S h a p e se le asigna un I o un 0. Un valor de 1 indica que hay que mostrar el pxel correspondiente en un determinado color preestablecido. En caso contrario, el pxel no se ver afectado por el mapa de bits (como opcin, podramos utilizar un valor de I para indicar que hay que combinar un color especificado con el valor de color almacenado en dicha posicin del blr de refresco). Los parmetros xO e yo definen la posicin que hay que considerar como origen de la matriz rectangular. Esta posicin de origen se especifica en relacin con la esquina inferior izquierda de b i t S h a p e , y los valores de xO e yo pueden ser positivos o negativos. Adems, tenemos que designar una ubicacin dentro del blr de imagen a la que haya que aplicar el patrn. Esta ubicacin se denomina posicin actual de visualizacin y el mapa de bits se mostrar posicionando su origen (xO, y) en la posicin actual de visuali-
149
MU
/1 = 5 FILAS
A'niin
m = 8 columnas
FIGURA 3.60. Asignacin de una matriz de colores n por m a una regin de las coordenadas de pantalla.
zacin. Los valores asignados a los parmetros x O f f s e t e y O f f s e t se utilizan como desplazamiento de coordenadas para actualizar la posicin actual de visualizacin del bfer de imagen despus de mostrar el mapa de bits. Los valores de coordenadas para x o , y o , x O f f s e t e y O f f s e t , as como la posicin actual de visualizacin, se mantienen como valores en coma flotante. Por supuesto, los mapas de bit se aplicarn a posiciones de pxel enteras, pero las coordenadas en coma flotante permiten espaciar un conjunto de mapas de bits a intervalos arbitrarios, lo que resulta til en algunas aplicaciones, como por ejemplo al formar cadenas de caracteres mediante patrones de mapas de bits. Se utiliza la siguiente rutina para establecer las coordenadas de la posicin actual de visualizacin:
glRascerPos* ( )
Los parmetros y cdigos de sufijos son iguales que para la funcin g l V e r t e x . As, la posicin actual de visualizacin se proporciona en coordenadas universales y se transforma a coordenadas de pantalla mediante las transformaciones de visualizacin. Para nuestros ejemplos bidimensionales, podemos especificar coordenadas para la posicin actual de visualizacin directamente en coordenadas enteras de pantalla. El valor predeterminado para la posicin actual de visualizacin es el origen de las coordenadas universales ( 0 , 0 , 0). El color para un mapa de bits es el color que est activo en el momento de invocar el comando g l R a s t e r P o s . Cualesquiera cambios de color subsiguientes no afectarn al mapa de bits. Cada fda de una matriz de bits rectangular se almacena en mltiplos de 8 bits, disponiendo los datos binarios como conjuntos de caracteres de 8 bits sin signo. Pero podemos describir una forma geomtrica utilizando cualquier tamao de cuadrcula que nos resulte conveniente. Como ejemplo, la Figura 3.61 muestra un patrn de bits definido sobre una cuadrcula de 10 filas por 9 columnas, en la que los datos binarios se especifican utilizando 16 bits para cada fila. Cuando se aplica este patrn a los pxeles del bfer de imagen, todos los valores de bit situados ms all de la novena columna sern ignorados. Para aplicar el patrn de bits de la Figura 3.61 a una ubicacin del bfer de imagen, emplearamos la siguiente seccin de cdigo:
GLubyte b i t S h a p e 0x1c, Oxff, 0x00, 0x80, [20] Oxlc, 0x7, = { Dxlc, Dx3e, 0x00, 0x00, 0x1c, Oxlc, OxOO, 0x00, 0x1c, 0x08, 0x00, 0x00};
0x00, 0x00,
150
CAPTULO 3
Primitivos grficas
(
o
( i t 0
o O o
0 X 08 0 x 0 x
0x00 0 X
O
M
I) O O
TJ O O 0 0 0
FJ I> O 0 0 0
f>.
IC 3E Pf IC IC IC IC IC
(K)
x 00
0 X 7F
0 X 00 0 X 80 0 x 00 0 X 00 0 X 00 0 x 00 0 x 00
I0
0 L
0 (1 0 0 0
0 0 0 0 0
0 0 1)
i)
0 0 0 0
0 0
i)
Ox Ox 0 x 0 X OX
0 w
0
t
0 TI
>
i
0
II
12
FIGURA 3.61. Un patrn de bits especificado como una matriz con 10 filas y 9 columnas y almacenado en bloques de 8 bils para las 10 filas, con 16 valores de bit por cada una de ellas.
glPixelStorei (GL_UNPACK_ALIGNMENT, 1); // glRasterPos2i glBitmap (9, {30, 10, 40); 0.0, 0.0, 20.0, 15.0, bitShape); // Establece el de pxel. modo d e almacenamiento
Los valores de la matriz b i t S h a p e se especifican fila a fila, comenzando por la parte inferior del patrn do cuadrcula rectangular. A continuacin, definimos el modo de almacenamiento para el mapa de bits mediante la rutina OpenGL g l P i x e l S t o r e i . El valor de parmetro de I en esta funcin indica que hay que alinear los valores de los datos en las fronteras de los bytes. Con g l R a s t e r P o s , establecemos la posicin actual de visualizacin en las coordenadas (30.40). Finalmente, la funcin g l B i t m a p especifica que el patrn de bils se proporciona en la matriz b i t S h a p e , y que esta matriz tiene 9 columnas y 10 filas. Las coordenadas del origen de este patrn son (0.0, 0.0) que se corresponden con la esquina inferior izquierda de la cuadrcula, liemos ilustrado en el ejemplo un desplazamiento de coordenadas con los valores (20.0, 15.0), aunque en el ejemplo no se hace uso de dicho desplazamiento.
De nuevo los parmetros w i d t h y h e i g h t proporcionan las dimensiones en columnas y filas, respectivamente, de la matriz p i x M a p . Al parmetro d a t a F o r m a t se le asigna una constante OpenGL que indica cmo se especifican los valores de la matriz. Por ejemplo, podramos especificar un mismo color azul para todos los pxeles mediante la constante G L B L U E , O podramos especificar tres componentes de color en el orden azul, verde, rojo mediante la constante G L _ B G R . Pueden utilizarse varios otros tipos de especificaciones de color, y en el siguiente captulo examinaremos las selecciones de color con ms detalle. Al parmetro d a t a T y p e se le asigna una constante OpenGL tal como G L _ B Y T E , G L _ I N T O G L _ F L O A T , para designar el tipo de datos de los valores de color almacenados en la matriz. La esquina inferior izquierda de esta matriz, de colores se asigna a la posicin actual de visualizacin, definida mediante g l R a t e r P o s . Como ejemplo, la siguiente instruccin muestra un mapa de pxeles definido mediante una matriz de 128 por 128 valores de color RGB:
glDrawPixels {128, 128, GL_RGB, GLUNSIGNEDBYTE, colorShape);
19 Funciones OpenGL pura matrices de pixeles 151 Puesto que OpenGL proporciona diversos bferes, podemos almacenar una matriz de valores en un bfer concreto seleccionando dicho bfer como objetivo de la rutina g l D r a w P i x e l s . Algunos pixeles almacenan valores de color, mientras que otros almacenan otros tipos de datos relativos a los pixeles. Por ejemplo, un bfer de profundidad se utiliza para almacenar las distancias de los objetos (profundidades) con respecto a la posicin de visualizacin, mientras que un bfer de patrones se utiliza para almacenar los patrones de los con tomos correspondientes a una escena. Podemos seleccionar uno de estos dos bferes asignando al parmetro d a t a F o r m a t de la rutina g l D r a w P i x e l s los valores GL_DEPTH_COMPONENT o G L _ S T E N C I L _ I N D E X . Para estos bferes, tendramos que almacenar en la matriz de pixeles valores de profundidad o informacin sobre el patrn del contorno. Examinaremos ms en detalle estos bferes en los captulos posteriores. En OpenGL hay disponibles cuatro bferes de color que pueden utilizar para refrescar la pantalla. Dos de los bferes de color constituyen una pareja de escenas izquierda-derecha para mostrar imgenes estereoscpicas. Para cada uno de los bferes estereoscpicos, hay una pareja primer plano/segundo plano para visualizacin de animacin con doble bfer. En cada implementacin concreta de OpenGL puede que no est soportada la visualizacin estereoscpica o la visualizacin con doble bfer. Si no se soportan ni los efectos estereoscpicos ni los mecanismos de doble bfer, entonces habr un nico bfer de refresco, que se denominar bfer de color izquierdo de primer plano. Este es el bfer predeterminado de refresco cuando no hay disponible mecanismo de doble bfer o cuando ste no est activado. Si est activado el doble bfer, se utilizarn como bferes predeterminados el bfer izquierdo de segundo plano y el bfer derecho de segundo plano o nicamente el bfer izquierdo de segundo plano, dependiendo del estado actual de la visualizacin estereoscpica. Asimismo, se permite al usuario definir bferes auxiliares de color que pueden utilizarse para propsitos distintos del refresco de pantalla, como por ejemplo para guardar una imagen que haya que copiar ms tarde o un bfer de refresco para su visualizacin. Podemos seleccionar un nico color, o un bfer auxiliar, o una combinacin de bferes de color para almacenar un mapa de pixeles mediante el siguiente comando:
glDrawBuffer (buffer);
AI parmetro bfer se le pueden asignar diversas constantes simblicas OpenGL con el fin de especificar uno o ms bferes de "dibujo". Por ejemplo, podemos seleccionar un nico bfer mediante G L F R O N T L E F T , GL _FR0NT _RIGHT, G L _ B A C K _ L E F T o G L _ B A C K _ R I G H T . Podemos seleccionar ambos bferes de primer plano mediante G L F R O N T O ambos bferes de segundo plano mediante GL_BACK, suponiendo que est activada la visualizacin estereoscpica. Si la visualizacin estereoscpica no est asignada, estas dos constantes simblicas especifican un nico bfer. De forma similar podemos seleccionar las parejas de bferes izquierdos o derechos mediante G L _ L E F T O G L R I G H T , y podemos seleccionar todos los bferes de color disponibles mediante G L _ F R O N T _ A N D _ B A C K . LOS bferes auxiliares se seleccionan mediante las constantes GL_AUXk. donde k es un valor entero que va de 0 a 3, aunque puede que algunas implementaciones de OpenGL permitan ms de cuatro bferes auxiliares.
1 52
CAPITULO 3
glReadPixels
Primitivas grficas
{xmin, ymin, width, height, array};
dataFormat,
dataType,
La esquina inferior izquierda del bloque rectangular que hay que extraer se encuentra en la posicin de coordenadas de la pantalla (xmin, ymin). Los parmetros w i d t h , h e i g h t , d a t a F o r m a t y d a t a T y p e son iguales que para la rutina g l D r a w P i x e l s . El tipo de los datos que hay que guardar en el parmetro a r r a y dependen del bfer seleccionado. Podemos elegir el bfer de profundidad o el bfer de patrones asignando el valor GL_DEPTH_COMPONENT O GL_STENCIL_INDEX al parmetro d a t a F o r m a t . Para seleccionar una combinacin concreta de bferes de color o un bfer auxiliar para la rutina g l R e a d P i x e l s se utiliza la funcin:
glReadBuffer (buffer);
Las constantes simblicas para especificar uno o ms bferes son iguales que para la rutina glDrawBuf f e r , salvo porque no podemos seleccionar los cuatro bferes de color a la vez. La seleccin predeterminada de bfer es la pareja de bferes izquierdo-derecho de primer plano o simplemente el bfer izquierdo de primer plano, dependiendo del estado de la visualizacin estereoscpica. Tambin podemos copiar un bloque de datos de pxeles de una ubicacin a otra dentro del conjunto de bferes OpenGL, para lo cual se utiliza la siguiente rutina:
glCopyPixels (xmin, ymin, width, height, pixelValues\;
La esquina inferior izquierda del bloque se encontrar en las coordenadas de pantalla (xmin, ymin), y los parmetros w i d t h y h e i g h t debern tener valores enteros positivos para especificar el nmero de columnas y de filas, respectivamente, que hay que copiar. El parmetro p i x e l V a l u e 3 puede tener como valores las constantes G L _ C O L O R , G L _ D E P T H o G L _ S T E N C I L para indicar el tipo de datos que queremos copiar: valores de color, valores de profundidad o valores de patrn de contorno. Y el bloque de valores de pxeles ser copia do desde un bfer Je origen y el bloque de valores de pxel se copian desde un bfer Je origen hasta un bfer Je Jestino, asignndose la esquina inferior izquierda a la posicin de visualizacin actual. El bfer de origen se selecciona mediante el comando g l R e a d B u f f e r , mientras que para el bfer de destino se emplea el comando glDrawBuf f e r . Tanto la regin que hay que copiar como el rea de destino deben caer completamente dentro de los lmites de las coordenadas de pantalla. Para conseguir diferentes efectos a medida que se almacena un bloque de valores de pxel en un bfer mediante g l D r a w P i x e l s o g l C o p y P i x e l s , podemos combinar de diversas formas los valores entrantes con los anteriores valores del bfer. Como ejemplo, podemos aplicar operaciones lgicas, tales como anJ or y exclusive or. En OpenGL, puede seleccionarse una operacin lgica aplicable bit a bit para combinar los valores de color de los pixeles entrantes y de destino mediante las funciones:
y
glEnable glLogicOp
(GL_C0L0R_LOGIC (lcgicOp;
OP);
Pueden asignarse diversas constantes simblicas al parmetro l o g i c O p . incluyendo GL_AND, GL_OR y GL_XOR. Adems, tanto los valores de bit entrantes como los valores de bit de destino pueden invertirse (intercambiando los valores 0 y I). Para invenir los valores entrantes de los bits de color se utiliza la constante G L _ C O P Y _ I N V E R T E D , con la que se sustituyen los valores de destino por los valores entrantes invertidos. Y tambin podemos simplemente invertir los valores de bit de destino sin reemplazarlos por los valores entrantes, utilizando G L I N V E R T . Las diversas operaciones de inversin pueden tambin combinarse mediante las operaciones lgicas and, or y exclusive or. Otras opciones incluyen borrar todos los bits de destino, asignndoles el valor 0 ( G L C L E A R ) , O asignar a todos los bits de destino el valor I ( G L _ S E T ) . El valor predeterminado para la rutina g l L o g i c O p es G L _ C O P Y , que simplemente reemplaza los valores de destino por los valores entrantes. Hay disponibles otras rutinas OpenGL adicionales para manipular matrices de pxeles procesadas por las funciones g l D r a w P i x e l s , g l R e a d P i x e l s y g l C o p y P i x e l s . Por ejemplo, las rutinas g l P i x e l T r a n s f er
1 53
y g l P i x e l M a p pueden utilizarse para efectuar un desplazamiento lgico o un ajuste de los valores de color, de los valores de profundidad o de los patrones de contorno. Volveremos a tratar de las operaciones de pixeles en captulos posteriores, cuando pasemos a analizar otras facetas de los paquetes de grficos por computadora.
154
CAPTULO 3
Primitivas grficas
1 j 1 1 1 I
1 1 I 1 1 1 1
11
1 1 I 1
1 1 1 1 l'
1 FIGURA 3.62. La Idra B representada con un patrn de mapa de bits 8 por 8 (u) y con una forma de contorno definida mediante segmentos de lneas rectas y de curvas (b).
1
(
X 100 --
50
FIGURA 3.63.
50
100
150
mltiplos enteros del tamao del pxel. Si queremos doblar el tamao de un carcter, tenemos que doblar el nmero de pxeles del mapa de bils, con lo que los bordes del carcter tendrn una apariencia escalonada. Por contraste con las fuentes de mapa de bits, las fuentes de contomo pueden incrementarse de tamao sin distorsionar la forma de los caracteres. Adems, estas fuentes requieren menos espacio de almacenamiento, porque no hace falta una cach de fuente separada para cada una de las vanantes del tipo de caracteres. Podemos generar caracteres en negrita, en itlica o de diferentes tamaos manipulando las definiciones de las curvas que especifican el contorno de los caracteres. Pero obviamente hace falta ms tiempo para procesar las fuentes de contorno, ya que es necesario digitalizar los caracteres para almacenarlos en el bfer de imagen. Hay una diversidad de posibles funciones para visualizar caracteres. Algunos paquetes grficos proporcionan una incin que acepta cualquier cadena de caracteres y una indicacin de cul debe ser la posicin de inicio de la cadena dentro del bfer de imagen. Otro tipo de funciones son aquellas que muestran un nico carcter en una o ms posiciones seleccionadas. Puesto que esta rutina de caracteres resulta muy til para mostrar caracteres en una imagen, por ejemplo, de una red de computadoras o a la hora de mostrar una grfica con los puntos correspondientes a un conjunto de datos discretos, el carcter mostrado por esta rutina se denomina en ocasiones smbolo m a r c a d o r o polimarcador, por analoga con la primitiva de polilnea. Adems de los caracteres estndar, otras formas geomtricas especiales como los puntos, los crculos y las cruces suelen estar disponibles como smbolos marcadores. La Figura 3.63 muestra una grfica de un conjunto de datos discreto donde se utiliza un asterisco como smbolo marcador. Las descripciones geomtricas de los caracteres se proporcionan en coordenadas universales, al igual que con las otras primitivas, y esta informacin se hace corresponder con las coordenadas de pantalla mediante las transformaciones de visualizacin. Un carcter de mapa de bils se describe mediante una cuadrcula rectangular de valores binarios y una posicin de referencia para la cuadrcula. Lsta posicin de icfereucia se asigna entonces a una ubicacin especificada dentro del bfer de imagen. Un carcter de contorno est definido por un conjunto de puntos que hay que conectar mediante una serie de segmentos curvos y rectos, junto con una posicin de referencia que hay que hacer corresponder con una ubicacin determinada del bfer de imagen. La posicin de referencia puede especificarse para un nico carcter de contorno o para una cadena de caracteres. En general, las rutinas de caracteres permiten generar imgenes con caracteres tanto bidimensionales como tridimensionales.
3.21
F u n c i o n e s O p e n G L tic c u n a t e r e s
155
donde al parmetro f o n t se le asigna una constante simblica de GLUT que identifica un conjunto concreto de tipos de letra, mientras que al parmetro c h a r a c t e r se le asigna el cdigo ASCII o el carcter especfico que queramos visualizar. Asi, para mostrar la letra mayscula "A", podemos utilizar el valor ASCII 65 o introducir directamente el carcter * A ' . De forma similar, un valor de cdigo de 66 ser el equivalente a * B \ el cdigo 97 se corresponder con la letra minscula ' a ' , el cdigo 98 se corresponder con la b ' , etc. Hay disponibles tanto fuentes de anchura fija como de espaciado proporcional. Se puede seleccionar una fuente de anchura fija asignando las constantes G L U T _ B I T M A P _ 8 _ B Y _ 1 3 o G L U T _ B I T M A P _ _ 9 _ B Y _ 1 5 al parmetro f o n t . Y podemos seleccionar una fuente de 10 puntos con espaciado proporcional utilizando GLUT_B i T M A P _ T i M E S _ R O M A N _ i o o G L u T _ B i T O A P _ H E L V E T i C A _ i o . Tambin hay disponible una fuente Times-Romn de 12 puntos, as como fuentes de tipo Helvtica de 12 puntos y 18 puntos.
%
Cada carcter generado por g l u t B i t m a p C h a r a c t e r se visualiza de modo que el origen (esquina inferior izquierda) del mapa de bits se encuentre en la posicin de visualizacin actual. Despus de cargar el mapa de bits del carcter en el bfer de refresco, se aade a la coordenada .v de la posicin actual de visualizacin un desplazamiento igual a la anchura del carcter. Como ejemplo, podramos visualizar una cadena de texto que contuviera 36 caracteres de mapa de bits mediante el cdigo siguiente:
glRasterPoaition2i f o r <k - 0 ; (x, y);
glutBitmapCharacter
Los caracteres se muestran en el color que haya sido especificado antes de ejecutar la funcin
glutBitmapCharacter.
Para esta funcin, podemos asignar al parmetro f o n t el valor G L U T _ S T R O K E _ R O M A N , que muestra una fuente con espaciado proporcional, o el valor GL *T_STROKE_MONO_ROMAN, que muestra una fuente con espaciado constante. Podemos controlar el tamao y la posicin de estos caracteres especificando una serie de operaciones de transformacin (Captulo 5) antes de ejecutar la rutina r g l u t S t r o k e r h a r a c t e r . Despus de visualizar cada carcter, se aplica un desplazamiento automtico de coordenadas para que la posicin de visualizacin del siguiente carcter se encuentre a la derecha del carcter actual. Las cadenas de texto generadas mediante fuentes de contorno son parte de la descripcin geomtrica de una escena bidimensional o tridimensional, porque se construyen mediante segmentos de lneas. As, pueden visualizarse desde diversas direcciones y podemos reducirlas o ampliarlas sin que se distorsionen, o incluso transformarlas de otras maneras. Sin embargo, son ms lentas de visualizar, comparadas con las fuentes de mapa de bits.
156
CAPTULO 3
Primitivas grficas
glEndList
) ;
Isla estruclura forma una lista de visualizacin asignando un valor entero positivo al parmetro l i s t l D como nombre de la lista. Al parmetro l i s t M o d e se le asigna una constante simblica OpenGL que puede ser G L _ C O M P I L E o G L _ C O M P I L E _ A N D _ E X E C U T E . Si queremos guardar la lista para su ejecucin posterior, utilizaremos G L C O M P I L E . En caso contrario, los comandos se ejecutan a medida que se los introduce en la lista, adems de poder ejecutar la lista de nuevo en un instante posterior. A medida que se crea una lista de visualizacin, se evalan las expresiones donde intervienen parmetros tales como las posiciones de coordenadas y las componentes de color, de modo que en la lista de visualizacin slo se almacenan los valores de los parmetros. Cualesquiera cambios posieriores que se realicen a estos parmetros no tendrn ningn efecto sobre la lista. Puesto que los valores de las listas de visualizacin no pue-
157
den modificarse, no podemos incluir en una lista de visualizacin determinados comandos OpenGL, como los punteros a listas de vrtices. Podemos crear todas las listas de visualizacin que queramos, y ejecutar una lista concreta de comandos sin ms que efectuar una llamada a su identificador. Adems, puede incrustarse una lista de visualizacin dentro de otra lista. Pero si se asigna a una lista un identificador que ya haya sido utilizado, la nueva lista sustituir a la lista anterior a la que se la hubiera asignado dicho identificador. Por tanto, para evitar perder una lista por la reutilizacin accidental de su identificador, lo mejor es dejar que OpenGL genere un identificador por nosotros:
listID = glGenLists (1) ;
Esta instruccin devuelve un ( I ) identificador entero positivo no utilizado, asignndolo a la variable l i s t I D . Podemos obtener un rango de identificadorcs de lista no utilizados sin ms que utilizar el argumento de g l G e n L i s t s , sustituyendo el valor 1 por algn otro entero positivo. Por ejemplo, si ejecutamos el comando g l G e n L i s t s ( 6 ) , se reservar una secuencia de seis valores enteros positivos contiguos y el primer valor de esta lista de identificadores se devolver a la variable l i s t I D . La funcin g l G e n L i s t s devuelve un valor 0 si se produce un error o si el sistema no puede generar el rango solicitado de enteros contiguos. Por tanto, antes de utilizar un identificador obtenido mediante la rutina g l G e n L i s t s , conviene comprobar que ste es distinto de 0. Aunque pueden generarse identificadores de lista no utilizados mediante la funcin g l G e n L i s t s , tambin podemos consultar independientemente al sistema para determinar si un cierto valor entero especfico ha sido ya utilizado como nombre de una lista. La funcin para efectuar esta consulta es:
glIsList (listID};
Esta funcin devolver un valor G L _ T R U E si el valor de l i s t I D es un entero que ya haya sido utilizado como nombre de una lista de visualizacin. Si el valor entero no ha sido utilizado como nombre de una lista, la funcin g l I s L i s t devolver el valor GL_FALSE.
El siguiente segmento de cdigo ilustra la creacin y ejecucin de una lista de visualizacin. Primero definimos una lista de visualizacin que contiene la descripcin de un hexgono regular, definido en el plano xy utilizando un conjunto de seis vrtices equiespaciados dispuestos a lo largo de una circunferencia y que tienen su centro en las coordenadas (200, 200), siendo el radio igual a 150. Despus, realizamos una llamada a la funcin g l C a l l L i s t , que muestra el hexgono.
6.2831853;
GLdouble GLlnt /* * * x,
un hexgono
regular.
equiespaciados glGenLists
dispuestos l); // //
circunferencia.*/ i d e n t i f i c a d o r para la
regHex
Obtener lista de
visualizacin.
158
CAPTULO 3
Prmuhvas grficas
glNewLiet glBegin
(regHex,
GL_C0MPILE);
for
x
200 200
+ +
y =
glEnd
BIll
( ); ( );
glVertex2i
y);
glEndList glCallList
(regHex);
Podemos ejecutar varias listas de visualizacin de una vez utilizando las siguientes dos instrucciones:
glListBase glCallLists (offsetValue); (nLists, arrayDataType, listIDArray);
El nmero entero de listas que queremos ejecutar se asigna al parmetro n L i s t s , mientras que el parmetro listIDArray es una matriz de identifcadores de listas de visualizacin. En general, listIDArray puede contener cualquier nmero de elementos, ignorndose los identifcadores de listas de visualizacin que no sean vlidos. Asimismo, los elementos de listIDArray pueden especificarse en diversos formatos de datos y el parmetro arrayDataType se utiliza para indicar un tipo de datos, como por ejemplo GL_BYTE, GL_INT, G L _ F L O A T , G L _ 3 _ B Y T E o G L _ 4 _ B Y T E S . Los identifcadores de las listas de visualizacin se calculan sumando el valor de un elemento de l istiDArray al valor entero de of f oetvaluc que se proporciona en la funcin glListBase. El valor predeterminado de off setValue es 0. Este mecanismo para especificar una secuencia de listas de visualizacin que haya que ejecutar nos permite definir grupos de listas de visualizacin relacionadas, cuyos identifcadores se formarn a partir de cdigos o nombres simblicos. Un ejemplo tpico sera un conjunto de caracteres, en el que el identificador de cada lista de visualizacin sera el valor ASCII de un carcter. Cuando haya definidos varios conjuntos de fuentes, puede utilizarse el parmetro off setValue de la funcin glListBase para obtener una fuente concreta que est descrita dentro de la matriz listIDArray.
El parmetro s t a r t l D indica el identificador de lista de visualizacin inicial, mientras que el parmetro nLists especifica el nmero de listas que hay que borrar. Por ejemplo, la instruccin:
glDeleteLists (5, 4);
elimina las cuatro listas de visualizacin con los identifcadores 5, 6, 7 y 8. Los valores de identifcadores que hagan referencia a listas de visualizacin no existentes se ignorarn.
1 59
sidad de utilizar el puntero del ratn para arrastrar la ventana de visualizacin a otra posicin de la pantalla o para cambiar su tamao. Cambiar el tamao de una ventana de visualizacin puede hacer que se modifique su relacin de aspecto y que, por tanto, los objetos se distorsionen con respecto a su forma original. Para poder compensar los cambios realizados en las dimensiones de la ventana de visualizacin, la biblioteca GLUT proporciona la siguiente rutina:
glutReshapeFunc (winReshapeFcn);
Podemos incluir esta (uncin en el procedimiento main de nuestro programa, junto con las otras rutinas GLUT, y dicha funcin se activar cada vez que se altere el tamao de la ventana de visualizacin. El argumento de esta funcin GLUT es el nombre de un procedimiento que ser el que reciba como parmetros la nueva anchura y la nueva altura de la ventana de visualizacin. Entonces, podemos utilizar las nuevas dimensiones para reinicial izar los parmetros de proyeccin y realizar cualesquiera otras operaciones, como por ejemplo modificar el color de la ventana de visualizacin. Adems, podemos guardar los nuevos valores de anchura y altura para poderlos utilizar en otros procedimientos de nuestro programa. Como ejemplo, el siguiente programa ilustra cmo podramos estructurar el procedimiento winReshapeFcn. Incluimos el comando g l L o a d l d e n t i t y en la funcin de redimensionamiento para que los valores previos de los parmetros de proyeccin no afecten a la nueva configuracin de proyeccin. Este programa muestra el hexgono regular del que hemos hablado en la Seccin 3.23. Aunque el centro del hexgono (en la posicin del centro del crculo) de este ejemplo se especifica en trminos de los parmetros de la ventana de visualizacin, la posicin del hexgono no se ver afectada por los cambios que se realicen en el tamao de la ventana de visualizacin. Esto se debe a que el hexgono est definido con una lista de visualizacin, y en dicha lista slo se almacenan las coordenadas originales del centro. Si queremos que la posicin del hexgono cambie cuando se modifique el tamao de la ventana de visualizacin, tendremos que definir el hexgono de otra manera o modificar la referencia de coordenadas de la ventana de visualizacin. La salida de este programa se muestra en la Figura 3.64.
include ttinclude <GL/glut.h> <math.h>
GLsizei winWidth * 400, GLuint class regHex; screenPt prvate: GLint public; /* * x, y;
la
screenPt
l
void setCoords x xCoord; y = yCoord; (GLint x C o o r d , GLint yCoord) {
GLint g e t x return
( X;
const
GLint g o c y return
C y;
const {
static
void
init
(void)
B1II1P
acreenPt GLdouble GLint /* k; del / centro del 2, winHeight // Color crculo. / 2); ventana visualizacin regular blanco. */ (winWidth 1.0, 1.0, hexVertex, theta; circCtr;
circCtr.setCoorde glClearColor /* * *
0.0);
l i s t a de v i s u a l i z a c i n para un hexgono del hexgono sor. seis una puntos circunferencia. situados (1); // // sobre
rojo.
equiespaciados -
regHex
Obtener un
i d e n t i f i c a d o r para
la v i s t a
glNewLiot
(GL_POLYGON); (k theta 0; k c 6; * k++) k / { 6.0; (circCtr.getx { ), ( ) + 150 ( ) * coa + 150 ( (theta), * sin )); (theta)); TW0_PI
circCtr.gety (hexVertex.getx
hexVertex.gety
}
void regHexagon (void)
glClear
(GL_COLOR_BUFFER_BIT); (regHex); ) ;
glCallList glFlush (
}
v o i d winReshapeFcn glMatrixMode glLoadIdentity gluOrtho2D (int newWidth, int newHeight)
(0.0,
3.25 Restwien
161
glClear
(GL_C0L0R_BUFFER_BIT);
}
v o i d main (int argc, char** argv); argv)
glutlnit
(iargc,
g l u t l n i t D i s p l a y M o d e (GL0T_J3 INGLE | GL0TJM3B) ; glutlnitWindowPosition glutlnitWindowSize glutCreateWindow init ( ); (regHexagon); (winReshapeFcn); ); (100, 100); winHeight)j (winWidth,
FIGURA 3.64. Ventana de visuali/acin generada por el programa de ejemplo que lustra el uso de la funcin de redimensionamienlo.
3.25 RESUMEN
Las primitivas de salida analizadas en este captulo proporcionan las herramientas bsicas para construir imgenes con puntos individuales, lneas rectas, curvas, reas de color rellenas, patrones matriciales y textos. Las primitivas se especifican proporcionando su descripcin geomtrica en un sistema de referencia cartesiano en coordenadas universales. Las Figuras 3.65 y 3.66 proporcionan ejemplos de imgenes generadas mediante primitivas de salida. Tres mtodos que pueden utilizarse para situar las posiciones de los pxeles a lo largo de una trayecioria recta son el algoritmo DDA, el algoritmo de Bresenham y el mtodo del punto medio. El algoritmo de Brescnham y el mtodo del punto medio son equivalentes en el caso de las lneas y son tambin los ms
162
FIGURA 3.65. Una grfica de datos generada mediante segmentos lineales, curvas, smbolos de caracteres marcadores y texlo {Cortesa de Wolfram Research, Inc., fabrican/e del paquete software Mathematica.)
FIGURA 3.66. Un diagrama elctrico dibujado mediante secciones rectas, crculos, rectngulos y texto. {Cortesia de Wolfram Research, nt\, fabricante del paquete software Mathematica.)
eficientes. Los valores de color correspondientes a las posiciones de los pxeles a lo largo del trayecto lineal se pueden almacenar de manera eficiente en el bfer de imagen calculando incrementalmente las direcciones de memoria. Cualquiera de los algoritmos de generacin de lneas puede adaptarse para su mplementacin paralela, particionando los segmentos lineales y distribuyendo las particiones entre los procesadores disponibles. Los crculos y elipses pueden digitali/arse de manera eficiente y precisa utilizando el mtodo del punto medio y teniendo en cuenta la simetra de las curvas. Otras secciones cnicas (parbolas e hiprbolas) pueden dibujarse utilizando mtodos similares. Las curvas de tipo splint\ que son polinomios continuos por partes, se utilizan ampliamente en las aplicaciones de animacin y de diseo asistido por computadora. Pueden conseguirse implementacioncs paralelas para la generacin de imgenes de curvas utilizando mtodos similares a los que se emplean para el procesamiento paralelo de lneas. Para tener en cuenta el hecho de que las lneas y curvas visualizadas piden anchuras finitas, podemos ajustar las dimensiones de los objetos en pxeles con el fin de que coincidan con las dimensiones geomtricas especificadas. Esto puede llevarse a cabo empleando un esquema de direccionamiento que haga referencia a las posiciones de los pxeles utilizando la esquina inferior izquierda, o bien ajustando las longitudes de las lincas. Un rea de relleno es una regin plana que hay que dibujar utilizando un color homogneo o un patrn de colores. Las primitivas de reas de relleno en la mayora de los paquetes grficos son polgonos, pero en general podramos especificar una regin de relleno con cualquier contorno arbitrario. A menudo, los sistemas grficos slo permiten reas de relleno poligonales convexas. En ese caso, puede visualizarse un rea de relleno poligonal cncava dividindola en una serie de polgonos convexos. Los tringulos son los polgonos ms fciles de rellenar ya que cada lnea de exploracin que cruza un tringulo intersecta exactamente dos aristas del polgono (suponiendo que la lnea de exploracin no pase por ninguno de los vrtices). Puede emplearse la regla par-impar para determinar los puntos interiores de una regin plana. Tambin son tiles otros mtodos para definir el interior de los objetos, particularmente en el caso de objetos irregulares que se auto-intersectan. Un ejemplo comn es la regla del nmero de vueltas distinto de cero. Esta regla es ms flexible que la regla par-impar a la hora de procesar objetos definidos mediante mltiples contornos. Tambin podemos utilizar variantes de la regla del nmero de vueltas distinto de cero para combinar reas planas utilizando operaciones booleanas.
3.25 Resumen
163
Descripcin
Rspeeifica una referencia 21) de coordenadas universales. Selecciona unas determinadas coordenadas. Esta funcin debe incluirse denlro de una pareja g l B e g i n / g l E n d .
glBegin
(GL_POINTS);
Dibuja uno o ms punios, cada uno de e l l o s especificado mediante una funcin g l V e r t e x . La lista de puntos se cierra mediante una instruccin g l E n d .
glBegin
(GL_LINES>;
Muestra un conjunto de s e g m e n t o s lineales rectos, c u y o s extremos se especifican mediante funciones in g l V e r t e x . La lista de puntos se termina mediante una instruccin glEnd.
glBegin
(GL_LINE_STRIP);
glBegin
(GL_LINE_LOOP);
Muestra un rectngulo relleno en el plano xy. Muestra un polgono relleno, cuyos vrtices se proporcionan mediante funciones g l V e r t e x y se terminan mediante una instruccin g l E n d .
glBegin
(GL._TRIANGLES) ;
glBegin
(GL_TRIANGLE_STRIP) ;
Muestra una malla de tringulos rellenos, especificada mediante la misma estructura que
GLPOLYGON.
glBegin
(GL_TRIANGLE_FAN);
Muestra una malla de tringulos rellenos con forma de ventilador, en la que todos los tringulos se conectan al primer vrtice, que se especifica con la misma estructura que
GL_POLYGON.
glBegin
(GLQUADS);
Muestra un conjunto de cuadrilteros rellenos, que se especifican mediante la misma estructura que GL_P0LYGON.
glBegin
Muestra una malla de cuadrilteros rellenos, que se especifica con la misma estructura que
GL POLYGON.
glEnableClientState
(GL_VERTEX_ARRAY) ;
glVertexPointer glDrawElements
(size, (prim,
type, num,
stride, type,
array);
Kspecifica una matriz de valores de coordenadas. Muestra un tipo de primitiva especificado a partir de los datos de una matriz.
array);
glNewList
( l i s t ID,
listMode)
Define un conjunto de comandos c o m o una lista de visualzacin, que se termina mediante una instruccin glEndList.
(Continuo)
164
CAPTULO 3
Primitivas grficas
Funcin
glGenLiaLu
Descripcin Genera uno o ms identificadores para lisias de visualizacin. Funcin de consulla para determinar si un cierto identificador de lista de visualizacin est siendo utilizado. Ejecuta una nica lista de visualizacin. Especifica un valor de desplazamiento para una matriz de identificadores de listas de visualizacin. Ejecuta mltiples listas de visualizacin. Elimina una secuencia especificada de listas de visualizacin. Especifica una posicin actual bidimensional o tridimensional para el bfer de imagen. Esta posicin se utiliza como referencia para los patrones de mapa de bits y de mapa de pxeles.
h, xO, yO
r
glIsList
glCallList glListBase
glCallLists glDeleteLists
glRasterPos*
glBitmap pattern);
(w,
xShift,
yShift
Especifica un patrn binario que hay que asignar a una serie de posiciones de pxeles, de forma relativa a la posicin actual. Especifica un patrn de colores que hay que asignar a una serie de posiciones de pxeles, de forma relativa a la posicin actual. Selecciona uno o ms bferes para almacenar un mapa de pxeles. Guarda un bloque de pxeles en una matriz seleccionada. Copia un bloque de pxeles de una posicin de bfer a otra. Selecciona una operacin lgica para combinar dos matrices de pxeles, despus de habilitar esta caracterstica con la constante GL_COLOR_LOGIC_OP.
glDrawPixela
(w,
h,
type,
format,
pattern)
glDrawBuffer
glutBitmapCharacter
(font,
c h a r ) ,-
Especifica una fuente y un carcter de mapa de bits para su visualizacin. Especifica una fuente y un carcter de contorno para su visualizacin. Especifica las acciones que hay que tomar cuando se modifican las dimensiones de la ventana de visualizacin.
glutStrokeCharacter
(font,
char);
glutReshapeFunc
Cada polgono tiene una cara anterior y una cara posterior, las cuales determinan la orientacin espacial del plano del polgono. Esta orientacin espacial puede determinarse a partir del vector normal, que es perpendicular al plano del polgono y apunta en la direccin que va de la cara posterior a la cara anterior. Podemos determinar las componentes del vector normal a partir de la ecuacin del plano del polgono o realizando un producto vectorial utilizando tres puntos en el plano, tomndose los tres puntos en sentido contra-
Programas de ejemplo
165
rio a las agujas del reloj y asegurndose de que el ngulo formado por los tres punto sea inferior a 180. Todos los valores de coordenadas, las orientaciones espaciales y otros datos geomtricos para una escena se introducen en tres tablas: tabla de vrtices, tabla de aristas y tabla de caras de la superficie. Entre las primitivas adicionales disponibles en los paquetes grficos se incluyen las relativas a las matrices de patrones de bits o pixeles y a las cadenas de caracteres. Las matrices de patrones pueden utilizarse para especificar formas geomtricas bidimensionales, incluyendo un conjunto de caracteres, utilizando un conjunto rectangular de valores binarios o un conjunto de valores de color. Las cadenas de caracteres se emplean para etiquetar las imgenes y los grficos. Utilizando las funciones primitivas disponibles en la biblioteca OpenGL bsica, podemos generar puntos, segmentos de lnea recta, reas de relleno poligonales convexas y matrices de patrones de mapas de bits o mapas de pixeles. GLUT dispone de rutinas, para visualizar cadenas de caracteres. Otros tipos de primitivas, como crculos, elipses y reas de relleno poligonales cncavas, pueden construirse o aproximarse utilizando estas funciones, o bien pueden generarse empleando las rutinas disponibles en GLU y GLUT. Todos los valores de coordenadas se expresan en coordenadas absolutas dentro de un sistema de referencia cartesiano que cumpla la regla de la mano derecha. Las coordenadas que describen una escena pueden proporcionarse dentro de un marco de referencia bidimensional o tridimensional. Podemos utilizar valores enteros o de coma notante para especificar unas coordenadas, y tambin podemos hacer referencia a una posicin utilizando un puntero a una matriz de valores de coordenadas. La descripcin de una escena se transforma entonces mediante una serie de funciones de visualizacin, para obtener una imagen bidimensional sobre un dispositivo de salida, como por ejemplo un monitor de vdeo. Excepto por la funcin g l R e c t , las coordenadas para un conjunto de puntos, lneas o polgonos se especifican mediante la funcin g l V e r t e x , y el conjunto de funciones g l V e r t e x que definen cada primitiva se incluye entre una pareja de instrucciones g l B e g i n / g l E n d , donde el tipo de la primitiva se identifica mediante una constante simblica que se introduce como argumento de la funcin g l B e g i n . A la hora de describir una escena que contenga muchas superficies de relleno poligonales, podemos generar de manera eficiente la imagen utilizando matrices de vrtices OpenGL para especificar los datos geomtricos y de otro tipo. En la Tabla 3.1 se enumeran las funciones bsicas para generar primitivas de salida en OpenGL. Tambin se incluyen en la tabla algunas rutinas relacionadas.
PROGRAMAS DE EJEMPLO
Vamos a presentar aqu unos cuantos ejemplos de programas OpenGL que ilustran el uso de las primitivas de salida. Cada programa emplea una o ms de las funciones enumeradas en la Tabla 3.1. En cada programa se configura una ventana de visualizacin para la salida utilizando las rutinas GLUT de las que hemos hablado en el Captulo 2. El primer programa ilustra el uso de una polilnea, un conjunto de polimarcadores y de etiquetas basadas en caracteres de mapa de bits para generar un grfico lineal que representa una serie de datos mensuales a lo largo de un periodo de un ao. Se ilustra el uso de una fuente con espaciado proporcional, aunque las fuentes de anchura fija suelen ser ms fciles de alinear con las posiciones correspondientes de las grficas. Puesto que los mapas de bits son referenciados con respecto a la esquina inferior izquierda por la funcin de posicin actual de visualizacin, debemos desplazar la posicin de referencia para alinear el centro de las cadenas de texto con las posiciones dibujadas de los datos. La Figura 3.67 muestra la salida del programa de generacin de la grfica lineal.
Kinclude
G L s i z e i winWidth -
visualizacin.
GLint
xRaster -
25, =
150;
l
Inicializar * ',
e
de
visualizacin.
GLubyte l a b e l
[36]
'a', 'p',
n',
'a'
'r'
*n', 'p',
?9>}|
* L ' ,
D',
GLint d a t a V l u e
[12]
'c', 342,
't', 324,
310,
262,
185, 438);
190, void { glClearColor glMatrixMode gluOrtho2D (1.0, (0.0, 1.0, 600.0, 1.0, 0.0, imt (void)
196,
217,
240,
312,
1.0); 500.0);
//
Ventana d e
visualizacin blanca.
(GL_PROJECTION) ,-
void
lineGraph
(void)
52
GLint month, k; GLint x - 3 0 ; glClear (GL_COLOR_BFFER_BIT) , (0.0, 0.0, 1.0); // Inicializar // // // dataVlue posicin x para la grfica. Borrar ventana Seleccionar Dibujar k] ) ; los azul datos de v i s u a l i z a c i n . como color de lnea glColor3f glBegin
como u n a
polilnea
f o r (k = 0; k < 1 2 ; k + + ) glEnd ( );
glColor3f for
(1.0, k <
0.0, 12;
0.0); k+ + ) { + k*50,
// // //
el
rojo
come
color
de
marcador,
!k 0;
datos 4);
mediante
polimarcadores
asterisco.
glRasterPoB2i
(xRaster
dataVlue
glutBitmapCharacter
(GLUT_BITMAP_9J3Y_1S,
(0.0, 0;
0.0,
0.0); 12;
Establecer Mostrar
el
negro de
cerno la
color
del
texto.
etiquetas
grfica,
3*month; + 50;
glutBitmapCharacter xRaster
(GLUT_BITMAP__HELVBTICA_12,
glFlush ( ) ; )
v o i d winReshapeFcn (GLint newWidth, GLint newHeight)
{'
glMatrixMode (GL_PROJECTION);
Programas de ejemplo
167
(0.0,
(GL_COLOR__BUFFER_BIT>
,-
v o i d main
(int
arge,
char**
argv)
{
glutlnit (fcarge, argv); (GLUT_SINGLE (100, Chart (winWidth, (Line | GLUT_RGB); 100); winHeight); Data Plot); glutlnitDisplayMode glutlnitWindowSize glutCreateWindow init ( ); (lineGraph); (winReshapeFcn); );
glutlnitWindowPosition
Vamos a utilizar el mismo conjunto de datos en el segundo programa con el fin de generar la grfica de barras de la Figura 3.68. El programa ilustra la aplicacin de las reas de relleno rectangulares, as como de las etiquetas de caracteres basadas en mapas de bits.
FIGURA 3.67. Una representacin de puntos de datos mediante polilneas y polimarcadores, generada mediante la rutina lineGraph.
1 6 8
CAPITULO 3
Primitivas grficas
procedimiento b a r C h a r t .
void barChart
"
GLint month, glClear glColor3f (GL_C0LOR__BUFFER_BIT); (1 .0, 0.0, 0.0),165,
f o r (k 0; k < 1 2 ; k + + ) glRecti glColor3f for (0.0, (20 + k * 5 0 , 0.0, 0.0); 40 + k * 5 0 , // // month++) yRaster) ; (GLUT_3ITMAP_HELVETICA_12, label x R a s t e r + 50; glFlush ( ); { (xRaster, [k]) ; el texto. de la grfica,
Mostrar e t i q u e t a s
thlh
Las grficas de sectores circulares se utilizan para mostrar la contribucin porcentual de una serie de partes individuales a un todo. El siguiente programa construye una grfica de sectores circulares, utilizando la rutina del punto medio para generar el crculo. Se utilizan valores de ejemplo para el nmero y los tamaos relativos de los distintos sectores, y la salida del programa se muestra en la Figura 3.69.
Programas de ejemplo
169
fcinclude <stdlib.h>
public: y;
GLsizei
winWidth
400,
winHeight
300;
// //
Tamao i n i c i a l visualizacin.
de
la ventana de
void (
init
(void)
(1.0, (0.0,
1.0, 200.0,
1.0, 0.0,
1.0); 150.0);
(GL_PROJECTION);
)
// Rutinas del punto medio para moBtrar el crculo.
sliceAngle, nfllices -
16.0,
/2,/ 2;
// radius);
centro rutina de
del de
winHeight
(circCtr,
crculo.
170
for
(k
0;
k < nSlices;
k+-t)
d a t a S u m += d a t a V a l u e s [k] ,for (k 0/ k < nSlicoc; * = circCtr.x + k++> { / dataSum + p r e v i o u s S l i c e A n g l e ; (sliceAngla); (sliceAngla); * * cos sin
circCtr.y +
previousSliceAngle
sliceAngle;
}
void { glClear glColor3f pieChart ( (GL_COLOR_BUFFER_BIT) ; (0.0, ); 0.0, 1.0)? // // Borrar ventana azul de visualizacin. color del crculo. displayFcn (void)
Seleccionar
como
g l F l u s h ( ) ,-
}
v o i d winReshapeFcn ( glMatrixMode glLoadldentity gluOrtho2D glClear /* (GL_PROJECTION); ( ) ; GLdouble (r.ewWidth) , 0.0, GLdouble (newHeight)); (GLint newWidth, GLint newHeight)
(0.0;
R e i n i c i a l i z a r parmetros de = newHeight;
^^^^^^^^^^^^^^^^^^^^
v o i d main (int argc, char** argv) glutlnit (&argc, argv)/ (GLUT_S INGLE (100, (winWidth, (Pie glutlnitDisplayMode glutlnitWindowSize glutCreateWindow
INIT ( );
^ ^ ^ ^ ^ ^ ^ ^ B
| GLUT_RGB);
glutlnitWindowPosition
100)y winHeight);
Chart);
glutDisplayFunc
(displayFcn);
Programos de ejemplo
171
(a)
(b)
(c)
(d) drawCurve:
(e)
FIGURA 3.70. Figuras curvas generadas por el procedimiento hojas, (d) trbol de cuatro hojas y (e) espiral.
Nuestro ltimo programa de ejemplo genera algunas variantes de las ecuaciones del crculo, utilizando las ecuaciones paramtricas polares (3.28) para calcular los puntos a lo largo de las trayectorias curvas. Estos puntos se emplean entonces como extremos de una serie de secciones lineales, mostrndose las curvas mediante polilneas que las aproximan. Las curvas mostradas en la Figura 3.70 se pueden generar haciendo variar el radio r de un crculo. Dependiendo del modo en que variemos r, podemos generar una cardioide, una espiral, un trbol y otras figuras similares.
ttinclude #include ttinclude <GL/glut.h> <stdlib.h> <math.h>
t y p e d e f enum GLsizei
l i m a c o n = = 600,
1,
cardioid, =
threeLeaf, // //
fourLeaf, inicial
spiral de
curveName; de
winWidth
winHeight
500;
Tamao
la ventana
visualizacifin.
void
init
(GL_PROJECTION>; 200.0,
void
lineSegment glBegin
(screenPt
ptl,
screenPt
pt2)
v o i d drawCurve
(GLint
curveNum)
172
/* * *
La
caracola
de
Pascal
e s una
la *
del
crculo + b, donde
r a d i o v a r a con
(theta)
constantes. (n *
Una c a r d i o i d e e s con n =
caracola
b.
t r b o l e s de eos
oe generan
cuando theta.
3 y n * 2,
respectivamente.
La e s p i r a l
se muestra cuando
r es un m l t i p l o de
const const
GLdouble GLint a o r, =
twoPi 175,
GLfloat screenPt
theta, 200,
dtheta yO =
GLint xO
250;
// E s t a b l e c e r p o s i c i n i n i c i a l
curvePt[2]; (0.0, 0.0, x0; yO; // 0.0); // Seleccionar n e g r o como color de curva.
glColor3f
curvePt[0].x
inicial!
c u r v e P t [ 0 ] .y =
Referencias
173
void
displayPcn GLint
(void!
{
curveNum; (GL_COLOR_BUFFER_BIT) ; "\nEnter the "one
n
//
Borrar
ventana de
visuallzacicm.
corresponding names.\n";
to\n";
of
the
c u r v e N u m -
(curveNum);
v o i d winReshapeFcn glMatrixMode
(GLint
newWidth,
GLint
newHeight)
(0.0,
(GL_C0L0R_BUFFER__B IT) ;
v o i d main
(int
argc,
char**
argv)
glutlnit
(iargc,
glutlnitWindowPosition
100); winHeight
Curves*);
(displayFcn); (winReshapeFcn); );
REFERENCIAS
Puede encontrar informacin bsica sobre los algoritmos de Bresenham en Bresenham (1965 y 1977). Para los mtodos del punto medio, consulte Kappel (1985). Los mtodos paralelos para la generacin de lneas y crculos se tratan en Pang (1990) y en Wright (1990). En tres Glassner (1990), Arvo (1991), Kirk (1992),
174
Heckben (I994) y Paeth (1995) se explican muchos otros mtodos para la generacin y el procesamiento de primitivas grficas. En Woo, Neider, Davis y Shreiner (1999) se proporcionan ejemplos adicionales de programacin en los que se utilizan las (unciones primitivas de OpenGL. Puede encontrar un listado de todas las funciones primitivas de OpenGL en Shreiner (2000). Si necesita consultar una referencia completa de GLUT, le recomendamos Kilgard (1996).
EJERCICIOS
3.1 3.2 3.3 Implemenie una funcin de polilnea utilizando el algoritmo DDA, dado un nmero cualquiera n de puntos de entrada. Cuando n = I se debe mostrar un nico punto. Ample el algoritmo de generacin de lneas de Bresenham para generar lneas de cualquier pendiente, teniendo en cuenta la simetra entre cuadranles. Implemenie una funcin de polilnea utilizando el algoritmo del ejercicio anterior, con el fin de mostrar un conjunto de lneas rectas que conectan una lista de n puntos de entrada. Para n = I, la ruLina debe mostrar un nico punto. Utilice el mtodo del punto medio para calcular los parmetros de decisin necesarios para generar los puntos a lo largo de una trayectoria recta cuya pendiente sst comprendida en el rango 0 < m < I. Demuestre que los parmetros de decisin para el algoritmo del punto medio son iguales que para el algoritmo de generacin de lneas de Bresenham. Utilice el mtodo del punto medio para calcular los parmetros de decisin que pueden emplearse para generar segmentos de lnea recta con cualquier pendiente. Disee una versin paralela del algoritmo de generacin de lneas de Bresenham para pendientes comprendidas en el rango 0 < m < I. Disee una versin paralela del algoritmo de Bresenham para generacin de lneas rectas con pendiente arbitraria. Suponga que dispone de un sistema con un monitor de vdeo de 8 por 10 pulgadas que puede mostrar 100 pxeles por pulgada. Si la memoria est organizada en palabras de un byle, si la direccin de inicio del bfer de imagen es 0 y si a cada pxel se le asigna un byte de almacenamiento, cul ser la direccin del bfer de imagen correspondiente al pxel con coordenadas de pantalla (x, v)? Suponga que tiene un sistema con un monitor de video de 8 por 10 pulgadas que puede mostrar 100 pxeles por pulgada. Si la memoria est organizada en palabras de un byte, s la direccin de inicio del bfer de imagen es 0 y si a cada pxel se le asignan 6 bits de almacenamiento, cul ser la direccin (o direcciones) del bfer de imagen correspondiente a! pxel con coordenadas de pantalla (*,y)? Incorpore las tcnicas iterativas de clculo de las direcciones del bfer de imagen (Seccin 3.7) al algoritmo de generacin de lneas de Bresenham. Revise el algoritmo del punto medio para generacin de crculos con el fin de mostrar crculos en donde se preserven las magnitudes geomtricas de entrada (Seccin 3.13). Disee un procedimiento para la implementacin paralela del algoritmo del punto medio para generacin de crculos. Calcule los parmetros de decisin para el algoritmo del punto medio de generacin de elipses, suponiendo que la posicin de inicio sea (r , 0) y que los puntos deben generarse a lo largo de la trayectoria curva en sentido contrario a las agujas del reloj.
v
3.4
3.9
3.14
Disee un procedimiento para la implementacin paralela del algoritmo del punto medio para generacin de elipses.
175
Disee un algoritmo eficiente que aproveche las propiedades de simetra para mostrar un ciclo completo de una (uncin seno. Modifique el algoritmo del ejercicio anterior para mostrar la funcin seno para cualquier intervalo angular especificado. Disee un algoritmo eficiente, teniendo en cuenta la simetra de la funcin, para mostrar una grfica del movimiento armnico amortiguado: y = Ae s\\(<t)x + Q)
ki
donde a) es la frecuencia angular y 0 es la fase de la funcin seno. Dibuje y en funcin de x para varios ciclos de la funcin seno, o hasta que la amplitud mxima se reduzca a ^ . 3.18 Utilizando el mtodo del punto medio y teniendo en cuenta la simetra, disee un algoritmo eficiente para la digitalizacin de la siguiente curva en el intervalo - 10 < x <= 10.
3.I )
Utilice el mtodo del punto medio y las consideraciones de simetra para digitalizar la parbola:
V = 100- A3
en el intervalo - I 0 < x < 10. 3.20 Utilice el mtodo del punto medio y las consideraciones de simetra para digitalizar la parbola; x=y en el intervalo - 1 0 < > ' < 10. 3.21 Disee un algoritmo del punto medio, teniendo presentes las consideraciones de simetra, con el fin de digitalizar cualquier parbola de la forma: y = ax +b
7 2
con valores de entrada que especifique los parmetros o, b y el rango dex. 3.22 3.23 Defina unas tablas de datos geomtricos como las de la Figura 3.50 para un cubo de lado unidad. Defina las tablas de datos geomtricos para un cubo de lado unidad utilizando simplemente una labia de vrtices y una tabla de caras de la superficie, y luego almacene la informacin empleando nicamente la tabla de caras de la superficie. Compare los dos mtodos de representacin del cubo de lado unidad con una representacin que utilice las tres tablas del Ejercicio 3.22. Estime los requisitos de almacenamiento de cada una de las soluciones. Defina una representacin eficiente en forma de malla de polgonos para un cilindro y explique por qu ha elegido dicha representacin. Defina un procedimiento para establecer las tablas de datos geomtricos correspondientes a cualquier conjunto de puntos de entrada que definen las caras poligonales correspondientes a la superficie de un objeto tridimensional. Disee las rutinas necesarias para comprobar las tres tablas de dalos geomtricos de la Figura 3.5 con el fin de garantizar su coherencia y exhauslividad. Escriba un programa para calcular los parmetros A B C y D para una malla de entrada que define las caras poligonales de una superficie.
s %
Escriba un procedimiento para determinar si un determinado punto suministrado como entrada se encuentra delante o detrs de una superficie poligonal, dados los parmetros del plano correspondiente al polgono. A, C y D. Si la referencia de coordenadas de una escena se cambia de modo que en lugar de cumplir la regla de la mano derecha se cumple la regla de la mano izquierda, qu cambios podramos hacer en los valores de los parmetros A B, C y D de un plano de la superficie para garantizar que la orientacin del plano est descrita correctamente?
t
3.30
Disee un procedimiento para identificar una lista de vrtices no planar para un cuadriltero.
176 CAPTULO 3 Primitivas grficas 3.31 3.32 3.33 3.34 3.35 3.36 3.37 3.38 3.39 Ample el algoritmo del ejercicio anterior para identificar una lista de vrtices no planares que contengan ms de cuatro puntos. Escriba un procedimiento para dividir un conjunto de cuatro vrtices de un polgono en un conjunto de tringulos. Disee un algoritmo para dividir un conjunto de n vrtices de un polgono, con n > 4, en un conjunto de tringulos. Disee un algoritmo para identificar una lista de vrtices de un polgono degenerado que pueda contener vrtices repetidos o vrtices colineales. Disee un algoritmo para identificar una lista de vrtices de un polgono que contenga aristas que se intersecten. Escriba una rutina para la identificacin de polgonos cncavos calculando el producto vectorial de parejas de vectores de las aristas. Escriba una rutina para dividir un polgono cncavo, utilizando el mtodo vectorial. Escriba una rutina para dividir un polgono cncavo, utilizando el mtodo rotacional. Disee un algoritmo para determinar las regiones interiores correspondientes a cualquier conjunto de vrtices de entrada, utilizando la regla del nmero de vueltas distinto de cero y los clculos de productos vectoriales para identificar la direccin en los cortes de las aristas. Disee un algoritmo para determinar las regiones interiores correspondientes a cualquier conjunto de vrtices de entrada, utilizando la regla del nmero de vueltas distinto de cero y los clculos de producto escalar para identificar la direccin en los cortes de las aristas. Qu regiones de la polilnea auto-intersectante mostrada en la Figura 3.46 tienen un nmero de vueltas positivo? Cules son las regiones que tienen un nmero de vueltas negativo? Qu regiones tienen un nmero de vueltas superior a l? Escriba una rutina para implementar una funcin de generacin de cadenas de texto que tenga dos parmetros: uno de ellos especifica una posicin en coordenadas universales y el otro especifica una cadena de texto. Escriba una rutina para implementar una funcin de generacin de polimarcadores que tenga dos parmetros: uno de los parmetros es el carcter que hay que mostrar y el otro es una lista de posiciones en coordenadas universales. Modifique el programa de ejemplo de la Seccin 3.24 para que el hexgono mostrado est siempre en el centro de la ventana de visualizacin, independientemente de cmo se cambie el tamao de sta. Escriba un programa completo para mostrar una grfica de barras. Los datos de entrada al programa incluirn los puntos de datos y las etiquetas requeridas para los ejes x e,y. El programa deber cambiar la escala de los puntos de datos para mostrar la grfica de modo que ocupe toda el rea de la ventana de visualizacin. Escriba un programa para mostrar una grfica de barras en cualquier rea seleccionada de una ventana de visualizacin. Escriba un procedimiento para mostrar una grfica de lineas para cualquier conjunto de puntos de datos de entrada en cualquier rea seleccionada de la pantalla, cambiando la escala del conjunto de datos de entrada con el fin de que encaje en el rea de pantalla elegida. Los puntos de datos deben mostrarse mediante asteriscos unidos por segmentos de lnea recta, y los ejes xcy deben etiquetarse de acuerdo con las especificaciones de entrada (en lugar de asteriscos, puede utilizar pequeos crculos o algn otro smbolo para dibujar los puntos de datos). Utilizando una funcin de generacin de crculos, escriba una rutina para mostrar una grfica de sectores circulares con las etiquetas apropiadas. Los datos de entrada a la rutina incluirn un conjunto de datos que indiquen la distribucin de stos a lo largo de un conjunto de intervalos, el nombre de la grfica de sectores circulares y los nombres de cada uno de los intervalos. La etiqueta de cada seccin deber mostrarse fuera del contorno de la grfica de sectores circulares, en las proximidades del sector correspondiente.
3.40
3.41
3.42 3.43
3.44 3.45
3.46 3.47
3.48
Una pelcula de dibujos animados generada por compuladora que muestra varios objetos con color y oros atributos. (Cortesa de Soffimage, Inc.)
Variables de estado de OpenGL Color y escala de grises Funciones de color de OpenGL Atributos de los puntos Atributos de las lneas Atributos de las curvas Funciones OpenGL para los atributos del punto Funciones OpenGL para los atributos de las lneas Atributos de relleno de reas
4 . 1 2 Relleno de regiones con lmites curvos mediante lneas de barrido 4 . 1 3 Mtodos de relleno de reas con lmites irregulares 4 . 1 4 Funciones OpenGL para los atributos de relleno de reas 4 . 1 5 Atributos de los caracteres 4 . 1 6 Funciones OpenGL para los atributos de los caracteres 4 . 1 7 Suavizado (antialiasing)
4 . 1 8 Funciones de suavizado de OpenGL 4 . 1 9 Funciones de consulla de OpenGL 4 . 2 0 Grupos de atributos de OpenGL 4 . 2 1 Resumen
4.10 Algoritmo general de relleno de polgonos mediante lineas de barrido 4.11 Relleno de polgonos convexos mediante lneas de barrido
Por lo general, un parmetro que afecta a la forma en que una primitiva se va a visualizar se denomina parmetro de atributo. Algunos parmetros de atributo, tales como el color y el tamao, determinan caractersticas fundamentales de una primitiva. Otros atributos especifican cmo se visualizar la primitiva en condiciones especiales. Las opciones tales como la visibilidad o la detectabilidad en un programa de seleccin de objetos interactivo son ejemplos de atributos de condiciones especiales. Los atributos de condiciones especiales se estudiarn en captulos posteriores. En este captulo, slo estudiaremos aquellos atributos que controlan las propiedades bsicas de visualizacin de las primitivas grficas, sin tener en cuenta las situaciones especiales. Por ejemplo, las lneas pueden ser punteadas o discontinuas, gruesas o finas, y azules o naranjas. Las reas se pueden rellenar con un color o con un patrn multicolor. El texto puede parecer con un sentido de lectura de izquierda a derecha, inclinado segn la diagonal de la pantalla, o en columnas verticales. Los caracteres individuales se pueden visualizar con diferentes tipos de letra, colores y tamaos. Y podemos aplicar variaciones de la intensidad a los bordes de los objetos para suavizar el efecto de escalonamiento en la representacin, Un modo de incorporar parmetros de atributos en un paquete grfico consiste en ampliar la lista de parmetros asociados a cada funcin de primitiva grfica para incluir los valores de los atributos apropiados. Por ejemplo, una funcin para dibujar lineas, podra contener parmetros adicionales para establecer el color, el grosor y otras propiedades de la lnea. Otro enfoque consiste en mantener una lista de sistema de los valores actuales de los atributos. Se incluyen funciones independientes en el paquete grfico para establecer los valores actuales en la listado tributos. Para generar una primitiva, el sistema comprueba los atributos relevantes e invoca la subnm'na do visualizacin para dicha primitiva utilizando los valores actuales de los atributos. Algunos paquetes grficos utilizan una combinacin de mtodos para establecer los colores de los atributos, y otras bibliotecas, enire las que se incluye OpenGL, asignan los atributos utilizando funciones independientes que actualizan la lista de atributos del sistema. Un sistema grfico que mantiene una lista de los valores actuales de los atributos y otros parmetros se denomina sistema de estados o mquina de estados. Los atributos de las primitivas de salida y algunos otros parmetros, tales como la posicin actual dentro del bfer de imagen se denominan variables de estado o
180
parmetros de estado. Cuando asignamos un valor a uno o ms parmetros de estado, ponemos el sistema en un estado determinado. Y el efecto de este estado permanece hasta que cambiemos el valor de los parmetros de estado.
TABLA 4 .1 . LOS OCHO CDIGOS DE COLOR RGB DE UN BFER DE IMAGEN DE 3 BITS POR PXEL Valores de color almacenados en el bfer de imagen Cdigo de colcr 0 I 2 3 4 5 6 7 ROJO 0 0 0 0 1 VERDE o 0 1 1 0 0 1 1 AZUL 0 1 0 1 0 1 0 1 Color mostrado Negro Azul Verde Cin Rojo Magenta Amarillo Blanco
HHI
!
1
1
requerido por el bfer de imagen tambin aumenta. Con una resolucin de 1024 por 1024, un sistema de color total (24 bits por pxel) RGB necesita 3 megabytcs de almacenamiento para el bfer de imagen. Las tablas de color son un medio alternativo para proporcionar a un usuario capacidades de color ampliadas sin requerir bferes de imagen grandes. Hace tiempo, era importante tener esto en consideracin. Pero hoy en da, los costes del hardware se han reducido drsticamente y las capacidades de color ampliadas son bastante comunes, incluso en computadoras personales. Por tanto, en la mayora de los ejemplos se asume que los cdigos de color RGB se almacenan directamente en el bfer de imagen.
Tablas de color
La Figura 4.1 muestra un posible esquema para almacenar los valores de color en una tabla de b s q u e d a de color (o m a p a de color). A veces una tabla de color se denomina tabla de bsqueda de vdeo. Los valores que se almacenan en el bfer de imagen se utilizan ahora como ndices en la tabla de color. Por ejemplo, cada pxel puede referenciar cualquiera de las 256 posiciones de la tabla, y cada entrada de la tabla utiliza 24 bits para especificar un color RGB. Para el cdigo de color en hexadecimal 0x0821, se muestra una combinacin de los colores verde y azul en la posicin de pxel y). Los sistemas que emplean esta tabla de bsqueda concreta permiten a un usuario seleccionar de una paleta de, aproximadamente, 17 millones de colores 256 colores cualesquiera para su visualizacin simultnea. En comparacin con un sistema de color total, este diseo reduce el nmero de colores simultneos que se pueden visualizar, pero tambin reduce los requisitos de almacenamiento del bfer de imagen a un megabyte. A veces se dispone de mltiples tablas de color para la manipulacin de aplicaciones de sombreado especficas, tales como el suavizado (antiediasing) y aquellas que se utilizan con sistemas que contienen ms de un dispositivo de salida de color. Una tabla de color puede ser til para un gran nmero de aplicaciones, y puede proporcionar un razonable nmero de colores simultneos sin requerir bferes de imagen grandes. Para la mayora de las aplicaciones, 256 512 colores diferentes son suficientes para una nica imagen. Tambin, se pueden cambiar las entradas de la tabla en cualquier momento, permitiendo a un usuario ser capaz de experimentar fcilmente con diferentes combinaciones de color en un diseo, escena o grfico sin cambiar la configuracin de los atributos de la estructura de datos para los grficos. Cuando se cambia el valor de un color en la tabla de color, todos los pxeles con ese ndice de color se cambian inmediatamente al nuevo color. Cuando no se dispone de una tabla de color, slo podemos cambiar el color de un pxel almacenando el nuevo color en su posicin dentro del bfer de imagen. Del mismo modo, las aplicaciones para visualizacin de datos pueden almacenar valo-
182
CAPITULO 4
Al can ROJ )
^- Al CANON VER de I
- Al can a/ul
2081
0 0 0 0 0 0 0 0
0 0 0 0
10 0 0 0 0 10 0 0 0 1
FIGURA 4 .1. Una labia de bsqueda de color con 24 bits por entrada a la que se accede desde de un bfer de imagen con X bils por pxel. l.n valor de 1% almacenado en la posicin de pixel (A\ y) hace referencia a la posicin de esta labia que condene el valor hexadecimal 0x0821 (el valor decimal 2081). Cada segmento de 8 bits de esta entrada controla el nivel de intensidad de Lno de los tres caones de electrones de un monitor RGB. res para una magnitud fsica, tal como la energa, en el bfer de imagen y utilizar una tabla de bsqueda para experimentar con varias combinaciones de color sin cambiar los valores del pxel. Y en aplicaciones de procesamiento de imgenes y visualizacin, las tablas de color son un medio conveniente para cambiar los umbrales de color para que todos los valores d*pixcl por encima o por debajo de un umbral especfico se puedan cambiar al mismo color. Por estos motivos, algunos sistemas proporciona ambas capacidades de almacenamiento de la informacin del color. Un usuario puede entonces elegir entre usar las tablas de color o almacenar directamente los cdigos de color en el bfer de imagen.
Escala de grises
Ya que las capacidades de color son en la actualidad habituales en los sistemas de grficos por computadora, utilizamos las funciones de color RGB para cambiar los niveles de gris, o escala de grises, en un programa de aplicacin. Cuando en una configuracin de color RGB se especifica una cantidad igual de los colores rojo, verde, y azul, el resultado es un nivel de gris. Valores prximos a ( para las componentes de color producen gris oscuro, y valores ms altos prximos a 1.0 producen gris claro. Entre las aplicaciones de los mtodos de visualizacin en escala de grises se pueden incluir la mejora de fotogramas en blanco y negro y la generacin de efectos de visualizacin.
183
con un mayor grado de detalle cuando tengamos en consideracin los mtodos para el modelado de efectos de iluminacin (Captulo 10) y los mltiples modelos para la descripcin del color (Captulo 12).
l primer parmetro de la lista de argumentos establece que estamos utilizando un nico bfer como bfer de imagen, y el segundo parmetro establece el modo RGB (o RGBA), que es el modo de color predeterminado. Podemos utilizar G L U T _ R G B o G L U T _ R G B A para seleccionar este modo de color. Si quisiramos especificar los colores mediante un ndice en la tabla de color, reemplazaramos la constante de OpenGL
GLUT_RGB por G L U T _ I N D E X .
Los sufijos son similares a los de la funcin g l V e r t e x . Utilizamos un sufijo de 3 o 4 para especificar el modo RGB 0 RGBA junto con el sufijo para el tipo de dato numrico y un sufijo opcional para los vectores. El sufijo para los tipos de datos numrico son b (byte), i (entero), s (entero corto), f (decimal en punto flotante) y d (decimal en punto flotante de doble precisin), as como valores numricos sin signo. Los valores en punto flotante de las componentes del color estn comprendidos dentro del rango que va desde ().() hasta 1.0, y las componentes del color predeterminado d e g i c o l o r , incluyendo el valor alfa, son (1.0, 1 .0, 1.0, 1.0), que establecen el color RGB en blanco y el valor alfa en 1.0. A modo de ejemplo, la siguiente lnea utiliza valores en punto flotante en el modo RGB para establecer el color actual para las primitivas en cian (una combinacin de las intensidades ms altas de verde y azul).
glColorDf (0.0, 1.0, 1.0)/
Empleando una especificacin de matriz de las tres componentes de color, podramos establecer el color del ejemplo anterior del siguiente modo:
glColor3fv ( colorArray;
Una seleccin de color en OpenGL se puede asignar a posiciones de puntos individuales dentro de los pares g l B e g i n / g l E n d .
184
CAPTULO 4
Las especificaciones utilizando valores enteros para las componentes de color dependen de las capacidades del sistema. En un sistema de color total, se asignan 8 bits por pxel (256 niveles para cada componente de color), los valores de color enteros varan desde 0 a 255. Los valores correspondientes en punto flotante de las componentes de color seran entonces 0.0, l .0/255.0, 2.0/255.0 255.0/255.0 = 1.0. En un sistema de color total, podemos especificar el color cian del ejemplo anterior empleando valores enteros en las componentes de color de este modo;
glColor3i (0, 255, 255);
Las posiciones del bfer de imagen se almacenan realmente como valores enteros, por lo que la especificacin de los valores de color con enteros evita las conversiones necesarias cuando se proporcionan valores en punto flotante. Cuando se especifica un valor de color en cualquier formato, ste se transforma a un valor entero dentro del rango de nmero de bits disponibles en un sistema concreto.
Al argumento c o l o r l n d e x se le asigna un valor entero no negativo. Este valor del ndice se almacena entonces en las posiciones del bfer de imagen para las primitivas especificadas posteriormente. Podemos especificar el ndice de color con cualquiera de los tipos de dalos siguientes: bytc sin signo, entero o punto flotante. El tipo de dato del argumento c o l o r l n d e x se indica con un sufijo ub, s, i, d, o f, y el nmero de posiciones del ndice en una tabla de color siempre es una potencia de 2, tal como 256 o 1024. El nmero de bits disponible en cada posicin de la tabla depende de las caractersticas del hardware del sistema. Como ejemplo de la especificacin de color en el modo indexado, la siguiente lnea establece el ndice actual de color en el valor 196.
gllndexi (196);
A todas las primitivas definidas despus de esta lnea se les asignar el color almacenado en dicha posicin de la tabla de color, hasta que el color actual se cambie. La biblioteca de ncleo de OpenGL no proporciona funciones para cargar valores en la tabla de bsqueda de color, porque las subrutinas de procesamiento de la tabla forman parte del sistema de ventanas. Adems, algunos sistemas de ventanas proporcionan mltiples tablas de color y color total, mientras que otros sistemas puede que slo dispongan de una nica tabla de color y elecciones de color limitadas. Sin embargo, disponemos de una subrutina de GLUT que interacta con el sistema de ventanas para establecer especificaciones de color en la tabla en una posicin del ndice dada:
glutSetColor (ndice, rojo, verde, azul);
A los argumentos de color r o j o, v e r d e y a z u l se les asignan valores en punto flotante dentro de un rango que vara desde 0,0 hasta 1,0. Este color se carga entonces en la tabla en la posicin especificada por el valor del argumento n d i c e . Las subrutinas para el procesamiento de otras tres tablas de color se proporcionan como extensiones de la biblioteca de ncleo de OpenGL. Esta subrutinas forman parte del subconjuntu de procesamiento de imgenes (Imaging Subset) de OpenGL. Los valores de color almacenados en estas tablas se pueden utilizar para modificar los valores de los pxeles cuando stos se procesan mediante varios bferes. Algunos ejemplos de utilizacin de estas tablas son los siguientes: efectos de enfoque de la cmara, filtrado de ciertos colores de una imagen, mejora de ciertas intensidades o ajustes de brillo, conversin a escala de grises de un fotograma en color, y suavizado de una representacin. Tambin podemos utilizar estas tablas para cambiar los modelos
185
de color; es decir, podemos cambiar los colores RGB a otra especificacin utilizando otros tres colores primarios (tales como eian, magenta y amarillo). Una tabla de color concreta del subconjunlo de procesamiento de imgenes de OpenGL se activa con la funcin g l E n a b l e , empleando como argumento uno de las nombres de la tabla: G I _ C O L O R _ T A B L E , G L _ P O S T _ C U N V U L U T I O N _ C O L O R _ T A B L E o G L _ P O S T _ C O L O R _ M A T R I X _ C O L O R _ T A B L E . Entonces podemos utilizar las subrulinas del subconjunto de procesamiento de imgenes para seleccionar una tabla de color concreta, establecer valores de la tabla de color, copiar valores de la tabla o especificar las componente de color de un pxel que queremos cambiar y cmo queremos cambiarlo.
Si el fundido de color no est activado, el color de un objeto simplemente reemplaza el contenido del bfer de imagen en la posicin del objeto. Los colores se pueden fundir de modos diferentes, dependiendo de los efectos que queramos lograr, y generamos diferer.tes efectos de color mediante la especificacin de dos conjuntos de factores de fundido. Un conjunto de factores de fundido es para el objeto actual en el bfer de imagen (objeto destino), y el otro conjunto de factores de fundido es para el objeto entrante (origen). El nuevo color que resulta del fundido y que se carga entonces en el bfer de imagen se calcula como: (S, R, + D, R S G + D G S % + D B# S A, + D A )
Jy g t g th h k a a d s s s
(4.1)
donde las componentes de color RGBA del origen son (R , G , B , AX las componentes de color del destino son (Rj, Gj, B A ), los factores de fundido del origen son (S S^, S , SJ y los factores de fundido del destino son (D . D , DJ. Los valores calculados de las componentes del color de fundido se transforman al rango que vara desde 0.0 a LO. Es decir, cualquier suma mayor que 1.0 se cambia al valor 1.0 y cualquier suma menor que 0.0 se cambia a 0.0.
llt d n h r b
A los argumentos s F a c t o r y d F a c t o r , factores del origen y del destino, se les asigna a cada uno una constante simblica de OpenGL que especfica un conjunto predefinido de cuatro coeficientes de fundido. Por ejemplo, la constanie G L _ Z E R O proporciona los factores de fundido (0.0,0.0,0.0, 0.0) y G L _ O N E ( 1.0, 1.0, 1.0, 1.0). Podramos cambiar los cuatro factores de fundido del valor alfa de destino y del valor alfa del origen mediante el empleo de G L D S T A L P H A y G L S R C A L P H A , respectivamente. Otras constantes de OpenGL disponibles para cambiar los factores de fundido son las s i g u i e n t e s : G L _ O N E _ M I N U S _ D S T _ A L P H A ,
186
CAPTULO 4
y G L _ S R C _ C O L O R . Estos factores de fundido se utilizan a menudo para la simulacin de transparencias, y se estudian con un mayor grado de detalle en el Seccin 1 0 . 1 9 . El valor predeterminado del argumento s F a c t o r es GL__ONE, mientras que el valor predeterminado del argumento d F a c t o r es G L _ Z E R O . Por tanto, los valores predeterminados de los factores de fundido provocan que los valores de color entrantes sustituyan a los valores actuales que hay en el bfer de imagen.
GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR
Se han incluido funciones adicionales en la extensin de OpenGL denominada Imaging Subset. Entre estas funciones se incluye una subrutina para establecer el color de fundido y otra subrutina para especificar la ecuacin de fundido.
A conitnuacin, en el caso del modo de color RGB, especificamos la localizacin y el formato de las componentes de color con:
glColorPointer (nColorComponents, dataType, offset, colorArray);
Al argumento n C o l o r C o m p o n e n t s se le asigna un valor de 3 o 4 , dependiendo de si estamos enumerando las componentes de color RGB o RGBA en la matriz c o l o r A r r a y . Se asigna una constante simblica de OpenGL tal como G L _ I N T o G L _ F L O A T al argumento d a t a T y p e para indicar el tipo de dato de los valores del color. En una matriz de color independiente, podemos asignar el valor 0 al argumento o f f s e t . Pero s combinamos los datos de color con los datos de los vrtices en la misma matriz, el valor o f f s e t es el nmero de bytcs entre cada conjunto de componentes de color en la matriz. Como ejemplo de utilizacin de las matrices de color, podemos modificar el ejemplo de la matriz de vrtices del Seccin 3.17 para incluir una matriz de color. El siguiente fragmento de cdigo establece el color de lodos los vrtices de la cara frontal del cubo en azul y a todos los vrtices de la cara trasera se les asigna el color rojo.
typedef GLint [B] 0|. [8] 1), = (0, = (1, { 0, vertex3 ( {o, 0, 0, [3], 0(, {0, 0), (1, color3 {0, 1, X, 1), 0, [3]; 0), (1, 0}, {0, {l, 0, 0, 0}, {1, l), (0, 0, 1} }; 1
(
v e r t e x 3 pt {1. 1,
1}, {l, 0,
1}, 0,
1)};
c o l o r 3 hue (0, 0,
{l, 0,
{o, 0,
0},
0},
1),
Incluso podemos empaquetar tanto los colores como las coordenadas de los vrtices en una matriz entrelazada. Cada uno de los punteros harn referencia entonces a la nica matriz entrelazada, con un valor apropiado de offset. Por ejemplo,
s t a t i c GLint hueAndPt (l, 0, 0, 0, 0, 1, 0, 1, O, 0, 0, 0, [ J 1, 0, =>
o,
0,
0, 1,
0, 1,
1, 1,
o, o.
187
glVertexPointer glColorPointer
GL_INT, GL_INT,
6*sizeof(GLint), 6*sizeo(GLint),
Los tres primeros elementos de esta matriz especifican un valor de color RGB, los tres siguientes elementos especifican un conjunto de coordenadas de vrtice (x y, z), y este patrn contina hasta la ltima especificacin color-vrtice. Establecemos el argumento o f f s e t con el nmero de bytes entre valores sucesivos de color o vrtice, el cual es 6 * s i z e o f { G L i n t ) para a m b o s . Los valores de color comienzan en el primer elemento de la matriz entrelazada, el cual es h u e A n d P t [ o j , y los valores de los vrtices comienzan en el cuarto elemento, que es h u e A n d P t f 3 ].
Ya que una escena contiene generalmente varios objetos y cada uno con mltiples superficies planas, OpenGL proporciona una funcin en la que podemos especificar todas las matrices de vrtices y de color de una vez, asi como otros tipos de informacin. Si cambiamos los valores de los colores y de los vrtices en el ejemplo anterior a punto flotante, utilizamos esta funcin en la forma:
glInterleavedArrays (GL_C3F_V3F, 0, hueAndPt);
El primer argumento es una constante de OpenGL que indica especificaciones en punto flotante de tres elementos tanto para el color (C) como para las coordenadas de los vrtices (V). Los tres elementos de la matriz h u e A n d P t estn entrelazados con el color de cada vrtice enumerado antes de las coordenadas. Esta funcin tambin habilita automticamente ambas matrices de vrtices y de color. En el modo de color indexado, definimos una matriz de ndices de color con:
glIndexPointer ( type, stride, colorlndex);
Los ndices de color se enumeran en la matriz c o l o r l n d e x y los argumentos t y p e y s t r i d e son los mismos de g l C o l o r P o i n t e r . No se necesita el argumento s i z e , ya que los ndices de la tabla de color se especifican con un nico valor.
A cada componente de color en la designacin (rojo, verde, y azul), as como el parmetro alfa, se le asigna un valor en punto flotante dentro del rango que varia desde 0.0 hasta 1.0. El valor predeterminado de los cuatro parmetros es 0.0, que produce el color negro. Si cada componente de color se establece en 1.0, el color de borrado es blanco. Los niveles de gris se obtienen con valores idnticos en las componentes de color entre 0.0 y 1.0. El cuarto argumento, a l p h a , proporciona una opcin para el fundido del color anterior con el color actual. Esto puede ocurrir slo si activamos la caracteristica de fundido de OpenGL; el fundido de color se puede en realizar cuando se especifican los valores en una tabla de color. Como indicamos en el Seccin 3.19, existen varios bferes de color en OpenGL, que se pueden utilizar como el bfer de refresco actual para visualizar una escena, y la funcin g l C l e a r C o l o r especfica el color de todos los bferes de color. Entonces aplicamos el color de borrado a los bferes de color con el comando:
glClear ( GL_CLEAR BUFKKKB1T);
Tambin podemos utilizar la funcin g l C l e a r para establecer los valores iniciales de otros bferes disponibles en OpenGL. Existe el bfer de acumulacin, e! cual almacena la informacin de fundido de color, el bfer de profundidad, que almacena los valores de profundidad (distancias desde la posicin de visualizacin) de los objetos de una escena y el bfer de patrones, que almacena informacin para definir los lmites de una imagen.
188
CAPTULO 4
En el modo de color indexado, utilizamos la siguiente funcin (en lugar de g l c l e a r C o l o r ) para definir el color de la ventana de visualizaein.
glClearIndex (index)
Al color del fondo de las ventanas se le asigna entonces el color almacenado en la posicin i n d e x de la tabla de color. Y la ventana se muestra en ese color cuando se invoca la funcin g l C l e a r ( G L _ C L E A R _
BUFFER_BIT).
Hay disponibles muchas otras funciones de color en la biblioteca OpenGL. para tratar una gran variedad de tareas, tales como el cambio de los modelos de color, el establecimiento de efectos de iluminacin en las escenas, la especificacin de efectos de cmara, y la representacin de las superficies de un objeto. Examinaremos otras funciones de color cuando se exploren cada uno de los procesos componentes de un sistema de grficos por computadora. Por ahora, limitaremos este estudio a aquellas funciones relacionadas con la especificacin de color de las primitivas grficas.
189
FIGURA 4.2. Una lnea digitalizada de doble grosor con pendiente |m|< l.O generada con extensiones verticales de pixeles.
c
\
f \ V J
\ ;
)
\
(
- ^ E
^
-
\ J
)\
k ;
\
)
' -
F
V
\
s j
i)
FIGURA 4.3. Una lnea digitalizada con pendiente |m| > 1.0 y un grosor de lnea de 4 dibujada empleando extensiones horizontales de pxeles. planteamiento se muestra en la Figura 4.3, donde un segmento de lnea con un grosor de 4 se dibuja empleando mltiples pxeles transversales a cada lnea de barrido. De forma similar, una lnea gruesa con una pendiente menor o igual que 1.0 se puede mostrar empleando extensiones verticales de pxeles. Podemos implementar este procedimiento mediante la comparacin de las magnitudes de las separaciones horizontal y vertical {Ax y Av) de los puntos extremos de la lnea. Si |A*| > |Ay|, los pxeles se repiten a lo largo de las columnas. En caso contrario, mltiples pxeles se dibujan de forma transversal a las filas. Aunque las lneas gruesas se generan fcilmente mediante el dibujo de extensiones de pxeles horizontales o verticales, el grosor visualizado de una lnea (medido perpenclicularmente a la trayectoria de la lnea) depende de su pendiente. Una lnea de 45 se visualizar ms fina debido al factor [f>2 comparada con una lnea horizontal o vertical dibujada con la misma longitud de extensiones de pxeles. Otro problema con la implementacin de las opciones de grosor utilizando extensiones de pxeles horizontales y verticales es que el mtodo produce lneas cuyos extremos son horizontales o verticales independientemente de la pendiente de la lnea. Este efecto es ms apreciable con lneas muy gruesas. Podemos ajustar la forma de las terminaciones de la lnea para darles una mejor apariencia aadiendo extremos de linea (Figura 4.4). Una tipo de extremo de lnea es el extremo abrupto, que presenta terminaciones cuadradas que son perpendiculares a la trayectoria de la lnea. Si la lnea tiene una pendiente w, las terminaciones cuadradas de la lnea gruesa tienen una pendiente - 1 / w . Cada una de las lneas paralelas componentes se visualiza entonces entre las dos lneas perpendiculares a cada terminacin de la trayectoria de la lnea. Otro tipo de extremo de lnea es el redondeado que se obtiene aadiendo un semicrculo relleno a cada extremo abrupto. Los arcos cir-
190
CAPTULO 4
culares tienen su centro en la zona media de la linca gruesa y un dimetro igual al grosor de la lnea. Un tercer tipo de extremo de lnea es el cuadrado. En este caso, simplemente extendemos la lnea y aadimos extremos abruptos que se posieionan en la mitad del grosor de la lnea ms all de las terminaciones. Entre otros mtodos para producir lneas gruesas se pueden incluir la visualizacin de la lnea como un rectngulo relleno o la generacin de la lnea con un patrn de plumilla o brocha determinado, como se estudia en la seccin siguiente. Para obtener una representacin con forma de rectngulo para el lmite de la linea, calculamos la posicin de los vrtices del rectngulo a lo largo de las perpendiculares a la trayectoria de la linea, para que las coordenadas de los vrtices del rectngulo se desplacen de las posiciones originales de los extremos de la lnea la mitad del grosor de la misma. La lnea rectangular tiene entonces el aspecto de la Figura 4.4(a). Podramos aadir extremos redondeados a! rectngulo relleno, o podemos extender su longitud para mostrar extremos cuadrados. La generacin de polilneas gruesas requiere algunas consideraciones adicionales. Por lo general, los mtodos que hemos considerado para mostrar segmentos de lnea no producirn series de segmentos de lnea conectados suavemente. La representacin de polilneas gruesas empleando extensiones de pxeles horizontales y verticales, por ejemplo, producen huecos en los pxeles en los lmites entre los segmentos de lnea con diferentes pendientes donde hay un cambio de extensiones de pxeles horizontales a extensiones verticales. Podemos generar polilneas gruesas que estn unidas suavemente a costa de un procesamiento adicional en los extremos de los segmentos. La Figura 4.5 muestra tres posibles mtodos para unir suavemente dos segmentos de lnea. Una timn en punta se consigue extendiendo las fronteras de cada uno de los dos segmentos de lnea hasta que se encuentran. Una unin redondeada se produce tapando la conexin entre los dos segmentos con una frontera circular cuyo dimetro es igual al grosor de la lnea. Y una unin biselada se genera visualizando los segmentos de linea con extremos abruptos y rellenando el hueco triangular donde los elementos se encuentran. Si el ngulo entre los dos segmentos de lnea conectados es muy pequeo, una unin en punta puede generar una larga pa que distorsiona la apariencia de ln polilnea. Un paquete grfico puede evitar este efecto cambiando de unin en punta a unin biselada cuando, por ejemplo, el ngulo entre dos segmentos cualesquiera consecutivos es pequeo.
191
(*)
(b)
( o
FIGURA 4.4. Lneas gruesas dibujadas con extremos (a) abruptos, (b) redondeados y (c) cuadrados .
(a)
(b)
(c)
FIGURA4.5. Segmentos de lnea gruesa conectados con una unin en puna (a), redondeada (b) y biselada (c). dichas extensiones de acuerdo con la pendiente de la lnea. En la Figura 4.6. podemos visualizar trazos de longitud aproximadamente igual mediante la reduccin del trazo diagonal a tres pxeles. Otro mtodo para mantener la longitud del trazo consiste en tratar los trazos como segmentos individuales de lnea. Las coordenadas de los puntos extremos de cada trazo se localizan y se pasan a la subrutina de linca, la cual entonces calcula las posiciones de los pxeles a lo largo de la trayectoria del trazo.
FIGURA 4.6. Trazos de distinta longitud visualizados con el mismo nmero de pxeles.
192
FIGURA 4.8. Una mscara de pxel (a) de una plumilla rectangular, y la matriz asociada de pxeles (b) mostrada mediante el centrado de la mscara sobre una posicin de pxel especfica.
FIGURA 4.9. Generacin de una lnea con la forma de la plumilla de la Figura 4.8.
193
FIGURA 4.10. Un arco circular de grosor 4 dibujado eon extensiones de pxeles verticales u horizontales, dependiendo de la pendiente.
FIGURA 4.11. Un arco circular de grosor 4 y radio 16 representado rellenando la regin entre dos arcos concntricos.
194
Las mscaras de pxeles estudiadas para la implemenlacin de las opciones de los estilos de lnea podran tambin utilizarse en los algoritmos de curvas digitalizadas para generar patrones de lnea discontinua o de puntos. Por ejemplo, la mscara 11100 produce el trazo de lnea discontinua mostrado en la Figura 4.12. Podemos generar los trazos discontinuos en varios octantes utilizando la simetra del crculo, pero debemos cambiar las posiciones de los pxeles para mantener la secuencia correcta de trazos discontinuos y espacios a medida que cambiamos de un ociante al siguiente. Tambin, como en los algoritmos para las lneas rectas, las mscaras de pxeles muestran trazos discontinuos y espacios entre los mismos que varan en longitud de acuerdo a la pendiente de la curva. Si queremos representar trazos discontinuos de longitud constante, necesitamos ajustar el nmero de pxeles dibujados en cada trazo a medida que avanzamos sobre la circunferencia del crculo. En lugar de aplicar una mscara de pxeles con extensiones constantes, dibujamos pxeles a lo largo de arcos de igual ngulo para producir trazos discontinuos de igual longitud. Las visualizaciones de curvas con una plumilla (o con una brocha) se generan utilizando las mismas tcnicas estudiadas para los segmentos de lnea recta. Reproducimos una forma de plumilla a lo largo de la trayectoria de la lnea, como se muestra de la Figura 4.13 para el caso de un arco circular en el primer cuadrante. Aqu, el centro de la plumilla rectangular se mueve a sucesivas posiciones de la curva para producir la forma de curva mostrada. Las curvas obtenidas con una plumilla rectangular de este modo sern ms gruesas donde la magnitud de la pendiente de la curva sea 1. Un grosor de curva uniforme se puede conseguir mediante la rotacin de una plumilla circular para alinear sta con la direccin de la pendiente, a medida que avanzamos sobre la curva o mediante la utilizacin de la forma de plumilla circular. Las curvas dibujadas con formas de plumillas o con formas de brochas se pueden mostrar con diferentes tamaos y con patrones superpuestos o brochazos simulados.
FIGURA 4.12. Un arco circular de trazo discontinuo obtenido con trazos discontinuos de 3 pxeles y un espacio entre trazos de 2 pxeles.
FIGURA 4.14. Lneas curvas dibujadas con un programa de pintura utilizando varias formas y patrones. De izquierda a derecha, las formas de la brocha son cuadrada, redonda, lnea diagonal, patrn de puntos y aergrafo con desvanecimiento.
1 95
Figura 4.15. Un mueco damma, un smbolo de buena fortuna en Japn, dibujado por el artista de las computadoras Koichi Ko/aki empleando un sistema de pintura con brocha. Los muecos daruma realmente carecen de ojos. Se pinta un ojo cuando se pide un deseo y el otro se pinta cuando el deseo se hace realidad. (Cortesa de Wacom Technology, Corp.) Los programas de dibujo y pintura permiten la construccin de imgenes interactivamente mediante el uso de un dispositivo de apuntamiento, tal como un lapicero o una tableta grfica, para esbozar varias formas de curva. En la Figura 4.14 se muestran algunos ejemplos de tales patrones de curva. La visualizacin de brochazos simulados es una opcin de patrn adicional que puede proporcionarse en un paquete de pintura. La Figura 4.15 muestra algunos patrones que se pueden producir mediante modelado de diferentes tipos de brochas.
y el punto se muestra entonces como un bloque de pxeles cuadrado. Al argumento s i z e se le asigna un valor positivo en punto Ilutante, el cual se redondea a un entero (a menos que el punto se deba suavizar). El nmero de pxeles horizontales y verticales de la representacin del punto se determina mediante el argumento s i z e . Por tanto, un tamao de punto de LO muestra un nico pxel y un tamao de punte de 2.0 muestra una matriz de pxeles de tamao 2 por 2. Si activamos las caractersticas de suavizado de OpenGL, el tamao de un bloque de pxeles se modificar para suavizar los bordes. El valor predeterminado del tamao de punto es 1.0. Las funciones de atributo se pueden enumerar dentro o fuera de un par g l B e g i n / glEnd. Por ejemplo, el siguiente segmento de cdigo dibuja tres puntos de distinto color y tamao. El primero es un punto rojo de tamao estndar, el segundo es un punto verde de doble tamao y el tercero es un punto azul de tamao triple.
glCnlor glBegin -if (1.0, (50, (0.0, (75, 0.0, 0.0);
(3.0);
1 96
200);
Asignamos un valor en punto lotante al argumento w i d t h , y este valor se redondea al entero no negativo ms cercano. Si el valor de entrada se redondea a 0.0, la lnea se mostrar con un grosor estndar de 1.0, que es el grosor predeterminado. Sin embargo, cuando se aplica suavizado a una lnea, los bordes se suavizan para reducir la apariencia de escalera debida a la digitalizacin. Los grosores fraccionarios son posibles. Algunas implementaciones de la funcin de grosor de lnea admiten nicamente un nmero de grosores limitado y otras no admiten grosores distintos de 1.0. La funcin de grosor de lnea de OpenGL se iniplementa utilizando los mtodos descritos en el Seccin 4.5. Es decir, la magnitud de las separaciones horizontal y vertical de los puntos extremos de la lnea, Ax y Ay, se comparan para determinar si se genera una lnea gruesa utilizando extensiones de pxeles verticales o extensiones de pxeles horizontales.
El argumento p a t t e r n se utiliza para referenciar un entero de 16 bits que describe cmo se visualizar la lnea. Un bit de valor I en el patrn denota una posicin de pxel activado y un bit de valor 0 indica una posicin de pxel desactivado. El patrn se aplica a los pxeles a lo largo de la trayectoria de la lnea comenzando con los bit menos significativos del patrn. El patrn predeterminado es OxFFFF (cada posicin de pxel tiene un valor de I), el cual produce una lnea continua. El argumento entero r e p e a t F a c t o r especifica cuntas veces cada bit del patrn se repetir antes de que se aplique el siguiente bit del patrn. De manera predeterminada, el valor de repeticin es 1. En una polilnea, un patrn de lnea especificado no se comienza de nuevo al principio de cada segmento. ste se aplica continuamente a lo largo de todos los segmentos, comenzando por el primer extremo de la polilnea y terminando en el extremo final del ltimo segmento de la serie. Como ejemplo de especificacin del estilo de la lnea, supngase que se le asigna al argumento p a t t e r n la representacin en hexadecimal OxOOFF y que el factor de repeticin es I. Esto mostrar una lnea discontinua con ocho pxeles en cada trazo y ocho pxeles que estn activados (un espacio de ocho pxeles) entre dos trazos. Tambin, ya que los bits menos significativos se aplican en primer lugar, una lnea comienza con
197
un trazo de ocho pxeles en su primer extremo. A este trazo le sigue un espacio de ocho pxeles, entonces otro trazo de ocho pxeles, y as sucesivamente hasta que se alcanza la posicin del segundo extremo. Antes de que se pueda visualizar una lnea con el patrn de lnea actual, debemos activar la caracterstica de estilo de lnea de OpenGL. Realizamos esto con la siguiente funcin.
glEnable (GL_LINE_STIPPLE);
Si olvidamos incluir esta funcin de habilitacin, las lneas se mostrarn como lneas continuas; es decir, se utiliza el patrn predeterminado OxFFFF para mostrar los segmentos de lnea. En cualquier momento, podemos desactivar la caracterstica de patrn de lnea con:
glDisable (GL_LINE_STIPPLE) ;
Esto reemplaza el patrn de estilo de lnea con el patrn predeterminado (lneas continuas). En el siguiente programa, mostramos el uso de las funciones OpenGL para los atributos de lnea mediante el dibujo de tres grficas de lnea con diferentes estilos y grosores. La Figura 4.16 muestra los diagramas de datos que se podran generar con este programa.
FIGURA 4.16. Dibujo de tres conjuntos de datos con tres diferentes estilos y grosores de lnea en OpenGL: patrn trazo-punto con grosor sencillo, patrn discontinuo con doble grosor y patrn de puntos con grosor triple.
/*
Defin
un t i p o {
de float
datos x, y;
para )
coordenadas wcPt2D;
universales
bidimensionalea.
*/
typedef
struct
{
int
glBegin for
glVertex2f glPlush ( ;
glEnd
( \\ r
(J^
1 98
CAPTULO 4
/*
Invocar
aqu
un
procedimiento
para
dibujar
los
ejes
de
coordenadas.
*/
glEnable /*
(GL_LINE_STIPPLE ; el (1, primer conjunto de // // valores Dibuja (x, una y). */ trazo-punto de grosor
Introduce
glLineStipple
0xlC47);
polilnea
estndar.
linePlot
(dataPts);
/*
Introduce
el (1,
segundo
conjunto //
de
valores una
x,
y).
OxOOFF);
Dibuja
polilnea
(2.0);
(dataPts);
/*
Introduce
el {1,
tercer
conjunto
de //
valores Dibuja
(x,
y).
0x0101);
una
polilnea
(3.0); (dataPts)j
glDisable
(GL_LINE
STIPPLE);
(GL_LINES); (0.0, (50, (1.0, (250, 0.0, 50)j 0.0, 250); 0.0); 1.0);
A la funcin g l S h a d e M o d e l tambin se le puede pasar el argumento G L F L A T . En ese caso, el segmento de lnea se muestra en un nico color: el color del segundo extremo, (250, 250). Es decir, habramos generado una lnea roja. Realmente, G L S M O O T H es el argumento predeterminado, por lo que generaramos un segmento de lnea de color suavemente interpolado incluso si no incluyramos esta funcin en el cdigo. Podemos producir otros efectos mediante la representacin de lineas adyacentes con diferentes patrones y colores. Tambin podemos utilizar las caractersticas de OpenGL de fundido de color mediante la superposicin de lneas u otros objetos con valores alfa que varan. Un trazo de brocha y otros efectos de pintura se pueden simular con un mapa de pxeles y fundido de color. El mapa de pxeles se puede entonces mover de forma interactiva para generar segmentos de lnea. A los pxeles individuales del mapa de pxeles se les pueden asignar diferentes valores alfa para representar lneas como trazos de brocha o plumilla.
199
Estilos de relleno
Un atributo bsico de relleno proporcionado por una biblioteca grfica general es el estilo de visualizacin del interior. Podemos visualizar la regin con un nico color, con un patrn de relleno especfico, o con un estilo hueco mostrando nicamente el contomo de la regin. Estos tres estilos de relleno se muestran en la Figura 4.17. Tambin podemos rellenar regiones seleccionadas de una escena empleando varios estilos de brochas, combinaciones de fundido de color, o texturas. Entre otras opciones se pueden incluir las especificaciones de visualizacin de los lmites de un rea de relleno. F.n el caso de los polgonos, podramos mostrar los bordes con diferentes colores, grosores y estilos. Podemos seleccionar diferentes atributos de visualizacin para las caras anterior y posterior de una regin. Los patrones de relleno se pueden definir con matrices de color rectangular que enumeran diferentes colores para diferentes posiciones en la matriz. O, se podra especificar un patrn de relleno como una matriz de bits que indique qu posiciones relativas se han de mostrar con el color seleccionado. Una matriz que especifica un patrn de relleno es una mscara que se debe aplicar al rea de visualizacin. Algunos sistemas grficos proporcionan una posicin inicial arbitraria para la superposicin de la mscara. Desde esta posicin de comienzo, la mscara se repite en direccin horizontal y vertical hasta que el rea de visualizacin se ha rellenado con copias no superpuestas del patrn. Donde el patrn se superpone con las reas especificadas de relleno, la matriz con el patrn indica qu pixeles se deberan mostrar con un color concreto. Este proceso de relleno de un rea con un patrn rectangular se denomina disposicin en mosaico y un patrn de relleno
Hueco
00
Slido b)
Patrn (c)
200
'////////A
R e l l e n o de sombreado en diagonal
F I G U R A 4.18.
entramado.
rectangular se denomina a veces patrn en mosaico. A veces, se dispone en el sistema de patrones de relleno predefinidos, tales como los patrones de relleno con una trama mostrados en la Figura 4.18. Podemos mplementar un patrn de relleno determinando donde el patrn se superpone con aquellas lneas de barrido que cruzan un rea de relleno. Comenzando por una posicin de partida especfica del patrn de relleno, mapeamos los patrones rectangulares verticalmente a travs de las lneas de barrido y horizontalmente a travs de las posiciones de los pixeles de las lneas de barrido. Cada repeticin de la matriz de patrn se realiza a intervalos determinados por la anchura y la altura de la mscara. Donde el patrn se superpone con el rea de relleno, los colores de los pixeles se cambian de acuerdo a los valores almacenados en la mscara. El relleno con tramas se podra aplicar a regiones mediante conjuntos de dibujo de segmentos de lnea para mostrar un entramado nico o entramado cruzado. El espacio y la pendiente de las lneas de la trama se podran utilizar como parmetros en una tabla de trama. Alternativamente, el patrn del relleno con entramados se podra especificar como una matriz de patrn que produce conjuntos de lneas diagonales. Un punto de referencia (xp, yp) para la posicin de comienzo de un patrn de relleno se puede establecer en cualquier posicin conveniente, dentro o fuera de la regin a rellenar. Por ejemplo, el punto de referencia se podra establecer en un vrtice del polgono. O el punto de referencia se podra elegir en la esquina inferior izquierda del rectngulo limitador (o caja delimitadora) determinado por las coordenadas lmites de la regin. Para simplificar la seleccin de las coordenadas de referencia, algunos paquetes siempre utilizan las coordenadas del origen de la ventana de visualizacin como posicin de partida del patrn. Establecer siempre (xp, yp) en el origen de coordenadas tambin simplifica las operaciones de disposicin en mosaico cuando cada elemento de un patrn se debe mapear a un Cnico pxel. Por ejemplo, si las filas de la matriz de patrn se referencian desde abajo hacia arriba, y comenzando con el valor 1, un valor de color se asigna entonces a la posicin de pxel (x, y) en coordenadas de pantalla desde la posicin del patrn (y mod ny + 1, x mod nx + I). Donde, ny y nx especifican el nmero de filas y de columnas de la matriz del patrn. Sin embargo, estableciendo la posicin de comienzo del patrn en el origen de coordenadas se asocia el patrn de relleno al fondo de la pantalla, en lugar de a la regin de relleno. Las reas de superposicin o adyacentes rellenadas con el mismo patrn podran no mostrar frontera aparente. Tambin, reposicionando y rellenando un objeto con el mismo patrn se podra producir un cambio en los valores de los pixeles asignados sobre el interior del objeto. Un objeto en movimiento parecera que es transparente frente a un patrn de fondo esttico, en lugar de moverse con un patrn interior fijo.
201
and
m
r i r r L i i
or
i r
Patrn
m mm
Fondo
J J
Wr
xor
I I
L r i
replace
Valores de pxel
FIGURA 4.19.
Combinacin de un patrn de relleno con un patrn de fondo utilizando operaciones lgicas and, or y xor usando reemplazamiento simple.
{or exclusivo), y
Como ejemplo de esta ciase de relleno, el algoritmo de relleno suave lineal vuelve a pintar un rea que originalmente se pint mezclando un color F de primer plano con un color simple de fondo B, donde F = B. Si suponemos que conocemos los valores de F y de B podemos comprobar el contenido actual del bfer de imagen para determinar cmo estos colores se combinaron. El color actual RGB de cada pxel dentro del rea se rellena con alguna combinacin lineal de F y B:
P = /F + ( 1 - (JB
(4.2)
donde el factor de transparencia / toma un valor entre 0 y 1 en cada pxel. Para valores de / menores que 0.5, el color de fondo contribuye ms al color interior de la regin que el color de relleno. La Ecuacin vectorial 4.2 contiene las componentes RGB de los colores, con:
P = (P P , />),
R9 a
F = (F , F F )
R Gt
B t
B =
(A,
B, B)
G B
(4.3)
Podemos por tanto calcular el valor del parmetro / utilizando una de las componentes de color RGB: t = (4.4)
donde k = R, G, o B\ y F * B . Tericamente, el argumento / tiene el mismo valor en cada componente RGB, pero los clculos de redondeo para obtener cdigos enteros pueden producir valores diferentes de t para componentes diferentes. Podemos minimizar este error de redondeo mediante la seleccin de la mayor diferencia entre F y B. Este valor de / se utiliza entonces para mezclar el nuevo color de relleno NF con el color de fondo. Podemos realizar esta mezcla usando un procedimiento modificado de relleno por inundacin o un procedimiento de relleno por lmites, como se describe en el Seccin 4.13.
k k
Se pueden aplicar procedimientos similares de fundido de color a un rea cuyo color de primer plano haya que fusionar con mltiples reas de color de fondo, tales como un patrn de tablero de ajedrez. Cuando los colores de fondo 5, y B se mezclan con el color de primer plano F, el color del pxel resultante P es:
2
202
CAPTULO 4
(4.5)
donde la suma de los coeficientes de los trminos de color / , /, (I t0 - /,) debe ser igual a 1. Podemos
0
establecer un sistema de dos ecuaciones utilizando dos de las tres componentes de color RGB para resolver
los dos parmetros de proporcionalidad / y r, Estos parmetros se utilizan entonces para mezclar el nuevo color de relleno con los dos colores de fondo y obtener el nuevo color de pxel. Con tres colores de fondo y un color de primer plano, o con dos colores de fondo y dos colores de primer plano, necesitamos las tres ecuaciones RGB para obtener las cantidades relativas de los cuatro colores. Para algunas combinaciones de colores de primer plano y colores de fondo, sin embargo, el sistema de dos o tres ecuaciones RGB no se puede resolver. Esto ocurre cuando los valores de color son todos muy similares o cuando son todos proporcionales entre si.
0
FIGURA 4.20. Pixeles interiores a lo largo de una lnea de barrido que pasa a travs de un rea de relleno de un polgono.
| | | 10 14 IK
|_ 24
yr
1
/1 1
Lnea de barrido v
FIGURA 4 .21. Puntos de interseccin a lo largo de lneas de barrido que intersectan con los vrtices de un polgono. La linea de barrido .y genera un nmero impar de intersecciones, pero la linca de barrido y' genera un nmero par de intersecciones que se pueden emparejar para identificar correctamente las extensiones de pxeles interiores. gono. Para identificar los pxeles interiores de la lnea de barrido y, debemos contar la interseccin con el vrtice como un nico punto. Por tanto, a medida que procesamos las lneas de barrido, necesitamos distinguir entre estos casos. Podemos detectar la diferencia topolgica entre la lnea de barrido y y la lnea de barrido y' mediante la anotacin de la posicin relativa de las aristas de interseccin con la lnea de barrido. En el caso de la lnea de barrido % las dos aristas que comparten un vrtice de interseccin estn en lados opuestos a la lnea de barrido. Pero en el caso de la lnea y' las dos aristas de interseccin estn ambas sobre la lnea de barrido. Por tanto, un vrtice que tiene aristas contiguas en lados opuestos de una lnea de barrido de interseccin se debera contar como un nico punto de interseccin con la frontera. Podemos identificar estos vrtices mediante el trazado de la frontera del polgono segn el movimiento de las agujas del reloj o en sentido contrario y observando los cambios relativos en las coordenadas y del vrtice, a medida que nos movemos de una arista a la siguiente. Si los tres valores de la coordenada v de los tres puntos extremos de dos aristas consecutivas crecen o decrecen montonamente, necesitamos contar el vrtice compartido (medio) como un punto de interseccin nico para la lnea de barrido que pasa a travs del vrtice. En cualquier otro caso, el vrtice compartido representa un extremo local (mnimo o mximo) del lmite del polgono, y las dos intersecciones con las aristas de la lnea de barrido que pasa a travs de aquel vrtice se pueden aadir a la lista de intersecciones. Un mtodo para implementar el ajuste de la cuenta de intersecciones con los vrtices consiste en acortar algunas aristas del polgono para dividir aquellos vrtices que se deberan contar como una interseccin. Podemos procesar las aristas no horizontales que hay a lo largo de los lmites del polgono en el orden especificado, segn las agujas del reloj o en sentido contrario. A medida que procesamos cada arista, podemos comprobar si dicha arista y la siguiente no horizontal tienen los valores de las coordenadas v de sus puntos extremos montonamente crecientes o decrecientes. Si esto es as, la arista inferior se puede acortar para asegurar que slo se genera un punto de interseccin para la lnea de barrido que atraviesa el vrtice comn que une las dos aristas. La Figura 4.22 muestra el acortamiento de una arista. Cuando las coordenadas^ del punto extremo de las dos aristas crecen, el valor y del punto extremo superior del arista actual se decrementa en una unidad, como en la Figura 4.22(a). Cuando los valores y del punto extremo decrecen montonamente, como en la Figura 4.22(b), decrementamos la coordenada y del punto extremo superior de la arista siguiente a la actual. Ilabitualmente, ciertas propiedades de una parte de una escena estn relacionadas de algn modo con las propiedades de otras partes de la escena. Estas propiedades de coherencia se pueden utilizar en los algoritmos de los grficos por computadora para reducir el procesamiento. Los mtodos de coherencia implican a menudo clculos incremntales aplicados a lo largo de una nica linea de barrido o entre dos lneas de barrido sucesivas. Por ejemplo, en la determinacin de las intersecciones de una arista con el rea a rellenar, podemos establecer clculos incremntales de coordenadas a lo largo de cualquier arista mediante la explotacin del hecho de que la pendiente de una arista se mantiene constante de una lnea de barrido a la siguiente. La
204
CAPTULO 4
(a)
(b)
FIGURA 4.22. Ajuste de los valores de y del punto extremo para un polgono, a medida que procesamos las aristas en orden alrededor del permetro del polgono. I-a arista que se est procesando actualmente se indica con una lnea continua. Bu (a), la coordenada y del punto extremo superior de la arista actual se decrementa en una unidad. En (b), la coordenada y del punto extremo superior de la arista siguiente se decrementa en una unidad.
Lnea de barrido y* +
Lnea de barrido y
FIGURA 4.23. Dos lneas de barrido sucesivas que intersectan con los lmites de un polgono. Figura 4.23 muestra dos lneas de barrido sucesivas que cruzan la arista izquierda de un tringulo. La pendien te de esta arista se puede expresar en trminos de las coordenadas de la interseccin con la lnea de barrido:
m=
Ya que el cambio en las coordenadas y entre las dos lneas de barrido es simplemente,
(4.6)
el valor x. de interseccin segn el eje x de la lnea de barrido superior se puede determimar a partir del valor x de interseccin segn el eje .v de la lnea de barrido precedente del siguiente modo,
Ti k
I
%H
(4.8)
Cada sucesiva x de la interseccin se puede por tanto calcular aadiendo el inverso de la pendiente y redondeando al entero ms prximo. Una implementacin paralela obvia del algoritmo de relleno consiste en asignar cada lnea de barrido que cruza el polgono a un procesador independiente. Los clculos de las intersecciones con las aristas se realizan entonces de forma independiente. A lo largo de una arista con pendiente m el valor de interseccin x de la lnea de barrido k sobre la lnea inicial de barrido se puede calcular del siguiente modo:
t k
(4.9)
m
En un algoritmo secuencial de relleno, el incremento de los valores de x en la cantidad ~ a lo largo de una arista se puede realizar con operaciones enteras renombrando la pendiente m como el cociente de dos enteros:
Ay m = Ax donde Ax y Ay son las diferencias entre las coordenadas x e y de los puntos extremos de la arista. Por tanto, los clculos incremntales de la x de interseccin a lo largo de una arista con sucesivas lneas de barrido se pueden expresar del siguiente modo:
< - >
4
Ay Empleando esta ecuacin, podemos realizar la evaluacin entera de la X de interseccin inicializando un contador en 0 y despus incrementando el contador con el valor Ax cada vez que nos desplazamos a una nueva lnea de barrido. Cada vez que el valor del contador llega a ser mayor o igual que Ay, incrementamos el valor actual de la x de interseccin en una unidad y decrementamos el contador con el valor Ay. Este procedimiento es equivalente a mantener la parle enlera y la parte fraccionaria de lax de interseccin e incrementar la parte fraccionaria hasta que alcanzamos el siguiente valor entero. A modo de ejemplo de este esquema de incremento entero, supngase que disponemos de una arista con una pendiente m = i. En la lnea inicial de barrido, establecemos el contador en 0 y el incremento del contador en 3. A medida que nos desplazamos hacia arriba hacia las tres lneas de barrido siguientes a lo largo de esta arista, al contador se le asignan sucesivamente los valores 3, 6 y 9. En la tercera lnea de barrido sobre la lnea inicial de barrido, el contador toma un valor mayor que 7. Por lo que incrementamos la coordenada x de interseccin en 1, y iniciamos el contador al valor 9 - 7 = 2. Continuamos determinando las intersecciones de las lneas de barrido de este modo hasta alcanzar el punto extremo superior de la arista. Se realizan clculos similares para las intersecciones con las aristas de pendientes negativas. Podemos redondear al entero ms prximo el valor de la .v de interseccin del pxel, en lugar de truncar para obtener valores enteros, modificando el algoritmo de interseccin con las aristas para que el incremento sea comparado con Ay/2. Esto se puede hacer con aritmtica entera incrementando el contador con el valor 2Ay en cada paso y comparando el incremento con Ay. Cuando el incremento es mayor o igual que Av, incrementamos el valor de x en 1 y decrementamos el contador con el valor 2Ay. En el ejemplo previo de m = |, los valores del contador para las primeras lneas de barrido sobre la lnea inicial de barrido para esta arista serian ahora , 12 (reducido a - 2 ) , 4, 10 (reducido a - 4 ) , 2, 8 (reducido a - 6 ) , 0, 6, y 12 (reducido a 2). Ahora x se incrementara en las lneas de barrido 2, 4 , 6 . 9, y as sucesivamente, sobre la lnea inicial de barrido en esta arista. Los clculos adicionales que se requieren para cada arista son 2Ax = Ax + Ax y 2Ay = Ay + Ay, que se realizan como pasos de preprocesamiento. Para realizar de forma eficiente el relleno de un polgono, podemos en primer lugar almacenar el contorno del polgono en una tabla de aristas ordenadas que contenga toda la informacin necesaria para procesar las lneas de barrido eficientemente. Procediendo con las aristas en orden segn el movimiento de las agujas del reloj o en orden contrario, podemos utilizar un bfer de ordenacin para almacenar las aristas, ordenadas segn el menor valor de y de cada arista, en las posiciones corregidas de las lneas de barrido. Slo las aristas no horizontales se introducen en la tabla de aristas ordenadas. Cuando se procesan las aristas, tambin podemos acortar ciertas aristas para resolver la cuestin de la interseccin con los vrtices. Cada entrada en la tabla para una lnea de barrido particular contiene el valor mximo de y para dicha arista, el valor de la x de interseccin (en el vrtice inferior) para la arista, y el inverso de la pendiente de la arista. Para cada lnea de barrido, se ordenan las aristas de izquierda a derecha. La Figura 4.24 muestra un polgono y su tabla asociada de aristas ordenadas. A continuacin, procesamos las lneas de barrido desde la parte inferior del polgono hacia su parte superior, produciendo una lista de aristas activas para cada lnea de barrido que cruza el contorno del polgono. La lista de aristas activas para una lnea de barrido conliene todas las aristas con las que se cruza dicha lnea
206
CAPTULO 4
\lm
CR
FIGURA 4.24. Un polgono y su labia de aristas ordenadas, con la arista DC acortada una unidad en la direccin del eje y. de barrido, con los clculos de coherencia iterativos empleados para obtener las intersecciones con las aristas. La implementacin de los clculos de las intersecciones con las aristas se puede facilitar almacenando los valores de Ax y Ay en la lista de aristas ordenadas. Tambin, para asegurar que rellenamos correctamente el interior de los polgonos especificados, podemos aplicar las consideraciones estudiadas en la Seccin 3.13, Para cada lnea de barrido, rellenamos las extensiones de pxeles para cada par de x de interseccin, comenzando por el valor de la .v de interseccin situada ms a la izquierda y terminando en el valor anterior al valor de la x de interseccin situada ms a la derecha. Y cada arista del polgono se puede acortar en una unidad en la direccin del eje v en el punto extremo superior. Estas medidas tambin garantizan que los pxeles de polgonos adyacentes no se superpondrn.
207
208
CAPITULO 4
FIGURA 4,26. Ejemplo de lmites de color para el procedimiento de relleno por contorno (en negro en la figura).
La Figura 4.27 muestra dos mtodos de procesamiento de los pxeles vecinos a partir de la posicin actual que se est comprobando. En la Figura 4.27(a), se comprueban cuatro puntos vecinos. Estos son los pxeles que estn a la derecha, a la izquierda, encima y debajo del pxel actual. Las reas rellenadas con este mtodo se denominan 4-conectadas. El segundo mtodo, mostrado en la Figura 4.27(b), se utiliza para rellenar figuras ms complejas. Aqu el conjunto de posiciones vecinas que hay que comprobar incluye los pxeles de las cuatro diagonales, as como las de las direcciones cardinales. Los mtodos de relleno que utilizan esta tcnica se denominan 8-conectados. Un algoritmo de relleno por contorno 8-conectado rellenara correctamente el interior del rea definida en la Figura 4.28, pero un algoritmo de relleno por contorno 4-conectado rellenara slo parte de dicha regin. El siguiente procedimiento muestra un mtodo recursivo para pintar un rea 4-concctada con un color liso, especificado en el argumento m i c o i o r , hasta un color de contorno especificado con el argumento b o r d e r c o i o r . Podemos ampliar este procedimiento para rellenar una regin 8-conectada mediante la inclusin de cuatro lneas adicionales para comprobar las posiciones diagonales (x \*y 1 ) .
(a)
(b)
FIGURA 4.27. Mtodos de relleno aplicados a un rea 4-coneclada (a) y a un rea 8-conectada (b). Los crculos huecos representan pxeles que hay que comprobar a partir de la posicin de comprobacin actual, mostrada con un color slido.
FIGURA 4.28. El rea definida dentro del contorno de color (a) se rellena slo parcialmente en (b) utilizando un algoritmo de relleno por contorno 4-conectado.
void
boundaryFill4
(int
x,
int
y,
int
fillColor,
int
borderColor)
int /*
interiorColor; Establece (x, el y, (x, color */ interiorColor); ! borderColor) // y y Set , , 1, 1, && (interiorColor to borderColor) / borderColor) ; borderColor); borderColor^ lfillColor}) { y) ; (x + 1, (x 1, y + y x , (x , color of pixel fillColor. actual en fillColor, despus realiza las siguientes
operaciones. getPixel if
Los algoritmos de relleno por contorno recursivos pueden no rellenar regiones correctamente si algunos pxeles interiores ya se muestran con el color de relleno. Esto ocurre porque el algoritmo comprueba los pxeles prximos tanto para el color del contorno como para el color de relleno. El encontrar un pxel con el color de relleno puede provocar que una rama recursiva termine, dejando otros pxeles interiores sin rellenar. Para evitar esto, podemos cambiar en primer lugar el color de cualesquiera pixeles interiores que estn inicialmente con el color de relleno antes de aplicar el procedimiento de relleno por contomo. Tambin, ya que este procedimiento requiere un considerable apilamiento de los puntos vecinos, generalmente se emplean mtodos ms eficientes. Estos mtodos rellenan extensiones horizontales de pxeles a travs de lneas de barrido, en lugar de proceder con los puntos vecinos 4-concctados u 8-conectados. Entonces slo necesitamos apilar un posicin de comienzo para cada extensin horizontal de pxeles, en lugar de apilar todas las posiciones no procesadas alrededor de la posicin actual. Comenzando por el punto interior inicial con este mtodo, en primer lugar rellenamos las extensiones contiguas de pxeles de esta lnea de barrido de partida. Despus localizamos y apilamos las posiciones de comienzo para las extensiones de las lneas de barrido adyacentes, donde las extensiones se definen como la cadena horizontal y contigua de posiciones limitada por pxeles que se muestran con el color de contorno. En cada paso subsiguiente, recuperamos la siguiente posicin de comienzo de la parte superior de la pila y repetimos el proceso. En la Figura 4.29 se muestra un ejemplo de cmo las extensiones de pxeles se podran rellenar utilizando esta tcnica para rellenar regiones 4-conectadas. En este ejemplo, procesamos en primer lugar las lneas de barrido sucesivamente desde la lnea de comienzo hasta el lmite superior. Despus de que todas las lneas de barrido superiores se han procesado, rellenamos las extensiones de pxeles de las restantes lneas de barrido en orden hasta el lmite inferior. El pxel situado ms a la izquierda en cada extensin horizontal se localiza y se apila, en orden, hacia la izquierda o hacia la derecha a travs de las sucesivas lneas de barrido, como se muestra en la Figura 4.29. En la parte (a) de esta figura, se ha rellenado la extensin inicial y se han apilado las posiciones de comienzo 1 y 2 de las extensiones de las siguientes lneas de barrido (por debajo y por encima). En la Figura 4.29(b), la posicin 2 se ha obtenido de la pila y se ha procesado para producir la extensin rellenada que se muestra, y el pxel de comienzo (posicin 3) de la nica extensin de la lnea siguiente de barrido se ha apilado. Despus de procesar la posicin 3, en la Figura 4.29 se muestran las extensiones rellenadas y las posiciones apiladas. La Figura 4.29(d) muestra los pxeles rellenos despus de procesar todas las extensiones de la parte superior derecha del rea especificada. La posicin 5 se procesa a continuacin y se rellenan las extensiones de la parte superior izquierda de la regin; despus se toma la posicin 4 para continuar el procesamiento de las lneas de barrido inferiores.
210
CAPTULO 4
Posiciones apiladas
####
###
###########
#####
(b)
s I
FIGURA 4.29. Relleno por contorno a travs de las extensiones de pxeles de un rea 4conectada; (a) lnea inicial de barrido con una extensin de pxeles rellenada, que muestra la posicin del punto inicial (hueco) y las posiciones apiladas de las extensiones de pxeles de las lneas de barrido adyacentes, (b) Extensin de pxeles rellenada en la primera lnea de barrido sobre la lnea inicial de barrido y el contenido actual de la pila, (c) extensiones de pxeles rellenadas en las dos primeras lneas de barrido sobre lnea inical de barrido y el contenido actual de la pila, (d) Completadas las extensiones de pxeles de la parte superior derecha de la regin definida y las restantes posiciones apiladas que se han de procesar.
(c:
(di
void
floodFill4 Color;
(int
x,
int
y,
int
fillColor,
int
interiorColor)
int /*
color */
actual
en
fillColor,
despus
realiza
las
siguientes
getPixel if (color
interiorColor)
filoodFill* (x
(x, (x,
Podemos modificar el procedimiento anterior para reducir los requisitos de almacenamiento de la pila rellenando extensiones horizontales de pxeles, como se estudi en el algoritmo de relleno por contorno. En esta tcnica, apilamos nicamente las posiciones de comienzo de aquellas extensiones de pxeles que tienen el valor interiorColor. Los pasos de este algoritmo modificado de relleno por inundacin son similares a los mostrados en la Figura 4.29 para el relleno por contorno. Comenzando por la primera posicin de cada extensin, los valores de los pxeles se reemplazan hasta que se encuentra un valor distinto de interiorColor.
2 1 2 CAPTU LO 4 Atributos de las primitivas grficas (1) (2) (3) (4) Definir un patrn de relleno Invocar la submtina de relleno de polgonos Activar la caracterstica de OpenGL de relleno de polgonos Describir los polgonos que se van a rellenar
Un patrn de relleno de polgonos se visualiza basta e incluyendo las aristas del polgono. Por tanto, no hay lneas lmite alrededor de la regin de relleno a menos que aadamos stas especficamente a la representacin. Adems de especificar un patrn de relleno para el interior de un polgono, existen otras muchas opciones. Lina opcin consiste en representar un polgono hueco, en el que no se aplica un color o patrn interior y slo se generan las aristas. Un polgono hueco es equivalente a mostrar una primitiva de polilnea cerrada. Otra opcin es mostrar los vrtices del polgono, sin relleno interior ni aristas. Tambin, se pueden designar atributos direntes para las caras anterior y posterior de un rea de relleno poligonal.
Oxff,
Oxff,
0x00,
Los bits se deben especificar comenzando por la fila inferior del patrn, y continuando hasta la fila superior (32) del patrn, como hicimos con b i t s h a p e en el Seccin 3.19. Este patrn se replica a travs de toda el rea de la ventana de visualizacin, comenzando por la esquina inferior izquierda de la ventana. Los polgonos especificados se rellenan donde el patrn se superpone con dichos polgonos (Figura 4.31). Una vez que hemos definido una mscara, podemos establecer sta como el patrn de relleno actual con la funcin:
glPolygonStippIe (fillPattern);
FIGURA 4.31. Disposicin en mosaico de un patrn de relleno rectangular en una ventana de visualizacin para rellenar dos polgonos convexos.
Esquina % superior-derecha^^^
?
A W
W ^ W W ^ W (b)
W k / /
(a)
FIGURA 4.32. Un patrn de 3 por 3 bits (a) superpuesto a un paralelogramo para producir el rea de relleno de (b), donde la esquina superior derecha del patrn coincide con la esquina inferior izquierda del paralelogramo. A continuacin, necesitamos habilitar las subrutinas de relleno antes de especificar los vrtices de los polgonos que han de rellenarse con el patrn actual. Esto lo hacemos con la lnea:
glEnable (GL_POLYGON_STIPPLE);
La Figura 4.32 muestra cmo un patrn de 3 por 3 bits, repetida sobre una mscara de 32 por 32 bits, se podra aplicar para rellenar un paralelogramo.
(GL_TRIANGLESJ; (0.0, (50, (1.0, {150, (0.0, (75, 0.0, 50}; 0.0, 50) ; 1.0, 150) ; 6.0); 0.0); 1.0);
Por supuesto, si se establece un nico color para todo el tringulo, el polgono se rellena con dicho color. Si cambiamos el argumento de la funcin g l S h a d e M o d e l a G L _ F L A T en este ejemplo, el polgono se rellena con el ltimo color especificado (verde). El valor G L _ S M O O T H es el sombreado predeterminado, pero podemos incluir esta especificacin para recordar que el polgono se ha de rellenar por interpolacin de los colores de sus vrtices.
214
Utilizamos el argumento f a c e para designar qu cara del polgono queremos mostrar slo como aristas o slo como vrtices. A este argumento se le asigna G L F R O N T , G L _ B A C K O G L _ F R O N T _ A N D _ B A C K , para indicar la cara frontal, la cara trasera, o ambas, respectivamente. Despus, si slo querernos que se muestren las aristas del polgono, asignaremos la constante G L _ L I N E al argumento d i s p l a y M o d e . Para dibujar slo los puntos de los vrtices del polgono, asignaremos la constante GL _POINT al argumento d i s p l a y M o d e . Una tercera opcin es G L _ F I L L . Pero este es el modo de visualizacin predeterminado, por lo que habitualmente slo invocamos g l P o l y g o n M o d e cuando queremos establecer como atributos para los polgonos las aristas o los vrtices. Otra opcin consiste en visualizar un polgono tanto con un relleno interior como un color o patrn para sus aristas (o para sus vrtices) diferentes. Esto se realiza especificando el polgono dos veces: una con el argumento d i s p l a y M o d e establecido en G L _ F I L L y luego de nuevo con d i s p l a y M o d e definido como G L _ L I N E (o G L _ P O I N T ) . Por ejemplo, el siguiente fragmento de cdigo rellena el interior de un polgono con un color verde, y despus se asigna a las aristas un color rojo.
glColor3f \* Invocar (0.0, la (1.0, la 1.0, 0.0); de generacin del polgono *\
subrutina 0.0,
glColor3f \* Invocar
glPolygonMode
(GL_FRONT, subrutina
Para un polgono tridimensional (aquel que no tiene todos los vrtices en el plano xy) este mtodo para mostrar las aristas de un polgono relleno puede producir huecos a lo largo de las aristas. Este efecto, a veces se denomina costura (stitching), es debido a las diferencias entre los clculos en el algoritmo de relleno por lnea de barrido y los clculos en el algoritmo de dibujo de lneas en las aristas. Cuando se rellena el interior de un polgono tridimensional, el valor de la profundidad (distancia desde el plano xy) se calcula para cada posicin (x, y). Pero este valor de profundidad en una arista del polgono no es a menudo exactamente el mismo que el valor de profundidad calculado por el algoritmo de dibujo de lneas para la misma posicin (x, y). Por tanto, al hacer pruebas de visibilidad, el color de relleno interior se podra utilizar en lugar de un color de arista para mostrar algunos puntos a lo largo de los lmites de un polgono. Una manera de eliminar los huecos a lo largo de las aristas visualizadas de un polgono tridimensional, consiste en cambiar los valores de la profundidad calculados con la subrutina de relleno, para que no se superpongan con los valores de profundidad de las aristas para dicho polgono. Hacemos esto con las dos funciones siguientes de OpenGL.
glEnable (GL_POLYGON_0FFS ET_FILL) ; (factorl, fac'tor2) ;
glPolygonOffset
La primera funcin activa la subrutina de compensacin para el relleno por lnea de barrido y la segunda funcin se utiliza para establecer una pareja de valores en punto flotante, f a c t o r l y f a c t o r 2 , que se utilizan para calcular la cantidad de compensacin de la profundidad. El clculo de esta compensacin de la profundidad es: dephOffset = factorl maxSlope + factor2 eonst (4Al) donde maxSlope es la mxima pendiente del polgono y const es una constante de implementacin. Para un polgono en el plano xy, ta pendiente es 0. En cualquier otro caso, la mxima pendiente se calcula como el
cambio en la profundidad del polgono dividido entr el cambio en x o en y. Un valor tpico para los dos factores es 0.75 o LO, aunque se necesita alguna experimentacin con los valores de los factores para conseguir buenos resultados. Como ejemplo de asignacin de valores a los valores de compensacin, podemos modificar el fragmento anterior de cdigo como sigue:
glColor3f glEnable (0.0, 1.0, 0.0);
J J
glPolygonOffset \* Invocar la
subrutina
glDiaable glColor3f
glPolygonMode \* Invocar la
(GL_FRONT, subrutina
Ahora el felleno interior del polgono queda un poco ms alejado en profundidad, de modo que no interfiera con los valores de profundidad de sus aristas. Tambin es posible implementar este mtodo aplicando la compensacin al algoritmo de dibujo de lneas, cambiando el argumento de la funcin g l E n a b l e a G L _ P O L Y G O N _ O F F S E T _ L I N E . En este caso, queremos utilizar factores negativos para acercar los valores de profundidad de las aristas. Si slo quisiramos mostrar puntos de diferentes colores en las posiciones de los vrtices, en lugar de realzar las aristas, el argumento de la funcin g l E n a b l e debera ser G L _ P O L Y G O N _ O F F S E T _
POINT.
Otro mtodo para eliminar el efecto de costura a lo largo de las aristas de un polgono consiste en utilizar el bfer de patrones de OpenGL, con el rln de limitar el relleno interior del polgono de modo que ste no se superponga con las aristas. Pero esta tcnica es ms complicada y generalmente ms lenta, por lo que se prefiere el mtodo de compensacin de profundidad de polgonas. Para visualizar un polgono cncavo utilizando las subrutinas de OpenGL, debemos en primer lugar dividirlo en un conjunto de polgonos convexos. Habitualmente, dividimos un polgono en un conjunto de tringulos, utilizando los mtodos descritos en el Seccin 3.15. Despus podramos visualizar el polgono cncavo como una regin rellena, rellenando los tringulos. De modo similar, si queremos mostrar nicamente los vrtices del polgono, dibujamos los vrtices de los tringulos. Pero, para visualizar el polgono cncavo original en su forma almbrica, no podemos cambiar slo el modo de visualizacin a G L _ L I N E , porque esto mostrara todas las aristas de los tringulos que son interiores al polgono cncavo original (Figura 4.33). Afortunadamente, OpenGL proporciona un mecanismo que permite eliminar de una visualizacin en forma de almbrica una serie de aristas seleccionadas. Cada vrtice del polgono se almacena con una bandeC/fajg) de un bit que indica si este vrtice est o no no conectado al siguiente vrtice mediante una arista del contorno. Por tanto, todo lo que necesitamos hacer es cambiar esta bandera de un bit a desactivada y la arista que sigue a dicho vrtice no se visualizar. Establecemos esta bandera para una arista con la siguiente funcin.
ra
glEdgeFlag
(flag);
Para indicar que dicho vrtice no precede a una arista del contomo, asignamos la constante de OpenGL G L _ F A L S E al argumento f l a g . Esto se aplica a todos los vrtices que se especifiquen posteriormente hasta
FIGURA 4.33. La divisin de un polgono cncavo (a) en un conjunto de tringulos (b) produce aristas de tringulos (con lneas discontinuas) que son interiores al polgono original.
216
CAPTULO 4
FIGURA 4.34. El tringulo (a) se puede visualizar como aparece en (b) cambiando la bandera de la arista del vrtice v2 al valor G L _ F A L S E , asumiendo que los vrtices se especifican en sentido contrario a las agujas del reloj. que se haga otra llamada a g l E d g e F l a g . La constante de OpenGL G L _ T R U E activa de nuevo la bandera de la arista, el cual es su estado predeterminado. La funcin g l E d g e F l a g se puede situar entre pares g l B e g i n / g l E n d . Para mostrar el uso de una bandera de arista, el cdigo siguiente muestra slo dos aristas del tringulo definido (Figura 4.34).
glPolygonMode glBegin (GL_FRONT_AND_BACK, G L _ L I N E ) ;
Las banderas de las aristas de los polgonos tambin se pueden especificar en un vector que se podra combinar o asociar a un vector de vrtices (Secciones 3.17 y 4.3). Las lneas de cdigo para crear un vector de banderas de aristas son:
glEnableClientState glEdgeFlagPointer {GL_EDGE__FLAG_ARRAY) ; (offset, e d g e F l a g A r r a y ) ,-
El argumento o f f s e t indica el nmero de bytes entre los valores de las banderas de las aristas en el vector e d g e F l a g A r r a y . El valor predeterminado del argumento o f f s e t es 0.
Si cambiamos el argumento v e r t e x O r d e r a la constante de OpenGL G L _ c w , un polgono definido a continuacin con una ordenacin de sus vrtices en el sentido de las agujas del reloj se considera que es de cara frontal. Esta caracterstica de OpenGL se puede utilizar para intercambiar las caras de un polgono, en el que hayamos especificado sus vrtices en el orden correspondiente al sentido horario. La constante GL_CCW etiqueta una ordenacin de los vrtices en sentido contrario a las agujas del reloj como de cara frontal, que es la ordenacin predeterminada.
217
A veces, el tamao del texto se ajusta sin cambiar la relacin ancho-altura de los caracteres. La Figura 4.36 muestra una cadena de caracteres con tres alturas diferentes de caracteres, manteniendo la relacin anchoaltura. En la Figura 4.37 se muestran ejemplos de texto con una altura constante y un ancho variable. El espaciado entre caracteres es otro atribulo que a menudo se puede asignar a una cadena de caracteres. La Figura 4.38 muestra una cadena de caracteres con lies configuraciones diferentes para el espaciado entre caracteres.
Kern
218
CAPTULO 4
Altura 1
M i
Altura
2
anchural.O a n c h u r a 2 . 0
Altura 3
FIGURA 4.36. Cadenas de caracteres visualizadas con diferentes configuraciones de altura de cuerpo y con una relacin ancho-altura constante.
E s p a c i a d o
FIGURA 4.37. Cadenas de caracteres visualizadas con tamaos que varan segn el ancho del carcter pero no segn su altura.
FIGURA 4.38. Cadenas de caracteres con diferentes valores de espaciado entre caracteres.
i
E X T O TEXTO HORIZONTAL V E R T I A L
Vector ascendente (a) FIGURA 4.39. Direccin del vector que apunta hacia arriba (a) que controla la orientacin del texto mostrado (b).
FIGURA 4.40. Los atributos de la trayectoria del texto se pueden cambiar para producir disposiciones horizontales o verticales de cadenas de caracteres.
La orientacin de una cadena de caracteres se puede establecer segn la direccin de un vector de orientacin de caracteres. El texto se visualiza de modo que la orientacin de los caracteres desde la lnea base hasta la lnea de tapa est en la direccin del vector de orientacin de caracteres. Por ejemplo, con la direccin del vector de orientacin de caracteres a 45, el texto se visualizara como se muestra en la Figura 4.39. Un procedimiento para orientar texto podra rotar caracteres para que los lados de los cuerpos de los caracteres, desde la lnea base hasta la lnea de tapa, estn alineados con el vector de orientacin de caracteres. Las formas de los caracteres rotados se convierten por barrido en el bfer de imagen. Es til en muchas aplicaciones poder disponer cadenas de caracteres vertical u horizontalmente. En la Figura 4.40 se muestran ejemplos de esto. Tambin podramos disponer los caracteres de una cadena para que se leyese hacia la izquierda o la derecha, o hacia arriba o hacia abajo. En la Figura 4.41 se muestran ejemplos de texto con estas opciones. Un procedimiento para implementar la orientacin de la trayectoria del texto, ajusta la posicin de los caracteres individuales en el bfer de imagen segn la opcin seleccionada. Las cadenas de caracteres tambin se pueden orientar utilizando una combinacin de las especificaciones del vector de orientacin de caracteres y de la trayectoria del texto, para producir texto inclinado. La Figura 4.42 muestra las direcciones de cadenas de caracteres generadas con varias configuraciones de trayectoria de texto y un vector de orientacin de caracteres de 45. En la Figura 4.43 se muestran ejemplos de cadenas de caracteres generadas con valores abajo y derecha de la trayectoria del texto y con este vector de orientacin de caracteres. Otro posible atributo de las cadenas de caracteres es la alineacin. Este atributo especifica cmo se ha de visualizar el texto respecto a una posicin de referencia. Por ejemplo, los caracteres individuales se podran alinear segn las lneas de base o el centro de los caracteres. La Figura 4.44 muestra las posiciones tpicas de
219
anedflc
cadena
S
4.
X
-- Superior - - Tupa Media - Base - Interior Derecha
FIGURA 4.41. Una cadena de caracteres visualizada con las cuatro opciones de trayectoria de texto: izquierda, derecha, arriba y abajo.
FIGURA 4.42. Una especificacin de vector de orientacin de caracteres (a) y sus direcciones asociadas de la trayectoria del texto (b).
CADENA
Izquierda
Ceniro
4/7
-- Superior -- Tapa
- Base -fe
< \
(b)
Centro
FIGURA 4.43. El vector de orientacin de caracteres de 45 de la Figura 4.42 produce la representacin (a) para una trayectoria hacia abajo y la representacin (b) para una trayectoria hacia la derecha.
220
CAPTULO 4
E
I C o
A R N
A L
ALIENACIN CENTRADA
I I
N N E F AI C R I I O N R
FIGURA 4.45.
Alineaciones
de cadenas de caracteres,
ALINEACIN IZQUIERDA
los caracteres para alineaciones horizontales y verticales. Tambin son posibles las alineaciones de las cadenas de caracteres. La Figura 4.45 muestra posiciones de alineacin comunes para etiquetas de texto horizontales y verticales. En algunos paquetes grllcos, tambin se encuentra disponible el atributo de precisin de texto. Este parmetro especifica la cantidad de detalle y las opciones de proceso particulares que se han de utilizar con una cadena de texto. Para una cadena de texto de baja precisin, muchos atribuios, tales como la trayectoria del texto se ignoran, y se utilizan procedimientos ms rpidos para procesar los caracteres a travs de la pipeline de visualizacin. Finalmente, una biblioteca de subrutinas de procesamiento de texto suministra a menudo un conjunto de caracteres especiales, tales como un pequeo crculo o una cruz, que son tiles en diversas aplicaciones. Estos caracteres se utilizan ms a menudo como smbolos de marcacin en esquemas de redes o en conjuntos de graficacin de datos. Los atributos de estos smbolos de marcacin son habittialmente el color y el tamao.
4.17 SUAVIZADO
Los segmentos de lnea y otras primitivas grficas generadas por algoritmos de barrido estudiadas en el Capitulo 3 tienen una apariencia dentada o de peldao de escalera, porque el proceso de muestren digitaliza
los puntos de coordenadas de un objeto en posiciones de pxel enteras y discretas. Esta distorsin de la informacin debida al muestrco de baja frecuencia (submuestreo) se denomina uliasing. Podemos mejorar la apariencia de las lneas digitalizadas mostradas aplicando mtodos de suavizado (analiasing) que compensen el proceso de submuestreo. En la Figura 4.46 se muestra un ejemplo de los efectos del submuestreo. Para evitar perder informacin en tales objetos peridicos, necesitamos cambiar la frecuencia de muestro a al menos dos veces la mayor frecuencia del objeto, que se denomina frecuencia de muestreo de Nyquist (o velocidad de muestreo de Nyquist):
y
Otro modo de manifestar esto consiste en que el intervalo de muestreo debera ser no mayor que la mitad del intervalo de ciclo (llamado intervalo de muestreo de Nyquist). Para un intervalo de muestreo segn el eje x, el intervalo de muestreo de Nyquist Ax es:
s
Ax
Mm
2
donde A x = l/fw En la Figura 4.46, el intervalo de muestreo es una vez y media el intervalo de ciclo, por lo que el intervalo de muestreo es al menos tres veces demasiado grande. Si queremos recuperar toda la informacin del objeto de este ejemplo, necesitamos reducir el intervalo de muestreo a un tercio del tamao mostrado en la figura.
cido
Un modo de incrementar la velocidad de muestreo en sistemas digitalizados consiste, simplemente, en mostrar los objetos con una resolucin ms alta. Pero incluso a la resolucin ms alta posible con la tecnologa actual, aparecer algn grado de dentado. Hay otro lmite que viene dado por el tamao mximo del bfer de imagen con el que se puede mantener una velocidad de refresco de 60 cuadros o ms por segundo. Adems, para representar objetos de forma precisa con parmetros continuos, necesitaramos intervalos de muestreo arbitrariamente pequeos. Por tanto, a menos que se desarrolle tecnologa hardware para manejar bferes de imagen arbitrariamente grandes, incrementar la resolucin de la pantalla no es una solucin completa para el problema del escalonamiento (aliasing). En sistemas digitalizados que son capaces de visualizar ms de dos niveles de intensidad por color, podemos aplicar mtodos de suavizado para modificar las intensidades de los pxeles. Variando adecuadamente las intensidades de los pxeles a lo largo de los lmites de las primitivas, podemos suavizar las aristas para reducir su apariencia dentada. Un mtodo de suavizado directo consiste en incrementar el perodo de muestreo, tratando la pantalla como si estuviese cubierta con una cuadrcula ms fina que la disponible realmente. Podemos utilizar entonces mltiples puntos de muestreo a travs de esta cuadrcula ms fina para determinar un nivel de intensidad adecuado para cada pxel de la pantalla. Esta tcnica de muestreo de las caractersticas de un objeto con una resolucin alta y visualizacin de los resultados con una resolucin ms baja se denomina supermuestreo (o posfiltrado, ya que el mtodo implica el clculo de las intensidades en las posiciones de la cuadrcula de subpixeles, para despus combinar los resultados y obtener las intensidades de los pxeles). Las posiciones de los pxeles visualizados son manchas de luz que cubren un rea finita de la pantalla, y no puntos matemticos infinitesimales. Pero en los algoritmos de lneas y de relleno de reas que hemos estudiado, la intensidad de cada pxel se determina mediante la localizacin de un nico punto en los lmites del objeto. Mediante supermuestreo, obtenemos informacin de intensidad de mltiples puntos que contribuyen a la intensidad global de un pxel. Una alternativa al supermuestreo es determinar la intensidad del pxel calculando las reas de superposicin de cada pxel con los objetos que se van a mostrar. El suavizado mediante el clculo de las reas de superposicin se denomina muestreo de reas (o prefilirado, ya que la intensidad del pxel como un todo se determina sin calcular intensidades de subpxel). Las reas de superposicin de los pxeles se obtienen determinando dnde los lmites de los objetos intersectan con las fronteras de los pixeles individuales.
222
FIGURA 4.46. El muesireo de la forma peridica (a) en las posiciones indicadas produce la representacin (b) de baja frecuencia y escalonada (con a/iasing). Los objetos digitalizados tambin se pueden suavizar cambiando la ubicacin de visualizacin de las reas de pxeles. Esta tcnica, denominada puesta en fase de los pxeles (ppcel phasing), se aplica microposicionando el haz de electrones en relacin con la geometra del objeto. Por ejemplo, las posiciones de los pxeles a lo largo de un segmento de linea recta se pueden acercar a la trayectoria de la lnea definida para suavizar el efecto de peldao de escalera de la digitalizacin.
4.17 Suavizado
223
FIGURA 4.47. Supermuestreo de posiciones de subpxeles a lo largo de un segmento de lnea recta cuyo extremo izquierdo est en las coordenadas de pantalla (10. 20).
FIGURA 4.48. Supermuestreo de posiciones de subpxeles en relacin con el interior de una lnea de ancho finito.
color de pxel. Por ejemplo, si cinco subpxeles dentro de un rea de pxel concreto se encuentran dentro de los lmites de una lnea de color rojo y los cuatro restantes pxeles se encuentran dentro de un rea de fondo a/ul, podemos calcular el color de este pxel del siguiente modo: ,
x e l
(5-rojo + 4-azul)
P' c.x =
La desventaja del supermuestreo de una lnea de ancho finito es que la identificacin de los subpxeles interiores requiere ms clculos que la simple determinacin de qu subpxeles se encuentran a lo largo de la trayectoria de la linea. Tambin, necesitamos tener en cuenta el posicionamiento de los lmites de la linca en relacin con la trayectoria de la misma. Este posicionamiento depende de la pendiente de la lnea. Para una lnea con pendiente de 4 5 ' , la trayectoria de la lnea est centrada en el rea del polgono; pero para una lnea horizontal o vertical, es deseable que la trayectoria de la lnea sea tinos de los lmites del polgono. A modo de ejemplo, una lnea horizontal que pase a travs de las coordenadas de la cuadricula (10,20) se podra representar como un polgono limitado por las lneas horizontales de la cuadrcula y = 20 ey = 21. De forma similar, el polgono que representa una lnea vertical a travs de (10, 20) puede tener sus lmites verticales en las lneas de la cuadrcula x = 10 y x = 11. En el caso de que la pendiente de la lnea sea \m\<\, la trayectoria de la lnea matemtica se posiciona proporcionalmente ms cerca del lmite inferior del polgono; y en el caso de que la pendiente sea |w|>l, la trayectoria de la lnea se sita ms cerca del limite superior del polgono.
224
CAPTULO 4
te para incluir las contribuciones de los subpxeles pertenecientes a los pxeles vecinos, con el fin de que las intensidades se puedan promediar con los pxeles adyacentes para proporcionar una variacin de intensidad ms suave entre pxeles.
Tcnicas de filtrado
Un mtodo ms preciso para suavizar lneas consiste en usar tcnicas de filtrado. El mtodo es similar a aplicar una mscara de pesos de pxeles, pero ahora se utiliza una superficie de pesos (o funcin de filtrado) con1 2 1
Filtro de c u b o (a)
Filtro de c o n o (b)
FIGURA 4.50. Funciones de filtrado que se usan habitualmente para suavizar las trayectorias de las lneas. Fl volumen de cada filtro est normalizado al valor 1. La altura proporciona el peso relativo de cada posicin de subpxel.
4.17 Suavizado 2 2 5
(intu que cubre el pxel. La Figura 4.50 muestra ejemplos de funciones de filtrado rectangulares, cnicas y gaussianas. Los mtodos de aplicacin de la funcin de filtrado son similares a los empicados en la mscara de pesos, pero ahora integramos sobre la superficie del pxcl para obtener la intensidad promedio ponderada. Para reducir los clculos, se utilizan habittalmentc tablas de bsqueda para evaluar las integrales.
*
(al
(b)
FIGURA 4.51. Las lneas dentadas (a), dibujadas en un sistema Mcrln 92(10, se suavizan (b) con una tcnica de suavizado llamada ajuste de fase de los pxeles. Esta tcnica incrementa el nmero de puntos que puede tratar el sistema de 768
226
FIGURA 4.52. Lneas de diferente longitud dibujadas con el mismo nmero de pixeles en cada lnea. tena una longitud de 10 centmetros, la lnea diagonal tendra una longitud de ms de 14 centmetros. El efecto visual de esto es que la lnea diagonal aparece menos brillante que la lnea horizontal, ya que la lnea diagonal se muestra con una menor intensidad por unidad de longitud. El algoritmo de dibujo de lneas se podra adaptar para compensar este efecto ajustando la intensidad de cada lnea segn su pendiente. Las lneas horizontales y verticales se mostraran con la menor intensidad, mientras que a las lneas a 45 se las dotara de la intensidad ms elevada. Pero si se aplican tcnicas de suavizado a una visual i/acin, las intensidades se compensan automticamente. Cuando el ancho finito de una lnea se tiene en consideracin, las intensidades de los pixeles se ajustan para que la lnea se muestre con una intensidad total proporcional a su longitud.
1 1
h i i i
1 1 1
i
1 i 1
1
I
1
>+ l
-
1 1
i i l
"
1 ,
l
1
i
_ -
1 T 1
i
"
1 1 _ _ 1 1 .i I
i
R
_ J _
1
-L_-
X I
1
i
1
~
i
1 1 1
1
_l_
1
1 1
i
+ 1
i
1
i
FIGURA4.53. Ajuste de las intensidades de los pixeles a lo largo del lmite de un rea.
FIGURA 4.54. Seccin de pixeles 4 por 4 de una pantalla digitalizada subdividida en una cuadrcula de 8 por 8.
4.17 Suavizado
227
y - mx + b
1 !_
f
1 rea de pxeles subdividida
FIGURA 4.55. Un arca de pxeles subdividida con tres subdivisiones dentro de la lnea de frontera de un objeto.
FIGURA 4.56. Borde de un rea de relleno que pasa a travs de una seccin de una cuadrcula de pxeles.
Los mtodos de supermuestreo se pueden aplicar determinando el nmero de subpixeles que se encuentran en el interior de un objeto. En la Figura 4.54 se muestra un esquema de particionamiento con cuatro subreas por pxel. La cuadrcula original de 4 por 4 pixeles se transforma en una cuadrcula de 8 por 8. Ahora procesamos ocho lneas de barrido a travs de esta cuadrcula en lugar de cuatro. La Figura 4.55 muestra una de la reas de los pxeles de esta cuadrcula que se superpone con el lmite de un objeto. Con estas dos lneas de barrido, determinamos qu tres reas de subpixeles se encuentran dentro del lmite de la superficie. Por tanto, establecemos la intensidad del pxel al 75% de su valor mximo. Otro mtodo para determinar el porcentaje del rea de pxel dentro un rea de relleno, desarrollado por Pitteway y Watkinson, se basa en el algoritmo de la lnea del punto medio. Este algoritmo selecciona el pxel siguiente a lo largo de una lnea comprobando la situacin de la posicin media entre dos pxeles. Como en el algoritmo de Bresenham, establecemos un parmetro de decisin p cuyo signo indica cul de los dos pxeles candidatos siguientes est ms cerca ce la lnea. Modificando ligeramente la forma de p, obtenemos una cantidad que tambin proporciona el porcentaje del rea actual de pxel que est cubierta por un objeto. En primer lugar, consideramos el mtodo para una lnea con una pendiente m dentro del rango que vara entre 0 y 1. En la Figura 4.56, se muestra una trayectoria de lnea recta en una cuadrcula de pxeles. Asumiendo que se ha dibujado el pxel de la posicin (x y ), el siguiente pxel ms cercano a la lnea en x = x +1 es el pxel en v< o en y + I. Podemos determinar qu pxel es el ms cercano con el clculo:
k9 k k k
y ~y =
m
+ 1) + 1 - Cv* +0-5)
(4.14)
Este clculo proporciona la distancia vertical desde la verdadera coordenada y de la lnea al punto intermedio entre los pxeles de la posiciones y cy + 1. Si esta diferencia es negativa, el pxel y es ms cercano a la lnea. Si la diferencia es positiva, el pxel y + I es ms cercano. Podemos ajustar este clculo para que produzca un nmero positivo dentro del rango que vara desde 0 a I aadiendo la cantidad 1 - m:
k k k k
(4.15)
Ahora el pxel en y es ms cercano si p < I m, y el pxel en y + 1 es ms cercano si p > I El parmetro p tambin mide la cantidad del pxel actual que se superpome con el rea. Para el pxel de posicin y ) de la Figura 4.57, la parte interior del pxel tiene un rea que se puede calcular del siguiente modo
k
rea - m x + b - y + 0.5
k k h k
(4.16)
Esta expresin del rea de superposicin del pxel de la posicin (x y ) es la misma del parmetro p de la Ecuacin 4.15. Por tanto, evaluando p para determinar la posicin del pxel siguiente a lo largo del contorno del polgono, tambin determinamos el porcentaje del rea cubierta del pxel actual. Podemos generalizar este algoritmo para tener en cuenta las lneas con pendientes negativas y las lneas con pendientes mayores que 1. Este clculo del parmetro p se podra entonces incorporar al algoritmo de la
228
FIGURA4.57. rea de superposicin de un pxel rectangular, centrado en la posicin (x y ), con el interior del rea de relleno de un polgono.
ky k
FIGURA 4.58. Polgonos con ms de una lnea de su contorno que pasa a travs de regiones de pxeles individuales.
lnea de punto medio, para localizar las posiciones de los pxeles a lo largo de la arista del polgono y, de forma concurrente, ajustar las intensidades de los pxeles a lo largo de las lneas del contorno. Tambin, podemos ajustar los clculos para referenciar las coordenadas de los pxeles de coordenadas ms bajas de la parte izquierda y mantener las proporciones del rea, como se estudi en el Seccin 3.13. En los vrtices del polgono y para muchos polgonos estrechos, como los mostrados en la Figura 4.58, tenemos ms de una arista del contorno que pasa a travs del rea de un pxel. En estos casos, necesitamos modificar el algoritmo de Pitteway-Watkinson procesando todas las aristas que pasan a travs de un pxel y determinando el rea interior correcta. Las tcnicas de filtrado estudiadas para el suavizado de lneas se pueden tambin aplicar a las aristas de un rea. Los variados mtodos de suavizado se pueden aplicar a reas de polgonos o a regiones con lmites curvos. Las ecuaciones que describen los lmites se utilizan para estimar la cantidad de pxel que se superpone con el rea a visualizar. Las tcnicas de coherencia se utilizan a lo largo y entre lneas de barrido para simplificar los clculos.
donde al argumento p r i m i t i v e T y p e se le asignan las constantes simblicas GL_POlNT_SMOOTH, G L _ L I N E _ SMOOTH o G L _ P O L Y G O N _ S M O O T H . Asumiendo que especificamos los valores de color utilizando el modo RGBA, tambin necesitamos activar las operaciones de fundido de color de OpenGL:
glEnable (GL_BLEND);
A continuacin, aplicamos el mtodo de fundido de color descrito en el Seccin 4.3 utilizando la funcin:
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SR.C_AL.PHA) ;
Las operaciones de suavizado son ms efectivas si utilizamos valores grandes de la componente alfa en las especificaciones de color de los objetos. El suavizado tambin se puede aplicar cuando utilizamos tablas de color. Sin embargo, en este modo de color, debemos crear una rampa de color, que es una tabla de gradacin del color desde el color de fondo hasta el color del objeto. Esta rampa de color se utiliza despus para suavizar los lmites del objeto.
229
En cada una de las funciones precedentes, especificamos dos argumentos. El primer argumento es una constante simblica de OpenGL que identifica un atributo o otro parmetro de estado. El segundo argumento es un puntero a una matriz del tipo de datos indicado por el nombre de la funcin. Por ejemplo, podemos obtener la configuracin del color RGBA en punto flotante actual con:
glGetFloatv (GL_CURRENT_COLOR, colorValues);
Las componentes de color actuales se pasan entonces a la matriz c o l o r V a l u e s . Para obtener los valores enteros de las componentes de color actuales, invocamos la funcin g l i n t e g e r v . En algunos casos, se puede necesitar una conversin de tipos para devolver el tipo de datos especificado. Otras constantes de OpenGL, tales como G L _ P O I N T _ S I Z E , G L _ L I N E _ W I D T H y G L _ C O R R E N T _ R A S T E R _ P O S I T I O N , se pueden utilizaren estas funciones para devolver los valores de estado actuales. Podramos comprobar el rango de los tamaos de los puntos o los anchos de las lneas permitidos utilizando las constantes GL_POINT _SIZE_RANGE y GL_LINE_WIDTH_RANGE. Aunque podemos obtener y reutilizar la configuracin de un nico atributo con las funciones g l G e t , OpenGL proporciona otras funciones para guardar grupos de atributos y reutilizar sus valores. Veremos el uso de estas funciones para guardar las configuraciones actuales de los atributos en la siguiente seccin. Hay muchas otros parmetros de estado y de sistema que son tiles a menudo para consulta. Por ejemplo, para determinar cuantos bits por pxel se proporcionan en el bfer de imagen en un sistema concreto, podemos preguntar al sistema cuntos bits hay disponibles para cada componente individual de color, del siguiente modo:
glGetlntegerv (GL_RED_BITS, redBitSize);
En esta instruccin, a la matriz r e d B i t S i z e se le asigna el nmero de bits de la componente roja disponibles en cada uno de los beres (bfer de imagen, bfer de profundidad, bfer de acumulacin y bfer de patrones). De forma similar, podemos preguntar por los otros bits de color utilizando G L _ G R E E N _ B I T S ,
GL_BLUE_BITS, G L _ A L P H A _ B I T S O GL_INDEX _BITS.
Tambin podemos conocer si se han establecido las banderas de las aristas, si una cara de un polgono se ha etiquetado como cara frontal o cara posterior, y si el sistema soporta doble bfer. Podemos preguntar si ciertas subrutinas, tales como las de fundido de color, punteado de lneas o suavizado, se han habilitado o deshabilitado.
230
CAPTULO 4
do de suavizado de los polgonos. Ya que el color es un atributo comn a todas las primitivas, ste tiene su propio grupo de atributos. Algunos parmetros se incluyen en ms de un grupo. Aproximadamente hay disponibles veinte grupos de atributos diferentes en OpenGL. Todos los parmetros de uno o ms grupos se pueden guardar o reestablecer (reset) con una nica funcin. Con el siguiente comando se guardan lodos los parmetros de un grupo especificado.
glPushAttrib (attrGroup);
Al parmetro a t t r G r o u p se le asigna una constante simblica de OpenGL que identifica el grupo de atributos, tal como G L _ P O l N T _ B I T , G L _ _ L I N E _ B I T o G L _ P 0 L Y G 0 N _ B I T . Para guardar los parmetros del color, utilizamos la constante simblica G L . _ C U R R E N T _ B I T . Podemos guardar todos los parmetros de estado de todos los grupos de atributos con la constante G L _ A L L _ A T T R I B _ B I T S . La funcin g l P u s h A t t r i b sita toilos los parmetros del grupo especificado en la pila de atributos. Tambin podemos guardar los parmetros de dos o ms grupos combinando sus constantes simblicas con la operacin lgica OR. La siguiente linea sita todos los parmetros de los puntos, las lneas y los polgonos en la pila de atributos.
glPushAttrib (GL_POINT_BIT | GLLINEBIT | GL_POLYGON_BIT);
Una vez que hemos guardado un grupo de parmetros de estado, podemos rehabilitar todos los valores de la pila de atributos con la funcin:
glPopAttrib ( ) ;
No se utilizan argumentos en la funcin g l F o p A t t r i b porque sta reestablece el estado actual de OpenGL utilizando todos los valores de la pila. Estos comandos para guardar y reestablecer los parmetros de estado utilizan un servidor de pila de atributos. En OpenGL, tambin hay disponible un cliente de pila de atributos para guardar y reestablecer los parmetros de estado del cliente. Las funciones de acceso a esta pila son g l P u s h C l i e n t A t t r i b y g l P o p C l i e n t A t t r i b . Slo hay disponibles dos grupos de atributos de cliente: uno para los modos de almacenamiento de pxel y el otro para las matrices de vrtices. Entre los parmetros de almacenamiento de pxel se incluye informacin tal como la alineacin de bytes y el tipo de matrices utilizadas para almacenar subimgenes de una pantalla. Los parmetros para las matrices de vrtices proporcionan informacin acerca del estado actual de las matrices de vrtices, tal como el estado habilitado/deshabililado de diversas matrices.
4.21 RESUMEN
Los atributos controlan las caractersticas de visualizacin de las primitivas grficas. En muchos sistemas grficos, los valores de los atributos se almacenan como variables de estado y las primitivas se generan utilizando los valores actuales de los atributos. Cuando cambiamos el valor de una variable de estado, este cambio slo afecta a las primitivas definidas despus de ste. Un atributo comn en todas primitivas es el color, que se especifica muy a menudo en trminos de componentes RGB (o RGBA). Los valores de color rojo, verde y azul se almacenan en el bfer de imagen, y se utilizan para controlar la intensidad de los tres caones de un monitor RGB. Las selecciones de color se pueden hacer tambin utilizando tablas de bsqueda de colores. En este caso, un color del bfer de imagen se indica como un ndice de una tabla, y la posicin de la tabla de dicho ndice almacena un conjunto concreto de valores de color RGB. Las tablas de color son tiles en la visualizacin de datos y en aplicaciones de procesamiento de imgenes, y tambin se pueden utilizar para propocionar un gran rango de colores sin que se requiera un gran bfer de imagen. A menudo, los paquetes de grficos por computadora proporcionan opciones para utilizar tablas o almacenar los valores de color directamente en el bfer de imagen. Los atributos bsicos de los puntos son el color y el tamao. En sistemas digitalizados, los diversos tamaos de los puntos se visualizan como matrices cuadradas de pxeles. Los atributos de las lineas son el color.
Resumen
231
el grosor y el estilo. Las especificaciones del grosor de una lnea se dan en trminos de mltiplos de una linea estndar de un pxel de grosor. Entre los atributos del estilo de las lneas se incluyen las lneas de trazo continuo, de tra^o discontinuo y de puntos, as como varios estilos de brochas y plumillas. Estos atributos se pueden aplicar tanto a lneas rectas como a lneas curvas. Entre los atributos de relleno de lneas se incluyen el relleno de color liso, el relleno con patrn o la visuali/acin hueca que slo muestra los lmites del rea. Se pueden especilicar varios patrones de relleno con matrices de color, que se mapean al interior de la regin. Los mtodos de lnea de barrido se utilizan habitualmente para rellenar polgonos, crculos 0 elipses. A travs de cada lnea de barrido se aplica el relleno interior a las posiciones de los pxeles entre cada par de intersecciones con los lmites, de izquierda a derecha. En el caso de los polgonos, las intersecciones de las lneas de barrido con los vrtices pueden producir un nmero impar de intersecciones. Esto se puede resolver acortando algunas aristas del polgono. Los algoritmos de relleno por lneas de barrido se pueden simplificar si las reas que se van a rellenar se restringen a polgonos convexos. Se puede lograr una mayor simplificacin si todas las reas que hay que rellenar de una escena son tringulos. A los pxeles interiores a lo largo de cada lnea de barrido se les asigna el valor de color adecuado, dependiendo de las especificaciones de los atributos de relleno. Generalmente, los programas de dibujo muestran las regiones rellenas empleando un mtodo de relleno por contorno o un mtodo de relleno por inundacin. Cada uno de estos dos mtodos de relleno requiere un punto interior de partida. El interior se pinta a continuacin pxel a pxel desde el punto inicial hasta los lmites de la regin. Las reas tambin se pueden rellenar utilizando tundido de color. Este tipo de relleno se aplica para el suavizado y en paquetes de dibujo. Los procedimientos de relleno suave proporcionan un nuevo color de relleno de una regin que tiene las mismas variaciones que el color de relleno previo. Un ejemplo de esta tcnica es el algoritmo de relleno suave lineal, que supone que el relleno previo era una combinacin lineal de los colores de primer plano y de fondo. Entonces se determina esta misma relacin lineal a partir de la configuracin del bfer de imagen y se utiliza para volver a pintar el rea con el nuevo color. Los caracteres se pueden visualizar con diferentes estilos (fuentes), colores, taanos, espaciados y orientaciones. Para cambiar la orientacin de una cadena de caracteres, podemos especificar una direccin para el vector de orientacin de caracteres y una direccin para la trayectoria del texto. Adems, podemos establecer la alineacin de una cadena de caracteres en relacin con una posicin de comienzo en coordenadas. Los caracteres individuales, llamados smbolos de marcacin, se pueden utilizar en aplicaciones tales como el dibujo de grficos de datos. Los smbolos de marcacin se pueden visualizar con varios tamaos y colores utilizando caracteres estndar o smbolos especiales. Ya que la conversin por lneas es un proceso de digitalizacin en sistemas digitales, las primitivas visualizadas poseen una apariencia dentada. Esto se debe al submuestreo de la informacin, que redondea los valores de las coordenadas a las posiciones de los pxeles. Podemos mejorar la apariencia de las primitivas de barrido aplicando procedimientos de suavizado (anialiasing), que ajusten las intensidades de los pxeles. Un mtodo para hacer esto es el supermueslreo. Es decir, consideramos que cada pxel est compuesto por subpixeles. calculamos la intensidad de los subpxeles y promediamos los valores de todos los subpxeles. Tambin podemos ponderar las contribuciones de los subpxeles segn su posicin, asignando pesos ms altos a los subpxeles centrales. De forma altenativa, podemos realizar un muestreo por rea y determinar el porcentaje del rea cubierta de un pxel de pantalla, para despus establecer la intensidad de pxel de forma proporcional a este porcentaje. Otro mtodo de suavizado consiste en construir configuraciones especiales de hardware que puedan modificar las posiciones de sus pxeles. En OpenGL, los valores de los atributos de las primitivas se almacenan en forma de variables de estado. Una configuracin de un atributo se utiliza en todas las primitivas definidas posteriormente hasta que se cambie el valor del atributo. El cambio del valor de un atribulo no afecta a las primitivas representadas anteriormente. Podemos especificar colores en OpenGL utilizando el modo de color RGB (RGBA) o el modo de color indexado, que utiliza los ndices de una labia de colores para seleccionar los colores. Tambin, podemos fundir los colores utilizando la componente de color alfa. Y podemos especificar valores en matrices de color que hay que usarlas junto con matrices de vectores. Adems del color, OpenGL proporciona funciones para seleccionar el tamao del punto, el grosor de las lneas, el estilo de las lneas y el estilo de relleno de polgonos
232
CAPTULO
convexos, as como funciones para visualizar las reas de relleno de polgonos como un conjunto de aristas o un conjunto de puntos en sus vrtices. Tambin podemos eliminar aristas de polgonos seleccionadas y podemos invertir la especificacin de las caras frontal y posterior. Podemos generar cadenas de texto en OpenGL utilizando mapas de bits o subrutinas que estn disponibles en GLUT. Entre los atributos que se pueden establecer para visualizar caracteres de GLUT se incluye el color, la fuente, el tamao, el espaciado, el grosor de las lneas y el tipo de lnea. La biblioteca OpenGL tambin proporciona funciones para suavizar la visualizacin de las primitivas de salida. Podemos utilizar funciones de consulta para obtener los valores actuales de las variables de estado y podemos tambin obtener todos los valores de un grupo de atributos de OpenGL utilizando una nica funcin. La Tabla 4.2 resume las funciones de atributos de OpenGL estudiadas en este captulo. Adems, la tabla enumera algunas funciones relacionadas con los atributos. TABLA 4 .2. RESUMEN DE LAS FUNCIONES DE LOS ATRIBUTOS DE OPENGL. Funcin
glutInitDisplayMode
Descripcin
Selecciona el m o d o de color, que puede ser GLUT__RGB o GLUT_INDEX.
glColor* glIndex*
glutSetColor glEnable
(index,
r,
g,
b) ;
glBlendFunc
Especifica los factores del fundido de color. Activa las caractersticas de matriz de color de OpenGL. Especifica una matriz de color R G B .
stride, (type,
array); stride, array); Especifica una matriz de color usando el m o d o de color indexado.
gllndexPointer
(size); (width);
Especifica un tamao de punto. Especifica un grosor de linca. Activa el estilo de las lneas. Activa el eslito de relleno. Especifica el patrn de estilo de lnea. Especifica el patrn de relleno. Muestra la cara frontal o la cara posterior c o m o un conjunto de aristas o como un conjunto de vrtices.
glLineStipple
glPolygonStipple glPolygonMode
(pattern);
glEdgeFlag
Establece la bandera de la arista del relleno de polgonos en el valor G L _ T R U E o G L _ F A L S E para determinar el estado de visualizacin de una arista.
glFrontFace
(Contina)
Ejercicios
233
TABLA 4 .2. RESUMEN DE LAS FUNCIONES DE LOS ATRIBUTOS DE OPENGL. (Conl.) Funcin
glEnable
Descripcin Activa el suavizado con GL_P0INT_SMOOTH, GL_LINE_SMOOTH. o GL_POLYGON_ SMOOTH. (Tambin se necesita activar el fundido de color.) Varias funciones de consulta, que requieren la especificacin del tipo de datos, el nombre simblico de un parmetro de estado y un puntero a una matriz. Guarda todos los parmetros de eslado de un grupo de atributos especificado.
;
glGet**
glPushAccrib
glPopAttrib
Rehabilita todos los valores de los parmetros de estado que se guardaron la ltima vez.
REFERENCIAS
Las tcnicas de relleno se muestran en Fishkin y Barsky (1984). Las tcnicas de suavizado se estudian en Pitteway y Watinson (1980), Crow (1981), Turkowski (1982), Fujimoto e Iwata (1983), Korein y Badler (1983). Kirk y Arvo (1991), y Wu (1991). Las aplicaciones de la escala de grises se muestran en Crow (1978). Otros estudios sobre los atributos y parmetros de estado se encuentran disponibles en Glassner (1990), Arvo (1991), Kirk (1992), Heckbert (1994) y Paeth (1995). Se pueden encontrar ejemplos de programacin utilizando las funciones de atributos de OpenGL en Woo, Neider, Davis y Shreiner (1999). Una lista completa de las funciones de atributos de OpenGL se encuentra disponible en Shreiner (2000). Los atributos de los caracteres de GLUT se estudian en Kilgard (1996).
EJERCICIOS
4.1 4.2 4.3 4.4 4.5 Utilice la funcin g l u t s e t c o l o r para establecer una tabla de color para un conjunto de enlrada de valores de color. Utilizando matrices de vrtices y de color, establezca la descripcin de una escena que contenga al menos seis objetos bidimensionales. Escriba un programa para visualizar la descripcin de la escena bidimensiona! del ejercicio anterior. Utilizando matrices de vrtices y de color, establezca la descripcin de una escena que contenga al menos cuatro objetos tridimensionales. Escriba un programa para visualizar una escena en escala de grises con nubes, en la que las formas de las nubes se deban describir como patrones de puntos sobre un fondo de cielo azul. Las regiones claras y oscuras de las nubes se deben modelar utilizando puntos de diversos tamaos y espaciado entre puntos. (Por ejemplo, una regin muy clara se puede modelar con puntos pequeos, ampliamente espaciados y de color gris claro. De forma similar, una regin oscura se puede modelar con punios grandes, ms prximos y de color gris oscuro.) Modifique el programa del ejercicio anterior para visualizar las nubes con patrones de color rojo y amarillo como podran verse al amanecer o al atardecer. Para lograr un electo realista, utilice diferentes tonos de rojo y amarillo (y tal vez verde) en los puntos. Implemente una funcin general de estilo de lnea modificando el algoritmo de dibujo de lineas de Bresenham para representar lneas continuas, a trazos o de puntos.
4.6
4.7
CAPTULO 4
Implemente una funcin de estilo de lnea utilizando un algoritmo de lnea de punto medio para representar lneas continuas, a trazos o de puntos. Idee un mtodo paralelo para implementar una funcin de estilo de linea. Idee un mtodo paralelo para implementar una funcin de grosor de lnea. Una linea especificada por dos puntos extremos y un grosor se puede convertir en un polgono rectangular con cuatro vrtices y, a continuacin, se puede visualizar utilizando un mtodo de lnea de barrido. Desarrolle un algoritmo eficiente para calcular con una computadora los cuatro vrtices que se necesitan para definir tal rectngulo, con los puntos extremos de la lnea y el grosor de la lnea como argumentos de entrada. Implemente una funcin de grosor de lnea de un programa de dibujo de lneas para que se pueda visualizar con uno de tres grosores de lnea. Escriba un programa para generar un grfico de lneas de tres conjuntos de datos definidos sobre el mismo rango de coordenadas del eje x. La entrada del programa la constituyen los tres conjuntos de datos y las etiquetas del grfico. Los conjuntos de datos se deben redimensionar para que queden ajustados dentro de un rango de coordenadas definido en la ventana de visualizacin. Cada conjunto de datos se debe dibujar con un estilo diferente de lnea. Modifique el programa del ejercicio anterior para dibujar los tres conjuntos de dalos con colores diferentes, as como con diferentes estilos de lnea. Establezca un algoritmo de visualizacin de lneas gruesas con extremos abruptos, redondeados o cuadrados. Estas opciones se pueden proporcionar con un men de opciones. Idee un algoritmo de visualizacin de polilneas gruesas con una unin en punta, una unin redondeada o una unin biselada. Estas opciones se pueden proporcionar con un men de opciones. Modifique los fragmentos de cdigo de la Seccin 4.8 para mostrar grficos de datos de lneas, para que el argumento de grosor de lnea se pase al procedimiento l i n e P l o t . Modifique los fragmentos de cdigo de la Seccin 4.8 para mostrar grficos de datos de lneas, para que el argumento de estilo de lnea se pase al procedimiento l i n e P l o t . Complete el programa de la Seccin 4.8 para mostrar grficos de lneas utilizando como datos de entrada los procedentes de un archivo de datos. Complete el programa de la Seccin 4.8 para mostrar grficos de lneas utilizando como datos de entrada los procedentes de un archivo de datos. Adems, el programa debe proporcionar etiquetado de los ejes y de las coordenadas del rea de visualizacin de la pantalla. Los conjuntos de datos se deben redimensionar para que se ajusten al rango de coordenadas de la ventana de visualizacin y cada lnea se debe mostrar con un estilo de linea, grosor y color diferentes. Implemente un men de opciones de plumilla y brocha para un procedimiento de dibujo de lneas, que incluya al menos dos opciones: forma redonda y forma cuadrada. Modifique un algoritmo de dibujo de lneas para que la intensidad de la lnea de salida se modifique segn su pendiente. Es decir, ajustando las intensidades de los pixclcs segn el valor de la pendiente; todas las lneas se visualizan con la misma intensidad por unidad de longitud. Defina e implemente una funcin para controter el estilo de lnea (continua, a trazos, de puntos) de las elipses que se representen. Defina e implemente una funcin para cambiar el grosor de las elipses que se representen. Escriba una siibrutina para mostrar un grfico de barras en un rea especificada de la pantalla. La entrada debe incluir el conjunto de daios, el etiquetado de los ejes de coordenadas y las coordenadas del rea de pantalla. El conjunto de datos se debe redimensionar para que se ajuste al rea designada de pantalla, y las barras se deben mostrar con los colores o patrones designados, Escriba un programa para mostrar dos conjuntos de datos definidos sobre el mismo rango de coordenadas del eje -v, con los valores de los datos cambiados de escala para que se ajusten a una regin especificada de la pantalla de visualizacin. Las barras de un conjunto de datos se deben desplazar horizontaimente para producir un patrn de superposicin de barra que facilite la comparacin de ios dos conjuntos de datos. Utilice un color o patrn de relleno diferente para los dos conjuntos de barras.
4.12 4.13
4.21 4.22
4.26
Ejercicios 4.27 4.28 Idee un algoritmo para mplementar una tabla de bsqueda de color.
235
Suponga que dispone de un sistema de pantalla de video de 8 pulgadas por 10 pulgadas que puede mostrar 100 pxeles por pulgada. Si se utiliza en este sistema una tabla de bsqueda de color con 64 posiciones, cul es el menor tamao posible (en bytes) del bfer de imagen? Considere un sistema digitalizado RGB que tiene un bfer de imagen de 512 por 512 pxeles con 20 bits por pxcl y una tabla de bsqueda de color con 24 bits por pxel. (a) Cuntos niveles de gris distintos se pueden visualizar en este sistema? (b) Cuntos colores distintos (incluidos los niveles de gris) se pueden visualizar? (c) Cuntos colores se pueden visualizar en cualquier momento? (d) Cul es el tamao total de la memoria? (e) Explique dos mtodos para reducir el tamao de la memoria manteniendo las mismas capacidades de color. Modifique el algoritmo de lneas de barrido para aplicar cualquier patrn de relleno rectangular especificado al interior de un polgono, comenzando por una posicin de patrn designada. Escriba un programa para convertir el interior de una elipse especificada en un color slido. Escriba un procedimiento para rellenar el interior de una elipse con un patrn especificado. Escriba un procedimiento para rellenar el interior de cualquier conjunto especificadc de vrtices de un rea de relleno, incluido uno que tenga aristas que se cruzan, utilizando la regla del nmero de vueltas distinto de cero para identificar las regiones interiores. Modifique el algoritmo de relleno por contorno para una regin 4-concctada para evitar un apilado excesivo incorporando mtodos de lnea de barrido. Escriba un procedimiento de relleno por contorno para rellenar una regin 8-coneclada. Explique cmo una elipse visualizada con el mtodo del punto medio se podra rellenar adecuadamente con un algoritmo de relleno por contomo. Desarrolle e implemento un algoritmo de relleno por inundacin para rellenar el interior de un rea especificada. Defina e implemerte un procedimiento para cambiar el tamao del patrn existente de relleno rectangular. Escriba un procedimiento para mplementar un algoritmo de relleno suave. Defina con cuidado qu debe realizar el algoritmo y cmo se deben combinar los colores. Idee un algoritmo par ajustar la altura y la anchura de los caracteres definidos como patrones de cuadrcula rectangular. Implcmcnte subrutinas para establecer el vector de orientacin de caracteres y la trayectoria del texto para controlar la visualizacin de cadenas de caracteres. Escriba un programa para alinear texto como se indique de acuerdo con los valores de entrada de los parmetros de alineacin. Desarrolle procedimientos para implementar atributos de marcadores (tamao y color). Implemente un precedimiento de suavizado ampliando el algoritmo de lnea de Bresenham, para ajustar las intensidades de los pxeles en la vecindad de la trayectoria de una lnea. Implemente un procedimiento de suavizado para el algoritmo de la lnea del punto medio. Desarrolle un algoritmo de suavizado para lmites elpticos. Modifique el algoritmo de lnea de barrido de relleno de reas para incorporar suavizaco. Utilice tcnicas de coherencia para reducir los clculos en las lneas sucesivas de barrido. Escriba un programa para implementar el algoritmo de suavizado de Pitteway-Watkirson como un procedimiento de lnea de barrido para rellenar el interior de un polgono, utilizando la funcin de dibujo de puntos de OpenGL.
4.29
4.34 4.35 4.36 4.37 4.38 4.39 4.40 4.41 4.42 4.43 4.44 4.45 4.46 4.47 4.48
CAPITULO
Transformaciones geomtricas
Una escena de grdeos por computadora que contiene una parte de un paisaje del Movimiento Browniano y el reflejo de la luna en el agua . {Cortesa de Ken Musgrave y Benoit B. Mandelbrot, Mathemates and Computer Seiende, Universidad de Yale).
Transformaciones geomtricas bidimensionales bsicas Representacin matricial y coordenadas homogneas Transformaciones inversas Transformaciones bidimensionales compuestas Otras transformaciones bidimensionales Mtodos de rasterizacin para transformaciones geomtricas Transformaciones de rasterizacin en OpenGL Transformaciones entre sistemas de coordenadas bidimensionales
5.9
5 . 1 0 Translaciones tridimensionales 5 . 1 1 Rotaciones tridimensionales 5 . 1 2 Escalado tridimensional 5 . 1 3 Transformaciones tridimensionales compuestas 5 . 1 4 Otras transformaciones tridimensionales 5 . 1 5 Transformaciones entre sistemas de coordenadas tridimensionales 5 . 1 6 Transformaciones afines 5 . 1 7 Eunciones de transformaciones geomtricas en OpenGL 5 . 1 8 Resumen
Hasta ahora, hemos visto cmo podemos describir una escena en trminos de primitivas grficas, tales como una lnea de segmentos y reas completas, y los atributos asociados a dichas primitivas. Y hemos explorado los algoritmos de rastreo de lneas para mostrar primitivas de salida en un dispositivo de rastreo. Ahora, echaremos un vistazo a las operaciones de transformacin que se pueden aplicar a objetos para recolocarlos o darlos un tamao diferente. Estas operaciones tambin son usadas en la visualizacin de rutinas que convierten una descripcin de una escena de coordenadas universales en un despliegue para un dispositivo de salida. Adems, son usados en variedad de otras aplicaciones, tales como diseo de ayuda y animacin por computador. Un arquitecto, por ejemplo, crea un esquema/plano ordenando la orientacin y el tamao de las partes que componen el diseo, y un animador por computadora desarrolla una secuencia de vdeo moviendo la posicin de la cmara o los objetos en la escena a lo largo de caminos especficos. Las operaciones que se aplican a descripciones geomtricas de un objeto para cambiar su posicin, orientacin o tamao se llaman transformaciones geomtricas. A veces las operaciones sobre transformaciones geomtricas tambin se llaman transformaciones de modelado, pero algunos paquetes grficos hacen distincin entre los dos trminos. En general, las transformaciones de modelado se usan para construir una escena o para dar una descripcin jerrquica de un objeto complejo que est compuesto por distintas partes, las cuales a su vez pueden estar compuestas por partes ms simples y as sucesivamente. Como ejemplo, un avin se compone de alas, cola, fuselaje, motor y otros componentes, cada uno de los cuales puede ser especificado en trminos de componentes de segundo nivel, y as sucesivamente, bajando en la jerarqua de partes de los componentes. De este modo, el avin puede ser descrito en trminos de dichos componentes y una transformacin de modelo asociado para cada uno que describe cmo ese componente va a encajar dentro del diseo total del avin. Las transformaciones geomtricas, por otro lado, pueden usarse para describir cmo los objetos deben moverse a lo largo de una escena durante una secuencia de animacin o simplemente, para verlos desde otro ngulo. Por tanto, algunos paquetes grficos ofrecen dos juegos de rutinas de transformacin, mientras otros paquetes tienen un nico juego de funciones que pueden ser usadas tanto por transformaciones geomtricas como por transformaciones de modelado.
5.1
Las funciones de transformaciones geomtricas que se pueden encontrar en todos los paquetes grficos, son aquellas que se usan para la traslacin, la rotacin y el cambio de escala. Otras rutinas de transformaciones tiles, que .i veces se incluyen en los paquetes, son Lis operaciones de reflexin e inclinacin Para introduc los conceptos generales asociados a las transformaciones geomtricas, se van a considerar en primer lugar, las operaciones en dos dimensiones, y despus se discutir cmo las ideas bsicas pueden extenderse a escenas tridimensionales. Una vez que se hayan comprendido los conceptos bsicos, se podrn escribir fcilmente rutinas para representar transformaciones geomtricas de objetos en escenas bidimensionales.
Traslaciones bidimensionales
Se realiza una t r a s l a c i n de un punto sencillo de coordenadas, mediante la inclusin de compensaciones en sus propias coordenadas, para generar una nueva posicin de coordenadas. En efecto, se est moviendo la posicin del punto original a lo largo de una trayectoria en lnea recta hacia su nueva localizacin. De modo similar, una traslacin es aplicable a un objeto que se define con mltiples posiciones de coordenadas, tales como cuadrilteros, mediante la recolocacin de todas las posiciones de sus coordenadas, usando el mismo desplazamiento a lo largo de trayectorias paralelas. As, el objeto completo se muestra en la nueva localizacin. Para trasladar una posicin bidimensional, aadimos d i s t a n c i a s de t r a s l a c i n t y t a las coordenadas originales (x, v) para obtener la nueva posicin de coordenadas (x\y*) como se muestra en la Figura 5.1.
K
x
1
1
=x + t .
x
(5.1)
llama \ c c t o r de t r a s l a c i n o v e c t o r di' c a m b i o
Podemos expresar las Ecuaciones de traslacin 5.1 como una nica ecuacin de una matriz, usando los siguientes vectores columna para representar posiciones de coordenadas y el vector de traslacin.
X
r ~1
,
(5.2) T=
'v
f i
Esto nos permite escribir las ecuaciones de traslacin bidimensionales en forma de matriz.
P - P+T
(5.3)
La traslacin es un tipo de transformacin de slido-rgido que mueve objetos sin deformarlos. Esto es, cada punto de un objeto es trasladado en la misma medida. Un segmento en lnea recta es trasladado mediarte la aplicacin de una ecuacin de transformacin a cada uno de los puntos finales de la lnea y redibujando la linea entre los dos nuevos puntos luales. Un polgono se traslada de forma similar. Se aade un vector de
FIGURA 5.1. Traslacin de un punto desde la posicin P a la posicin P' usando un vector de traslacin T.
239
0 +
5 -
i t i t | i i * i | i t t i
ni
15
(a)
1 l l t | i > l i | i i i l ( l i i < (
10 (b)
15
20 A
FIGURA 5.2. Movimiento de un polgono desde la posicin (a) a la posicin (b) con el vector de traslacin (-5.50, 3.75).
traslacin a la posicin de las coordenadas para cada vrtice y despus se regenera el polgono usando un nuevo conjunto de coordenadas de vrtices. La Figura 5.2 ilustra la aplicacin del vector de traslacin especificado para mover un objeto de una posicin a otra. La siguiente rutina ilustra las operaciones de traslacin. Un vector de traslacin de entrada se usa para mover los vrtices de un polgono desde una posicin de un universo de coordenadas a otro, y las rutinas de OpenGL se usan para regenerar el polgono trasladado.
class
wcPt2D GLfloat
{ x, y;
public:
void
translatePolygon k;
(wcPC2D
verts,
GLint
nVerts,
GLfloat
tx,
GLfloat
ty)
i
GLint for tk = 0; verts verts k < nVerte; verts verts k+ + ) [k] . x { + tx; ty; tk] . x [k].y
[k].y +
I
glBegin for glEnd ( GL_POLYGON>; (k = 0; ) ; k < nVerts; k++) verts [k].y); glVertex2f (verts [k].x,
Si se desea borrar el polgono original, se puede mostrar con un color de fondo antes de trasladarlo. En algunos paquetes grficos hay disponibles otros mtodos para borrar componentes de dibujo. Tambin, si se desea guardar la posicin del polgono original, se pueden almacenar las posiciones trasladadas en un registro diferente.
240
CAPTULO 5
Transformaciones geomtricas
Para trasladar otros objetos se usan mtodos similares. Para cambiar la posicin de un crculo o una elipse, se puede trasladar el centro de coordenadas y redibujar la figura en la nueva localizacin. Para una curva splne* se trasladan los puntos que definen la trayectoria de la curva y despus se reconstruyen las secciones de la curva entre las nuevas posiciones de coordenadas.
Rotaciones bidimensionales
Se genera una transformacin de rotacin de un objeto mediante la especificacin de un eje de rotacin y un ngulo de rotacin. Iodos los puntos del objeto son entonces transformados a la nueva posicin, mediante la rotacin de puntos con el ngulo especificado sobre el eje de rotacin. Una rotacin bidimcnsionul de un objeto se obtiene mediante la recolocacin del objeto a lo largo de una trayectoria circular sobre el plano xy. En este caso, se est rotando el objeto sobre un eje de rotacin que es perpendicular al plano (paralelo al eje de coordenadas z). Los parmetros para la rotacin bidimensional son el ngulo de rotacin 0, y una posicin (x y ) llamada puni de rotacin (o punto de pivote) sobre los cuales el objeto va a ser rotado (Figura 5.3). El punto de pivote es la posicin de interseccin entre el eje de coordenadas y el plano xy. Un valor positivo para el ngulo 0 define una rotacin en sentido contrario a las agujas del reloj sobre el punto de pivote, como en la Figura 5.3, y un valor negativo rota objetos en el sentido de las agujas del reloj. Para simplificar la explicacin del mtodo bsico, primero hay que determinar las ecuaciones de transformacin para la rotacin de un punto de posicin l\ cuando el punto de pivote est en el origen de coordenadas. La relacin entre el angular y las coordenadas de las posiciones originales y transformadas se muestra en la Figura 5.4. En esta figura, r es la distancia constante del punto respecto del origen, el ngulo ij> es la posicin angular original del punto desde la horizontal, y Oes el ngulo de rotacin. Usando identidades trigonomtricas estndar, podemos expresar las coordenadas transformadas en funcin de los ngulos d y ^ c o m o :
r> r
x'= r e o s
(0+
6)
= rcos0cos0-rsin<frsin# (5.4)
y'= r sin ((> + 0) - r cos0 s i n # - / sin0 COS0 Las coordenadas originales del punto en coordenadas polares son:
x = r C O S 0 , y = r SI10
(5.5)
Sustituyendo las expresiones de 5.5 en la Ecuacin 5.4, obtenemos las ecuaciones de transformacin para rotar la posicin de un punto (v. v) aplicando un ngulo 6 sobre el origen:
X' = X C O S 0 - . V N n0
(5.6)
FIGURA 5.3.
FIGURA5.4. Rotacin de un puni desde la posicin (v, y) a la posicin (x'. y') un ngulo 6 respecto del origen de coordenadas. El desplazamiento angular original del punto respecto del eje x es 0.
FIGURA 5.5. Roiacin de un puni desde la posicin (v, i) a la posicin (.v*. v') un ngulo 0 respecto al puni de rotacin (.v ,y ).
r r
Con las representaciones del vector columna 5.2, para posiciones de coordenadas, podemos escribir las ecuaciones de rotacin en forma de matriz
P'= R P
donde la matriz de rotacin es:
K
eos 0 sin 6
sin ^ eos 6
Una representacin del vector columna para una posicin de coordenadas P como en las Ecuaciones 5.2, es una notacin matemtica estndar. En cualquier caso, los primeros sistemas grficos a veces usaban una representacin de vector-Illa para posiciones de puntos. Lslo cambia el orden en el que la matriz de multiplicacin para una rotacin sera representada. Pero ahora, todos los paquetes grficos como OpenGL, Java, PH1GS y GKS siguen los convenios del estndar vector-columna. La rotacin de un punto sobre una posicin de pivote arbitraria se ilustra en la Figura 5.5. Usando las relaciones trigonomtricas indicadas por los dos tringulos rectngulos de esta figura, se pueden generalizar las Ecuaciones 5.6 para obtener las ecuaciones de transformacin para la rotacin de un punto sobre cualquier posicin de rotacin especfica ( . v , . , y ):
r
( A - . v , } s i n n 0'
v',,)eosf?
Estas ecuaciones de rotacin generales difieren de las Ecuaciones 5.6, por la inclusin de trminos aditivos, as como factores multiplicativos en los valores de coordenadas. La expresin de la matriz 5.7 puede modificarse para incluir las coordenadas pivote aadiendo la matriz de vector columna, cuyos elementos conlienen los trminos aditivos (traslacionales) de las Ecuaciones 5.9. De todos modos, hay mejores maneras de formular dichas ecuaciones matriciales, por lo que en la Seccin 5.2 se expone un esquema ms consistente para representar ecuaciones de transformacin. Al igual que con las traslaciones, las rotaciones son transformaciones de slido-rgido que mueven objetos sin deformarlos. Cada punto de un objeto se rota un mismo ngulo. Un segmento en lnea recta se rota mediante la aplicacin de las ecuaciones de rotacin 5.9 a cada uno de sus puntos finales o extremos y redibujando luego la lnea entre los nuevos extremos. Un polgono se rola desplazando cada uno de sus vrtices usando el ngulo de rotacin especificado y despus regenerando el polgono usando los nuevos vrtices. Rotamos una curva reposicionando los puntos de definicin para la curva y redibujndola despus. Un crculo o una elipse, por ejemplo, pueden rotarse sobre un punto de pivote no centrado, moviendo la posicin del centro a travs del arco que sustenta el ngulo de rotacin especificado. Y podemos rotar una elipse sobre su propio centro de coordenadas, sencillamente rotando el eje mayor y el eje menor. En el siguiente cdigo de ejemplo, se rota un polgono sobre un punto de pivote de un universo de coordenadas especificado. Los parmetros de entrada para el procedimiento de rotacin son los vrtices origina-
242
CAPTULO 5
Transformaciones geomtricas
les del polgono, las coordenadas del punto de pivote y el ngulo de rotacin t h e t a especificado en radianes. Siguiendo la transformacin de la posicin de los vrtices, el polgono se regenera usando rutinas OpenOL.
{ x, y
void (
rotatePolygon
(wcPt2D
verts,
GLint
nVerts,
wcPt2D p i v P t , G L d o u b l e
thta!
* k;
vertsRot;
(k -
0;
k++) + + +
{ (verts (verts (verts (verts [k].x [k].y [k].x [k].y pivPt.x) pivPt.y) pivPt.x) pivPt.y) * * * * cos sin sin cos (theta) (theta); (theta) (theta);
vertsRot vertsRot
pivPt.x pivPt.y
[k].y =
glVertex2f
(vertsRot
x'-x.s ,
( x
y'=ys
(5.10)
El factor de escala s cambia la escala de un objeto en la direccin A, mientras que $ hace el cambio de escala en la direccin v. Las ecuaciones bsicas del cambio de escala en dos dimensiones 5.10 pueden tambin escribirse en la forma de la matriz siguiente.
r '1
1
k
0
ol
V
P
X y
y o,
P -S
/5.12)
donde S es la matriz 2 por 2 de cambio de escala en la Ecuacin 5.11. Cualquier valor positivo puede ser asignado a los valores de escala s y . Valores inferiores a I reducen el tamao de los objetos; valores superiores a I producen alargamientos. Especificando un valor de I tanto para ,v como para .v se deja el tamao del objeto inalterado. Cuando a s y s se les asigna el mismo valor, se produce un cambio de escala uniforme que mantiene las proporciones relaiivas del objeto. Valores desiguales de .v y .? resultan en un cambio de escala diferente que es a menudo usado en aplicaciones de diseo. Junde los dibujos son construidos desde unas pocas formas bsicas que pueden ajustarse mediante escalas y
x v ( ( x y ( J
FIGURA 5.6. Conversin de un cuadrado (a) en un rectngulo (b) medanle los factores de escala s = 2 y s = I.
x y
FIGURA 5.7. Cambio de escala de una lnea aplicando la Ecuacin 5.12 con s = s = 0.5, reducindose su tamao y aproximndose al origen de coordenadas.
x
FIGURA 5.8. Cambio de escala respecto a un punto fijo seleccionado ( y ) . La distancia desde cada vrlice del polgono al punto fijo se escala mediante las Ecuaciones de transformacin 5.13.
f
transformaciones posicionales (Figura 5.6). En algunos sistemas, los valores negativos tambin pueden especificarse mediante parmetros de escala. Ello no slo le da un nuevo tamao al objeto, adems lo refleja sobre uno o ms ejes de coordenadas. Los objetos transformados con la Ecuacin 5.11 son tanto escalables como rcubicables. Los factores de escala con valores absolutos inferiores a 1 mueven los objetos aproximndolos al origen, mientras que valores absolutos mayores que I mueven la posicin de las coordenadas alejndolas del origen. La Figura 5.7 ilustra el cambio de escala de una linca asignando el valor 0.5 a s y s .en la Ecuacin 5.11. Tanto la lnea de longitud como la distancia desde el origen se reducen en un factor de T .
x y
Podemos controlar la localizacin de un objeto cambiado de escala eligiendo una posicin, llamada punto fijo, que debe permanecer sin cambios despus de la transformacin de escala. Las coordenadas para el punto lijo, (xjs)j) son a menudo elegidas de la posicin de algn objeto, tal como su centroide (Apndice A), aunque puede elegirse cualquier otra posicin espacial. A los objetos se les da ahora otro tamao mediante el cambio de escala de las distancias entre los puntos de los objetos y el punto fijo (Figura 5.8). Para la posicin de coordenadas (x, y) las coordenadas de escala (v', y ' ) se calculan a partir de las siguientes relaciones. x' - x = (x - x ) .v ,
f f v
y' -y = (y - y ) s
f f
(5,13)
Podemos rescribir las Ecuaciones 5.13 para separar los trminos multiplicativo y aditivo como: x'=x-s + x (\-s )
x f v
(5J4)
1
y'=y
x v
donde los trminos aditivos jy( 1 -s ) e jy( 1 .v ) son constantes para todos los puntos del objeto. Incluir las coordenadas para un punto fijo en las ecuaciones de escala es similar a incluir coordenadas para un punto de pivote en ecuaciones de rotacin. Podemos configurar un vector columna cuyos elementos sean trminos constantes en las Ecuaciones 5.14 y despus sumar este vector columna al producto S-P en la Ecuacin 5.12. En la prxima seccin veremos la formulacin de una matriz para las ecuaciones de transformacin que implican slo matrices de multiplicacin.
244 CAPTULO 5 Transformaciones geomtricas Los polgonos cambian de escala mediante la aplicacin de las Ecuaciones de transformacin 5.14 a cada vrtice, regenerando despus el polgono usando los vrtices transformados. Para otros objetos, aplicamos las ecuaciones de transformacin de escala a los parmetros que definen el objeto. Para cambiar el tamao de un crculo, podemos reducir su radio y calcular las nuevas posiciones de las coordenadas del contorno de la circunferencia. Y para cambiar el tamao de una elipse, aplicamos el escalado de los parmetros sobre sus ejes para luego trazar la nueva posicin de la elipse sobre su centro de coordenadas. El siguiente procedimiento ilustra una aplicacin de los clculos de cambio de escala para un polgono. Las coordenadas para los vrtices del polgono y para el punto fijo son parmetros de entrada, junto con los factores de escala. Despus de realizar las transformaciones de coordenadas, se usan las rutinas OpenGL para generar el polgono cambiado de escala.
{ x, y;
h
void scalePolygon (wcPt2D * verts, GLfloat GLint sx, nVerts, GLfloat wcPt2D sy) fixedPt,
(
wcPt2D GLint for vertsNew; k; k < nVerts; k++) { fixedPt.x * fixedPt.y * (1 (1 sx) ; sy); sy +
(k = 0; vertsNew vertsNew
[ k ] . x * sx + IkJ . y *
(5./5)
con posiciones de coordenadas P y P' representados en vectores columnas. La matriz IVI| es una matriz de 2 por 2 que contiene factores multiplicativos, y M, 8S una matriz columna de 2 elementos que contiene los tr-
245
minos traslacionales. Para la traslacin, M es la matriz identidad. Para la rotacin o el cambio de escala, M-, contiene los trminos traslacionales asociados con el punto de pivote o con el punto fijo de escalado. Para producir una secuencia de transformaciones con esas ecuaciones, como por ejemplo, un cambio de escala seguido de una rotacin y luego una traslacin, podemos calcular las coordenadas transformadas haciendo una cosa cada vez. Primero, se cambia la escala de la posicin de las coordenadas, luego dichas coordenadas se giran y, finalmente, las coordenadas rotadas son trasladadas. Sin embargo, una forma ms eficiente de hacerlo, es combinar transformaciones de tal suerte que la posicin final de las coordenadas se obtenga directamente a partir de las coordenadas iniciales, sin calcular valores de coordenadas intermedios. Podemos hacer esto, re formulando la Ecuacin 5.15 para eliminar la operacin de suma de matrices.
{
Coordenadas homogneas
Los trminos multiplicativos y traslacionales para una transformacin geomtrica bidimensional pueden ser combinados dentro de una matriz sencilla, si expandimos la representacin a matrices de 3 por 3. En ese caso, podemos usar la tercera columna de la matriz de transformacin para los trminos traslacionales, y todas las ecuaciones de transformacin pueden expresarse como multiplicacin de matrices. Pero para poder hacer esto, necesitamos adems expandir la representacin matricial para posiciones de coordenadas bidimensionales a una matriz columna de 3 elementos. Una tcnica estndar para lograr esto consiste en expandir cada representacin de posicin-coordenada bidimensional (x, y) en representaciones de 3 elementos {x , y , h) llamadas coordenadas homogneas, donde el p a r m e t r o homogneo // es un valor distinto de cero tal que:
f h
x=
y=
(5I6>
Por tanto, una representacin de coordenadas homogneas bidimensionales, puede escribirse tambin como (h-x, h-y\ /?). Para transformaciones geomtricas, podemos elegir el parmetro homogneo h para que sea cualquier valor distinto de cero. As, hay un nmero infinito de representaciones homogneas equivalentes para cada punto de coordenadas (x,y). Una eleccin acertada es fijar h i. Cada posicin bidimensional se representa con coordenadas homogneas (,v, y I ). Se necesitan otros valores para el parmetro /?, por ejemplo en formulaciones de matrices para mostrar transformaciones tridimensionales. El trmino coordenadas homogneas se usa en matemticas para referirse al efecto de esta representacin en coordenadas cartesianas. Cuando un punto cartesiano (x, y) se convierte a representacin homognea (x y h) las ecuaciones que contienen x c y tales como J(x, y) = 0, se convierten en ecuaciones homogneas en los tres parmetros x , _y, y h. Esto significa precisamente, que si cada uno de los tres parmetros es sustituido por cualquier valor, v veces, dicho valor v puede ser despejado de la ecuacin. Expresar posiciones en coordenadas homogneas nos permite representar todas las ecuaciones de transformaciones geomtricas como multiplicacin de matrices, que es el mtodo estndar usado en los sistemas grficos. Las posiciones de coordenadas bidimensionales se representan con vectores columna de tres elementos, y las operaciones de transformacin bidimensionales se representan como matrices de 3 por 3.
y /v /v y f
h
<v
0 0
!
0
y
1
246
(5.18)
con T( i) como la matriz de traslacin de 3 por 3 de la Ecuacin 5.17. En situaciones donde no hay ambigedad en los parmetros de traslacin, podemos representar sencillamente la matriz de traslacin como T.
K
y I o como:
eos 0 - s i n sin 0 0 0
e o
0 1 (5.19)
eos 0
P'=R(0)'P
(5.20)
El operador de transformacin de rotacin R(q) es la matriz de 3 por 3 en la Ecuacin 5.19, con el parmetro de rotacin 0. Podemos adems escribir esta matriz de rotacin simplemente como R. En algunas bibliotecas grficas, una funcin de rotacin bidimensional genera slo rotaciones sobre el eje de coordenadas, como en la Ecuacin 5.19. Una rotacin sobre cualquier otro punto de pivote debe representarse como una secuencia de operaciones de transformacin. Una alternativa en paquetes grficos es ofrecer parmetros adicionales en la rutina de rotacin para las coordenadas del punto de pivote. Una rutina de rotacin que incluye parmetros del punto de pivote, luego establece una matriz general de rotacin, sin la necesidad de invocar una sucesin de funciones de transformacin.
0
i
0 o
\x~\ y 1 (5.21)
247
I O
O -r 1 -/
l
(5.23)
Esto produce una traslacin en la direccin opuesta, y el producto de la matriz de traslacin y su inversa producen la matriz identidad. Una rotacin inversa se obtiene sustituyendo el ngulo de rotacin por su negativo. Por ejemplo, una rotacin bidimensional a travs del ngulo </ sobre el origen de coordenadas, tiene la matriz de transformacin: eos 0 sin
e o
0 1 (5.24)
R = -sin 0
0
eos 6 0
Los valores negativos para los ngulos de rotacin generan rotaciones en el sentido de las agujas del reloj, as, la matriz identidad se produce cuando alguna matriz de rotacin se multiplica por su inversa. Puesto que por el cambio de signo del ngulo de rotacin slo .se ve afectada la funcin seno, la matriz inversa puede obtenerse tambin intercambiando filas por columnas. Fsto es, podemos calcular, la inversa de cualquier matriz de rotacin R evaluando su traspuesta (R~' = R ). Formamos la matriz inversa para cualquier transformacin de escala sustituyendo los parmetros de escala por sus recprocos. Para escalas bidimensionales con parmetros s y s aplicados respecto al origen de coordenadas, la matriz de transformacin inversa es:
1 x y
0 0
(5.25)
0 0
%
0
La matriz inversa genera una transformacin de escala opuesta, de tal forma que la multiplicacin de cualquier matriz de escala por su inversa produce la matriz identidad.
P'= M -M, P
2
= M
(5.26)
La posicin de coordenadas se transforma usando la matriz compuesta .VI, mejor que aplicando las transformaciones individuales M. y luego M .
2
248
= <T(/ ,/ ,)-T(/ ,/
2v 2 u
I>1
)}-P
(5.27)
donde P y P' se representan como vectores columna de coordenadas homogneas de tres elementos. Podemos verificar estos resultados, calculando el producto de matrices para los dos agrupamientos asociados. Tambin, la matriz de transformacin compuesta para esta secuencia de traslaciones es:
[l
0 0 o, i
"]
o
1
k
1
0 0
' ] [l 0 V = 0
1
'u+h,
%I4
1
'2.V
hy
(5.29)
= {R (0 )-R (0,)}
2
(5.30)
Mediante la multiplicacin de dos matrices de rotacin, podemos verificar que dos rotaciones sucesivas son aditivas: R ( 0 ) - R ( 0 , ) = R (0 + 0 )
2 L 2
(531)
por tanto, las coordenadas rotadas finales de un punto pueden calcularse con la matriz de rotacin compuesta como
P' = R (0, + 9 ) P
2
(532)
0 0
0
0
0 0
%*%
0
O
v
S(.v ,
2r
S(.v . i ,
u w
(5.34)
La matriz resultante en este caso indica que operaciones de cambio de escala sucesivas son multiplicativas. Esto es, si quisiramos triplicar el tamao de un objeto dos veces seguidas, el tamao final seria nueve veces ms grande que el original.
5.4
249
Trasladar el objelo de tal forma que la posicin del punto de pivote se mueva al origen de eoordenadas. Rotar el objeto sobre el eje de coordenadas. Trasladar el objeto de tal forma que el punto de pivote vuelva a su posicin original.
Esta secuencia de transformaciones se ilustra en la Figura 5 . La matriz de transformacin compuesta para esta secuencia se obtiene con la concatenacin: I () 0 0 eos 0 sin 0 0 que puede expresarse en la forma:
cas 0 - s i n o o
sin 0 -sin 0 eos 0 t
I 0
o
I
-y
(1 1
eos 0
e 0
I
o o
(5.35)
(
T(x )R(tt)T(-x
ryi
>)
R(x,,y ,m
r
donde T( v,.. -v,.) = T ' f v v,.). En general, una funcin de rotacin de una biblioteca grfica, puede estructurarse para aceptar parmetros de coordenadas de un punto de pivote, asi como de un ngulo de rotacin, y para generar automticamente la matriz de rotacin de la Ecuacin 5.35.
(I)
Trasladar el objeto de tal forma que el punto lijo coincida con el origen d coordenadas.
V,, v .
(h)
(d) Translacin del objelo de mixto que el puni de pivote vuelve a la posicin (A,, y )
Traslacin del
objeto de modo que el puni de pivote U . ) se mueve al origen
R
de pivote
FIGURA 5.9. Secuencia de transformacin para la rotacin de un objelo sobre un punto de pivote especificado usando la matriz de rotacin R(0) de la transformacin 5.1 ).
1
250
CAPTULO 5
Transformaciones geomtricas
-,
(d) Se traslada el objeto de modo cine el puni fijo vuelve a la posicin (Xf, >y)
(b) Se traslada el objeto de modo que el punto fijo (Xj, \y) se sita en el origen
(O
FIGURA 5.10. Secuencia de transformacin para el cambio de escala de un objeto con respecto a una posicin fija especfica, usando la matriz de escala S(s , tfj de transformacin 5.21.
(
(2) (3)
Cambiar de escala un objeto con respecto al origen de coordenadas. Usar la inversa de la traslacin del paso (1) para devolver el objeto a su posicin original. La concatenacin de matrices para estas tres operaciones produce la requerida matriz de cambio de escala:
i
o
i
xA y, 1
( )
fi
- * /
[V,
0 V,
( l - 0
V
(537)
o 0 o.
ij 0
0 1
1 0
V /
= O 0
V (1-5 )
V
T(x
n-xjs -y) =
Sfy
yj>,
s,
x
s)
y
(5.38)
Esta transformacin se genera automticamente en sistemas que ofrecen una funcin de cambio de escala que acepta coordenadas para un punto fijo.
FIGURA5.11. Parmetros de cambio de escala s y s a lo largo de direcciones ortogonales definidas por el desplazamiento angular 0.
} 2
251
rotacin opuesta a los puntos d retorno de sus orientaciones originales. La matriz compuesta resultante del producto de estas tres transformaciones es: jr, eos 0 + s sin 0
2 2 2
0 ( I
(5.39)
(0)-S<.Y ,.V,)-R<0) =
1
( s - $ , ) c o s 0 sin0
2
5, sin 0 + .v cos 0
?
Como ejemplo de esta transformacin, giramos un cuadrado para convertirlo en un paralelogramo (Figura 5.12) estrechndolo a lo largo de la diagonal desde (0,0) hasta (1,1). Primero rotamos la diagonal sobre el eje y usando 0 = 45, luego duplicamos su longitud con los valores de escala s, =1 y s& = 2, y despus lo rotamos de nuevo para devolver la diagonal a su orientacin original. En la Ecuacin 5.39, asumimos que ese cambio de escala iba a ser realizado con relacin al origen. Podemos llevar esta operacin de cambio de escala un paso ms all y concatenar la matriz con los operadores de traslacin, de tal forma que la matriz compuesta incluira los parmetros para la especificacin de una posicin fija de cambio de escala.
M M M, = ( M M ) Mj = M ( M M , )
3 2 3 2 3 2
(5.40)
Por tanto, dependiendo del orden en el que se hayan especificado las transformaciones, podemos construir una matriz compuesta, bien multiplicando de izquierda a derecha (premultiplicando) 0 bien multiplicando de derecha a izquierda (postmullipliando). Algunos paquetes grficos requieren que las transformaciones se hagan especificando el orden en el que deben ser aplicadas. Fn este caso, invocaramos primero la transformacin M l u e g o M-, y despus IV1 A medida que se llama de manera sucesiva a cada rutina de transformacin, su matriz es concatenada a la izquierda del producto de matrices previo. Otros sistemas grficos, sin embargo, postmultiplican las matrices, as que esta secuencia de transformaciones tendra que invocarse en el orden inverso: la ltima transformacin invocada (que para este ejemplo es M,) es la primera en aplicarse, y la primera transformacin que fue llamada ( M . para nuestro ejemplo) es la ltima en aplicarse. Por otra parte, el producto de transformaciones no puede ser conmutativo. Fl producto de las matrices M| M en general no es igual que M M,. Esto significa que si queremos trasladar y rolar un objeto, debemos tener cuidado con el orden en se evala la matriz compuesta (Figura 5.13). Para algunos casos especiales, tales como una secuencia de transformaciones todas del mismo tipo, la multiplicacin de matrices de
V 2 7
FIGURA 5.12. Un cuadrado (a) se convierte en un paralelogramo (b) utilizando la matriz de transformacin compuesta 5.39, con s = l , s = 2 y 0= 45.
i 2
252
(a)
(b)
FIGURA 5.13. Invenir el orden en el que se lleva a cabo la secuencia d transformaciones puede aliviar a la posicin trans Ibrmada de un objeto. \.n (a), un objeto primero se traslada en la direccin v y luego se rota en el sentido contraro al de las agujas del reloj con un ngulo de 45". ln (b), el objeto primero se rola 45 en el sentido contrario al de las agujas del reloj y despus es trasladado en la direccin v. transformacin es conmutativa. Corno ejemplo, dos rotaciones sucesivas pueden llevarse a cabo en cualquier orden y la posicin final ser la misma. Esta propiedad conmulaliva tambin se aplica para dos traslaciones sucesivas o dos cambios de escala sucesivos. Otro par de operaciones conmutativo es la rotacin y el cambio de escala uniforme (s =
K
y 1
k
VI
(5,41)
Los cuatro elemenlos rs- son los lrminos multiplicativos rotacin-escala en la transformacin, lo que implica slo ngulos de rotacin y factores de escala. Los elemenlos trs y tts SOli los trminos traslacionaIcs, que contienen combinaciones de distancias de traslacin, coordenadas de punios de pivote y punios fijos, ngulos de rotacin y parmetros de escala. Por ejemplo, si se va a cambiar de escala y rolar un objeto sobre las coordenadas de su centroide (r v .) y luego se va a trasladar, los valores de los elementos de la matriz de transformacin compuesta son:
(
(5.42)
s sint
t
s cost
}
v ( l - . \ \ cost-.v.v, sint + / I
Aunque la Ecuacin de matrices 5.41 requiere nueve multiplicaciones y seis sumas, los clculos explcitos para las coordenadas transformadas son; x' = x rs + v r.s + trs ,
xx xy x
y' = x rs + .v rs , + trs
vx n
(5.43)
Por tanto, realmente necesitamos realizar cuatro multiplicaciones y cuatro sumas para transformar las posiciones de coordenadas. Este es el mximo nmero de clculos requerido para cualquier secuencia de transformacin, una vez que las matrices individuales se han concatenado y se han evaluado los elementos de
253
la matriz compuesta. Sin concatenacin, las transformaciones individuales se aplicaran una cada vez, y el nmero de clculos podra incrementarse significativamente. Por tanto, una implementacin eficiente para las operaciones de transformacin es formular matrices de transformacin, concatenar cualquier secuencia de transformacin y calcular las coordenadas transformadas usando las Ecuaciones 5.43. En sistemas paralelos, las multiplicaciones directas de matrices con la matriz de transformacin compuesta de la Ecuacin 5.41 pueden ser igualmente eficientes. Dado que los clculos de rotacin requieren evaluaciones trigonomtricas y varias multiplicaciones para cada punto transformado, la eficiencia de clculo puede convertirse en algo importante a considerar en las transformaciones de rotacin. En animaciones y otras aplicaciones que implican muchas transformaciones repetidas y pequeos ngulos de rotacin, podemos usar aproximaciones y clculos iterativos para reducir los clculos en las ecuaciones de transformacin compuestas. Cuando el ngulo de rotacin es pequeo, las funciones trigonomtricas pueden ser sustituidas con valores aproximados basados en unos pocos primeros trminos de su desarrollo en serie de potencias. Para ngulos suficientemente pequeos (inferiores a 10) eos 0 es, aproximadamente, 1.0 y sin# tiene un valor muy prximo al valor de 0 radianes. Si estamos rotando en pequeos pasos angulares sobre el origen, por ejemplo, podemos igualar cos0 a i .0 y reducir los clculos de transformacin a cada paso a dos multiplicaciones y dos sumas para cada juego de coordenadas que se quieran rotar. Estos clculos de rotacin son: x' = x~y\\ f ? , y' = xs\n 6+y (5.44)
donde sinse evala una vez para todos los pasos, asumiendo que el ngulo de rotacin no cambia. El error introducido en cada paso por esta aproximacin disminuye a la vez que disminuye el ngulo de rotacin. Pero incluso con pequeos ngulos de rotacin, el error acumulado a lo largo de muchos pasos puede ser bastante grande. Podemos controlar el error acumulado eslimando el error en x' ey a cada paso y reinicializando la posicin del objeto cuando el error acumulado se vuelve demasiado grande. Algunas aplicaciones de animacin reinicializan automticamente las posiciones de un objeto y fijan intervalos, por ejemplo, cada 360 o cada 180.
r
Las transformaciones compuestas a menudo implican matrices inversas. Por ejemplo, las secuencias de transformacin para direcciones de escalado generales y para algunas reflexiones e inclinaciones (Seccin 5.5) requieren rotaciones inversas. Como hemos podido ver, las representaciones de la matriz inversa para las transformaciones geomtricas bsicas pueden generarse con procedimientos sencillos. Una matriz de traslacin inversa se obtiene cambiando los signos de las distancias de traslacin, y una matriz de rotacin inversa se obtiene mediante una matriz traspuesta (o cambiando el signo de los trminos en seno). Estas operaciones son mucho ms simples que los clculos directos de matriz inversa.
(5.45)
k
I
x y
donde los cuatro elementos r- son los trminos multiplicativos de la rotacin, y los elementos tr y tr son los trminos traslacionales. Un cambio en una posicin de coordenadas de un slido-rgido, a veces tambin se denomina transformacin de movimiento rgido. Todos los ngulos y distancias entre posiciones de coordenadas son inalterables mediante una transformacin. Adems, la matriz 5.45 tiene la propiedad de que su submatriz de 2 por 2 superior izquierda es la matriz ortogonal. Esto significa que si consideramos cada Illa (o
254
CAPTULO 5
Transformaciones geomtricas
cada columna) de la submatriz como un vector, entonces los dos vectores fila (;* ., r ) (o los dos vectores columna) forman un juego ortogonal de vectores unidad. Tal juego de vectores, tambin se puede denominar juego de vectores ortonormai. Cada vector tiene como longitud la unidad:
u xy
r +r
I
md + r = 1
5 M
>
Vyy=0
(5.47,
Por tanto, si estos vectores unidad se transforman mediante la rotacin de la submatriz, entonces el vector Wm ' vector unidad a lo largo del eje x y el vector (r , r ) se transforma en un vector unidad a lo largo del eje y del sistema de coordenadas;
yx yy
%
0 r0
0 1 0" 0 1
i
1
0 1
(5.48)
%
0
w
-
0] 1 1 (5.49)
%
0
Por ejemplo, la siguiente transformacin de slido-rgido primero rota un objeto un ngulo alrededor del punto de pivote (x y ) y despus traslada el objeto.
r r
eos
T(r ,r )-R(x,,.Y
A v r f
-siii0 eos 0
x ( I - c o s 0 ) + v sin0 + r
r r
e)
sin 0
y ( l - c o s O ) - x sin0 + /
r l
(5.50)
Aqu, los vectores unidad ortogonales en la submatriz superior izquierda son (eos, -sin) y (sin, eos)
eos sin 0
-sin eos 0
Ql 0 1
eos -sin 1
ri 1
=
0 1 (5.51)
De manera similar, el vector unidad (sin, eos) se convierte, por la matriz de transformacin precedente, en el vector unidad (0,1) en la direccin y.
255
(a)
(b)
FIGURA 5.14. La matriz de rotacin para hacer girar un objeto desde una posicin (a) a una posicin (b) puede construirse con los valores de los vectores unidad de orientacin u' y v' relativos a la orientacin original.
y
200 4-
y
200 +
150 --
150 - -
4
Centroide
50 100 ib) 150 20(1
loo 50--
Centroide'
100 - -
FIGURA 5.15. Un tringulo (a) es transformado a la posicin (b) usando los clculos de la matriz compuesta del procedimiento t r a n s f o r m V e r t s 2 D . transformacin deseada asignando los elementos de u' a la primera lila de la matriz de rotacin y los elementos de v' a la segunda fila. En una aplicacin de modelado, por ejemplo, podemos usar este mtodo para obtener la matriz de transformacin dentro de un sistema de coordenadas de objetos locales cuando sabemos cual va a ser su orientacin dentro de las coordenadas universales de la escena. Una transformacin similar es la conversin de descripciones de objeto desde un sistema de coordenadas a otro, en las Secciones 5.8 y 5.15 se estudian estos mtodos ms detalladamente.
256
CAPTULO 5
Transformaciones geomtricas
tringulo que se transforma mediante esta secuencia. Las rutinas penGL se usan para mostrar la posicin inicial y final del tringulo.
Establece el
inicial
de
la
ventana
de v i s u a l i z a c i n .
*./ .
GLsizei /*
winWidth * el
winHeight las
Establece
coordenadas 225.0;
GLfloat
xwcMin
xwcMax
ywcMax = 2 2 5 . 0 ;
public: GLfloat x, y;
typedef
GLfloat
Matrix3x3
[3] [3] ;
matComposite; pi 3.14159;
GLdouble init
(void)
/*
Establece
el
color
de
la 1.0,
ventana 0.0);
de
visualizacin
en blanco.
*/
glClearColor
(1.0,
1.0,
}
/* Construye la matriz identidad 3 por 3. */
void {
(Matrix3x3
matldent3x3)
G L i n t TOW, for
( r o w m 0; for (col
P
0; c o l < 3 ; c o l + +) [row] [ c o l ]
inatldent3x3
!
/* Premultiplica la matriz mi por la matriz mi, m2, almacenando el resultdo e n m2. */ void matrix3x3PreMultiply GLint row. Col; matTemp; 0; = row < 0; col 3; < row++) 3 ; COl++) [row] [0] m2 * m2 [0] [ c o l ] + ml + ml [row] [ 1 ] * m2 * = ml (Matrix3x3 M a t r i x 3 x 3 m2)
Matrix3x3 for
matTemp
[row] [ c o l ]
[1] [ c o l ]
[row] [2]
[2] [ c o l ] ;
for
= 0;
[row][col]
= matTemp
}
void { Matrix3x3 /* matTransl; la matriz de traslacin con la matriz identidad. */ translate2D (GLfloat tx, GLfloat ty)
Inicializa
matrix3x3SetIdentity
{matTransl);
matTransl matTransl /*
Concatena matTransl
matrix3x3PreMultiply
(matTransl,
matComposite};
}
void { Matrix3x3 /* matRot; la matriz de rotacin con la matriz identidad. */ (matRot); (theta); (theta); (1 eos (theta)) + pivotPt.y * sin (theta); (theta); (theta); (1 eos (theta)) */ pivotPt.x * sin (theta); Inicializa rotate2D (wcPt2D p i v o t P t , GLfloat theta)
matrix3x3SetIdentity matRot matRot matRot matRot matRot matRot /* [0][0] [0] [1] [0][2] [ l ] [0] [1][1] [l][2] = * * eos -sin sin eos
= pivotPt.x *
= pivotPt.y * con
Concatena matRot
la matriz
compuesta.
matrix3x3PreMultiply
(matRot,
matComposite);
}
void scale2D (GLfloat sx, GLfloat sy, wcPt2D fixedPt)
{
Matrix3x3 /* matScale; la matriz de cambio de escala con la matriz identidad. */
Inicializa
matrix3x3SetIdentity matScale matScale matScale matScale /* [0][0] [ 0 ] [2] [1] [1] [1] [2] = = = sx; (i sy; (l
(matScale);
* *
Concatenate
matScale
matrix3x3PreMultiply
)
(matScale,
matComposite);
/*
Usando
la
matriz
compuesta,
se
calculan
las
coordenadas
transformadas.
*/
void
transformVerts2D k; temp;
(GLint
nVerts,
wcPt2D
verts)
GLint
GLfloat for
(k = 0;
k < nVerts;
k+ + ) [ 0 ] fo]
{ * verts * [ k ] . x + matComposite [0] [2] ; verts [k].x + matComposite [1][1] [1] [2] ; [0][1] *
void {
triangle k;
(wcPt2D
*verte)
GLint
( }.;;.
void
displayFcn
(void)
{
/* Define la posicin = 3; [3] { {50.0, 25.0}, centroide {150.0, del 25.0}, {lOO.Q, */ 100.0) ); inicial del tringulo. */ GLint nVerts
WCPt2D v e r t s /* Calcula la
posicin del
tringulo.
wcPt2D G L i n t k, for
(k 0; ySum + =
nVerts
xSum + = v e r t s
GLfloat
(xSum) (ySum) de
/ GLfloat / GLfloat la
(nVerts); nVerts); */
GLfloat los
parmetros
transformacin geomtrica.
fixedPt;
sx m theta la
sy pi/2.0; de
GLdouble /* Borra
ventana
visualizacin.
*/
259
glClear /*
Establece
glColor3 /* Muestra
(0.0, un
1.0); */
tringulo azul.
trangle /*
Inicializa
ecale2D rotate2D
Primera
transformacin:
(pivPt, (tx,
Segunda t r a n s f o r m a c i n : final:
rotacin
translate2D /* Aplica la
Transformacin
traslacin. tringulo. */
matriz
compuesta a verts); el
transformVerts2D /* Establece el
tringulo
transformado.*/
glColor3f /* Muestra
(1.0, el
tringulo
transformado en
rojo.*/
triangle glFlush (
(verts); );
}
v o i d winReshapeFcn ( glMatrixMode glLoadldentity glu0rtho2D glClear (GL_PROJECTION); ( ) ; xwcMax, ywcMin, ywcMax); (GLint newWidth, GLint newHeight)
(xwcMin,
(GL_COLOR_BUFFER_BIT);
)
v o i d main f glutlnit (&argc, argv); (GLUT_SINGLE (50, 50); winHeight); Transcrmation Sequence"); (winWidth, ("Geometric | GLUT_RGB)j (int argc, char ** argv)
glutlnitWindowPosition
(displayFcn); (winReshapeFcn); ) ;
260
CAPTULO 5
Transformenionesgeomtricas
5.5
Las transformaciones bsicas lales como la traslacin, la rotacin y el cambio de escala son componentes estndares d las bibliotecas grficas- Algunos paquetes ofrecen algunas transformaciones adicionales que pueden ser tiles en ciertas aplicaciones. Dos de dichas transformaciones son la reflexin y la inclinacin.
Reflexin
Una transformacin que produce la imagen de un objeto en un espejo se llama reflexin. Para una reflexin bidimensonal, esta imagen se genera respecto a un eje de reflexin rotando el objeto 180 sobre dicho eje de reflexin. Podemos elegir un eje de reflexin en el plano.yv o perpendicular al plano xy. Cuando el eje de reflex i n es una linea en el plano yr, la trayectoria de la rotacin est tambin en el plano yv. A continuacin se proporcionan ejemplos de algunas reflexiones comunes. La reflexin respecto de la lnea y 0 (el eje x) se logra con la matriz de transformacin: I 0 0 0 -I 0
o
I
(5.52)
Esta transformacin conserva los valores v. pero da la vuelta a las posiciones de coordenadas de valores y. La orientacin resultante de un objete) despus de haber sido reflejado sobre el eje X se muestra en la PigUia 5.16. Para imaginar la trayectoria de la transformacin de rotacin para esta reflexin, podemos pensar en el objeto plano movindose fuera del plano.vv y girando I 80 a travs de un espacio tridimensional alrededor del eje x y colocado de nuevo sobre el plano xy al otro lado del eje x. I 'na reflexin sobre la lnea x ((el eje y) vuelca las coordenadas x mientras que mantiene las mismas coordenadas y. La matriz para esta transformacin es: -1 | 0 0 I 0 0 0 I (5.53)
l a figura >. 17 ilustra el cambio de posicin de un objeto que ha sido reflejado respecto de la lnea .v = 0. la rotacin equivalente en este caso es 180 a travs del espacio tridimensional sobre el eje y. Damos la vuelta tanto a las coordenadas x como a las y de un punto, mediante la reflexin relativa de un eje que es perpendicular al plano xy y que pasa por el origen de coordenadas. Esta reflexin a veces se deno-
\ ^
Posicin original
Posicin
Posicin reflejada
2'
Posicin reflejada
261
mina reflexin relativa al origen de coordenadas, y es equivalente a reflejar con respecto a ambos ejes de coordenadas. La matriz de representacin para esta reflexin es: - 1 0 0 0 - 1 0 0 0 I (5.54)
En la Eigura 5.18 se muestra un ejemplo de reflexin respecto del origen. La matriz de reflexin 5.54 es la misma que la matriz de rotacin R(0) con 9- 180. Sencillamente estamos girando el objeto en el plano xy media vuelta alrededor del origen. La matriz de reflexin 5.54 puede generalizarse para la reflexin de cualquier punto en el plano .xy (Figura 5.19). Esta reflexin es lo mismo que la rotacin de 180 en el plano xy, alrededor de un punto de reflexin. Si elegimos el eje de reflexin como la lnea diagonal y = x, (Figura 5.20) la matriz de reflexin es: 0 I 0 (5.55) I
1 0 0 0 0
Podemos obtener esta matriz concatenando una secuencia de rotaciones y reflexiones de matrices sobre los ejes de coordenadas. Una posible secuencia se muestra en la Figura 5.21. Aqu, primero llevamos a cabo una rotacin en el sentido de las agujas del reloj con respecto al origen a travs de un ngulo de 45, que rota la linea y = x y sobre el eje x. A continuacin realizamos una reflexin con respecto al eje x. El paso final consiste en girar la lnea v = x de vuelta a su posicin original con una rotacin de 45 en sentido contrario al de las agujas del reloj. Otra secuencia de transformaciones equivalente consiste en reflejar primero el objeto sobre el eje x y luego rotarlo 9 0 en el sentido de las agujas del reloj. Para obtener una matriz de transformacin sobre la diagonal y = -x, podemos concatenar matrices para la secuencia de transformacin: (1) rotacin de 45 en el sentido de las agujas del reloj, (2) reflexin sobre el eje y, y (3) rotacin de 45 en el sentido de las agujas del reloj. La matriz de transformacin resultante es:
Posicin reflejada
</
V
3 Posicin original
FIGURA 5.18. Reflexin de un objeto respecto al origen de coordenadas. Esta transformacin puede realizarse con una rotacin en el plano xv sobre el origen de coordenadas.
FIGURA 5.19. Reflexin de un objeto respecto a un eje perpendicular al plano xy que pasa por el punto V .
re]ciai0
262
CAPTULO 5
Transformaciones geomtricas
3 \
Posicin original
v=
>
FIGURA 5.21. Secuencia de transformaciones para producir una reflexin respecto a la lnea v = x: una rotacin de 45 en el sentido de las agujas del reloj (a) una reflexin sobre el eje x (b> y una rotacin de 45" en el sentido contrario al de las agujas del reloj (c).
4y
1
(b)
0
-I
-I
(5.56)
La Figura 5.22 muestra las posiciones original y final para un objeto transformado con esta matriz de reflexin. Las reflexiones sobre cualquier linea v = mx + /> en el plano xy pueden realizarse con una combinacin de transformaciones traslacin-rotacin-rellexin. |-n general, primero trasladamos la linca de tal forma que pase por el origen. Luego podemos girar la lnea hacia uno de los ejes de coordenadas y reflejarla sobre dicho eje. Finalmente, restablecemos la lnea a su posicin original con las transformaciones inversas de rotacin y traslacin. Podemos implementar reflexiones con respecto a los ejes de coordenadas o al origen de coordenadas como transformaciones de escala con factores de escala negativos. Adems, los elementos de la matriz de reflexin pueden definirse con valores distintos de 1 . Un parmetro de reflexin de una magnitud superior a I cambia la imagen del espejo por un punto ms alejado del eje de reflexin, y un parmetro cuya magnitud es inferior a I trae la imagen del espejo a un punto ms cercano al eje de reflexin. As, un objeto reflejado puede tambin agrandarse, reducirse o distorsionarse.
263
,\
\ !
\
3'
Posicin \ , original N3
\ \
ym
Inclinar
Una transformacin que distorsiona la forma de un objeto de tal manera que la forma obtenida aparece como si el objeto estuviera compuesto por capas internas que se hubieran obtenido resbalando unas sobre otras es lo que se denomina inclinacin. Dos transformaciones comunes para producinar una inclinacin son aquellas que desplazan los valores de las coordenadas x y las que desplazan los valores de>\ Una inclinacin en la direccin-.v respecto al eje x se produce con la matriz de transformacin:
si,
0 0
(5.57)
x' = x + sh
y'-y
(5.58)
Cualquier nmero real puede asignarse a los parmetros de inclinacin sh . Entonces, una posicin de coordenadas (A, y) se cambia horizontalmente por una cantidad proporcional a su distancia perpendicular (valory) desde el eje.v. Establecer el parmetro $h por ejemplo con el valor 2, cambia el cuadrado de la Figura 5.23 por un paralelogramo. Los valores negativos para .v// cambian las posiciones de las coordenadas hacia la izquierda.
(
Podemos generar una inclinacin en la direccin -A' respecto a otras lneas de referencia con
I
(5.59)
o o
Ahora, las posiciones de las coordenadas se transforman en:
(i
(0.0)1
(1,0)
(a)
(0, 0)
(1.0)
FIGURA 5.23. Un cuadrado (a) se convierte en un paralelogramo (b) utilizando la matriz de inclinacin 5.57 en la direccin-x con sh.. = 2.
v K . (5M) Un ejemplo de esta transformacin de inclinacin se da en la Figura 5.24 para un valor de V% del parmetro de inclinacin respecto a la l n e a y - . tina inclinacin en la direccin-y respecto a la lnea x = \ se genera con la matriz de transformacin:
rd
= K c t
r=k+m$
y'=y
10
Sh
t
0
I 0 -AV* I
1
r <
< >
56l
x' = X,
Kf v Kf
y - y + sh (x - x )
y ref
(5.62)
lista transformacin cambia la posicin de coordenadas verticalmente en una cantidad proporcional a su distancia de la lnea de referencia* - x La Figura 5.25 ilustra la conversin de un cuadrado en un paralelogramo con sh = 0.5 y x ~ - I. Las operaciones ce inclinacin pueden expresarse como secuencias de transformaciones bsicas. La matriz de inclinacin en la direccin-x 5.57, por ejemplo, puede representare como una transformacin compuesta que implica una serie de matrices de rotacin y escala. Esta transformacin compuesta escala el cuadrado de la Figura 5.23 a lo largo de su diagonal, mientras que mantiene las longitudes originales y las orientaciones de los extremos paralelos al eje x. Los cambios en las posiciones de los objetos relativos a las lineas de inclinacin de referencia son equivalentes a las traslaciones.
(a)
(b)
x
FIGURA 5.24. Un cuadrado (a) se transforma en un paralelogramo desplazado (b) con $k inclinacin 5.59.
y
0.5 yy -= -1 en la matriz de
re(
(1.2)
(0.1)
(1.1)
-fl
r =
1 (0,0)
(1 ,0)
Xr = - I
(bi
FIGURA 5.25. Un cuadraJo(a) se convierte en un paralelogramo desplazado (b) usando los siguientes valores de los para metros sh = 0.5 y x = -I en la matriz de inclinacin en la direecin-v 5.61.
y ref
5.6
Las caractersticas de los sistemas de rasterizacin sugieren un mtodo alternativo para realizar ciertas transformaciones bidimensionales. Los sistemas de rasterizacin almacenan informacin de dibujo, como patrones de color en el bfer de imagen. Por tanto, algunas transformaciones de objetos simples pueden realizarse rpidamente manipulando un array de valores de pxeles. Se necesitan pocas operaciones aritmticas, as que las transformaciones de pxel son particularmente eficientes. Como hemos podido ver en la Seccin 3.19, las funciones que manipulan los arraya de pxeles rectangulares se denominan operaciones de rasterizacin, y mover un bloque de valores de pxel de una posicin a otra se denomina transferencia de bocptt\ bitblt o pixelblt. Normalmente, pueden encontrarse las rutinas para realizar algunas operaciones de rasterizacin en los paquetes grficos. La Figura 5.26 ilustra una traslacin bidimensional implementada como una transferencia de bloque de un rea de refresco de bfer. Todas las caractersticas del bit, mostradas en el rea rectangular, se copian como un bloque dentro de otra parte de un bfer de imagen. Podemos borrar el patrn en la ubicacin original asignando el color de fondo a todos los pxeles contenidos en dicho bloque (suponiendo que el patrn que va a borrarse no se solapa con otros objetos de la escena). Los incrementos de W e n la rotacin se llevan a cabo fcilmente reorganizando los elementos de un array de pxeles. Podemos rotar un objeto o un prototipo bidimensional 90 en el sentido conLrario al de las agujas del reloj inviniendo los valores de los pxeles en cada Illa del array, y despus intercambiando filas por columnas. Una rotacin de 180 se obtiene invirtiendo el orden de los elementos en cada Illa del array, y despus inviniendo el orden de las filas. La Figura 5.27 muestra las manipulaciones de array que pueden usarse para rotar el bloque de pxeles 90 y 180". Para rotaciones de arrays que no son mltiplos de 90" es necesario realizar algn procesamiento adicional. El procedimiento general se ilustra en la Figura 5.28. Cada rea destinada a pxeles se mapea sobre el array rolado y se calcula la cantidad superpuesta con las reas rotadas de pxeles. Puede entonces calcularse un color para un pxel de deslino, promediando los colores de los pxeles de origen superpuestos y calculando su peso en funcin del porcentaje de rea superpuesta. O, podramos usar un mtodo de aproximacin, como el que se usa en el efecto de suavizado {anuiasing). para determinar el color de los pxeles de destino. Podemos usar mtodos similares para cambiar la escala de un bloque de pxeles. Las reas de pxeles en el bloque original se cambian de escala, usando valores especficos para s y .v y luego se mapcan sobre un conjunto de pxeles de destino. Hl color de cada pxel de destino es asignado entonces, de acuerdo con su rea de solapamiento con las reas de los pxeles cambiados de escala (Figura 5.29).
x
Un objeto puede reflejarse usando transformaciones de rasterizacin, que invierten los valores de Illas y columnas en el bloque de pxeles, combinadas con traslaciones. Las inclinaciones se producen mediante desplazamientos de las posiciones de los valores del array a lo largo de filas o columnas.
FIGURA 5.26. Traslacin de un objeto desde la posicin de la pantalla (a) a la posicin de destino mostrada en (b), moviendo un bloque rectangular de valores de pxeles. Las posiciones de coordenadas P y P especifican los lmites del bloque rectangular que va a ser movido y P es la posicin de referencia de destino.
n)in m a x u
266
4 7
10
2 5 8 II
3 i I
6 5 4
(b)
9 8 7
12 II 10
9 6 3
8 5 2
te)
10] 7 4 1
5.27. Rotacin de un array de valores de pxeles. El array original se muestra en (a), las posiciones de los elementos del array despus de una rotacin de 90 en el sentido contrario al de las agujas del reloj se muestran en (b) y las posiciones de los elementos del array despus de una rotacin de 180 se muestran en (c).
FIGURA
F I G U R A 5.28. Una rotacin de lneas para un bloque rectangular ds pxeles puede llevarse a cabo mapeando las reas de destino de pxeles sobre el bloque rotado.
i i i i
-T--T
'
! - - f - - i
' l 1 1 I J _ _ i i H 1 1 - 1 -
'
I
L I
5.29. Mapeo de reas de destino de pxeles sobre un array cambiado de escala de valores de pxeles. Los factores de escala s -s = 0.5 se aplican respecto a un punto fijo [x^yj).
FIGURA
x v
Array escaludo
..!..
i i T i i
Los primeros cuatro parmetros de esta funcin dan la localizacin y las dimensiones del bloque de pxeles. Y la constante simblica de OpenGL, G L _ C O L O R , especifica que son valores de color que van a ser copiados. Este array de pxeles va a ser copiado en un rea rectangular de un bfer de refresco, cuya esquina inferior izquierda esi en la localizacin especificada por la posicin de rasterizacin actual. Los valores de los pxeles de color se copian bien de los valores RGBA o bien de los ndices de la tabla de color, dependiendo de la configuracin actual para el modo de color. Tanto las regiones que van a ser copiadas (el origen) como el rea de destino, deberan encontrarse completamente dentro de los lmites de las coordenadas de la pantalla. Esta traslacin puede llevarse a cabo en cualquier bfer de OpenGL de los que se usan para el refresco, o incluso entre diferentes bferes. Un bfer de origen para la funcin g l C o p y P i x e l s se elige con la rutina g i R e a d B u f f e r y el bfer de destino se selecciona con la rutina g i D r a w B u f f e r .
Podemos rotar un bloque de valores de pxeles de color en incrementos ce 0 grados, primero guardando el bloque en un array, cambiando despus los elementos del array y situndolos de nuevo en el bfer de refresco. Como vimos en la Seccin 3.19, un bloque de valores de color RGB, que est en un bfer, puede guardarse en un array con la funcin:
glReadPixels {xmin, ymin, width, height, GLRGB, GLUNSIGNED_ BYTE, colorArray);
Si los ndices de la tabla de color se almacenan en las posiciones de los pxeles, podernos sustituir la constante GLRGB por GL_COLOR_lNDEX. Para rotar los valores de color, cambiamos las fdas y las columnas del array de color, tal y como se describe en la seccin anterior. Despus, ponemos el array rotado de nuevo en l bfer con:
glDrawPixels (width, height, GLRGB, GL_UNSIGNED_BYTE, colorArray);
La esquina inferior izquierda de este array se sita en la posicin de rastreo actual. Podemos seleccionar el bfer de origen que contiene el bloque original de valores de pxeles con g l R e a d B u f f e r , y designamos un bfer de destino con g l D r a w B u f f e r . Una transformacin de escala bidimensional puede desarrollarse como una operacin de rasterizacin en OpenGL, especificando los factores de escala y despus invocando bien g l C o p y P i x e l s o g l D r a w P i x e l s . Para las operaciones de raterizacin establecemos los factores de escala con:
glPixelZoom (sx, sy) ;
donde los parmetros sx y sy pueden asignarse a cualquier valor de un punto flotante distinto de cero. Los valores positivos superiores a 1.0, incrementan el tamao de un elemento en el array de origen, y valores positivos inferiores a 1.0 decrcmentan el tamao del elemento. Un valor negativo para s x , s y , o para ambos, produce una reflexin as como un cambio de escala de los elementos del array. As, si sx = sy = -3.0, el array de origen se refleja con respecto a la posicin de barrido actual y cada elemento de color del array se mapea a un bloque de pxeles destino de 3 por 3. Si el centro de un pxel destino se encuentra dentro de un rea rectangular de un elemento de color cambiado de escala perteneciente a un array, se asigna el color de ese elemento del array. A los pxeles de destino cuyos centros estn en los lmites izquierdo o superior del array de elementos cambiados de escala, tambin se les asigna el color de aquel elemento. El valor predeterminado tanto para sx como para sy es 1.0. Tambin podemos combinar transformaciones de rasterizacin con las operaciones lgicas vistas en la Seccin 3.19, para producir varios efectos. Con el operador or exclusive, por ejemplo, dos copias sucesivas de un array de pxeles al mismo rea de bfer, reestablece los valores que estaban presentes originalmente en dicha rea. Esta tcnica puede usarse en una aplicacin de animacin para trasladar un objeto a travs de una escena sin alterar los pxeles del fondo.
268
CAPTULO 5 Tmnsformmionesgeomtricas
versales cartesianas para ser procesadas. Algunos ejemplos de sislemas no cartesianos son las coordenadas polares, las coordenadas esfricas, las coordenadas elpticas y las coordenadas parablicas. Las relaciones entre los sistemas de referencia cartesianos y algunos sislemas no cartesianos comunes se dan en el Apndice A. Aqu, slo consideramos las transformaciones involucradas en la conversin de un marco cartesiano bidimensional a otro. La Figura 5.30 muestra un sistema cartesiano v V' especificado con el origen de coordenadas (v , v) y un ngulo de orientacin 6 en un marco de referencia cartesiano xy. Para transformar las descripciones del objeto de las coordenadas xy a las coordenadas x y ' . establecemos una transformacin que superpone los ejes x 'y' sobre los ejes xy. Esto se realiza en dos pasos:
(l
(1) (2)
Traslacin de tal forma que el origen ( a . r ) del sistema x V se mueva al origen (0,0) del sistema xy.
0 0
Rotacin del e j e x ' s o b r e el eje v. La transformacin del origen de coordenadas se lleva a cabo con la matriz de transformacin: I
0 u
-x
{)
-v 1
(5.63)
La orientacin de los dos sislemas despus de la operacin de traslacin deberan aparecer como en la Figura 5.31. Para conseguir que los ejes de los dos sistemas coincidan, hacemos una rotacin en el sentido de las agujas del reloj:
COS0
sin0
-sinf? 0
cost
0
(5.64)
Concatenar estas dos matrices de transformacin, nos da como resultado la matriz compuesta completa para transformar las descripciones del objeto desde el sistema xy al sistema x V ' :
Un mtodo alternativo para describir la orientacin del sistema de coordenadas .v Y'consiste en especificar un vector V que indique la direccin para el eje positivo y ' , tal como se muestra en la Figura 5.32. Podemos especificar el vector V como un punto en el marco de referencia xy relativo al origen del sistema xy, el cual podemos convertir en el vector unidad
r
^ i 5 i
= V* J
<
5 M
>
eje v eje v
FIGURA 5.30. Un sistema cartesiano x'y' posieionado en U , y ) con orientacin 8 en un sistema cartesiano xy.
0 0
FIGURA 5.31. Posicin de los marcos de referencia mostrados en la Figura 5.30 despus de trasladar el origen del sistema x y' al origen de coordenadas del sistema xy.
269
V
v'o-
_i i
M
eje v
eje*
FIGURA 5.32. Sistema cartesiano x'y' con origen en ~ W'-^o' y eje v' paralelo al vector V.
A
-V
i-
eje*
FIGURA 5.33. Un sistema cartesiano x'y'definido por dos posiciones de coordenadas, P y P,, dentro de un marco de referencia xy.
()
Y obtenemos el vector unidad u a lo largo del eje x\ aplicando una rotacin de 90 en el sentido de las agujas del reloj al vector v: u = (v , - v ) - (u , u )
y v x y
(5.67)
En la Seccin 5.4, vimos que los elementos de cualquier matriz de rotacin podan expresarse como elementos de un conjunto de vectores ortonormales. Por tanto, la matriz para rotar el sistema x'y' y hacerlo coincidir con el sistema xy, puede escribirse como: u R= 0 1
x
0 (5M)
Por ejemplo, supngase que elegimos la orientacin V = (-1,0) para el eje y'. Entonces el eje x' est en la direccin positiva de y y la matriz para la transformacin de rotacin es: 0 -I 0 1 0 0 0
o
1
De igual manera, podemos obtener esta matriz de rotacin de la Ecuacin 5.64 estableciendo como ngulo de orientacin 6 = 90. En una aplicacin interactiva, seria ms conveniente elegir una direccin relativa a la posicin P para V, que especificarlo respecto al origen de coordenadas xy. Los vectores unidad u y v estaran entonces orientados como se muestra en la Figura 5.33. Los componentes de v se obtienen ahora como:
0
p. - p
v=
|P,-Po
(5.69)
xy z
x' = x + t ,
x
y' = y+t *
y
z' = z + *
(5-70)
La Figura 5.34 ilustra la traslacin de un punto tridimensional. Podemos expresar estas operaciones de traslacin tridimensionales en matrices de la forma de la Ecuacin 5.17. Pero ahora las posiciones de coordenadas, P y P\ se representan en coordenadas homogneas con matrices columna de cuatro elementos y el operador de1 traslacin r 0 0 rTl esXuna matriz de 4 por 4:
X y z
0 ( 1 0
y
:.
0 0 0 0
g 1
(5.7!)
1 o,
P'-T-P
(5.72)
Un objeto se traslada en tres dimensiones, transformando cada una de las posiciones de coordenadas de definicin para el objeto, y reconstruyendo despus el objeto en la nueva localizacin. Para un objeto representado como un conjunto de superficies poligonales, trasladamos cada vrtice de cada superficie (Figura 5.35) y volvemos a mostrar las caras del polgono en las posiciones trasladadas. El siguiente fragmento de programa ilustra la construccin de una matriz de traslacin, dando unos parmetros traslacionales como conjunto de entrada. Para construir las matrices en estos procedimientos se usan mtodos similares a los vistos en el programa de ejemplo de la Seccin 5.4.
271
cypedef /*
GLfloat la
Matrix4x4 matriz
[4] [ 4 ] ; 4 por 4. */
Construye
identidad
void
matrix4x4SetIdentity
(Matrix4x4
matldent4x4)
GLint for
row,
matldent4x4
[row][col]
)
void cranslate3D (GLfloat tx, GLfloat ty, GLfloat tz>
I
Matrix4x4 /* matTransl3D; la matriz de traslacin con la matriz identidad. */ Inicializa
} La inversa de una mairi/ de traslacin tridimensional se obtiene usando los mismos procedimientos que se aplicaron en la traslacin bidimensional. Esto es, negamos las distancias de traslacin / , l y l . Esto produce una traslacin en la direccin opuesta, y el producto de la matriz de traslacin y su inversa es la matriz identidad.
v y 2
272
CAPITULO 5
'husformacionesgeomtricas
(a)
FIGURA 5.36.
coordenadas
se realizan en el sentido contrario a las agujas del reloj, cuando se est mirando a lo largo de la mitad positiva de los ejes con respecto al origen.
naciones de rotaciones de ejes de coordenadas (con las traslaciones apropiadas) para especificar una rotacin sobre cualquier otra linca en el espacio. Por tanto, primero consideramos las operaciones implicadas en las rotaciones de los ejes de coordenadas, y luego veremos los clculos necesarios para otros ejes de rotacin. Por convenio, los ngulos de rotacin positivos producen rotaciones en el sentido contrario al de las agujas del reloj sobre un eje de coordenadas, asumiendo que estamos mirando en la direccin negativa a lo largo de dicho eje de coordenadas (Figura 5.36). listo concuerda con nuestra discusin anterior acerca de las rotaciones en dos dimensiones, donde las rotaciones positivas en el plano xy se hacen en sentido contrario a las agujas del reloj sobre un punto de pivote (un eje que es paralelo al eje z).
z' = z
273
lil parmetro 0 especifica el ngulo de rotacin sobre el eje z, y los valores de la coordenada-z no se pueden cambiar con esta transformacin. En la forma de coordenadas homogneas, las ecuaciones para la rotacin tridimensional del eje-z son:
COS0
-sin e
COS0 0 0
0 0
0 0
n e 0 0
y z
1 0 0
(5.74)
(5.75)
La Figura 5.37 ilustra la rotacin de un objeto alrededor del eje z. Las ecuaciones de transformacin para rotaciones alrededor de los otros dos ejes de coordenadas pueden obtenerse con una permutacin cclica de los parmetros de coordenadas A% y y z en las Ecuaciones 5.73: A- -4 y - z -> x (5.76)
As, para obtener las transfomiaciones de rotacin del eje-x y el eje-y, sustituimos cclicamente x por y, y porz, y z porx, tal como se ilustra en la Figura 5.38. Sustituyendo las permutaciones de 5.76 por las Ecuaciones 5.73, obtenemos las ecuaciones para una rotacin del eje-*: y' = y eos 0-z sin 0 z'=y s'm 0 + z c q s 9 x' = x La rotacin de un objeto alrededor del eje A* se muestra en la Figura 5.3.
V
(5.77)
FIGURA 5.38. Permutacin cclica de los ejes de coordenadas cartesianas para producir los tres juegos de ecuaciones de rotacin de ejes de coordenadas.
274
Una permutacin cclica de coordenadas en las Ecuaciones 5.77 proporciona las ecuaciones de trasformacin para una rotacin del e\e-y: z'= z eos B-x sin 0 jr' = r s i n 0 + jrcos 0
y'-y
(5.78)
Un ejemplo de rotacin del eje-y se muestra en la Figura 5.40. Una matriz de rotacin tridimensional inversa se obtiene de la misma manera que las rotaciones inversas en dos dimensiones. Basta con sustituir el ngulo 0 p o r -9. Los valores negativos para los ngulos de rotacin generan rotaciones en el sentido de las agujas del reloj y la matriz identidad se obtiene multiplicando cualquier matriz de rotacin por su inversa. Mientras slo la funcin seno se vea afectada por el cambio de signo del ngulo de rotacin, la matriz inversa puede obtenerse tambin intercambiando lilas por columnas. Es decir, podemos calcular la inversa de cualquier matriz de rotacin R formando su traspuesta (R = R ).
_l 7
Los pasos de esta secuencia se ilustran en la Figura 5.41. Una posicin de coordenadas P se transforma con la secuencia mostrada en esta figura como: P -T
1
R (0) T P
v
(5.79)
275
(c)
Se gira el objeto un ngulo 0
(b) Se traslada el eje de rotacin sobre el eje x <d) Se traslada el eje de rotacin a la posicin original
FIGURA 5.41. Secuencia de transformaciones para la rotacin de un objeto sobre un eje que es paralelo al eje v. Esta matriz compuesta es de la misma forma que la secuencia de transformaciones bidimensional para la rotacin sobre un eje paralelo al eje z (un punto de pivote que no est en el origen de coordenadas). Cuando un objeto va a ser rotado sobre un eje que no es paralelo a uno de los ejes de coordenadas, necesitamos desarrollar algunas transformaciones adicionales. En este caso, tambin necesitamos rotaciones para alinear el eje de rotacin con un eje de coordenadas seleccionado y luego devolver el eje de rotacin a su orientacin original. Dando las especificaciones para la rotacin de ejes y del ngulo de rotacin, podemos llevar a cabo la rotacin requerida en cinco pasos: (1) (2) (3) (4) (5) Trasladar el objeto de tal forma que el eje de rotacin pase a travs del origen de coordenadas. Rotar el objeto de forma que el eje de rotacin coincida con uno de los ejes de coordenadas. Realizar la rotacin especificada sobre el eje de coordenadas seleccionado. Aplicar las rotaciones inversas para devolver al eje de rotacin su orientacin original. Aplicar la traslacin inversa para devolver el eje de rotacin a su posicin espacial original.
Podemos transformar el eje de rotacin dentro de cualquiera de los tres ejes de coordenadas. Ll eje-z es a menudo una eleccin conveniente. \ despus consideramos una secuencia de transformacin usando la matriz de rotacin del eje-z (Figura 5.42). Un eje de rotacin puede definirse con dos posiciones de coordenadas, como en la Figura 5 . 4 3 , o con un puni de coordenadas y ngulos de direccin (o cosenos de direccin) entre el eje de rotacin y dos de los ejes de coordenadas. Asumimos que el eje de rotacin se define con dos puntos, como se ilustra, y que la direccin de rotacin va a ser en el sentido contrario a las agujas del reloj cuando se mira a lo largo del eje de P a P,. Las componentes del vector del eje de rotacin se calculan entonces del siguiente modo:
3
V=P -P,
2
(5.81)
276
CAPTULO 5
Transformaciones geomtricas
P!
i i i Posicin linciai
V
2
f
2
i i i $
FIGURA 5.42. Cinco pasos de transformacin para obtener una matriz compuesta para la rotacin alrededor de un eje arbitrario, con el eje de rotacin proyectado sobre el eje z. Y el vector unidad del eje de rotacin u es:
Y
(5.82)
donde los componentes /, b y c son los cosenos de direccin para la rotacin del eje: c= Si la rotacin se va a realizar en sentido contrario (en el sentido de las agujas del reloj cuando se mira de P-, a P,) entonces deberamos invertir el vector de eje V y el vector unidad u de tal manera que apuntasen en la direccin de P a P, El primer paso en la secuencia de rotacin es establecer la matriz de traslacin que recoloca el eje de rotacin, de tal forma que pasa a travs del origen de coordenadas. Mientras queramos una rotacin en sentido contrario a las agujas del reloj cuando miramos a lo largo del eje de P a P (Figura 5.43) movemos el punto P| al origen. (Si la rotacin ha sido especificada en la direccin opuesta, deberemos mover P-, al origen). Esta matriz de traslacin es:
7 2 (
1 0 i = 0 0 0
I
0 O
-y,
-z
I
o
(5.
y
La cual recoloca el eje de rotacin y el objeto tal y como se muestra en la Figura 5.44.
277
i
z FIGURA5.43. Un eje de rotacin (lnea de puntos) definido por los puntos P y P,. La direccin para el vector de eje unidad u se determina especificando la direccin de rotacin.
(
A continuacin hay que formular las transformaciones que colocarn el eje de rotacin sobre el eje z. Podemos usar las rotaciones del eje de coordenadas para llevar a cabo este alineamiento en dos pasos, y hay disponibles un cierto nmero de modos de desarrollar estos dos pasos. Para este ejemplo, primero giramos alrededor del eje x y despus alrededor del eje y. La rotacin del eje x obtiene el vector u dentro del plano xz, y la rotacin del eje y cambia la direccin de u sobre el eje z. Estas dos rotaciones se ilustran en la Figura 5.45 para una posible orientacin del vector u. Mientras los clculos de rotacin impliquen funciones seno y coseno, podemos usar operaciones de vectores estndar (Apndice A) para obtener los elementos de las dos matrices de rotacin. Puede utilizarse un producto escalar de vectores para determinar el trmino coseno y un producto vectorial de vectores para calcular el trmino seno. Establecemos la matriz de transformacin para la rotacin alrededor del eje x, determinando los valores para el seno y el coseno del ngulo de rotacin necesario para obtener u dentro del plano yz. Este ngulo de rotacin es el ngulo entre la proyeccin de u en el plano yz y el eje positivo de z (Figura 5.46). Si representamos la proyeccin de u en el plano yz como el vector iT - (0, />, c) entonces el coseno del ngulo de rotacin a puede determinarse a partir del producto escalar de u' y el vector unitario u, a lo largo del eje z:
U II
cosa =
ii
(5.85)
In
De manera similar, podemos detemiinar el seno de a a partir del producto vectorial de u' y u . La forma independiente de las coordenadas de este producto vectorial es:
A
(a)
FIGURA 5.45. El vector unidad u se gira sobre el eje x para dejarlo en el plano xz (a), y despus se gira alrededor del eje y para alinearlo con el eje z (b).
FIGURA 5.46. La rotacin de u alrededor del eje x dentro del plano xz se lleva a cabo rotando u' (que es la proyeccin de u en el plano yz) a travs del ngulo a SObfC el eje z.
UIU u' X
u, I sin a
(5.87)
(5W
z
Igualando las Ecuaciones 5.87 y 5.88, y sabiendo que | u | = I y | u' | = d, tenemos: d sin a= b
sintc =
d Ahora que hemos delerminado los valores para eos a y sin e n funcin de las componcnlcs del veelor u. podemos establecer los elementos de la matriz para la rotacin de este vector sobre el eje x y dentro del plano 1 0 0 0 r d b d 0 0 _b d c d 0 0 0 1 (3.90)
(5.89)
El siguiente paso en la formulacin de la secuencia de transformaciones es determinar la matriz que cambiar en sentido contrario a las agujas del reloj el vector unidad en el plano xz alrededor del eje v sobre el eje positivo z. La Figura 5.47 muestra la orientacin del vector unidad en el plano xz, resultante de la rotacin sobre el eje x. Este vector, etiquetado como u", tiene el valor a para su componente x, mientras que la rotacin sobre el eje x deja la componente x invariable. Su componente z es d(el mdulo de u') porque el vector u' ha sido rolado sobre el eje z. Y la componente y de u" es 0, porque ahora se encuentra en el plano xz. De nuevo podemos determinar el coseno del ngulo de rotacin /i a partir del producto escalar de los vectores unidad u" y u_ As,
u"u.
(5.91)
l 1KI
mientras | u | = | u" | - I. Comparando la forma independiente de las coordenadas del producto vectorial:
z
(5.92)
(3.93)
encontramos que, sin /3 = -a Por lano, la matriz de transformacin para la rotacin de u" sobre el eje y es d a 0 0 I 0 0 -a 0 d 0 0 0 (5.95) (5.94)
o o
279
FIGURA 5.47. Rotacin de un vector unidad u" (el vector u despus de la rotacin dentro del plano xz) sobre el eje y. Un ngulo de rotacin positivo alinea u" con el vector u.
FIGURA 5.48. Sistema de coordenadas local para un eje de rotacin definido por el vector unidad u.
Con las transformaciones de matrices 5.84, 5.90 y 5.95, alineamos el eje de rotacin con el eje positivo z. El ngulo de rotacin especificado 6 puede ahora aplicarse como una rotacin alrededor del eje z: cosO (0) = sin 6 0 0 -sin0 cos# 0 0 0 0 0 0 0 1 0 1 (5.96)
Para completar la rotacin requerida sobre el eje dado, necesitamos transformar el eje de rotacin de vuelta a su posicin original. Esto se hace aplicando la inversa de las transformaciones 5.84, 5.90 y 5.95. La matriz de transformacin para la rotacin sobre un eje arbitrario puede entonces expresarse como la composicin de estas siete transformaciones individuales:
R(r9)
(5.97)
Un mtodo algo ms rpido, pero quizs menos intuitivo, para obtener la matriz de rotacin compuesta R .(/})-R () es hacer uso del hecho de que la matriz compuesta para cualquier secuencia de rotaciones tridimensionales es de la forma:
v Y
1.
'I
I % %
o
(5.98)
La submatriz de 3 por 3 superior izquierda de esta matriz es ortogonal. Esto significa que las filas (o las columnas) de esta submatriz forman un conjunto de vectores unidad ortogonales que son rotados con la matriz R sobre los ejes x.yyz respectivamente: "f
=
"l R
1
0 0 1
^1
, R
%
1
1 1
VA
R
1
fol
0 1 1 (5.99)
%=
Por tanto, podemos establecer un sistema de coordenadas local con uno de sus ejes alineado con el eje de rotacin. Entonces los vectores unidad para los tres ejes de coordenadas se usan para construir las columnas
280
CAPTULO 5
Transformaciones geomtricas
de la matriz de rotacin. Asumiendo que el eje de rotacin no es paralelo a ninguno de los ejes de coordenadas, podramos formar el siguiente conjunto de vectores unidad locales (Figura 5.48).
u; = u
|uxu |
(
Si expresamos los elementos de los vectores unidad locales para la rotacin de ejes como:
=(
vl'
v2^'.3)
(5101)
entonces la matriz compuesta requerida, que es igual al producto de R (/J)-R .(a) es:
r A
"',2
0" 0
t
0
yl
&
U
(5.102)
'z2
0
1
0
x y
0
r
Esta matriz transforma los vectores unidad u' , u' y u' en los ejes x, y y z, respectivamente. Y esto alinea el eje de rotacin con el eje z, porque u' - u.
v)
tambin podemos pensar en un cuaternio como en un nmero complejo de mayor orden con una parte real (la parte escalar) y tres partes complejas (los elementos del vector v). Una rotacin sobre cualquier eje pasando por el origen de coordenadas, se lleva a cabo estableciendo primero un cuaternio unidad con las partes escalar y vectorial: s = cos , 2 v = u sin ^ 2 (5.103)
donde u es el vector unidad a lo largo del eje de rotacin seleccionado y 6es el ngulo de rotacin especificado sobre este eje (Figura 5.49). Cualquier posicin de un punto P que va a ser rotado por este cuaternio puede representarse en notacin cuaternal como:
P = (0.p)
con las coordenadas del punto como la parte vectorial p = (x, v, z). La rotacin del punto entonces se lleva a cabo con la operacin cuaternal:
P'= P/-'
/
l
(5.104)
donde q~ = (s, - v ) es la inversa del cuaiernio unidad q con las partes escalar y vectorial dadas en las Lalaciones 5.103. Esta transformacin produce el siguiente nuevo cuatemio. P ' = ( 0 , p')
(5.105)
El segundo trmino en este par ordenado es la posicin del punto rotado p\ el cual es evaluado con el producto escalar y el producto vectorial del vector como:
P' - s p f v(p - v) t 2.v(v x p) + v x (v x p)
2
(5.106)
Los valores para los parmetros s y v se obtienen de las expresiones 5.103. Muchos sistemas de grficos por computadora usan implementaciones hardware eficientes de estos clculos vectoriales para desarrollar rpidas rotaciones de objetos tridimensionales. La transformacin dada por la Ecucacin 5.104 es equivalente a la rotacin sobre un eje que pasa a travs del origen de coordenadas. Esto es lo mismo que la secuencia de transformaciones de rotacin de las Ecuaciones 5.97 que alinea l eje de rotacin con el eje z, realizan una rotacin alrededor de z, y despus devuelven el eje de rotacin a su orientacin original en el origen de coordenadas. Podemos evaluar los trminos de las Ecuaciones 5.106 usando la definicin de multiplicacin de cuaternios que se da en el Apndice A. Adems, designando los componentes de la parte vectorial de q como \ = (a, , c) obtenemos los elementos para la matriz.de rotacin compuesta R " (a)-R " (j3)-R (0)-R (/VR (a) en la forma de 3 por 3 como:
l l v v :r v r
1 - 2b - 2c M (0)=
R
Los clculos implicados en esta matriz pueden reducirse drsticamente sustituyendo los valores especficos por los parmetros a, />, c y s, y luego usando las siguientes identidades trigonomtricas para simplificar los trminos. <0 0 ,.2 0 r - = cos0, 2 s i n = 1 -2sin" 2
2
As. podemos recscribir la matriz 5.107 como: i*?(l-cos0) + cosfl M (0) = tt it (\-cos0) + u. sin0
v t
W,M,(1-COS0)-//.
sin0
um.(\ hji.(\
M ' (
-COS0J
+ H.,
sin0 sin0
(5.108)
w ; ; ( l - c o s 0 ) + cos0
-COS0)-I,
ti u {\- eos 0
: x
) M v
282
donde u , u^. y u, son los componentes del vector del eje unidad u. Para completar la secuencia de transformaciones para rotar sobre un eje de rotacin situado aleatoriamente, necesitamos incluir las traslaciones que mueven el eje de rotacin al eje de coordenadas y lo devuelven a su posicin original. As, la expresin completa de la rotacin cuaterna!, correspondiente a la Ecuacin 5.97, es:
v
R(0)- T ' - I V I ^ T
(5.109)
Como ejemplo, podemos desarrollar una rotacin sobre el eje z estableciendo un vector para el eje de rotacin u al vector unidad (0,0,1). Sustituyendo los componentes de este vector en la matriz 5.108, obtenemos una versin de la matriz de rotacin del eje-z de 3 por 3, R (0), en las ecuaciones de transformacin 5.74. De manera similar, sustituyendo los valores de rotacin del cuatemio unidad en las ecuaciones de transformacin 5.104. se obtienen los valores de las coordenadas rotadas de las Ecuaciones 5.73. En el siguiente cdigo, se dan ejemplos de procedimientos que podran usarse para construir una matriz de rotacin tridimensional. La representacin cuaterna! de la Ecuacin 5.109 se usa para establecer los elementos de la matriz para una rotacin tridimensional general.
z
class
wcPt3D
{ y, Z;
j
/* void
public: G L f l o a t X,
typedef
float
Matrix4x4
[4] [4] ;
Matrix4x4
Construye
(Matrix4x4
matldent4x4)
{
GLint for
< 4
matldent4x4
i
[row] [ c o l ]
/*
Premultiplica
la
matriz
mi por
la
m a t r i z m2, mi,
almacena m2)
el
r e s u l t a d o en
m2.
*/
void matrix4x4PreMultiply
(Matrix4x4
Matrix4x4
(
GLint row, col; matTemp; 0; row 0; < col 4; row++) ; col++) [row] [0] [1] [ c o l ] * m2 * mi (0] ( c o l ] [row] [ 2 ] + mi * m2 [row] t i ] [21 [ c o l ) * + m2 mi for (row 0; for m2 row < 4; row++) col* + ) [row][col]; ( c o l * 0; COl < 4; [row][col] = mi Matrix4x4 for (row Cor
(COl matTemp
< 4
[row] I c o l ]
[ r o w ] [3] * m2 [3] [ c o l ] ;
- matTemp
}
void translate3D (GLfloat tx, GLfloat ty, GLfloat tz)
Matrix4x4
matTransl3D;
/*
Inicializa
la matriz
de
traslacin
con
la
matriz
identidad.
*/
matrix4x4SetIdentity
(matTransl3D);
= = =
/*
Concatena
la
matriz
de
traslacin
con
matRot.
*/
matrix4x4PreMultiply
(matTransl3D,
matRot);
void
rotate3D
(wcPt3D
pl,
wcPt3D
p2,
GLfloat
radianAngle)
Matrix4x4 GLfloat
axisVectLength
(p2.y (p2.z GLfloat GLfloat GLfloat GLfloat cosA oneC sinA ux = h = = eos 1 -
*
*
(pa.y - p i . y
(p2.z
- pl.z) ) ;
G L f l o a t uy G L f l o a t uz
/*
Configura
la
matriz
de
t r a s l a c i n para -pl.z);
mover p l
al
origen.
*/
translate3D
(-pl.x,
-pl.y,
/*
Inicializa
matQuaternionRot
con
la
matriz
identidad.
*/
matrix4x4Set!dentity
(matQuaternionRot};
[0] [0] [0] [1] [0] [2] [1] [0] [1] [1] [1] [2] [2] [0] [2] [1] [2] [2]
SI
= uy*ux*oneC + UZ*SnA;
s
E
+ cosA;
ux*sinA; uy*sinA;
+ ux*sinA; + e o s A;
/*
Combina
matQuaternionRot
con
la
matriz
de
traslacin..*/..
matrix4x4PreMultiply
(matQuaternionRot,
m a t R o t ) ,-
/* *
Configura producto
la de
matTransl3D matrices
inversa
la
concatena
con
el
anteriores.*/
284
translate3D
(pl.x,
pi.y,
pl.z);
}
void displayFcn (void)
{
/* /* Introducir Inicializa los parmetros con la de rotacin. */ */
matRot
matriz
identidad:
parmetros objeto
Mostrar
girado.
f
;:'
*1
y
(5.II0) 1
.I_
La transformacin de cambio de escala tridimensional para una posicin de un punto puede representarse como: P'
v v
(5.111)
donde a los parmetros de escala .v , s y .v se les asignan cualesquiera valores positivos. Las expresiones explcitas para la transformacin de cambio de escala respecto del origen son: x' = x -v ,
v
y' -y
z' = z s
(5.112)
Cambiar la escala de un objeto con la transformacin dada por las Ecuaciones 5.110 cambia la posicin del objeto respecto del origen de coordenadas. Un valor del parmetro superior a I mueve un punto alejndolo del origen en la correspondiente direccin de coordenadas. De la misma manera, un valor de parmetro inferior a 1 mueve un punto acercndolo al origen en esa direccin de coordenadas. Adems, si los parmetros de escala no son todos iguales, las dimensiones relativas del objeto transformado cambian. La forma original de un objeto se conserva realizando un cambio de escala uniforme'. s - L = s . El resultado de aplicar un cambio de escala uniforme sobre un objeto con cada parmetro de escala igual a 2 se ilustra en la Figura 5.50.
x z
Dado que algunos paquetes grficos slo ofrecen una rutina que realiza cambios de escala respecto al origen de coordenadas, podemos construir siempre una transformacin de cambio de escala con respecto a cualquier posicin Jija seleccionada (.*" zj) usando la siguiente secuencia de transformaciones.
285
FIGURA 5.50. Duplicar el tamao de un objeto con la transformacin 5.110 tambin mueve el objeto alejndolo del origen.
Posicin original
(a)
Traslacin (b)
FIGURA 5.51. Secuencia de transformaciones para el cambio de escala de un objeto respecto a un punto lijo seleccionado usando la Ecuacin 5.110.
Trasladar el punto fijo al origen. Aplicar la transformacin de cambio de escala respeto al origen de coordenadas usando la Ecuacin 5.110. Trasladar el punto fijo de vuelta a su posicin original.
Esta secuencia de transformaciones se muestra en la Figura 5.51. La representacin de la matriz para un punto fijo de cambio de escala arbitrario puede expresarse como la concatenacin de estas transformaciones de traslacin - cambio de escala - traslacin: \ 0
T , , y, , : , ) SU,, V 9 k ) T ( - A - , , - v,., - :., ) =
0 | 0 0 0 0
(\-s )x
t
0 0
Podemos establecer procedimientos programados para la construccin de matrices de escalado tridimensional, usando tanto la secuencia traslacin-escalado-traslacin como la incorporacin directa de las coordenadas del punto fijo. En el siguiente cdigo de ejemplo, demostramos una construccin directa de una matriz de escalado tridimensional relativa a un punto fijo seleccionado usando los clculos de la Ecuacin 5.113.
class
wcPt3D
i
prvate: GLfloat public: /* * Constructor Inicializa predeterminado: en (0.0, 0.0, 0.0). la posicin x, y, z,-
V
wcPt3D ( ) { X - y - z - 0 . 0 ;
setCoords
(GLfloat
xCoord,
GLfloat
yCoord,
GLfloat
zCoord)
]
GLfloat g e t x return X; { ) const
}
GLfloat g e t y return y; { ) const
}
GLfloat getz z; const {
return
typedef void {
f l o a t Matrix4x4 (GLfloat
scale3D
sx,
Matrix4x4 /*
Inicializa
matrix4x4SetIdentity matScale3D mat-floaleiD matScale3D matScale3D matScale3D matScale3D [0][0J [fi] [ 3 ] [1] [1] [1][3] [2][2] [2][3]
* f -i xf*dPt- . g f l t x ( ) ; * fixedPt.gety ( );
sy)
^|fc sz)
:
* fixedPt.gM'(
287
Una inversa, la matriz de cambio de escala tridimensional se establece para la Ecuacin 5.110 o la Ecuacin 5.113 sustituyendo cada parmetro de escala (s s y s ) por su recproco. Pero esta transformacin inversa es indefinida si a cualquier parmetro de escala se le asigna el valor 0. La matriz inversa genera una transformacin de cambio de escala opuesta y la concatenacin de una matriz de cambio de escala tridimensional con su inversa da lugar a la matriz identidad.
v9 z
( x, y,
z;
Matrix4x4
4] [4] ;
Construye
void {
matrix4x4SetIdentity
{Matrix4x4
matldent4x4)
row,
(row > 0;
(COl = 0; matldent4x4
[row] [ c o l ]
)
/* Premultiplica l a m a t r i z m i p o r l a m a t r i z m2, (Matrix4x4 mi, almacena el m2) r e s u l t a d o e n m2. */
void matrix4x4PreMultiply
Matrix4x4
288
GLint
row,
col; matTemp; row < 4; row++) ; m2 mi COl++) [ r o w ] [01 * m2 [01 [ c o l ] + mi [row] [ 1 ] + [1] [ c o l ] [row] [ 3 ] col++) [row] [ c o l ] ; + mi * m2 [row] [2] [3] [ c o l ] \ * m2 [2] [ c o l ] = mi
Matrix4x4 for
( c o l = 0;
COl < 4
[row] [ c o l l
for
0;
row++) 4;
[row] [ c o l ]
= matTemp
)
/* P r o c e d i m i e n t o para g e n e r a r translate3D (GLfloat tx, la matriz OLfloat de traslacin GLfloat tz) 3D. */
void
ty,
{ Matrix4x4 /*
Inicializa
matTransl3D con
matrix4x4PreMultiply
(matTransl3D,
matComposite;
/*
P r o c e d i m i e n t o para g e n e r a r (wcPt3D p l ,
una
matriz de GLfloat
rotacin
de
cuaternios.
*/
void rotate3D
wcPt3D p 2 ,
radianAngle)
BBllfl
float float float float float float /*
Matrix4x4
- pl.y)
pl.z));
Define
la matriz la (-pl.x,
matriz
con matComposite.
-pl.y,
matQuatRot
con
*/
289
[0] [1] [0] [2] [1] [0] [1] [ U [13 [ 2 ] [2] [1]
= = = = =
ux*uy*oneC
uz*8nA;
ux*SnA; uy*SriA;
Concatena
matQuatRot
(matQuatRot, de
matriz
la matriz pl.y,
translate3D ) /*
la
matriz sy,
de
cambio de sz,
e s c a l a 3D. fixedPt)
*/
void
GLfloat
GLfloat
wcPt3D
{
Matrix4x4 /* matScale3D; la matriz de cambio de escala con la matriz identidad. */
Inicializa
matrix4x4SetIdentity matScale3D matScale3D matScale3D matScale3D matScale3D matScale3D /* [0] [0] [0] [3] [1][1) [1][3] [2][2] [2][3]
(matScale3D);
= sx,= = = (1 (1 sz; ti sz) con * la fixedPt.z; matriz compuesta. */ sx) ay) * fixedPt.x; = sy,* fixedPt.y;
Concatena
matScale3D
matrix4x4PreMultiply
(matScale3D,
matComposite);
}
void displayFcn (void)
^ ^ ^ ^ ^ ^ ^ ^ ^
/* /* /* /* /* * Introducir Establecer Inicializar Invocar a van a (pl, (sx, la las la descripcin del de rutinas matriz de objeto. */ r o t a c i n y cambio de e s c a l a . */ matriz el identidad: */ */ Introducir loa parmetros traslacin, con la en t r a n s f o r m a c i n d e v i s u a l i z a c i n 3D. matComposite
matrix4x4SetIdentity
(matComposite); transformacin // // Primera Segunda orden en que rotacin. cambio d e e s c a l a . */ transformacin: transformacin: final:
rotate3D scale3D
translate3D
Transformacin
traslacin.
/*
Llamada
las
rutinas
que
muestran
los
objetos
transformados.
*/
Reflexiones tridimensionales
Una reflexin en un espacio tridimensional puede desarrollarse con respecto a un eje Je reflexin determinado o con respecto a un plano de reflexin. En general, las matrices de reflexin tridimensionales se establecen de manera similar a las mismas de dos dimensiones. Las reflexiones respecto a un eje dado son equivalentes a rotaciones de 180 sobre dicho eje. Las reflexiones con respecto al plano son equivalentes a rotaciones de i 80 en un espacio cuatridimensional. Cuando el plano de reflexin es un plano de coordenadas (vi, xz, oyz) podemos pensar en la transformacin como en una conversin entre un sistema a izquierdas y un sistema a derechas (Apndice A). Un ejemplo de una reflexin que convierte especificaciones de coordenadas de un sistema a derechas a un sistema a izquierdas (o viceversa) se muestra en la Figura 5.52. Esta transformacin cambia el signo de las coordenadas z, dejando los valores para las coordenadas x cy invariables. La representacin de la matriz para esta reflexin relativa al plano xy es: 0 1)
o
W
: l liIi
o I
-I Q
0
(5.114)
Las matrices de transformacin para invertir las coordenadas x o las coordenadas y se definen de manera similar, como reflexiones relativas al plano yz o al plano .vz, respectivamente. Las reflexiones sobre otros planos pueden obtenerse como una combinacin de rotaciones y rellexiones en el plano de coordenadas.
Inclinaciones tridimensionales
Estas transformaciones pueden usarse para modificar las formas de los objetos, tal como se hace en las aplicaciones bidimensionales. Adems, se aplican en transformaciones de vistas para proyecciones de perspectivas. Las transformaciones de inclinacin relativas a los ejes x e y son las mismas que las vistas en la Seccin 5.5. Para aplicaciones tridimensionales, podemos generar inclinaciones respecto al eje z. Una transformacin de inclinacin general en el eje z relativa a una posicin de referencia determinada se obtiene con la siguiente matriz.
sil
sh M .indinado
- s h - irl
n
(5.115)
A los parmetros de inclinacin sh. y sh se les puede asignar cualquier valor real. El efecto de esta matriz de transformacin es alterar los valores de las coordenadas x e y en una cantidad que sea proporcional a la distancia desde z mientras que se deja la coordenada z invariable. Las reas del plano que son perpendiculares al eje z se varan as en una cantidad igual a z f Un ejemplo de los efectos de esta matriz de inclinacin en un cubo se muestra en la Figura 5.53 para los valores de inclinacin sh. = sh , = I y una posicin de referencia z - = 0. Las matrices de transformacin tridimensional para una inclinacin en el eje x y
v r reJ> v Z( rc|
5.15
291
Reflexin
respecto al plano xy
FIGURA 5.52. Conversin de especificaciones de coordenadas entre un sistema a derechas y otro a izquierdas puede llevarse a cabo con la transformacin de reflexin.
FIGURA5.53. Un cubo (a) inclinado respecto al origen (b) mediante la matriz de transformacin 5.115, con sh. = sh. =1.
v
una inclinacin del eje y es similar a las matrices bidimensionales. Simplemente necesitamos aadir una tila o una columna para los parmetros de inclinacin de las coordenadas z.
R=
.v2
(5.116)
292
CAPTULO 5
'transformaciones geomtricas
FIGURA 5.54. Un sistcm;i de coordenadas v Y'z' definido dentro de un sislcma xyz. Una descripcin de una escena es transferida a la nueva referencia de coordenadas usando una secuencia de transformacin que superpone el marco x'y'z' sobre los ejes xyz.
la cual transforma los vectores unidad u' u' y u' dentro de los ejes x,y y respectivamente. La secuencia completa de transformaciones de coordenadas se da entonces con la matriz compuesta K T. Esta matriz transforma correctamente las descripciones de coordenadas de un sistema cartesiano a olro, incluso si un sistema es a izquierdas y el otro a derechas.
v> z
y ! i v v **
+ +
z
,=
(5JI7)
'= % $
V ^ V " * *
se llama transformacin afn. Cada una de las coordenadas transformadas ,v', y' y z ', es una funcin lineal del origen ile coordenadas % y y z, y los parmetros a--y h son constantes determinadas por el tipo de transformacin. Las iransformaciones afines (en dos dimensiones, tres dimensiones o ms dimensiones) tienen las propiedades generales de que las lneas paralelas se transforman en lneas paralelas y los puntos finitos se asignan a puntos finitos. Traslacin, rotacin, cambio de escala, reflexin e inclinacin son ejemplos de transformaciones afines. Siempre podemos expresar cualquier transformacin afn como alguna composicin de estas cinco transformaciones. Otro ejemplo de transformacin alin es la conversin de descripciones de coordenadas para una escena de un sistema de referencia a oro, mientras esta transformacin pueda describirse como combinacin de traslacin y rotacin. Una transformacin afn que slo implica transformacin, rotacin y reflexin con serva los ngulos y longitudes, as como lincas paralelas. Para cada una de estas tres transformaciones, la longitud de la linca y el ngulo entre cualesquiera dos lneas se mantiene igual despus de la transformacin.
t k
293
A los parmetros de traslacin t x , ty y tz se les puede asignar cualquier valor real, y el cdigo del sufijo a ser anexado es o bien f (float) o d (double). Para aplicaciones bidimensionales, establecemos tz = 0.0. Y una posicin bidimensional se representa como una matriz columna de 4 elementos con la componente z igual a 0.0. La matriz de traslacin generada por esta funcin se usa para transformar las posiciones de los objetos definidos despus de que se baya invocado a esta funcin. Por ejemplo, para trasladar posiciones definidas de coordenadas 25 unidades en la direccin x y - 1 0 unidades en la direccin y utilizamos la instruccin
glTranslatef {25.0, -10.0, 0.0);
donde el vector v = ( v x , v y , v z ) puede tomar cualquier valor en punto flotante para sus componentes. Este vector define la orientacin para la rotacin del elemento que pasa a travs del origen de coordenadas. Si v no se especifica como vector unidad, entonces se normaliza automticamente antes de que Los elementos de la matriz de rotacin sean calculados. El cdigo de sufijo puede ser bien f o bien d, y el parmetro t h e t a va a ser asignado al ngulo de rotacin en grados, cuya rutina lo convierte en radianes para los clculos trigonomtricos. Esta funcin genera una matriz de rotacin usando los clculos cuaterna les de la Ecuacin 5.108, la cual se aplica a las posiciones definidas despus de que sea llamada esta funcin. Por ejemplo, la instruccin:
glRotatef (90.0, 0.0, 0.0, 1.0);
define una matriz para rotaciones de 90 sobre el eje z. Obtenemos una matriz de cambio de escala de 4 por 4 con respecto al origen de coordenadas con la siguiente rutina.
glScale* (sx, sy, sz);
El cdigo sufijo es de nuevo t o d, y los parmetros de escala pueden tener como valor nmeros reales. Por tanto, esta funcin generar tambin reflexiones cuando se asignen valores negativos a los parmetros de escala. Por ejemplo, la siguiente instruccin genera una matriz que aplica un cambio de escala con el factor 2 en la direccin x, con el factor 3 en la direccin y, y aplica una reflexin con respecto al eje x.
glScalef (2.G, -3.0, 1.0);
Un valor de cero para cualquier parmetro de escala puede causar un error de procesamiento, porque la matriz inversa no puede calcularse. La matriz de cambio de escala-reflexin se aplica a los objetos que se definan con posterioridad.
294
CAPTULO 5 Transformacionesgeomctru as
la cual designa la matriz modclvicw de 4 por 4 como la m a t r i z actual. Las rutinas de transformacin de OpenCiL discutidas en la seccin anterior se usan para mollificar la matriz modelview, la cual se aplica para transformar posiciones de coordenadas en una escena. Otros dos modos que podemos establecer con la funcin glMatrixMode son el modo textura {texiure mode) y el modo color (color mode). La matriz de textura se usa para mapear patrones de textura a superficies y la matriz de color se usa para convertir de un modelo de color a otro. Veremos las transformaciones de visualizaciones, proyeccin, textura y color en los siguientes captulos. Por el momento, limitaremos esta exposicin a los detalles de transformaciones geomtricas. 1.1 argumento predeterminado para la funcin glMatrizMode es GLMODELVIEW. Una vez que estamos en el modo modclvicw (o cualquier otro modo) una llamada a una rutina de transformacin eenera una matriz que se multiplica por la matriz actual para esc modo. Adems, podemos asignar valores a los elementos de una matriz actual, y hay dos funciones en las bibliotecas de OpenCiL para este propsito. Con la siguiente funcin, asignamos la matriz identidad a la matriz actual.
glLoadldentity j >;
Alternativamente, podemos asignar otros valores a los elementos de una matriz actual usando;
glLoadMatrx* (elementsl6);
Un subndice simple, un array de 16 elementos de valores en punto llotante, se especifica con el parmetro elementsl6, y un cdigo de sufijo, f o d, se usa para designar tipos de datos. Los elementos en este array deben especificarse por columnas, lis decir, primero se enumeran los cuatro elementos de la primera columna, y luego los cuatro elementos de la segunda columna, la tercera columna y, finalmente, la cuarta columna. Para ilustrar este orden, inicializamos la matriz moldeview con el siguiente cdigo.
glMatrixMode GLfloat GLint for k; k < 16; = float (elems) k..) (k) ; elems (GL_MODELVIEW) ,[16] ;
(k = 0 ; elems IkJ
glLoadMatrixf
4.0 5.0
8.0 9.0
12.0 13.0
ID
De nuevo, el cdigo de sufijo es o bien f o d, y el parmetro otherElementsl6 es un array de subndices simples de 16 elementos que enumera los elementos de alguna otra matriz por columnas. La matriz actual se postmultiplica con la matriz especificada en g i M u l t M a t r i x , y este producto sustituye a la matriz actual. As, asumiendo que la matriz aclual es la matriz modlvlw, la cual designamos como M, la matriz modelview actualizada se calcula como:
M = M M'
donde M' representa la matriz cuyos elementos se especifican con el parmetro otherElementsl6 en la instruccin g l M u l t M a t r i x anterior. La funcin g l M u l t M a t r i x tambin puede usarse para establecer cualquier secuencia de transformaciones con matrices definidas individualmente. Por ejemplo.
(elemsM2); (elemsMl);
Postmultiplica
la matriz con
identidad MI.
P o s t m u l t i p l i c a M2
la matriz
La primera transformacin que hay que aplicar en esta secuencia es la ltima especificada en el cdigo. Asi, si establecemos una secuencia de transformaciones en un programa OpenGL, podemos pensar en las transformaciones individuales como si estuvieran cargadas en una pila, de tal forma que la ltima operacin especificada es la primera en aplicarse. Esto no es lo que sucede en realidad, pero la analoga con la pila puede ayudar a recordarlo, en un programa OpenGL, una secuencia de transformaciones se aplica en el orden opuesto del que se especific. Tambin es importante tener en mente que OpenGL almacena matrices por columnas. Y una referencia a un elemento de una matriz, tal como en OpenGL, es una referencia al elemento de la columna / y la tila k. Esto es a la inversa que el convenio estndar matemtico, donde el nmero de fila se referencia primero. Pero podemos evitar errores comunes en las referencias de filas y columnas especificando siempre matrices en Open GL como arrays de 16 eemenos, con un solo subndice y recordando que los elementos deben enumerarse por columnas.
que devuelve un nico valor entero al array s t a c k s i z e . Los otros tres modo de matrices tienen un mnimo de profundidad de pila de 2, y podemos determinar la profundidad mxima disponible para cada una en una implementacin particular usando una de las siguientes constantes simblicas de OpenGL: G L _ M A X _ P R O J E C TION_STACK_DEPTH, GL_MAX__TEXTURE_STACK_DEPTH, O G L _ M A X \ _ C O L O R \ _ S T A C K \ _DEPTH.
Inicialmente, la pila de modelview contiene slo la matriz identidad, de tal forma que esta funcin devuelve el valor 1 si realizamos la consulta antes de que haya tenido lugar ningn procesamiento sobre la pila. Hay disponibles constantes simblicas similares para determinar el nmero de matrices que hay actualmente en las otras tres pilas. Tenemos dos funciones disponibles en OpenGL para procesar las matrices que hay en una pila. Estas funciones de procesamiento de la pila son ms eficientes que manipular la pila de matrices de forma individual, particularmente cuando las funciones de la pila se implementan por hardware. Por ejemplo, una implementa-
296
cin hardware puede copiar mltiples elementos de matrices simultneamente. Y podemos mantener una matriz identidad en la pila, de tal forma que inicializaciones de la matriz actual pueden llevarse a cabo ms rpidamente que usando repelidas llamadas a g l L o a d l d e n t i t y . Con la siguiente funcin, copiamos la matriz actual en la cima de la pila activa y almacenamos esa copia en la segunda posicin de la pila.
glPushMatrix ( ) ;
listo nos da matrices duplicadas en las dos posiciones de la cima de la pila. La otra funcin de la pila es:
g l P o p M a t r i x ( ) ,-
la cual destruye la matriz, de la cima de la pila, y la segunda matriz en la pila se convierte en la matriz actual. Para extraer el contenido de la cima de la pila, debe haber al menos dos matrices en la pila. En cualquier otro caso se generar un error.
20(1 - -
Posicin
trasladada
150
- 100
50
50
100
150
2<K)
FIGURA 5.55. Traslacin de un rectngulo usando la funcin OpenGL g l T r a n s l a tef (-200.0, -50.0, 0.0).
200 -j
150-
100
Posicin original
MI
Posicin girada
i i i
I
i -150
-100
i -50
r JO
l 100
1 150
l 200
(90 . 0,
0.0,
FIGURA 5.57. Cambio de escala y reflexin de un rectngulo usando la funcin -150 -100 -50 50 100 150 200 OpenGL glScalef 1.0) (-0.5, 1. 0,
Mientras no queramos combinar transformaciones, lo siguiente ser establecer la matriz actual como la matriz identidad. Luego se construye una matriz, de rotacin y se concatena con la matriz actual (la matriz identidad). Cuando el rectngulo original es referenciado de nuevo, se gira sobre el eje z y se muestra en color rojo (gris oscuro en la figura) (Figura 5.56). Repetimos este proceso una vez ms para generar el rectngulo cambiado de escala y reflejado que se muestra en la Figura 5.57.
(0.0, (50,
100,
200,
(1.0, (50,
0.0,
0.0); -50.0, 150); Carga 0.0, 0.0); // // Establece los parmetros rojo de traslacin. Muestra un rectngulo trasladado. actual. 90 grados alrededor
glTranalatef
la matriz // //
identidad
como m a t r i z rotacin de
1.0);
(50,
100, ( 100,
rectngulo
rojo girado.
identidad los un
1.0);
parmetros rectngulo
200,
Normalmente, es ms eficiente usar las funciones de procesado de pilas que usar las funciones de manipulacin de matrices. Esto es particularmente cierto cuando queremos hacer varios cambios en las vistas o en las transformaciones geomtricas. En el siguiente cdigo, repetimos las transformaciones del rectngulo del ejemplo anterior usando el procesado de la pila en lugar de la funcin g l L o a d l d e n t i t y .
glMatrixMode glColor3f
(0.0,
glRecti
(50,
100, ( );
200, //
150);
//
Presenta
un
glPushMatrix glColor3
la matriz el color
(1.0,
0.0,
Establece
parmetros
Muestra un
Recorre
la m a t r i z de
la matriz
Define
rotacin
150);
Muestra un de
Recorre 1.0); //
la matriz
(-0.5, (50,
Establece //
los
100,
200,
150);
Muestra un
transformado.
Para nuestro programa de ejemplo final de transformacin geomtrica, damos una versin de OpenGL para cdigo de transformaciones compuestas tridimensionales en la Seccin 5.13. Como OpenGL postmultiplica matrices de transformacin segn se las va llamando, debemos ahora invocar las transformaciones en el orden opuesto al que vayan a ser aplicadas. As, cada llamada a una transformacin subsiguiente concatena la designada matriz de transformacin a la derecha de la matriz compuesta. Como no hemos explorado an las rutinas de visualizacin tridimensional de OpenGL (Captulo 7) este programa podra completarse usando operaciones de visualizacin bidimensional de OpenGL y aplicando las transformaciones geomtricas a objetos en el plano xy.
{ x, y, z;
\* *
generar
una
matriz
para
girar
alrededor
de
void /*
(wcPt3D p l , las
Establece vx vy vz -
Especifica
en
orden
inverso:
*/
glTranslatef glRotatef
(pl.x,
BU posicin original.
Rotacin alrededor
(thetaDegrees, (-pl.x,
vx,
glTranslatef
-pl.y,
-pl.z);
origen.
5.18 Resumen
299
/* *
para
generar a
una
matriz
para
la
transformacin
de
cambio
respecto
un punto
fijo
arbitrario.
void { /* /*
scale3D
(GLfloat
sx,
GLfloat
sy,
GLfloat
sz,
wcPt3D
fixedPt)
Especifica (3)
la
secuencia el punto
en
orden
inverso:
*/
Traslada
fixedPt.y, (2)
Escalado origen
origen. */
coordenadas:
glTranslatef
-fixedPt.y,
-fixedPt.z);
H
void displayFcn (void)
{
/* /* /* Introducir Definir Mostrar las el la descripcin de */ del objeto. y */ transformacin 3D. */ rutinas objeto. visualizacin
(GL_MODELVIEW); los los parmetros puntos que el de traslacin pl de tx, ty, el */ sx, sy, sz y */ fixedPt. */ tz. eje */ de rotacin. */
definen,
y p2,
en grados
ngulo
rotacin.
l o s parmetros
de cambio de
escala:
las
geomtricas
en orden final:
inverso:
Transformacin // Segunda //
fixedPt);
transformacin:
thetaDegrees); que
Primera los
transformacin:
rutinas
mueBtran
objetos
transformados.
5.18 RESUMEN
Las transformaciones geomtricas bsicas son la traslacin, la rotacin y el cambio de escala. La traslacin mueve un objeto con una trayectoria en lnea recta de una posicin a otra. La rotacin mueve un objeto de una posicin a otra a lo largo de una trayectoria circular sobre un eje de rotacin especfico. Para aplicaciones bidimensionales. la trayectoria de rotacin se encuentra en el plano xy sobre un eje que es paralelo al eje z. Las transformaciones de cambio de escala cambian las dimensiones de un objeto con respecto a una posicin fija. Podemos expresar transformaciones bidimensionales como operadores de matrices de 3 por 3 y transformaciones tridimensionales como operadores de matrices de 4 por 4. de tal forma que esas secuencias de transformaciones pueden concatenarse dentro de una matriz compuesta. O, en general, podemos representar tanto transformaciones bidimensionales como tridimensionales con matrices de 4 por 4. Representar operaciones de transformaciones geomtricas con matrices es una formulacin eficiente, en tanto en cuanto nos permite reducir los clculos aplicando una matriz compuesta a una descripcin de un objeto para obtener su posicin transformada. Para hacer esto, expresamos posiciones de coordenadas como matrices columna. IZIegimos la repre-
300
CAPTULO 5
Transformaciones geomtrit as
sentacin de matriz columna para puntos de coordenadas porque ese es el convenio matemtico estndar, y muchos patinetes grficos siguen dicha convencin. Nos referimos a una matriz de tres o cuatro elementos (vector) como una representacin de coordenadas homogneas. Para transformaciones geomtricas, al c o d i cente homogneo se le asigna el valor 1. Las transformaciones compuestas se forman corno multiplicacin de matrices de traslacin, rotacin, cambio de escala y otras transformaciones. Podemos usar combinaciones de traslacin y rotacin para aplicaciones de animacin, y podemos usar combinaciones de rotacin y cambio de escala para cambiar el tamao de los objetos en cualquier direccin especificada. En general, la multiplicacin de matrices no es conmutativa. Obtenemos diferentes resultados, por ejemplo, si cambiamos el orden de la secuencia traslacin-rotacin. Una secuencia de transformacin que implica slo transformaciones y rotaciones es una transformacin de slidorigido, mientras que los ngulos y las distancias se mantienen invariables. Adems, la subnuuriz superior izquierda de una transformacin de slido-rgido es una matriz ortogonal. As, la rotacin de matrices puede formarse estableciendo la submatriz superior izquierda de 3 por 3 igual a los elementos de los dos veelores unidad ortogonales. Cuando el ngulo es pequeo, podemos reducir el clculo de las rotaciones usando aproximaciones de primer orden para las funciones de seno y coseno. A lo largo de muchos pasos rotacionales, sin embargo, el error de aproximacin puede acumularse y pasar a ser un valor significativo. Oirs transformaciones geomtricas incluyen operaciones de reflexin e inclinacin. Las reflexiones son transformaciones que giran un objeto 180 sobre un eje de reflexin. Esto produce una imagen de espejo del objeto con respecto a dicho eje. Cuando el eje de reflexin est en el plano vr, la reflexin se obtiene como una rotacin en un piano que es perpendicular al plano A V . Las transformaciones de inclinacin distorsionan la forma de un objeto desplazando uno o ms valores de coordenadas en una cantidad proporcional a la distancia respecto de la linea de inclinacin de referencia. Las transformaciones entre sistemas de coordenadas cartesianos se llevan a cabo con una secuencia de transformaciones traslacin-rotacin que hacen que los dos sistemas coincidan. Especificamos el origen de coordenadas y veelores de eje para un marco de referencia respecto al marco de coordenadas de referencia original. Ln un sistema bidimensional, un vector define completamente las direcciones del eje de coordenadas. Pero, en un sistema tridimensional, ha\ que especificar dos de las tres direcciones de los ejes. La transferencia de las descripciones de objetos desde el sistema de coordenadas original al segundo sistema se calcula como la matriz producto de una traslacin que mueve el nuevo origen al antiguo origen de coordenadas y una rotacin para alinear los dos juegos de ejes. La rotacin necesaria para alinear los dos sistemas puede obtenerse del juego ortonormal de vectores de eje para el nuevo sistema. Las transformaciones geomtricas son transformaciones afines. Esto es. pueden expresarse como una funcin lineal de posiciones de coordenadas. Traslacin, rotacin, cambio de escala, reflexin e inclinacin son transformaciones alies. Transforman lneas paralelas en lneas paralelas y posiciones de coordenadas finitas en posiciones finitas. Las transformaciones geomtricas que no implican cambio de escala o inclinacin tambin mantienen los ngulos y las longitudes. Podemos usar operaciones de rasterizacin para desarrollar algunas transformaciones geomtricas sencillas en arrays de pxeles. Para aplicaciones bidiinensionales, podemos usar operaciones de rasterizacin para llevar a cabo traslaciones rpidas, reflexiones > rotaciones en mltiplos de W\ Con un poco ms de procesamiento, podemos realizar rotaciones y cambio de escala rasterizadas de tipo general. La biblioteca bsica de OpenGL contiene tres funciones para aplicar transformaciones individuales de traslacin, rotacin y cambio de escala a posiciones de coordenadas. Cada funcin genera una matriz que se premultiplica con la matriz modelview. As, una secuencia de funciones de transformacin geomtrica deben especificarse en orden inverso: la ltima transformacin invocada es la primera en aplicarse a las posiciones de coordenadas. Las matrices de transformacin se aplican a los objetos definidos con posterioridad. Ademas de acumular secuencias de transformacin en la matriz modelview, podemos establecer esta matriz como la matriz identidad o alguna otra. Podemos tambin formar productos con la matriz modelview y cualquier matriz especificada. Todas las matrices se almacenan en pilas, y OpenGL mantiene cuatro pilas para los distintos upos de transformacin que se usan en las aplicaciones grficas. Podemos usar una funcin de cnsul-
Ejercicios
301
ta en OpenGL para determinar el tamao actual de la pila o la profundidad mxima permitida en la pila para un sistema. Dos rutinas de procesado de pilas estn disponibles: una para copiar la cima de la matriz de la pila a la segunda posicin, y una para eliminar el contenido de la cima de la pila. Varias operaciones estn disponibles en OpenGL para realizar transformaciones de rasterizacin. Un bloque de pxeles puede trasladarse, rotarse, cambiarse de escala o reflejarse con estas operaciones de rasterizacin de OpenGL, La Tabla 5.1 resume las funciones geomtricas de (>pcnGL y las rutinas de matrices vistas en este captulo. Adicionalmente, la tabla enumera algunas funciones relacionadas. TABLA 5.1. RESUMEN DE FUNCIONES PARA TRANSFORMACIONES GEOMTRICAS EN OpenGL. Funcin
glTranslate* glRotate* glScale* glMatrixMode
Descripcin
Especifica los parmetros de traslacin. Especifica los parmetros para la rotacin sobre cualquier eje a travs del origen. Especifica los parmetros de escala respecto al origen de coordenadas. Especifica la matriz actual para transformaciones de visuulizaein geomtrica. transformaciones de proyeccin, transformaciones de textura o transformaciones de color.
Establece la matriz identidad actual. Establece los elementos de la matriz actual. Postmultiplica la matriz actual con la matriz especificada. Obtiene la profundidad mxima de la pila o el nmero de matrices en la pila para el m o d o de matriz seleccionado.
Copia la cima de la pila > almacena la copia en la segunda posicin de la pila. Borra la cima de la pila y mueve la segunda matriz a la cuna de la pila. Especifica los parmetros de escala bidimensionales para operaciones de rasterizacin.
REFERENCIAS
Para tcnicas adicionales que implican matrices y transformaciones geomtricas, vase (ilassner (1990), A n o (991), Kirk(l992), Heckbert 0 994), y Paelh (I995). Exposiciones acerca de coordenadas homogneas en grficos por computadora se pueden encontrar en lilinn y Newell (1978) y en lllinn (I993, 1996, y 1998). Adicionalmente, ejemplos de programas usando (unciones de transformaciones geomtricas en OpenGL se dan en W'oo. Neider. Da vis, y Shreiner (1999). Ejemplos de programas para las funciones de transformaciones geomtricas en OpenGI estn tambin disponibles en el tutorial del sitio web de Natc Robins: htp://www.csMah.edu/nawbins/opengl.hnil. Y un listado completo de funciones de transformaciones geomtricas en OpenGL se ofrecen en Shreiner (2000).
EJERCICIOS
5.1 Escribir un programa de animacin que implemente el ejemplo de procedimiento de rotacin bidimensional de la Seccin 5.1. Un polgono de entrada va a ser rotado repetidamente en pequeos pasos sobre un punto de pivote en el plano vi. Eos pequeos ngulos van a ser usados para cada paso sucesivo en la rotacin, y las aproximado-
302
CAPTULO 5 Transformacionesgeomtricas nos para las funciones de seno y coseno van a ser usadas para agilizar los clculos. Para evitar la acumulacin excesiva de errores de redondeo, reeslablecer los valores de coordenadas originales para el objeto al principio de eadfl nueva revolucin.
5.2
Demostrar que la composicin de dos rotaciones es aditiva mediante la concatenacin de representaciones de matrices para R(#,) y R(&,) para obtener
R(cV )-R(f? )
( 2
R<0,
+ 0)
2
5.3 5.4
Modificar la matriz de transformacin bidimensional (5.39) para hacer un cambio de escala en una direccin arbitraria, con el Un de incluir coordenadas para cualquier punto fijo de cambio de escala especificado (Xj> yfi. Probar que la multiplicacin de transformaciones de matrices para cada una de las siguientes secuencias es conmutativa: (a) (b| (c) Dos rotaciones sucesivas. Dos traslaciones sucesi\as. Dos cambios de escala sucesivos.
5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17
Probar que un cambio de escala uniforme y una rotacin forman un par de operadores conmutativo pero que, en general, el cambio de escala y la rotacin son operaciones no conmutativas. Multiplicar las matrices de cambio de escala, rotacin y traslacin en la Ecuacin 5.42 para verificar los elementos de la matriz de transformacin compuesta. Modificar el programa de ejemplo en la Seccin 5.4 de tal forma que los parmetros de transformacin puedan especificarse como entradas de usuario. Modificar el programa del ejercicio anterior de tal forma que la secuencia de transformaciones pueda ser aplicada a cualquier polgono, con los vrtices especificados como entradas de usuario. Modificar el programa de ejemplo de la Seccin 5.4 de tal forma que el orden de la secuencia de transformaciones geomtricas pueda especificarse como entrada de usuario. Demostrar que la matriz de transformacin (5.55) para una rellexin sobre la lnea y - .Y, es equivalente a una rellcxin relativa al eje X seguida de una rotacin de W en el sentido contrario a las agujas del reloj. Demostrar que la matriz de transformacin (5.56) para una reflexin sobre la lnea y -v, es equivalente a una rellexin relativa al eje v seguida de una rotacin de 90 en el sentido contrario a las agujas del reloj. Demostrar que reflexiones sucesivas sobre el eje x o el eje y son equivalentes a una rotacin en el plano xy alrededor del origen de coordenadas. Determinar la forma de una matriz de transformacin bidimensional para una operacin de rellexin sobre cualquier lnea: y m\ * b. Demostrar que dos reflexiones sucesivas sobre cualquier linea en el plano xy que intersecta con el origen de coordenadas son equivalentes a una rotacin en el plano xy sobre el origen. Determinar una secuencia de transformaciones bsicas que sea equivalente a la matriz de inclinacin en la direccin-.Y(5.57). Determinar una secuencia de transformaciones bsicas que sea equivalente a la matriz de inclinacin en la direccin-r (5.61). Establecer un procedimiento de inclinacin para mostrar caracteres en cursiva tridimensionales dado un vector como fuente de definicin. Es decir, todos los tamaos de los caracteres en esta fuente se definen con segmentos en linea recta, y los caracteres en cursiva se forman con transformaciones de inclinacin. Determinar un valor apropiado para el parmetro de inclinacin mediante la comparacin de cursivas y texto plano en algunas fuentes disponibles. Definir un vector fuente como entrada a la rutina. Deducir las siguientes ecuaciones para transformar un punto de coordenadas P = (.Y, y) en un sistema cartesiano bidimensional en los valores de coordenadas (x\y ) en otro sistema cartesiano que se rota en sentido contrario a las agujas del reloj con el ngulo 0 respecto al primer sistema. Las ecuaciones de transformacin pueden obtenerse proyectando el punto P sobre cada uno de los cuatro ejes y analizando los tringulos rectngulos resultantes.
r :
5.1K
303
y'
-x sin 9 + y e o s 0
Escribir un procedimiento para calcular los elementos de una matriz para la Iransformacin de descripciones de objetos de un sistema de coordenadas cartesiano bidimensional a otro, ll segundo sistema de coordenadas va a definirse eon un pumo origen P y un vector V que da la direccin del eje positivo y para este sistema.
0
5.20
I stableeer procedimientos para implementar la transferencia de un bloque de un rea rectangular de un bfer de imagen, usando una funcin para leer el rea dentro de un array y otra funcin para copiar el array dentro del rea de transferencia designado. Determinar los resultados de desarrollar dos transferencias de bloque sucesivas dentro de un misino arca de un bfer de imagen usando varias operaciones booleanas. Cules son los resultados de desarrollar dos transferencias de bloque sucesivas dentro del mismo rea de un bfer de imagen usando operaciones aritmticas binarias? Implementar una rutina para llevar a cabo transferencias de bloque en un bfer de imagen usando cualquier operacin booleana especificada o una operacin de sustitucin (copia). Escribir una rutina para implementar rotaciones en incrementos de 90 en transferencias de bloque de un bfer de imagen. Escriba una rutina para implementar rotaciones para cualquier ngulo especificado en una transferencia de bloque de un bfer de imagen. Cscriba una rutina para implementar el cambio de escala como una transformacin de rasterizacin de un bloque de pxeles. Demostrar que la matriz de rotacin 5.102 es igual a la matriz compuesta R (/J) \i (a).
v x
5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32
Evaluando los trminos de la Ecuacin 5.106, deducir los elementos para la matriz de rotacin general dada en la Ecuacin 5.107. Probar que una matriz de rotacin cuaterna! 5.107 reduce la matriz de representacin en la Ecuacin 5.74 cuando el eje de rotacin es el eje de coordenadas z. Probar que la Ecuacin 5.109 es equivalente a la transformacin de rotacin general dada en la Ecuacin 5.97. Usando identidades trigonomtricas, deducir los elementos de la matriz de rotacin cuaterna 1 5.108 a partir de la expresin 5.107. Desarrollar un procedimiento para animar un objeto tridimensional rotandolo incrementalmente alrededor de un eje especificado. Usar aproximaciones apropiadas para las ecuaciones trigonomtricas con el fin de acelerar los clculos, y reestableeer el objeto a su posicin original despus de cada revolucin completa sobre el eje. I edueir la matriz de transformacin tridimensional para el cambio de escala de un objeto mediante el lactoi de escala a en la direccin definida por los cosenos de direccin a, i y y. Desarrollar una rutina para reflejar un objeto tridimensional sobre un plano arbitrario seleccionado. I scribir un procedimiento para inclinar un Objet tridimensional con respecto a cualquiera de los tres ejes de coordenadas, usando valores de entrada para los parmetros de inclinacin. Desarrollar un procedimiento para convertir la definicin de un objeto en un sistema de referencia de Coordenadas tridimensional en cualquier otro sistema de coordenadas definido con respecto al primer sistema. Implementar el programa de ejemplo de la Seccin 5.17 de tal forma que las rutinas de transformaciones geomtricas tridimensionales ( )pcn(il. se apliquen al tringulo bidimensional mostrado en la I igura 5.15(a), para producir la transformacin mostrada en la parte (b) de dicha figura. Modificar el programa del ejercicio anterior para que la secuencia de transformacin se pueda aplicar a cualquier poligono bidimensional, cuyos vrtices sean especificados como entradas de usuario. Modificar el ejemplo del programa anterior para que el orden de las secuencias de transformaciones geomtricas pueda especificarse como entradas de usuario. Modificar el ejemplo del programa anterior para que los parmetros de la transformacin geomtrica se especifiquen como entradas de usuario.
\33 5.34 5.
JS
5.3> 5.37
Visualzacin bdimensional
Una escena que reprsenla un jardn con colibris piulada por el artista John Derry de TimeArts, Inc., utilizando una tableta grfica con un lapicero sensible a l a presin e inalmbrico. { C o r t e s a de Wacom Technology C o r p o r a t i o n . )
Pipeline de visualizacin bidimensionai La ventana de recorte Normalizacin y transformaciones de visor funciones de visualizacin bidimensionai de OpenGL Algoritmos de recorte
Recorte de puntos tridimensionales Recorte de lneas bidimensionales Recorte de reas de relleno de polgonos Recorte de curvas Recorte de texto Resumen
6.10 6.11
Ell el Capitulo 2, presentamos brevemente los conceptos y las funciones de visualizacin bidimenional. Ahora examinaremos con ms detalle los procedimientos para mostar vistas de una imagen bidimensionai en un dispositivo de salida. Habitualmente, un paquete grfico permite al usuario especificar qu parte de una imagen definida se debe visualizar y dnde esta parte se debe colocar en el dispositivo de visualizacin. Cualquier sistema de coordenadas cartesianas que sea conveniente, referido al sistema de referencia de coordenadas del mundo, se puede usar para definir la imagen. En el caso de imgenes bidimensionales, una vista se selecciona especificando una regin de plano .yv que contiene la imagen total o cualquier parte de ella. Un usuario puede seleccionar una nica zona para visualizacin, o varias zonas para visualizacin simultnea o para una secuencia animada panormica a travs de una escena. Las partes dentro de las zonas seleccionadas se mapean entonces sobre zonas especificadas de las coordenadas del dispositivo. Cuando se seleccionan mltiples zonas de vista, estas zonas se pueden colocar en ubicaciones de visualizacin independientes, o algunas zonas se podran insertar en otras zonas de visualizacin ms grandes. Las transformaciones de visualizacin bidimensionai desde las coordenadas universales a las coordenadas del dispositivo implican operaciones de traslacin, rotacin y cambio de escala, as como procedimientos de borrado de aquellas partes de la imagen que se encuentran fuera de los lmites de una zona seleccionada de la escena.
306
CAPTULO 6
Visualizacin bidimensional
XV Coordenadas universales
min
FIGURA 6.2. Una ventana de recorte y una vista asociada, especificada como un rectngulo alineado con los ejes de coordenadas. Cambiando la posicin de un visor, podemos ver objetos en posiciones diferentes en la zona de visualizacin de un dispositivo de salida. Se pueden utilizar mltiples visores para visualizar partes distintas de una escena en posiciones distintas de la pantalla. Tambin, variando el tamao de los visores, podemos cambiar el tamao y las proporciones de los objetos visualizados. Conseguimos efectos de zoom mapeando sucesivamente ventanas de recorte de diferente tamao sobre un visor de tamao fijo. A medida que las ventanas de recorte se hacen ms pequeas, ampliamos alguna parte de la escena para ver detalles que no se muestran en ventanas de recorte mayores. De forma similar, se obtiene una mayor visin de conjunto reduciendo a partir de una parte de una escena con ventanas de recorte sucesivamente mayores. Los efectos panormicos se logran moviendo una ventana de recorte de tamao fijo a travs de varios objetos de una escena. Ilabitualmenie, las ventanas de recorte y los visores son rectngulos en posiciones estndar, con las aristas del rectngulo paralelas a los ejes de coordenadas. En algunas aplicaciones se utilizan otras geometras de ventana o de visor, tales como polgonos generales y crculos, pero el procesamiento de estas formas requiere un mayor tiempo. En primer lugar consideraremos slo los visores y las ventanas de recorte rectangulares, como se muestra en la Figura 6.2. El mapeo de la descripcin de una escena bidimensional en coordenadas universales a coordenadas de dispositivo se denomina transformacin de visualizacin bidimensional. A veces esta transformacin se denomina simplemente transformacin de ventana a visor o transformacin de ventana, Pero, por lo general, la visualizacin implica ms que la transformacin desde las coordenadas de la ventana de recorte a las coordenadas del visor. Estableciendo una analoga con la visualizacin tridimensional, podemos describir los pasos de visualizacin bidimensional como se indica en la Figura 6.3. Una vez que se ha construido la escena en
307
MC
WC
ve
FIGURA 6.3. Pipeline de transformacin de visualizacin tridimensional. coordenadas universales, podramos establecer un s i s t e m a independiente tridimensional de r e f e r e n c i a de c o o r d e n a d a s de v i s u a l i z a c i n para especificar la ventana de recorte. Pero la ventana de recorte se define a menudo slo en coordenadas universales, para que las coordenadas de visualizacin en aplicaciones bidimensionales sean las mismas en coordenadas universales. (En el caso de una escena tridimensional, sin embargo, necesitamos un sistema de visualizacin independiente para especificar los parmetros de posicin, direccin y orientacin de la visualizacin). Para hacer que el proceso de visualizacin sea independiente de los requisitos de cualquier dispositivo de salida, los sistemas grficos convierten las descripciones de los objetos a coordenadas normalizadas y aplican las subrulinas de recorte. Algunos sistemas utilizan coordenadas normalizadas que varan de 0 a I, y otros entre -1 y I. Dependiendo de la biblioteca grfica que se utilice, el visor se define en coordenadas normalizadas o en coordenadas de pantalla despus del proceso de normalizacin. En el ltimo paso de la transformacin de visualizacin, el contenido del visor se transfiere a las posiciones dentro de la ventana de visualizacin. El recorte se realiza habitualmente en coordenadas normalizadas. Esto nos permite reducir los clculos concatenando en primer lugar las mltiples matrices de transformacin. Los procedimientos de recorte tienen una importancia fundamental en los grficos por computador. Ellos se utilizan no slo en las transformaciones de visualizacin, sino tambin en los sistemas de gestin de ventanas, en los paquetes de dibujo y pintura para borrar partes de una imagen, y en muchas otras aplicaciones.
El primer paso de la secuencia de transformaciones es trasladar el origen de visualizacin al origen universal. A continuacin, rotamos el sistema de visualizacin para alinearlo con el sistema universal. Dado el vector de orientacin V, podemos calcular las componentes de los vectores unitarios v ~ (v v ) y u = (w , de los ejes V y * i respectivamente. Estos vectores unitarios se utilizan para formar la primera y la segunda fila de la matriz de rotacin R que alinea los ejes de visualizacin * e j ^ con los ejes universaxr v
v i e w v c w
v i s U l
les x e v
w
Las posiciones de los objetos en coordenadas universales se convierten entonces en coordenadas de visualizacin con la matriz compuesta de transformacin bidimensional M
II (
re
T
()
(6.1)
donde T es la matriz de traslacin que lleva el origen de visualizacin P hasta el origen universal, y R es la matriz de rotacin que rota el sistema de visualizacin hasta que coincide con el sistema de coordenadas universales. La Figura 6.5 muestra los pasos de esla transformacin de coordenadas.
v universal
309
universal
viste
X vista x universal
<b)
FIGURA 6.5. Un sistema de coordenadas de visualizacin se mueve para que coincida con el sistema de referencia universal (a) aplicando una matriz de traslacin T para mover el origen de visualizacin hasta el origen universal, despus (b) aplicando una matriz de rotacin R para alinear los ejes de los dos sistemas.
FIGURA 6.6. Un tringulo (a), con un punto de referencia seleccionado y un vector de orientacin, se traslada y se rota hasta la posicin (b) dentro de una ventana de recorte. nadas universales, que se asignan entonces a las dos esquinas opuestas de un rectngulo estndar. Una vez que se ha establecido la ventana de recorte, la descripcin de la escena se procesa a travs de las submtinas de visualizacin hacia el dispositivo de salida. Si queremos obtener una vista rotada de una escena bidimensionai, como se estudi en la seccin anterior, realizaremos exactamente los mismos pasos que se describieron all, pero sin considerar un sistema de referencia de visualizacin. Por tanto, simplemente rotamos (y posiblemente trasladamos) objetos a la posicin deseada y establecemos la ventana de recorte, todo en coordenadas universales. A modo de ejemplo, podramos visualizar la vista rotada de un tringulo de la Figura 6.6(a) rotndola hasta la posicin que queramos y estableciendo un rectngulo de recorte estndar. Anlogamente a la transformacin de coordenadas descrita en la seccin anterior, podramos tambin trasladar el tringulo al origen universal y definir una ventana de recorte alrededor del tringulo. En ese caso, definimos un vector de orientacin y elegimos un punto de referencia tal como el centroide del tringulo (Apndice A). Despus trasladamos el punto de referencia hasta el origen universal y rotamos el vector de orientacin hasta el e j e y , utilizando la matriz 6. E Con el tringulo en la posicin deseada, podemos utilizar una ventana de recorte estndar en coordenadas universales para capturar la vista del tringulo rotado. La posicin transformada del tringulo y la ventana de recorte seleccionada se muestran en la Figura 6.6(b).
u n i v c r s a
310
CAPTULO 6
Visualizacin bidimensional
(6.2) vv vv
min
vw
man
vw
/ mm
' max
xv = fc xw + L yv - s yw + t
y y
(6.3)
(6.4) vv vv
V w .
(6.5)
y
w n m
-y
w m m
Ventana de recorte
(xw, vwi
de normalizacin
VI
1
--
(xv, y W
VI,;., - -
XV nun
4 h "'mu 1
FIGURA 8.7. Un punto (xwtyw) de una ventana de recorte en coordenadas universales se mapea a las coordenadas de visor (xv, vv), dentro de un cuadrado unidad, para que las posiciones relativas de los dos puntos en sus respectivos rectngulos sean las mismas.
311
Ya que simplemente mapeamos las posiciones en coordenadas universales a un visor que est posicionado cerca del origen universal, podemos deducir las Ecuaciones 6.3 utilizando cualquier secuencia de transformaciones que convierta el rectngulo de la ventana de recorte en el rectngulo del visor. Por ejemplo, podramos obtener la transformacin de las coordenadas universales a las coordenadas del visor con la secuencia: (1) (2) Cambie de escala la ventana de recorte al tamao del visor utilizando un punto fijo (,vw , yw )mjn mm
Traslade ( * w , yw -J a ( x v
min m
min
, yv ).
min
La transformacin de cambio de escala del paso (I) se puede representar con la matriz bidimensional:
0
& W
xw^O-sJ
n i
s=
(l- )
v
(6.6)
o o
donde 5 y s son las mismas que en las Ecuaciones 6.4. La matriz bidimensional que representa la traslacin de la esquina inferior izquierda de la ventana de recorte, hasta la esquina inferior izquierda del visor es:
X y
1 0 0 0 1
.v.
vvnuuia, v i s o m o r m ~
1
. | i (6.8)
'
o q o o
la cual nos proporciona el mismo resultado que en las Ecuaciones 6.3. Cualquier otro punto de referencia de la ventana de recorte, tal como la esquina superior derecha o el centro de la ventana, se podra utilizar en las operaciones de cambio de escala y traslacin. O, podramos en primer lugar trasladar cualquier posicin de la ventana de recorte hasta la posicin correspondiente del visor y despus realizar un cambio de escala relativo a la posicin del visor. La transformacin ventana a visor mantiene el emplazamiento relativo de las descripciones de los objetos. Un objeto situado dentro de la ventana de recorte se mapea a una posicin correspondiente dentro del visor. De forma similar, un objeto situado fuera de la ventana de recorte est fuera del visor. Por otra parte, las proporciones relativas de los objetos se mantienen slo si la relacin de aspecto del visor es la misma que la relacin de aspecto de la ventana de recorte. En otras palabras, mantenemos las mismas proporciones de los objetos si los factores de escala s y s son iguales. De otro modo, los objetos universales se alargarn o contraern en la direccin del eje x o del eje y (o en ambas direcciones) cuando se visualizan en el dispositivo de salida. Las subrulinas de recorte se pueden aplicar utilizando los lmites de la ventana de recorte o los lmtes del visor. Despus del recorte, las coordenadas normalizadas se transforman en coordenadas del dispositivo. El cuadrado unidad se puede mapear al dispositivo de salida utilizando los mismos procedimientos que en la transformacin ventana a visor, transfiriendo la zona interior del cuadrado unidad a toda la zona de visualizacin del dispositivo de salida.
x
312
Ventana de recorte r
(xuk\w)
1
^^^r
Cuadrado de normalizacin _ i
L
Visor de pantalla
\
(XX), yv)
1 ,. 1
J 1
XV,
FIGURA6.8. Un punto {x\\\ vw) Jo la ventana de recorte se mapea a una posicin definida mediante coordenadas normalizadas (.r, ), despus a una posicin definida mediante coordenadas de pantalla (xv, yv) en un visor. Los objetos se recortan con el cuadrado de normalizacin antes de la transformacin a coordenadas de visor. especificado en coordenadas de pantalla. Esta transformacin se ilustra en la Figura 6.8 con coordenadas normalizadas dentro del rango que vara desde -1 hasta I. Los algoritmos de recorte en esta secuencia de transformacin se estandarizan ahora para que los objetos situados fuera de los lmites se detecten y sean eliminados de la descripcin de la escena. En el paso final de la transformacin de visualizacin, los objetos contenidos en el visor se posicionan dentro de la ventana de visualizacin. Transferimos los contenidos de la ventana de recorte al cuadrado de normalizacin utilizando los mismos procedimientos de la transformacin ventana a vista. La matriz de transformacin de normalizacin se obtiene a partir de la Ecuacin 6.S sustituyendo -1 p>r.vv y sustituyendo +1 p o r * v e v v . Haciendo estas sustituciones en las expresiones con /.v, / , .y^ y s tenemos,
mn n n i a x m a x r yy
vcnl;in.l. UlUdtlHliimtnn
(6.9)
De forma similar, despus de que los algoritmos de recorte se hayan aplicado, el cuadrado normalizado con la arista de longitud igual a 2 se transforma en un visor especificado. Esta vez, obtenemos la matriz de transformacin a partir de la Ecuacin 6.8 sustituyendo -I por.viv e yw y sustituyendo +1 por.viv e
)'IV,
M mitdnflmmnn, visor
(6.10)
El ltimo paso del proceso de visualizacin es posicionar el rea de la vista en la ventana de visualizacin. Habitualmente, la esquina inferior izquierda de la vista se sita en las coordenadas especilieadas relativas a la esquina inferior izquierda de la ventana de visualizacin. La Figura 6.9 muestra el posicionamiento de una vista dentro de una ventana de visualizacin.
313
Como anteriormente, mantenemos las proporciones iniciales de los objetos eligiendo la relacin de aspecto de la vista igual que la de la ventana de recorte. De otro modo, los objetos se estirarn o se contraern en la direccin del eje.r o del eje .y. Tambin, la relacin de aspecto de la ventana de visualizaein puede afectar a las proporciones de los objetos. Si el visor se mapea a toda la ventana de visualizaein y el tamao de la ventana de visualizaein se cambia, los objetos se pueden distorsionar a menos que la relacin de aspecto del visor tambin se ajuste.
314
CAPITULO 6
Visualizacin bidimensional
Esta funcin designa la matriz de proyeccin como la matriz actual, que se establece inicialmente como una matriz identidad. Sin embargo, si vamos a volver a ejecutar esta linea en otras vistas de la escena, tambin podemos establecer la inicializacin con
glLoadldentity ( );
Esto asegura que cada vez que entremos en el modo de proyeccin, la matriz se reinicializar con la matriz identidad, de modo que los nuevos parmetros de visualizacin no se combinen con los anteriores.
Las coordenadas de los limites de la ventana de recorte se proporcionan como nmeros de doble precisin. Esta funcin especifica una proyeccin ortogonal para mapear la escena a la pantalla. En una escena tridimensional, esto significa que los objetos se proyectaran segn lneas paralelas que son perpendiculares a la pantalla de visualizacin bidimensional xy. Pero en una aplicacin bidimensional, ios objetos ya estn definidos en el plano xy. Por tanto, la proyeccin ortogonal no tiene efecto sobre nuestra escena bidimensional salvo convertir las posiciones de los objetos en coordenadas normalizadas. No obstante, debemos especificar la proyeccin ortogonal porque nuestra escena bidimensional se procesa a travs de la pipeline de visualizacin de OpenGL que es totalmente tridimensional. De hecho, podramos especificar la ventana de recorte utilizando la versin tridimensional de la biblioteca de ncleo de OpenGL de la funcin g l u O r t h o 2 D (Seccin 7 .10). Las coordenadas normalizadas en el rango que vara de -1 hasta I se utilizan en las subrutinas de recorte OpenGL. La funcin g l u O r t h o 2 D establece una versin tridimensional de la matriz de transformacin 6.9 para el mapeo de objetos dentro de la ventana de recorte a coordenadas normalizadas. Los objetos situados fuera del cuadrado normalizado (y fuera de la ventana de recorte) se eliminan de la escena que se va a mostrar. Si no especificamos una ventana de recorte en un programa de aplicacin, las coordenadas predeterminadas son (xw ) = (-1.0, -1.0) y (xw, VH' ) = (1.0, 1.0). Por tanto, la ventana de recorte pre-
315
determinada es el cuadrado normalizado centrado en el origen de coordenadas con una longitud de lado de 2.0.
donde todos los valores de los argumentos se proporcionan en coordenadas de pantalla enteras relativas a la ventana de visualizacin. Los argumentos x v m i n e y v m i n especifican la posicin de la esquina inferior izquierda del visor respecto a la esquina inferior izquierda de la ventana de visualizacin. El ancho y la altura en pxeles del visor se establecen con los argumentos v p W i d t h y v p H e i g h t . Si no se invoca la funcin glViewporc en un programa, el tamao y la posicin predeterminados del visor son los mismos que los de la ventana de visualizacin. Despus de que se han aplicado las subrutinas de recorte, las posiciones dentro del cuadrado normalizado se transforman en el rectngulo de visor utilizando la matriz 6.I0. Las coordenadas de la esquina superior derecha del visor se calculan para esta matriz de transformacin en funcin del ancho y de la altura del visor:
% * - ^ m i n
wMk
m$w * y \n vpHeight
y + m
(6. ii)
En la transformacin final, los colores de los pxeles de las primitivas dentro del visor se cargan en el bfer de refresco en las posiciones de pantalla especificadas. Se pueden crear mltiples visores en OpenGL para una gran variedad de aplicaciones (Seccin 6.3). Podemos obtener los parmetros del visor activo actualmente utilizando la funcin de consulta:
glGetlntegerv (GL_VIEWPORT, vpArray);
donde v p A r r a y es una matriz de un nico ndice y cuatro elementos. Esta funcin Get devuelve los parmetros del visor actual en v p A r r a y en el orden xvmin, yvmin, v p W i d t h y v p H e i g h t . En una aplicacin interactiva, por ejemplo, podemos utilizar esta funcin para obtener los parmetros del visor que contiene el cursor de pantalla.
Los argumentos de esta (uncin de inicializacin son los mismos que los del procedimiento main, y podemos utilizar g l u t l n i t para procesar argumentos de la lnea de comandos. Disponemos de tres funciones en G L U T para definir la ventana de visualizacin y elegir sus dimensiones y su posicin:
glutlnitWindowPosition glutlnitWindowSize glutCreateWindow (xTopLett, yTppLeft); (dwWidth, ("Title of dwHeight); Window");
Diplay
La primera de estas funciones proporciona la posicin en coordenadas de pantalla enteras de la esquina superior izquierda de la ventana de visualizacin, relativa a la esquina superior izquierda de la pantalla. Si ninguna coordenada es negativa, el sistema de gestin de ventanas determina la posicin de la ventana de visua-
316
CAPTULO 6
Visualizaein bidimensional
lizaein en la pantalla. Con la segunda funcin, seleccionamos el ancho y la altura de la ventana de visualizaein en pxeles enteros positivos. Si no utilizamos estas dos funciones para especificar el tamao y la posicin, el tamao predeterminado es 300 por 300 y la posicin predeterminada es ( - 1 , - 1 ) , que cede el posicionamiento de la ventana de visualizaein al sistema gestor de ventanas. En cualquier caso, el tamao y la posicin de la ventana de visualizaein especificados con subrulinas de G L U T se podran ignorar, dependiendo del estado o de los otros requisitos actualmente activos en el sistema gestor de ventanas. Por tanto, el sistema de ventanas podra dimensionar y posicionar la ventana de visualizaein de una forma diferente. La tercera funcin crea la ventana de visualizaein, con la posicin y tamao especificados, y asigna el ttulo, aunque el uso del ttulo tambin depende del sistema de ventanas. A estas alturas, la ventana de visualizaein est definida pero no se muestra en la pantalla hasta que se han completado todas las operaciones de configuracin de GLUT.
Utilizamos esta funcin para elegir un modo de color (RGB o indexado) y las diferentes combinaciones de los bferes. Los parmetros seleccionados se combinan con la operacin lgica o r . El modo predeterminado es bfer simple y modo de color RGB (o RGBA), que es el mismo que se obtendra con la siguiente instruccin:
glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); GLT_RGBA.
donde al argumento n d e x se le asigna un valor entero que se corresponde con una posicin de la tabla de colores.
Una vez que hemos guardado el identificador entero de la ventana de visualizaein en la variable windowID, podemos utilizar el nmero del identificador para cambiar los parmetros de visualizaein o para borrar la ventana de visualizaein.
317
Esta funcin devuelve el valor 0 si no hay ventanas de visualizacin o si la ventana de visualizacin actual se destruy.
donde las coordenadas especifican la nueva posicin de la esquina superior izquierda de la ventana de visualizacin respecto a la esquina superior izquierda de la pantalla. De forma similar, la siguiente funcin cambia el tamao de la ventana de visualizacin actual:
glutReshapeWindow (dwNewWidth, dwNewHeight);
Y con el siguiente comando, podemos ampliar la ventana de visualizacin actual para que ocupe toda la pantalla.
glutFullScreen ( );
El tamao exacto de la ventana de visualizacin despus de la ejecucin de esta subrutina depende del sistema de gestin de ventanas. Una llamada posterior a g l u t P o s i t i o n W i n d o w o g l u t R e s h a p e W i n d o w cancelar la peticin de expansin a tamao de pantalla completa. Cada vez que se cambia el tamao de la ventana de visualizacin, su relacin de aspecto puede cambiar y los objetos se pueden distorsionar. Como indicamos en la Seccin 3.24, podemos reaccionar frente a un cambio de las dimensiones de la ventana de visualizacin utilizando la siguiente instruccin:
glutReshapeFunc (winReshapeFcn) ,-
Esta subrutina de GLUT se activa cuando se cambia el tamao de una ventana de visualizacin y se pasan el nuevo ancho y la nueva altura a su argumento: la funcin w i n R e s h a p e F c n , en este ejemplo. Por tanto, winReshapeFcn es la funcin de atencin a evento para el evento cambio de forma. Podemos entonces utilizar esta funcin de atencin a evento para cambiar los parmetros del visor para que la relacin de aspecto original de la escena se mantenga. Adems, podramos tambin cambiar los lmites de la ventana de recorte, cambiar el color de la ventana de visualizacin, modificar otros parmetros de visualizacin y realizar cualesquiera otras tareas.
318
CAPTULO 6
Visualizaein bidimensional
Este icono tendr una etiqueta con el mismo nombre que asignamos a la ventana, pero podemos cambiar el nombre del icono con:
glutSetlconeTitle ("Icn ame*);
Cuando estn abiertas mltiples ventanas de visualizaein en la pantalla, algunas de ellas se pueden solapar con otras ventanas de visualizaein. Podemos seleccionar cualquier ventana de visualizaein para pasarla delante de todas las otras ventanas designado en primer lugar sta como ventana actual, y entonces ejecutar el comando traer al frente ventana:
glutSetWindow gluUPopWindow (windowID); ( );
De un modo similar, podemos empujar la ventana de visualizaein actual hacia atrs, para que quede detrs de las restantes ventanas de visualizaein. Esta secuencia de operaciones es:
glutSetWindow glutPushWindow (windowID); ( );
Y podemos volver a mostrar una ventana de visualizaein oculta, o una que se haya convertido en un icono, designando sta como la ventana de visualizaein actual e invocando la funcin:
glutShowWindow ( )
;
Subventanas de GLUT
Dentro de una ventana de visualizaein seleccionada, podemos establecer cualquier nmero de ventanas de visualizaein de segundo nivel, llamadas subventanas. Esto proporciona un medio para particionar ventanas de visualizaein en zonas de visualizaein diferentes. Creamos una subvenlana con la siguiente funcin.
glutCreateSubwindow (windowID, xBottomLeft, yBottomLett, width, height);
El argumento windowID identifica la ventana de visualizaein en la que queremos establecer la subventana. Con el resto de los argumentos, especificamos su tamao y la posicin de la esquina inferior izquierda de la subventana relativa a la esquina inferior izquierda de la ventana de visualizaein. A las subventanas se les asigna como identificador un nmero entero positivo del mismo modo que se numeran las ventanas de visualizaein de primer nivel. Podemos colocar una subventana dentro de otra subventana. Tambin, a cada subventana se le puede asignar un modo de visualizaein individual y otros parmetros. Podemos incluso cambiar la forma, reposicionar, empujar hacia el fondo, traer a primer plano, ocultar y mostrar subventanas, del mismo modo que lo hacemos con las ventanas de visualizaein de primer nivel. Pero no podemos convertir una subventana creada con GLUT en un icono.
Las formas posibles de cursor que podemos seleccionar son una punta de Hecha con una direccin que elijamos, una flecha bidireccional, una flecha rotante, una cruz, un reloj de pulsera, una interrogacin, o inclu-
319
so una calavera con huesos que se cruzan. Por ejemplo, podemos asignar la constante simblica GLUT_CURSOR_UP_DOWN al argumento s h a p e para obtener una flecha bidireccional de arriba hacia abajo. Una flecha rotante se selecciona con GLUT_CURSOR_CYCLE, una forma de reloj de pulsera se selecciona con GLUT_CURSOR_WAIT, y una calavera con huesos que se cruzan se obtiene con la constante GLUT_CURSOR_DESTROY. Una forma de cursor se puede asignar a una ventana de visualizacin para indicar una clase particular de aplicacin, tal como una animacin. Sin embargo, las formas exactas que podemos utilizar dependen del sistema.
El argumento es una subrutina que describe lo que hay que mostrar en la ventana actual. Esta subruina, llamada p i c t u r e D e s c r i p t i o n , en este ejemplo, se denomina funcin de atencin a evento, ya que es la subrutina que se debe ejecutar cada vez. que GLUT determina que los contenidos de la ventana de visualizacin se deberan renovar. La subrutina p i c t u r e D e s c r i p t i o n contiene habituaimente las primitivas y los atributos de OpenGL que definen una imagen, aunque sta podra especificar otras estructuras tales como la visualizacin de un men. Si hemos establecido mltiples ventanas de visualizacin, entonces repetimos este proceso en cada ventana de visualizacin o subventana. Tambin, podemos necesitar invocar g l u t D i s p l a y F u n c despus del comando glutPopWindow si se ha daado la ventana de visualizacin durante el proceso de redibujado de las ventanas. En este caso, la siguiente funcin se utiliza para indicar que los contenidos de la ventana de visualizacin actual se deberan renovar.
glutPostRedisplay ( ) ;
Esta subrutina se utiliza tambin cuando hay que mostrar en una ventana de visualizacin un objeto adicional tal como un men contextual.
En este momento, las ventanas de visualizacin y sus contenidos grficos se envan a la pantalla. El programa tambin entra en el bucle de procesamiento de G L U T que continuamente comprueba si se han producido eventos nuevos, tales como una entrada interactiva procedente de un ratn o de una tableta grfica.
320
CAPTULO 6
Visualizacin hidimcnsionai
FIGURA 6.10.
Efecto de divi-
sin de pantalla generado dentro de una ventana de visualizacin mediante el procedimiento diaplayFunc.
A veces es conveniente designar una funcin que se ha de ejecutar cuando no hay otros eventos para que el sistema los procese. Podemos hacer esto con:
glutIdleFunc (function);
El argumento de esta subrutina de GLUT podra hacer referencia a una funcin de segundo plano o a un procedimiento para actualizar los parmetros de una animacin cuando no tienen lugar otros procesos. Tambin tenemos funciones de GLUT, estudiadas en el Captulo 11, para obtener y procesar entrada interactiva y para crear y gestionar mens. GLUT proporciona subrutinas individuales para dispositivos de entrada tales como un ratn, un teclado, una tableta grfica y un spaceball. Finalmente, podemos utilizar la siguiente funcin para preguntar al sistema por alguno de los parmetros de estado actuales.
glutGet (stateParara;
lista funcin devuelve un valor entero que se corresponde con la constante simblica que hayamos seleccionado en su argumento. A modo de ejemplo, podemos obtener la coordenada x de la esquina superior izquierda de la ventana actual de visualizacin, relativa a la esquina superior izquierda de la pantalla, con la constante GLUT_WINDOW_X. Podemos obtener el ancho de la ventana actual de visualizacin o el ancho de la pantalla con GLUT_WINDOW_WIDTH o GLUT_SCREEN_WIDTH.
#include
<GL/gluc.h> {
x,
y;
321
}
void init (void
(
/* Establece el (1.0, los color de 1.0, la ventana v i s u a l i z a c i n en blanco. 0.0); la ventana de recorte en */ glClearColor /* * Establece 1.0,
parmetros de */
coordenadas
universales.
glMatrixMode gluOrtho2D /* *
(-100.0,
Establece
e l modo d e
construccin de */
transformacin
geomtrica.
glMatrixMode
(GL_MODELVIEW);
void {
triangle k;
(wcPt2D
*verts)
GLint
glBegin
(GI#_TRIANGLES) ;
(verta
[k].x,
verts
[k].y);
)i
void
displayFcn
(void)
/*
Define
la posicin [3] = {
inicial {-50.0,
del
tringulo. {50.0,
-25.0}, // // // //
300,
izquierdo,
(verta); el tringulo y lo
tringulo. derecha de la
visualiza */ //
la mitad
Establece Establece
el el
color visor
de
relleno
en
rojo
// // Muestra
derecho. eje z.
0.0,
0.0,
1.0); //
rojo girado.
322
CAPITULO 6
Visualizacin bidimcnsional
void
main
(int
argc,
char
**
argv)
{
glutlnit (&argc, argv); (GLUT_SINGLE (50, 50); | GLUT_RGB); gluCIniCDisplayMode
(600,
300)j Example*)/
(Split-Screen
fplit ( );
glutDiaplayFunc glutMainLoop ( ) ; (displayFcn);
El recorte de puntos, lneas y polgonos es un componente estndar de los paquetes grficos. Pero se pueden aplicar mtodos similares a otros objetos, particularmente cnicas, tales como crculos, elipses y esferas, adems de a curvas de tipo sp/ine y a superficies. Habitualmente, sin embargo, los objetos con lmites no lineales se aproximan mediante segmentos de lnea recta o superficies de polgonos para reducir los clculos. A menos que se indique otra cosa, asumimos que la regin de recorte es una ventana rectangular en posicin estndar, con las aristas lmite en las coordenadas xw , - W , > * n y Estas aristas lmite habiw m
323
tualmente se corresponden con un cuadrado normalizado, en el que los valores de x e y se encuentran dentro del rango que vara desde 0 a I o desde -I a I.
(6.12)
lll.iX
Si no se satisface una de estas cuatro ecuaciones, el punto se recorta (no se guarda para su visualizacin). Aunque el recorte de puntos se aplica menos a menudo que el recorte de lneas o de polgonos, resulla til en diversas situaciones, sobre lodo cuando las imgenes se modelan como sistemas de partculas. Por ejemplo, se puede aplicar recorte de puntos a escenas que incluyan nubes, espuma de mar, humo o explosiones que estn modeladas mediante partculas, tales como las coordenadas de los centros de pequeos crculos o esferas.
= x + u (x fin
(J
= ( ) n
q)
(6.13)
V .V
+ wtV n-^))
0<u<I
Podemos utilizar esta representacin para determinar dnde un segmento de lnea corta cada arista de la ventana de recorte, asignando el valor de la coordenada de cada arista a v o y y resolviendo para el parame-
324
CAPTULO 6
Visualization hidimensional
tro U. A modo do ejemplo, el limite izquierda de la ventana est en la posicin xw por lo que sustituimos -v por este valor y resolvemos para //, y calculamos el valor de interseccin y correspondiente. Si este valor de u se encuentra fuera del rango que vara desde a I, el segmento de lnea no intersecta con dicha arista de la ventana. Pero si el valor de u se encuentra dentro del rango que vara entre 0 y 1, parte de la lnea se encuentra dentro de dicho borde. Podemos a continuacin procesar esta porcin interior del segmento de lnea con respecto a los dems lmites de recorte hasta que hayamos recortado la lnea entera o encontremos una paite que est dentro de la ventana. El procesamiento de segmentos de lnea de una escena utilizando la sencilla tcnica descrita en el prrafo interior es directo, pero no muy eficiente. Es posible reformular la prueba inicial y los clculos de interseccin para reducir el tiempo de procesamiento de un conjunto de segmentos de lnea. Se han desarrollado algoritmos de recorte de lneas ms rpidos. Algunos de estos algoritmos se han diseado explcitamente para imgenes bidimensionales y algunos se adaptan fcilmente a conjuntos de segmentos de linea tridimensionales.
mi/%
325
ha 4
bil 3
bil 1
Superior Inferior
Derecho Izquierdo
FIGURA 6.12. Una posible ordenacin de los lmites de la ventana de recorte correspondiente a las posiciones de los bits en el cdigo de regin de los puntos extremos del mtodo C'ohen-Suthcrland.
00
ltl
mo
0000
000 00I0
Ventana de recorte
nini
ooo
olio
FIGURA 6.13. I.os nueve cdigos de regin para la identificacin de la posicin de un punto extremo de una linca, relativos a los lmites de la ventana de recorte.
tres bits se determinan de forma semejante. En lugar de utilizar pruebas de desigualdad, podemos determinar ms eficientemente los valores de un cdigo de regin utilizando las operaciones de procesamiento de bits y siguiendo dos pasos: (1) Calcular las diferencias entre las coordenadas de los puntos extremos y los lmites de recorte. (2) Utilizar el bit de signo resultante de cada clculo de diferencia para cambiar el valor correspondiente de cada cdigo de regin. En el caso del esquema de ordenacin mostrado en la Figura 6.12, el bit 1 es el bit de signo de x .vir ; el bit 2 es el bit de signo de v u -.v; el bil 3 es el bit de signo de y - ^ H ' ; y el bil 4 es el bit de signo de y u ' - y . Una vez que hemos establecido los cdigos de regin de todos los puntos extremos de todas las lneas, podemos determinar rpidamente qu lneas se encuentran completamente dentro de la ventana de recorte y cules se encuentran claramente fuera. Cualesquiera lneas que se encuentran completamente contenidas dentro de las aristas de la ventana tienen un cdigo de regin 0000 en ambos puntos extremos y estos segmentos de lnea los guardamos. Cualquier linea que tenga un cdigo de regin de valor 1 en el mismo bit en cada punto extremo est completamente fuera del rectngulo de recorte, por lo que eliminamos dicho segmento de lnea. A modo de ejemplo, una lnea que tenga un cdigo de regin 1001 en un punto extremo y un cdigo 0101 en el otro punto extremo est completamente a la izquierda de la ventana de recorte, como lo indica el valor 1 en el primer bil de cada cdigo de regin. Podemos realizar las pruebas de dentro-fuera para los segmentos de linea utilizando operadores lgicos. Cuando la operacin or entre los dos cdigos de regin de los puntos extremos de un segmente) de linca es falsa (0000), la lnea se cncuenira dentro de la ventana de recorte. Por tanto, guardamos la lnea y procedemos a comprobar la lnea siguiente de la descripcin de la escena. Cuando la operacin andentre los dos cdigos de regin de los puntos extremos de una lnea es verdadera (no 0000), la lnea est completamente fuera de la ventana de recorte, y podemos eliminarla de la descripcin de la escena. En el caso de las lneas que no se pueden identificar como que estn completamente dentro o completamente fuera de una ventana de recorte mediante las pruebas del cdigo de regin, se comprueba a continuacin si interseclan con los lmites de la ventana. Como se muestra en la Figura 6.14, los segmentos de lnea pueden inlcrscctar con los lmites de recorte sin entrar dentro del interior de la ventana. Por tanto, para recortar un segmento de linea podran ser necesarios varios clculos de intersecciones, dependiendo del orden en
mill m a x M J N m a x
326
CAPTULO 6
Visualizacin butimensiotml
FIGURA 6.14. Las lineas que se extienden desde una regin de la ventana de recorte a otra pueden atravesar la ventana de recorte o pueden inlersectar con uno o mas lmites de recorte sin entrar en el interior de la ventana.
Ventana dt* \ recorte \ Y2 \ I f i n -W FIGURA 6.15. Los cuatro puntos de interseccin (etiquetados de 1 a 4) de un segmento de linea que se recorta de acuerdo con los limites de la ventana en el orden izquierda, derecha, inferior, superior.
que procesemos los lmites de recorte. Cuando procesamos cada arista de la ventana de recorte, se recorta una parte de la lnea, y la parte que permanece de la lnea se comprueba frente a los restantes lmites de la ventana. Continuaremos eliminando partes hasta que la lnea est totalmente recortada o la parte que permanece de la linea se encuentre dentro de la ventana de recorte. En el siguiente estudio, asumimos que las aristas de la ventana se procesan en el orden: izquierda, derecha, inferior, superior. Para determinar si una linea cruza un lmite de recorte seleccionado, podemos comprobar los valores correspondientes de los bits de los cdigos de regin de los dos puntos extremos. Si uno de estos bits es 1 y el otro es , el segmento de lnea cruza dicho lmite. La Figura 6.14 muestra dos segmentos de lnea que se pueden identificar inmediatamente como completamente dentro o completamente fuera de la ventana de recorte. Los cdigos de regin de la lnea desde P, a P son 0100 y 1001. Por tanto, P, est dentro del limite izquierdo de recorte y P-, est fuera de dicho lmite. A continuacin, calculamos la interseccin P'-,, y recortamos la parte de la lnea desde P a P',. La parte que permanece de la lnea se encuentra dentro de la lnea limite derecha, y por ello a continuacin comprobamos el lmite inferior. El punto extremo P se encuentra por debajo de la arista inferior de recorte y P' se encuentra por encima de sta, por lo que determinamos la interseccin con esta arista (P' ) . Eliminamos la parte de la lnea desde P a P'| y procedemos con la arista superior de la ventana. All determinamos la interseccin P" . El ltimo paso consiste en recortar la parte situada por encima del lmite superior y guardar el segmento interior desde P', hasta P" . En el caso de la segunda lnea, obtenemos que el punto P, se encuentra fuera
2 0 ( 2 ( ( 2 2
327
del limite izquierdo y P se encuentra dentro. Por tanto, calculamos la interseccin P' y eliminamos la parte de la linca que va desde P a P ' Comprobando los cdigos de regin de los puntos extremos P' y P , observamos que la parte que permanece de la lnea se encuentra por debajo de la ventana de recorte y se puede eliminar tambin. Cuando se recorta un segmento de lnea utilizando esta tcnica se puede calcular una interseccin con los cualro lmites de recorte, dependiendo de cmo se procesen los puntos extremos de la lnea y qu ordenacin utilicemos en los lmites. La Figura 6.15 muestra las cuatro intersecciones que se podran calcular para un segmento de lnea que se procesa frente a las aristas de la ventana de recorte en el orden izquierda, derecha, inferior, superior. Por tanto, se han desarrollado variaciones de esta tcnica bsica en un esfuerzo por reducir los clculos de intersecciones. Para etCfmin&r una interseccin de un segmento de lnea con la frontera, podemos utilizar la forma pendiente-punto de corte de la ecuacin de la lnea. Para una lnea con coordenadas en sus puntos extremos (x , >'o) y v*fin' ^fin^ ^ coordenada y del punto de interseccin con un borde de recorte vertical se puede obtener mediante el clculo,
4 3 3 v ? 4 0 a
y = y + m(x-x )
() 0 iniu lv
(6.14)
f
donde el valor de x se establece en xw o .v>v_ , y la pendiente de esta lnea se calcula como m = (y - v )/(A*,- - - V ) . De forma similar, si buscamos la interseccin con el borde horizontal, la coordenada .v se puede calcular como:
0 N 0
x=^ +^ ^ m
0 min m a j (
(6.15)
(estableciendo y en y>v o en j w . En los siguientes procedimientos se proporciona una implcmentacin del algoritmo de recorte de lneas de Cohen-Sutherland bidimensional. La ampliacin de este algoritmo a tres dimensiones es directa. Estudiaremos los mtodos de visualizacin tridimensional en el captulo siguiente.
{ x, y;
h
i n l i n e GLint round /* * {const GLfloat a) { r e t u r n GLint cada una d e recorta. (a + 0 . 5 ) ; las }
Define un c d i g o de e x t e r i o r e s de una
cuatro b i t s para
regiones
ventana
r e c t a n g u l a r de
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
c o n s t GLint w i n L e f t B i t C o d e a oxl; 0x2; 0x4; c o n s t GLint w i n R i g h t B i t C o d e const QLint winBottomBitCode c o n s t GLint /* * * winTopBitCode -
cuatro bordes
d e una v e n t a n a d e
rectangular de entrada.
* *
Un extremo con de
un v a l o r de recorte,
c d i g o de en o t r o
r e g i n de est
0000
se al
la ventana de
caso,
fuera
328
CAPTULO 6
Vkualizan bidimcnsional
los los
recorte, da
Si como
la
operacin
'or'entre
l o s dos la lnea
un valor {se
falso,
definida
dos los
operacin
resultado la ventana
verdadero, de recorte
decir elimina
lnea
completamente posteriores
rechaza)
procesamientos.
inline inline
GLint GLint
inside reject
(GLint (GLint
code) codel, {
(Icode);
code2);
inline
GLint
accept
{GLint {
code2) ) ;
GLubyte e n c o d e
(wcPt2D p t ,
w c P t 2 D winMax)
{
GLubyte if (pt.x code if code c 0x00;
winMin.x) | winLeftBitCode;
code >
(pt.x
winMax.x) | winRightBitCode;
winMin.y) | winBottomBitCode;
code >
(pt.y code
winMax.y) | winTopBitCode;
* code (code);
return
}
void swapPts (wcPt2D * pl, wcPt2D * p2)
{
wcPt2D tmp;
tmp - * p l ; * p l - * p 2 ; * p 2 t m p ;
void
swapCodes
(GLubyte
el,
GLubyte
c2)
I
GLubyte tmp; tmp = * c l ; * c l * c 2 ; *c2 tmp;
Mili!
void lineClipCohSuth codel, = m; (wcPt2D winMin, wcPt2D winMax, wcPt2D p l , wcPt2D p2)
{
GLubyte GLint GLfloat code2; false, plotLine false; done
329
while
(Idone)
codel code2 if
encode
= encode
(accept done =
plotLine else if
(reject done =
(codel, true;
code2))
else /* * if
{inside swapPts
&p2); &code2);
swapCodes
(fccodel,
/* * if
Usa de (p2.x T I L
la
pendiente m para h a l l a r
la
interseccin
lnea-lmite
(p2-y
if
else if (codel p l . y +s. pl.x else if M (codel /* Es p2.x pl.x pl.y = +& winBottomBitCode) ! pl,x) pl.y) / m; { lneas no verticales. */ = & winRightBitCode) (winMax.x winMax.x; pl.x) { * m;
n e c e s a r i o a c t u a l i z a r p l . x s l o para (winMin.y
winMin.y;
(p2.x p l . x += pl.y *
winMax.y;
m
if (plotLine) lineBrea (round (pl.x), round (pl.y), round (p2.x), round (p2.y));
330
CAPTULO 6
Visualizan bidimensional
x = x + uAx
n
0<,u<
donde Ax = x - x y Ay = v - v . En el algoritmo de Liang-Barsky, las ecuaciones paramtricas de la lnea se combinan con las condiciones de recorte de puntos 6.12 para obtener las desigualdades: (6.17)
-VH'
m i n
<.V +wA>-<vw
0
m a x
k= 1 , 2 , 3 , 4
(6.18)
fk= Av. m
= Ay,
k
Cualquier lnea que sea paralela a una de las aristas de la ventana de recorte tiene p = 0 para el valor de k correspondiente a dicho lmite, donde k = 1,2, 3 y 4 se corresponde con los lmites izquierdo, derecho, inferior y superior, respectivamente. Si, para ese valor de A, tambin observamos que q < 0, entonces la lnea est completamente fuera del lmite y se puede eliminar de las consideraciones posteriores. Si q > 0, la lnea se encuentra dentro del lmite de recorte paralelo. C u a n d o p < 0, el alargamiento infinito de la lnea est orientado desde fuera hacia dentro del alargamiento infinito de ese borde particular de la ventana de recorte. Si p > 0, la lnea procede de dentro hacia fuera. Para un valor distinto de cero d e p , podemos calcular el valor de // que se corresponde con el punto donde la lnea alargada hasta el infinito intersecta con la ampliacin del borde k de la ventana del siguiente modo:
k k k k k
M=
(6.20)
Para cada lnea, podemos calcular los valores de los parmetros u y u que definen aquella parte de la linca que se encuentra dentro del rectngulo de recorte. El valor de w, se determina mediante la bsqueda en las aristas del rectngulo para las que la lnea est orientada de afuera hacia dentro (p < 0). Para estas aristas, calculamos r = q Jp . El valor de u se obtiene como el mayor del conjunto que contiene 0 y los valores de r. Inversamente, el valor de u se determina examinando los lmites para los que la lnea est orientada de dentro hacia afuera (/? > 0). Para cada una de estas aristas se calcula un valor de r y el valor de w * mnimo del conjunto que contiene 1 y los valores de r calculados. Si w;, > // , la lnea est completamente fuera de la ventana de recorte y se puede rechazar. De lo contrario, los puntos extremos de la lnea recortada se calculan a partir de los dos valores del parmetro w.
{ 2 k k k { 2 es c k 2 2
331
Este algoritmo est implementado en las siguientes secciones de cdigo. Los parmetros de las intersecciones se inicializan con los valores w, = 0 y w = l. Para cada lmite de recorte, se calculan los valores apropiados de/? y q y se utilizan en la funcin c l i p T e s t para determinar si la lnea se puede rechazar o si se han de ajustar los parmetros de interseccin. Cuando p < 0, el parmetro r se utiliza para actualizar ,; cuando p > 0, el parmetro r se utiliza para actualizar u Si al actualizar w, o w resulta que w, > w , rechazamos la lnea. De lo contrario, actualizamos el parmetro u apropiado slo si el nuevo valor acorta la lnea. Cuando p = 0 y q < 0, podemos eliminar la lnea ya que es paralela a ese lmite de recorte y se encuentra situada fuera del mismo. Si la lnea no se rechaza despus de comprobar los cuatro valores de p y q, se determinan los puntos extremos de la lnea recortada a partir de los valores de u, y w .
2 v 2 2 2
clase
wcPt2D
{
private: GLfloat public: /* Constructor predeterminado: ( ) { 0.0; inicializa la posicin como (0.0, 0.0). */ x, y;
wcPt3D
X - y -
setCoords x y -
(GLfloat xCoord,
GLfloat
yCoord)
xCoord; yCoord;
GLfloat g e t x return x;
const
Hp
GLfloat g e t y return y; ( ) const {
);
i n l i n e GLint GLint round ( c o n s t G L f l o a t a) GLfloat q, { r e t u r n GLint GLfloat * ul, (a + 0.5); * } u2)
clipTest r;
(GLfloat p,
GLfloat
I
GLfloat GLint if returnValue 0.0) q (r > / { = true;
(p < r = if
*u2) false;
332
CAPTULO 6
Visimliziidn bUiimensiorml
gRr--*
if
"
r <
*ul) false;
*u2 = r ;
returnValue return
false;
(returnValue);
void
lineClipLiangBarsk
(wcPt2D winMin,
wcPt2D winMax,
wcPt2D p l ,
wcPt2D p2)
GLfloat if
ul
0.0
u2
1.0, (
dx = p 2 . g e t x ) -
pl.getx ), ( ) &ul,
(
),
dy;
clipTest if
{-dx,
pl.getx
winMin.getx ( { { ) )
&u2)) &u2)) {
(clipTest
(dx, (
- pl.getx ); (
&ul,
dy = p 2 . g e t y if (clipTest if
-dy,
winMin.gety )
), (
&ul, ),
&u2)) &u2)) {
(clipTest
(dy,
winMax.gety {
- pl.gety
&ul,
i f (u2 < 1 . 0 )
|g2|
(pl.getx ( + u2 * dx, pl.gety ( )
p2. setCoords
+ u2 * dy) ;
if
(ul
> 0.0)
pl.setCoords
+ ul * dy);
lineBres
(round
(pl.getx
)), (
round )),
(pl.gety
) (
round
(p2.getx
round
(p2.gety
Por lo general, el algoritmo de recorte de lineas de Liang-Barsky es ms eficiente que el de CohenSuthcrland. Cada actualizacin de los parmetros w, y */ requiere slo una divisin; y las intersecciones de la lnea con la ventana se calculan slo una vez, cuando se han calculado los valores finales de y //->. Sin embargo, el algoritmo de Cohn y Sutherland puede calcular repetidamente las intersecciones a lo largo de la trayectoria de la lnea, aun cuando la linea se encuentre totalmente fuera de la ventana de recorte. Y cada clculo de interseccin de Cohen-Sulherland requiere tanto una divisin como una multiplicacin. El algoritmo bidimensional de Liang-Barsky se puede ampliar para recortar lneas tridimensionales (vase el Captulo 7 ) .
2
P en un regin de esquina
n
(b)
(c)
FIGURA 6.16. fres posibles posiciones de un punto extremo de una lnea P en el algoritmo de recorte de lneas N L N .
334
CAPTULO 6
Visualizan bidimensional
FIGURA 6.17. Las cuatro regiones utilizadas en el algoritmo NI.N cuando P est dentro de la ventana de recorte y P est fuera.
() fi
FIGURA 6.18. I .as cuatro regiones de recorte utilizadas en el algoritmo NI.N cuando P est directamente a la izquierda de la ventana de recorte.
()
IR
IR
LR LB
(a)
(b)
0
FIGURA 6.19. Los dos posibles conjuntos de regiones de recorte utilizados en el algoritmo NLN cuando P est encima y a la izquierda de la ventana de recorte. En el tercer caso, cuando P est a la izquierda y encima de la ventana de recorte, utilizamos las regiones de la Figura 6.19. En este caso, tenemos las dos posibilidades mostradas, dependiendo de la posicin de P con respecto a la esquina superior izquierda de la ventana de recorte. Cuando P est cerca del lmite izquierdo de recorte de la ventana, utilizamos las regiones del apartado (a) de esta figura. De lo contrario, cuando P est cerca del lmite superior de recorte de la ventana, utilizamos las regiones del apartado (b). Si P est en una ci las regiones T, L, TR, TB, LR, o LB. esto determina un nico borde de la ventana de recorte para los clculos de interseccin. De lo contrario, la lnea entera se rechaza.
() ( 0 f n
Para determinar la regin en la que se encuentra P, , comparamos la pendiente del segmento de lnea con las pendientes de los limites de las regiones del algoritmo NLN. Por ejemplo, si P est a la izquierda de la ventana de recorte (Figura 6.18), entonces P est en la regin LT si.
1n 0 f | n
pendientep,P
/w
< pendienteP P
0
lhl
< pendienleP P
0
(6.21)
335
t.
\)
x ) < (x - x ) (v n n - y )
Q L 0 ()
(6.23)
Los clculos de diferencias de coordenadas y los clculos de productos utilizados en los tests de las pendientes se almacenan y se utilizan tambin en los clculos de las intersecciones. A partir de las ecuaciones paramtricas:
^ o
O n-.Vf>
f i
calculamos la coordenada x de la interseccin con el lmite izquierdo de la ventana como x = x, por lo que w = (x - - % y t * | %) y la coordenada y de la interseccin es:
L cm
^ y
+
X
h ^
\"\\\
{
X
(6
_2
4)
)
m
Y para una interseccin con el lmite superior tenemos y =y^ y u = (y-y -yr}V()>r -y^ Pr lo que la coordenada x vale: x = x ^^^(y, - _ y )
lt a
(6.25)
tices Vi, V , V , V y V . En este caso, se obtienen dos regiones de recorte convexas, aadiendo un segmen2 3 4 5
to de lnea de V a V,. Despus se recorta la lnea en dos pasos: (1) se recorta la lnea P, P con el polgono
4 2
convexo de vrtices V V,, V y V para producir el segmento recortado P,' P ' (vase la Eigura 6.20(b)). (2)
p 3 4 2
Se recorta el segmento de lnea interno P,' P' utilizando el polgono convexo de vrtices V,, V y V (Figura
5 4
336
CAPTULO 6
Vkualiziuin bidimensional
Y ^^-\ Ventana t i c recorte en forma de polgono cncavo
*%&
/" __ "*
v,"
(a)
y "
FIGURA 6.20. Una ventana de recorte con forma de polgono cncavo (a) definida por los vrtices V,, V , V , V y V se modifica para obtener el polgono convexo (b) definido por los vrtices V,, V^, V y V . Los segmentos externos de la lnea P, P, se descartan usando esta ventana de recorte convexa. El segmento de lnea resultante, p, p, se procesa despus de acuerdo con el tringulo (V,, V, V ) (c) para recortar el segmento de lnea interno P, P, y generar la lnea recortada final P, P, .
2 3 4 5 3 4 4
se recortaran con el rectngulo limitador (extensiones de coordenadas) de la regin de recorte curvada. Se eliminan las lneas que se encuentran fuera de las extensiones de las coordenadas. Para identificar las lneas que estn dentro de un crculo, por ejemplo, podramos calcular la distancia de los puntos extremos de la lnea al centro del crculo. Si el cuadrado de esta distancia para ambos puntos extremos de una lnea es menor o igual que el radio al cuadrado, podemos guardar la lnea completa. Las lineas restantes se procesan despus mediante clculos de interseccin, que deben ser la solucin simultnea de las ecuaciones de la lnea y del crculo.
337
recorte de lneas a las aristas individuales del polgono porque esta tcnica no producira, por lo general, una polilnea cerrada. En lugar de eso, un recortador de lneas producira a menudo un conjunto disjunto de lneas con informacin incompleta, acerca de cmo podramos formar un lmite cerrado alrededor del rea de relleno recortada. La Figura 6.21 muestra una posible salida de un procedimiento de recorte de lincas aplicado a las aristas de un rea de relleno poligonal. Lo que necesitamos es un procedimiento que produzca una o ms polilneas cerradas como lmites del rea de relleno recortada, con el fin de que los polgonos se puedan convertir por exploracin para rellenar los interiores con el color o patrn asignado, como en la Figura 6.22. Podemos procesar un rea de relleno poligonal de acuerdo con los bordes de una ventana de recorte, utilizando la misma tcnica general del recorte de lneas. Un segmento de lnea se define mediante sus dos puntos extremos, y estos puntos extremos se procesan mediante un procedimiento de recorte de lneas, construyendo un nuevo conjunto de puntos extremos recortados en cada borde de la ventana de recorte. De forma similar, necesitamos mantener un rea de relleno como una entidad a medida que ella se procesa a travs de las etapas de recorte. Por tanto, podemos recortar un rea de relleno poligonal determinando la nueva forma del polgono a medida que se procesa cada arista de la ventana de recorte, como se muestra en la Figura 6.23. Por supuesto, el relleno interior del polgono no se aplicar hasta que se haya determinado el borde de recorte final. Al igual que comprobamos un segmento de lnea para determinar si se puede guardar completamente o recortar completamente, podemos hacer lo mismo con un rea de relleno poligonal comprobando las extensiones de sus coordenadas. Si los valores mximo y mnimo de las coordenadas del rea de relleno estn dentro de los cuatro lmites de recorte, el rea de relleno se almacena para un posterior procesamiento. Si estas extensiones de coordenadas estn todas fuera de cualquiera de los lmites de la ventana de recorte, eliminamos el polgono de la descripcin de la escena (Figura 6.24).
Despus del recorte (b> Antes del recorte <a> Despus del recorte
ib)
FIGURA 6.21. Un algoritmo de recorte de lneas aplicado a los segmentos de lnea del lmite poligonal de (a) genera el conjunto de lneas sin conexin mostrado en (b). FIGURA 6.22. Visualizacin de un rea de relleno poligonal correctamente recortada.
Polgono original
Reeorte izquierdo
Recorte derecho
Recorte inferior
Recone superior
FIGURA 6.23. Procesamiento de un rea de relleno poligonal con los sucesivos lmites de la ventana de recorte.
338
CAPTULO 6
Visualizan bidimemionai
FIGURA 6.24. Un rea de relleno poligonal con las extensiones de coordenadas fuera del limite derecho de recorte.
Cuando no podemos identificar si un arca de relleno est totalmente dentro o totalmente fuera de la ventana de recorte, necesitamos entonces localizar las intersecciones del polgono con los lmites de recorte. Una manera de implementar el recorte de polgonos convexos consiste en crear una nueva lista de vrtices en cada lmite de recorte, y entonces pasar esta nueva lista de vrtices al siguiente recortador de lmites. La salida de la etapa final de recorte es la lista de vrtices del polgono recortado (Figura 6.25). Para el recorte de polgonos cncavos, es necesario modificar esta tcnica bsica para que se puedan generar mltiples listas de vrtices.
339
gono cncavo mostrado en el apartado (a) de la figura. Sin embargo, se puede aadir un procesamiento adicional al algoritmo de Sutherland-Hodgman para obtener mltiples listas de vrtices como salida, con el fin de poder realizar el recorte de polgonos cncavos generales. El algoritmo bsico de Sutherland-Hodgman es capaz de procesar polgonos cncavos cuando el rea de relleno recortada se puede describir con una nica lista de vrtices. La estrategia general de este algoritmo es enviar el par de puntos extremos de cada sucesivo segmento de lnea del polgono a travs de la serie de recortadores (izquierdo, derecho, inferior y superior). Tan pronto como un recortador completa el procesamiento de un par de vrtices, los valores de las coordenadas recortadas, si existen, para dicha arista se envan al siguiente recortador. Despus, el primer recortador procesa el siguiente par de puntos extremos. De este modo, los recortadores individuales de bordes pueden funcionar en paralelo. Existen cuatro posibles casos que hay que considerar cuando se procesa una arista de un polgono de acuerdo con uno de los lmites de recorte. Una posibilidad es que el primer punto extremo de la arista est fuera del lmite de recorte y el segundo extremo est dentro. O, ambos extremos podran estar dentro del lmite de recorte. Otra posibilidad es que el primer extremo est dentro del lmite de recorte y el segundo fuera. Y, finalmente, ambos puntos extremos podran estar fuera del lmite de recorte. Para facilitar el paso de los vrtices de una etapa de recorte a la siguiente, la salida de cada recortador se puede formular como se muestra en la Figura 6.26. A medida que cada sucesivo par de puntos extremos se pasa a uno de los cuatro recortadores, se genera una salida para el siguiente recortador de acuerdo con los resultados de las siguientes pruebas. (1) El primer vrtice de entrada est fuera del borde de la ventana de recorte y el segundo est dentro, tanto el punto de interseccin de la arista del polgono con el borde de la ventana como el segundo vrtice se envan al siguiente recortador. Si ambos vrtices de entrada se encuentran dentro de este borde de la ventana de recorte, slo el segundo vrtice se enva al siguiente recortador. Si el primer vrtice est dentro de este borde de la ventana de recorte y el segundo vrtice est fuera, slo la interseccin de la arista del polgono con el borde de la ventana de recorte se enva al siguiente recortador. Si ambos vrtices de entrada se encuentran fuera de este borde de la ventana de recorte, no se envan vrtices al siguiente recortador.
(2) (3|
(4)
El ltimo recortador de esta serie genera una lista de vrtices que describe el rea IInal de relleno recortada. La Figura 6.27 proporciona un ejemplo del algoritmo de recorte de polgonos de Sutherland-Hodgman para un rea de relleno definida por el conjunto de vrtices 1 , 2 , 3 . Tan pronto como un recortador recibe un par de puntos extremos, determina la salida apropiada utilizando las pruebas mostradas en la Figura 6.26.
(2) dentro
2
(4) fuera
Salida: V
Salida: V
Salida: ninguna
FIGURA 6.26. Las cuatro posibles salidas generadas por el recortador izquierdo, dependiendo de la posicin de un par de puntos extremos respecto del borde izquierdo de la ventana de recorte.
340
CAPTULO 6
Visualizacin bidimensional
Recoridor superior
II. 2|: (in-in) ->{2] (2,3): (iri-oul) ->|2'| n
1
I I * (out-in) ->|3', 1J J, 1 ).
(2,2'}:<in-n)-> (2'[
|3'. 1}: (in-in)-. (11 (3M):(out-out) ->| I {1.2}:(in-in)-> |2 |l.2|:(out-in) -Hfl'Jj (2", ( i n - in) - il' (2,2'|:(in-in>-> |2'| |l'.21:(in-in)-> 12) {2,2 l:(in-in)-> |2' {2', 2"): (in -in)-* |2" in = dentro; out = fuera
,
FIGURA 6.27.
{I,
Estas salidas se pasan sucesivamente desde el recorlador izquierdo al derecho, al inferior y al superior. La salida del recorlador superior es el conjunto de vrtices que define el rea de relleno recortada. En este ejemplo, la lista de vrtices de salida es {1', 2, 2\ 2"). En el siguiente conjunto de procedimientos se muestra una implementacin secuencial del algoritmo de recorte de polgonos de Sutherland-Hodgman. Un conjunto de vrtices de entrada se convierte en una lista de vrtices de salida mediante las subrutinas de recorte izquierda, derecha, inferior y superior.
Left,
Right, 4;
Bottom,
Top
Boundary;
nClip
(wcPt2D p,
Boundary b,
w c P t 2 D wMin,
w c P t 2 D wMax)
{
switch case case case case (b) { if if if (p.x (p.x (p.y < wMin.x) > wMax.x) wMin.y) return return return (false); (false); (false); break; break; break; Left: Right: Bottom: Top: if
(p.y
> wMax.y)
return
(false);
break;
return
(true);
}
GLint
( {1
if (inside (pl,
cross
(wcPt2D p l ,
wcPt2D p 2 ,
Boundary winEdge,
w c P t 2 D wMin,
w c P t 2 D wMax)
winEdge,
wMin,
wMax)
inside
(p2,
winEdge,
wMin,
wMax))
(false); (true);
wcPt2D i n t e r s e c t
{wcPt2D p i ,
wcPt2D
p2,
Boundary winEdge,
w c P t 2 D wMin,
w c P t 2 D wMax)
wcPt2D
iPt;
G L f l o a t m; if (pl.X
f|p !j|
m { (pi.y p2.y) / (pl.x p2.x);
1 p 2 . x )
switch case
(winEdge)
iPt.x =
iPt.x
(wMax.x
p2.x)
* mf
if
(pl.x
!=
p2.x) p2.x;
iPt.x
p2.x
(wMin.y
p2.y)
/ m;
else
iPt.x
iPt.y if
(pl.x
else
iPt.x
break;
return
(iPt);
void c l i p P o i n t
(wcPt2D p,
Boundary
winEdge, * cnt,
w c P t 2 D wMin, wcPt2D *
w c P t 2 D wMax, wcPt2D * s)
wcPt2D * pOut,
int
firstt],
WCPt2D /* Si
* guardar e s t e if
else /* Existe un punto p r e v i o . de la (p, recorte, Si p y un punto a n e t r i o r cruzan e s t e la si la interaecccin. lo hay. de Si no lista salida. wMax)) { wMax); Recortar h a y ms */ de acuerdo de recorte,
hallar lmite, a
Biguiente
lmites
winEdge,
wMin,
= intersect (winEdge
s[winEdge],
winEdge,
wMin,
342
CAPTULO 6
Visualizacin bidhttcnsional
clipPoint else {
(iPt,
b+1,
wMin,
wMax,
pOut,
cnt,
first,
a);
pOut[*Cnt3
iPt;
(*cnt)++;
>
/*
Guardar p -
como p; si B <
el
punto
ms
reciente
para
este
limite
de
recorte.
*/
s [winEdge] /* * if Para de if
todos, (p,
el
punto
est */
dentro,
pasar
al
siguiente
lmite
lo hay. Top)
inside
winEdge,
wMin,
wMax)
p,
winEdge
1,
wMin,
wMax,
pOut,
cnt,
first,
s;
else
{ = p; (*cnt)++;
pOut[*cnt]
void closeClip
w c P t 2 D wMax, wcPt2D *
wcPt2D [
* 1,
pOut, wcPt2D * s)
first
i
wcPt2D pt; winEdge; winEdge <= Top; winEdge++J { wMin, wMax) wMin, { wMax); Boundary for (winEdge L e f t ; if (croBs pt if (s[winEdge], intersect < *first[winEdge], winEdge,
(s[winEdge], Top)
*first[winEdge],
winEdge,
(winEdge clipPoint
(pt,
winEdge
1,
wMin,
wMax,
pOut,
cnt,
first,
s);
else
{ = pt; <*cnt)++;
pOut[*cnt]
; i }
)
GLint polygonClipSuthHodg ( w c P t 2 D wMin, w c P t 2 D wMax, GLint n, wcPt2D * pin, wcPt2D * pOut)
{
/* El parmetro "first" guarda "s" un puntero a primer punto porcesado por un recientemente procesado * l m i t e de r e c o r t e ; * por el lmite de almacena el p u n t o ms
recorte.*/ ( 0, 0, 0, 0 }, stnClip];
first[nClip] cnt 0; 0;
(k =
k < n;
k++) Left, pOut, wMin, &cnt, wMax, pOut, s); &cnt, first, s);
(pln[k], wMax,
(wMin,
first,
(cnt);
343
Ventana de recorte 1
<t
FIGURA 6.28. El recorte del polgono cncavo de (a) utilizando el algoritmo de Sutherland-Hodgman produce las dos reas conectadas de (b).
Cuando se recorta un polgono cncavo con el algoritmo de Sutherland-Hodgman, se pueden visualizar lneas extraas. En la Figura 6.28 se muestra un ejemplo de este efecto. Esto ocurre cuando el polgono recortado tiene dos o ms partes independientes. Pero ya que slo hay una lista de vrtices de salida, el ltimo vrtice de la lista se une siempre al primer vrtice. Hay varias cosas que podemos hacer para visualizar correctamente polgonos cncavos recortados. Podemos dividir un polgono cncavo en dos o ms polgonos convexos (Seccin 3.15) y procesar cada polgono convexo de forma independiente utilizando el algoritmo de Sutherland-Hodgman. Otra posibilidad consiste en modificar el mtodo de Sutherland-Hodgman para que se compruebe si en la lista de vrtices final existen puntos de interseccin mltiples, a lo largo de cualquier lmite de la ventana de recorte. Si encontramos ms de dos vrtices a lo largo de cualquier lmite de recorte, podemos dividir la lista de vrtices en dos o ms listas, que identifiquen correctamente las partes independientes del rea de relleno recortada. Esto puede requerir un anlisis amplio para determinar si algunos puntos a lo largo del lmite de recorte se deben emparejar o si representan un nico vrtice que se ha recortado. Una tercera posibilidad es utilizar un recortador de polgonos ms general que se haya diseado para procesar polgonos cncavos correctamente.
344
CAPITULO 6
Visualizado/! bidimeuskmal
tas para que el interior del polgono est siempre a nuestra izquierda, obtenemos una transversal en sentido contrario al movimiento de las agujas del reloj. De otra manera, con el interior a nuestra derecha, tenemos una transversal en el sentido del movimiento de las agujas del reloj. Para una transversal en el sentido contrario al movimiento de las agujas del reloj de los vrtices del rea de relleno poligonal, aplicamos los siguientes procedimientos de Weiler-Atberton: (1 ) Procese las aristas del rea de relleno poligonal en sentido contrario a las agujas del reloj hasta que encuentre un par de vrtices situados dentro y fuera de uno de los lmites de recorte; es decir, el primer vrtice de la arista del polgono est dentro de la regin de recorte y el segundo vrtice est fuera de la regin de recorte. Siga los lmites de la ventana en sentido contrario a las agujas del reloj, desde el punto de interseccin de salida hacia otro punto de interseccin con el polgono. Si ste es un punto previamente procesado, contine con el paso siguiente. Si ste es un punto de interseccin nuevo, contine procesando las aristas del polgono en sentido contrario al movimiento de las agujas del reloj hasta que se encuentre un vrtice procesado previamente. Forme la lista de vrtices de esta parte del rea de relleno recortada. Vuelva al punto de interseccin de salida y continu procesando las aristas del polgono en orden contrario al movimiento de las agujas del reloj.
(2)
(3) (4)
La Figura 6.29 muestra el recorte de Weiler-Atherton de un polgono cncavo con una ventana de recorte rectangular y estndar para una transversal en sentido contrario al movimiento de las agujas del reloj de las aristas del polgono. Para una transversal de las aristas en el sentido del movimiento de las agujas del reloj, usaramos una transversal de la ventana de recorte en el sentido del movimiento de las agujas del reloj. Comenzando por el vrtice etiquetado como 1 en la Figura 6.26(a), el siguiente vrtice del polgono a procesar en sentido aantihorario es el etiquetado como 2. Por tanto, esta arista sale de la ventana de recorte por la frontera superior. Calculamos la interseccin (punto 1') y hacemos un giro a la izquierda para procesar las aristas de la ventana en direccin contraria al movimiento de las agujas del reloj. Continuando a lo largo del lmite superior de la ventana de recorte, no intersectamos con una arista del polgono antes de alcanzar el lmite izquierdo de la ventana, por lo que etiquetamos este punto como vrtice I" y seguimos el lmite izquierdo hacia la interseccin I ' " . Despus seguimos esta arista del polgono en sentido contrario a las agujas del reloj, que nos devuelve al vrtice 1. Esto completa el circuito de los lmites de la ventana e identifica la lista de
FIGURA 6.29. Un polgono cncavo (a), definido mediante la lista de vrtices {I, 2, 3, 4, 5, 61, se recorta utilizando el algoritmo de Weilcr-Aiherton para generar las dos listas {1, I', I", I ' " ) y {4', 5, 5 ' | , que representan las reas de relleno poligonales e independientes mostradas en (b).
345
FIGURA 6.30. Recorte de un rea de relleno poligonal con una ventana de recorte poligonal cncava utilizando el algoritmo de Wciler-Atherton. vrtices { 1 , 1', I " , l ' " como una regin recortada del rea original de relleno. Despus, se contina el procesamiento de las aristas del polgono en el punto 1 * . La arista definida por los puntos 2 y 3 cruza hacia el exterior del lmite izquierdo, pero los puntos 2 y 2' estn encima de la arista superior de la ventana de recorte y los puntos 2' y 3 estn a la izquierda de la regin de recorte. Tambin la arista de puntos extremos 3 y 4 se encuentra fuera del lmite izquierdo de la ventana de recorte. Pero la siguiente arista (desde el extremo 4 hasta el extremo 5) entra de nuevo en la regin de recorte y obtenemos el punto de interseccin 4'. La arista de extremos 5 y 6 sale de la ventana por el punto de interseccin 5\ por lo que nos desviamos hacia el lmite izquierdo de recorte para obtener la lista de vrtices cerrada 4', 5, 5 ' . Continuamos el procesamiento de aristas por el punto 5 ' , que nos devuelve al punto 1 " ' previamente procesado. En este punto, lodos los vrtices y las aristas del polgono se han procesado, por lo que el rea de relleno est completamente recortada.
346 CAPTULO 6 Visualizado*] bidi mensional nal. Alternativamente, podramos utilizar los mismos procedimientos generales que estudiamos para los segmentos de lnea. En primer lugar, podemos comparar las extensiones de coordenadas del rea de relleno con las extensiones de coordenadas de la ventana de recorte. Dependiendo de la forma de la ventana de recorte, podemos tambin ser capaces de realizar algunas otras pruebas de regin basadas en consideraciones de simetra. En el caso de las reas de relleno que no se puedan identificar como completamente dentro o completamente fuera de la ventana de recorte, finalmente necesitamos calcular las intersecciones de la ventana con el rea de relleno.
1 0>r>v
e n
a c
i i
i Ventana de recorte FIGURA 6.31. Un rea de relleno circular, mostrando el cuadrante y los octantes que estn fuera de los lmites de la ventana de recorte.
347
FIGURA 6.32.
('AI)KNA l
CADENA 21
1
Ames del
recorte
FIGURA 6.33.
Recorte de texto utilizando las extensiones de coordenadas para una cadena completa.
348
CAPTULO 6
Visualizan hulimemional
CADI NA I
NA I
FIGURA 6.34. Recorte de texto utilizando el rectngulo delimitador para caracteres individuales de una cadena.
ADUNA I
FIGURA 6.35. Recorte de texto realizado sobre las componentes de los caracteres individuales. caso, las extensiones de coordenadas de los caracteres individuales se comparan con los lmites de la ventana. Cualquier carcter que no est completamente dentro del lmite de la ventana de recorte se elimina. Una tercera tcnica para recortar textos consiste en recortar los componentes de los caracteres individuales. Esto proporciona la visualizacin ms precisa de cadenas de caracteres recortadas, pero requiere el mayor procesamiento. Ahora tratamos los caracteres del mismo modo que tratbamos las lincas o Los polgonos. Si un carcter individual se superpone con la ventana de recorte, slo recortamos las partes del carcter que se encuentran fuera de la ventana (Figura 6.35). Las fuentes de caracteres de contorno definidas con segmentos de lnea se procesan de este modo utilizando un algoritmo de recorte de polgonos. Los caracteres definidos como mapas de bits se recortan comparando la posicin relativa de los pxcles individuales en los patrones de rejilla de caracteres con los lmites de la regin de recorte.
Resumen
349
6.11 RESUMEN
La pipeline de transformacin de visuali/acin bidimensional es una serie de operaciones que da lugar a la visualizacin de una imagen en coordenadas universales que se han definido en el plano xy. Despus de construir la escena, se puede mapear a un sistema de referencia de coordenadas de visualizacin y, a continuacin, a un sistema de coordenadas normalizado donde se pueden aplicar subrutinas de recorte. Finalmente, la escena se transfiere a coordenadas de dispositivo para su visualizacin. Las coordenadas normalizadas se pueden especificar dentro del rango que vara de 0 a 1 o dentro del rango que vara de -1 a 1, y se utilizan para hacer los paquetes grficos independientes de los requisitos de los dispositivos de salida. Seleccionamos parte de una escena para su visualizacin en un dispositivo de salida utilizando una ventana de recorte, que se puede describir en el sistema de coordenadas universales o en el sistema de coordenadas de visualizacin relativo a las coordenadas universales. Los contenidos de la ventana de recorte se transfieren a un visor para su visualizacin en un dispositivo de salida. En algunos sistemas, un visor se especifica en coordenadas normalizadas. Otros sistemas especifican el visor en coordenadas de dispositivo. Habitualmente. la ventana de recorte y el visor son rectngulos cuyas aristas son paralelas a los ejes de coordenadas. Un objeto se mapea al visor para que tenga la misma posicin relativa en el visor que la que tiene en la ventana de recorte. Para mantener las proporciones relativas de un objeto, el visor debe tener la misma relacin de aspecto que la ventana de recorte correspondiente. Podemos establecer un nmero cualquiera de ventanas de recorte y de visores para una escena. Los algoritmos de recorte se implementan habitualmente en coordenadas normalizadas, para que todas las transformaciones geomtricas y las operaciones de visualizacin, que son independientes de las coordenadas del dispositivo, se puedan concatenar en una matriz de transformacin. Con el visor especificado en coordenadas de dispositivo, podemos recortar una escena bidimensional con un cuadrado simtrico y normalizado con coordenadas normalizadas que varan entre -I y I, antes de transferir los contenidos del cuadrado normalizado y simtrico al visor. Todos los paquetes grficos incluyen subrutinas para recortar segmentos de lnea recta y reas de relleno poligonales. Los paquetes que contienen funciones para especificar puntos nicos o cadenas de texto, tambin incluyen subrutinas de recorte para estas primitivas grficas. Ya que los clculos de recorte consumen un tiempo, el desarrollo de algoritmos de recorte mejorados contina siendo un rea de gran preocupacin en los grficos por computadora. Cohn y Sutherland desarrollaron un algoritmo de recorte de lneas que utiliza un cdigo de regin para identificar la posicin de un extremo de una lnea respecto a los lmites de la ventana de recorte. Los cdigos de regin de los puntos extremos se utilizan para identificar rpidamente aquellas lneas que se encuentran completamente dentro de la ventana de recorte y algunas lneas que estn completamente fuera. Para el resto de las lneas, se deben calcular las intersecciones con los lmites de la ventana. Liang y Barsky desarrollaron un algoritmo de recorte de lneas ms rpido que representa los segmentos de lnea con ecuaciones paramtricas, similar al algoritmo de Cyrus-Beck. Esta tcnica permite que se realicen ms comprobaciones antes de proceder con los clculos de interseccin. El algoritmo de Nicholl-Lee-Nicholl reduce ms an los clculos de interseccin utilizando una comprobacin de ms regiones en el plano xy. Los mtodos de recorte de lneas paramtricos se amplan fcilmente a ventanas de recorte convexas y a escenas tridimensionales. Sin embargo, la tcnica de Nicholl-Lee-Nicholl slo es aplicable a segmentos de lnea bitlimensionales. Tambin se han desarrollado algoritmos de recorte de segmentos de linea recta con ventanas de recorte poligonales cncavas. Una tcnica consiste en dividir una ventana de recorte cncava en un conjunto de polgonos convexos y aplicar los mtodos de recorte de lneas paramtricos. Otra tcnica consiste en aadir aristas a la ventana cncava para convertirla en convexa. Despus se puede realizar una serie de operaciones de recorte interiores y exteriores para obtener el segmento de lnea recortado. Aunque las ventanas de recorte con lmites curvados se utilizan raramente, podemos aplicar mtodos similares a los de recorte de lneas. Sin embargo, los clculos de interseccin ahora implican ecuaciones no lineales.
350
CAPTULO 6
Visualizacin tridimensional
Un rea de relleno de un polgono se define con una lista de vrtices, y los procedimientos de recorte de polgonos deben guardar informacin a cerca de cmo las aristas recortadas, se deben conectar a medida que el polgono pasa por varios estados de procesamiento. En el algoritmo de Suthcrland-llodgman, los pares de vrtices del rea de relleno son procesados por cada recortador de contorno por turnos y la informacin de recorte para aquella arista se pasa inmediatamente al siguiente recortador, lo cual permite a las cuatro subrutinas de recorte (izquierda, derecha, inferior y superior) funcionar en paralelo. Este algoritmo proporciona un mtodo eficiente para recortar reas de relleno de polgonos convexos. Sin embargo, cuando un polgono cncavo contiene partes disjuntas, el algoritmo de Suthcrland-llodgman produce extraos segmentos de lnea de conexin. Tambin se pueden utilizar para recortar reas de relleno de polgonos convexos, ampliaciones de recortadores de linas paramtricos, tales como el mtodo de Liang-Barsky. Tanto las reas de relleno convexas como las reas de relleno cncavas se pueden recortar correctamente con el algoritmo de Weiler-Atherton, que utiliza una tcnica de contorno-transversal. Las reas de relleno se pueden recortar con ventanas de recorte convexas utilizando una ampliacin de la tcnica de representacin de lneas paramtrieas. El mtodo de Weiler-Atherton puede recortar cualquier rea de relleno de un polgono utilizando cualquier ventana de recorte de forma poligonal. Las reas de relleno se pueden recortar mediante ventanas con lmites no lineales utilizando una aproximacin poligonal de la ventana o procesando el rea de relleno con los lmites curvados de la ventana. El mtodo de recorte de textos ms rpido es la estrategia todos-o-ninguno, que recorta completamente una cadena de texto si cualquier parte de la cadena est fuera de cualquier lmite de la ventana de recorte. Podramos recortar una cadena de texto eliminando slo aquellos caracteres de la cadena que no estn completamente dentro de la ventana de recorte. El mtodo ms preciso de recorte de texto consiste en aplicar recorte de puntos, lneas, polgonos o curvas a los caracteres individuales de una cadena, dependiendo de si los caracteres estn definidos con fuentes de cuadrculas de puntos o de contorno. Aunque OpenGL est diseado para aplicaciones tridimensionales, se proporciona una funcin (iLU bidimensional para especificar una ventana de recorte estndar y rectangular en coordenadas universales. En OpenGL, las coordenadas de la ventana de recorte son parmetros para la transformacin de proyeccin. Por tanto, en primer lugar necesitamos invocar el modo de la matriz de proyeccin. A continuacin, podemos especificar la vista, utilizando una funcin de la biblioteca bsica de OpenGL y una ventana de visualizacin, utilizando funciones de GLUT. Hay disponible una gran variedad de funciones de GLUT para modificar varios parmetros de la ventana de visualizacin. La Tabla 6.1 resume las funciones de visualizacin bidimensional de OpenGL. Adicionalmente, la tabla enumera algunas funciones relacionadas con la visualizacin.
TABLA 6.1. RESUMEN DE LAS FUNCIONES OpenGL DE VISUALIZACIN BIDIMENSION,
Funcin
gluOrtho2D
Descripcin Especifica las coordenadas de la ventana de recorte en sus argumentos de una proyeccin ortogonal bidimensional. Especifica los parmetros del sistema de coordenadas de pantalla de una vista. Utiliza los argumentos GL_VIEWPORT y de la \ isla acli\a actual. Iniciali/a la biblioteca GLUT. Especifica las coordenadas de la esquina superior izquierda de la ventana de visualizacin. Especifica la anchura y la altura de la ventana de visualizacin. Crea una ventana de visualizacin (a la que se asigna un identificado!' entero) y especifica un ttulo para la misma. (Contina)
vpArray
glViewport glGetlntegerv
glutlnic glutlnitWindowPosition
gluCInitWindowSize gluCCreateWindow
Resumen
TABLA 6.1. RESUMEN DE LAS FUNCIONES DE VISUALIZACIN BIDIMENSIONAL DE OpenGL. (Cont)
351
Descripcin Selecciona parmetros tales como los bferes y el modo de color de una ventana de visualizacin. Especifica un color RGB de fondo en una ventana de visualizacin. Especifica un color de fondo de una ventana de visualizacin utilizando el modo de color indexado. Especifica un nmero identillcador de una ventana de visualizacin que hay que borrar. Especifica el nmero idcntificador de una ventana de visualizacin que debe ser establecida como la ventana de visualizacin actual. Restablece la localizacin en la pantalla de la ventana de visualizacin actual. Restablece la anchura y la altura de la ventana de visualizacin actual. Cambia la ventana de visualizacin actual al tamao de la pantalla de vdeo. Especifica la funcin que se debe invocar cuando se cambia el tamao de la ventana de visualizacin. Convierte la ventana de visualizacin actual en un icono. Especifica una etiqueta para un icono de la ventana de visualizacin. Especifica un nuevo ttulo para la ventana de visualizacin actual. Mueve la ventana de visualizacin actual hacia la cima; es decir, la coloca encima de las dems ventanas. Mueve la ventana de visualizacin actual hacia el fondo: es decir, la coloca detrs de las dems ventanas. Muestra en pantalla la ventana de visualizacin actual. Crea una ventana de segundo nivel dentro de una ventana de visualizacin. Selecciona una forma para el cursor de pantalla. Invoca una funcin para crear una imagen dentro de la ventana de visualizacin actual. Redibuja los contenidos de la ventana actual. Ejecuta el programa de grficos por computadora. Especifica una funcin para su ejecucin cuando el sistema no tiene algo que hacer. Pregunta al sistema acerca de un parmetro de estado espeficado.
glutDestroyWindow
glutSetWindow
glutPushWindow
352
CAPTULO 6
Visualization bidimensional
REFERENCIAS
Se estudian algoritmos de recorte de lneas en Sproull y Sutherland (1968), Cyrus y Beck (1978), Liang y Barsky (1984), y Nicholl, Lee y Nieholl (1987). Se proporcionan mtodos de mejora de la velocidad del algoritmo de recorte de lneas de Cohen-Sutherland en Duvanenko (1990). En Sutherland y Hodgman (1974) y en Liang y Barsky (1983) se presentan mtodos bsicos de recorte de polgonos. En Weiler y Alherton (1977) y en Weiler (1980) se proporcionan tcnicas generales para recortar polgonos de forma arbitraria entre s. En Woo, Neider, Davis y Shreiner (1999) se estudian funciones de visuali/acin de OpenGL. Las subrulinas de GLUT de ventanas de visualizacin se estudian en Kilgard (1996) y se puede obtener informacin adicional sobre GLUT en el sitio w e b : htp^/reality.sgixom/opengl/glutS/gluliJumi
EJERCICIOS
6.1 Escriba un procedimiento pura calcular los elementos de la matriz 6.1 de transformacin bidimensional de coordenadas universales a coordenadas de visuali/acin. proporcionando las coordenadas del origen de visuali/acin P y el vector de direccin de vista V. 6.2 Obtenga la matriz 6.8 de transferencia de los contenidos de una ventana de recorte a la vista cambiando de escala en primer lugar la ventana al tamao de la vista y despus trasladando la ventana a la que se le ha aplicado el cambio de escala a la posicin de la vista. Utilice el centro de la ventana de recorte como punto de referencia para las operaciones de cambio de escala y de traslacin. 6.3 6.4 Escriba un procedimiento para calcular los elementos de la matriz 6 de transformacin de una ventana de recorte en el cuadrado normalizado y simtrico. Escriba un conjunto de procedimientos para implemcntur la tubera de visuali/acin bidimensional sin las operaciones de recorte. Su programu debera permitir que se construya una escena con transformaciones de coordenadas de modelado, un sistema de visuali/acin especificado y una transformacin al cuadrado normalizado y simtrico. De forma opcional, se podra implementar una tabla de visualization para almacenar diferentes conjuntos de parmetros de transformacin de visuali/acin. 6.5 6.6 6.7 6.8 6.9 6.10 6.11 Escriba un programa completo para implementar el algoritmo de recorte de lneas de Cohen-Suiherland. Estudie cuidadosamente el fundamento lgico de los tests y los mtodos para el clculo de los parmetros de las intersecciones w, y M, del algoritmo de recorte de lineas de Liang-Barsky. Compare el nmero de operaciones aritmticas realizados en los algoritmos de recorte de lneas de CohenSuthcrland y Liang-Barsky para varias orientaciones diferentes de linea relativas a la ventana de recorte. Escriba un programa completo para implementar el algoritmo de recorte de lneas de Liang-Barsky. Idee transformaciones de simetra para mapear los clculos de intersecciones para las tres regiones de la Figura 6.16 a las otras seis regiones del plano Xy, Establezca un algoritmo detallado para la tcnica de Nicholl-Lcc-Nicholl de recorte de lneas para cualquier par de puntos extremos de linea de entrada. Compare el nmero de operaciones aritmticas realizadas en el algoritmo NLN con los algoritmos de CohenSutherland y de Liang-Barsky de recorte de lineas, para varias orientaciones diferentes de linea respecto de la ventana de recorte. 6.12 6.13 6.14 Adapte el algoritmo de recorte de lineas de Liang-Barsky al recorte de polgonos. Establezca un algoritmo detallado para el recorte de polgonos de Weiler-Atherton, asumiendo que la ventana de recorte es un rectngulo en posicin estndar. Idee un algoritmo para el recorte de polgonos de Weiler-Alherton, en el que la ventana de recorte pueda ser cualquier polgono convexo.
353
Idee un algoritmo para el recorte de polgonos de Weiler-Atherton, en el que la ventana de recorte pueda ser cualquier polgono especificado (convexo o cncavo). Escriba una subrutina para recortar una elipse en posicin estndar con una ventana rectangular. Asumiendo que todos los caracteres de una cadena de texto tienen la misma anchura, desarrolle un algoritmo de recorte de texto que recorte una cadena segn la estrategia de recorte de caracteres todos-o-ninguno. Desarrolle un algoritmo de recorte de texlo que recorte caracteres individuales, asumiendo que los caracteres se definen en una cuadrcula de pxcles de un tamao especificado.
TI Templo de Luxor, una cseena de un video de E&S Digital Thealer donde se realiza una visualizacin tridimensional en tiempo real con tcnicas de animacin inlbgrica. (Cortesa de Evans & Sutherhuu i
Panormica de los conceptos de visualizacin tridimensional Pipeline de visualizacin tridimensional Parmetros de coordenadas de visualizacin tridimensional Transformacin de coordenadas universales a coordenadas de visualizacin Transformaciones de proyeccin Proyecciones ortogonales
Proyecciones paralelas oblicuas Proyecciones en perspectiva Transformacin del visor y coordenadas de pantalla tridimensionales
7 . 1 0 Funciones de visualizacin tridimensional OpenCiL 7 . 1 1 Algoritmos de recorte tridimensional 7 . 1 2 Planos de recorte opcionales en OpenGL 7 . 1 3 Resumen
Para aplicaciones grficas bidimensionales, las operaciones de visualizacin transfieren las posiciones desde el sistema de referencia en coordenadas universales a posiciones de pixeles en el plano del dispositivo de salida. Utilizando el contorno rectangular de la ventana de visualizacin y el visor, un paquete grfico bidimensional recorta una escena y establece la correspondencia con las coordenadas del dispositivo de salida. Las operaciones de visualizacin tridimensionales, sin embargo, son ms complejas, ya que hay muchas ms opciones en lo que respecta al modo de construir la escena y de generar vistas de dicha escena sobre un dispositivo de salida.
3 5 6
CAPTULO 7
Visualizacin tridimensional
Ni
I
i
Plano de visualizacin
F I G U R A 7 .1.
F I G U R A 7 .2.
la que se han eliminado las lneas posteriores; las imgenes estn extradas de una base de datos comercial de tbnnas de objetos. Cada objeto de la base de datos est definido mediante una cuadricula tridimensional de puntos que pueden visualizarse en forma almbrica o como un slido con superficie sombreada.
(Cortesia de
Viewpoint DataLabs.) plano de visualizacin. Podemos generar una vista de un objeto sobre el dispositivo de salida en modo almbrico, como en la Figura 7.2, o podemos aplicar tcnicas de iluminacin y de representacin de superficies para obtener un sombreado realista de las superficies visibles.
Proyecciones
A diferencia de la imagen de una cmara, podemos elegir diferentes mtodos para proyectar una escena sobre el plano de visualizacin. Un mtodo para obtener la descripcin de un objeto slido sobre un plano de visualizacin consiste en proyectar puntos de la superficie del objeto en una serie de lneas paralelas. Esta tcnica, denominada proyeccin paralela, se utiliza en dibujos de ingeniera y de arquitectura para representar un objeto mediante una serie de vistas que indiquen sus dimensiones precisas, como en la Figura 7.3. Otro mtodo para generar una vista de una escena tridimensional consiste en proyectar los puntos hasta el plano de visualizacin segn una serie de trayectorias convergente. Este proceso, denominado proyeccin en perspectiva, hace que los objetos que estn situados ms lejos de la posicin de visualizacin se muestren con un tamao menor que los objetos de! mismo tamao que se encuentren ms cerca. Las escenas generadas utilizando una proyeccin en perspectiva parecen ms realistas, ya que sta es la manera en que nuestros ojos y los objetivos de las cmaras forman las imgenes. En la vista con proyeccin en perspectiva mostrada en la Figura 7.4, las lneas paralelas segn la direccin de visualizacin parecen converger en un punto distante del fondo, y los aviones situados ms lejos parecen ms pequeos que el que est despegando en primer plano.
Pistas de profundidad
Con muy pocas excepciones, la informacin de profundidad tiene una gran importancia en una escena tridimensional, para que podamos identificar fcilmente (para una direccin de visualizacin concreta) cul es la
357
Superior
Lateral
Frontal
FIGURA 7.3. Tres vistas en proyeccin paralela de un objeto, que muestran las proporciones relativas desde distintas posiciones de visualizacin.
FIGURA 7.4. Una vista con proyeccin en perspectiva de una escena de un aeropuerto. (Cortesa de Evans & Sttthertand)
FIGURA 7.5. La representacin almbrica de la pirmide en (a) no contiene informacin de profundidad para indicar si la direccin de visualizacin es (b) hacia abajo desde una posicin situada por encima de la cspide o (c) hacia arriba desde una posicin situada por debajo de la base. parte la frontal y cul es la parte posterior de cada objeto visualizado. La Figura 7.5 ilustra la ambigedad que puede producirse cuando se muestra la representacin almbrica de un objeto sin informacin de profundidad. Hay muchas formas de incluir la informacin de profundidad en la representacin tridimensional de objetos slidos. Un mtodo simple para indicar la profundidad en las visualizaciones almbricas consiste en hacer variar el brillo de los segmentos lineales de acuerdo con su distancia con respecto a la posicin de visualizacin. La Figura 7.6 muestra una representacin almbrica de un objeto que incluye pistas de profundidad. Las lneas ms prximas a la posicin de visualizacin se muestran con la intensidad ms alta, mientras que las lneas ms alejadas se van mostrando con intensidades decrecientes. Este tipo de pistas de profundidad se aplican seleccionando unos valores de intensidad mximos y mnimos y un rango de distancias a lo largo de las cuales dicha intensidad puede variar. Otra aplicacin de las pistas de profundidad es modelar el efecto de la atmsfera sobre la intensidad percibida de los objetos. Los objetos ms distantes parecen ms tenues que los objetos ms prximos, debido a la dispersin de la luz por parte de las partculas de polvo, de la niebla y del humo. Algunos efectos atmosfricos pueden incluso cambiar el color percibido de un objeto y las pistas de profundidad nos permiten modelar estos efectos.
358
CAPTULO 7
Visualizaran tridimensional
FIGURA 7.6. Una representacin almbrica de un objeto con informacin de profundidad, de modo que el brillo de las lineas disminuye desde la parte frontal del objeto hacia la parle posterior.
Representacin de superficies
Puede conseguirse un mayor realismo en las imgenes si se representan las superficies de los objetos utilizando las condiciones de iluminacin de una escena y las caractersticas asignadas a las superficies. Las condiciones de iluminacin se establecen especificando el color y la ubicacin de las fuentes de luz, y tambin pueden definirse efectos de iluminacin de fondo. Las propiedades de las superficies de los objetos incluyen, por ejemplo, informacin sobre si una superficie es transparente u opaca, o si es suave o rugosa. Podemos asignar valores a una serie de parmetros para modelar superficies tales como el cristal, el plstico, superficies de madera veteada o incluso la apariencia rugosa de una naranja. En la Figura 7.7, se combinan mtodos de representacin superficial junto con tcnicas de proyeccin en perspectiva y de identificacin de superficies visibles con el fin de conseguir un alto grado de realismo en la escena mostrada.
FIGURA 7.7 Una visualizacin realista de una habitacin, conseguida mediante una proyeccin en perspectiva, efectos de iluminacin y propiedades
(Cortesa de John Snyder, Jed Lengyel, Devendr Kalra y Al fan; California Institute of Technology. Copyright O 1992 Caltech.)
seleccionadas de la superficie.
359
(6)
(d)
FIGURA 7.8. Una turbina completamente montada (a) puede mostrarse mediante un despiece con representacin almbrica (b), mediante un despiece renderizado (c), o mediante un despiece renderizado con codificacin de colores (d). (Cortesa de Autodesk. Inc.)
FIGURA 7.9. Seccin transversal con codificacin de colores del motor de una segadora, donde se muestra la estructura y las relaciones de los componentes internos. {Cortesia de Autodesk. Inc.)
360
CAPTULO 7
Visualizacin tridimensional
7.2
Los procedimientos para generar una vista infogrfica de una escena tridimensional son anlogos, hasta cierto punto, a los procesos que tienen lugar cuando se toma una fotografa, lin primer lugar, necesitamos seleccionar una posicin de visualizacin, que se correspondera con el lugar donde situaramos la cmara. La posicin de visualizacin se seleccionar dependiendo de si queremos mostrar una vista frontal, trasera, lateral, superior o inferior de la escena. Tambin podemos seleccionar una posicin en medio de un grupo de objetos o incluso dentro de un nico objeto, como por ejemplo un edificio o una molcula. Entonces, debemos decidir cul debe ser la orientacin de la cmara (Figura 7.10). Hacia dnde queremos apuntar la cmara desde la posicin de visualizacin y cmo debemos rotarla con respecto a la lnea de visualizacin con el fin de definir qu direccin de la imagen corresponde a arriba? Finalmente, cuando lomamos la fotografia, la escena se recorta al tamao de una ventana de recorte seleccionada, que se corresponde con la apertura o tipo de objetivo de una cmara, proyectando slo la luz de las superficies visibles sobre la pelcula fotogrfica. Necesitamos tener presente, sin embargo, que la analoga de la cmara no se puede llevar mucho ms all, ya que con un programa infogrlico leemos mucha ms flexibilidad y muchas ms opciones para generar vistas de una escena que con una cmara real. Podemos decidir utilizar una proyeccin paralela o en perspectiva, podemos eliminar selectivamente parles de una escena que estn colocadas a lo largo de la lnea de visin, podemos alejar el plano de proyeccin de la posicin de la cmara e incluso podemos obtener una imagen de los objetos situados detrs de nuestra cmara sinttica. Algunas de las operaciones de visualizacin para una escena tridimensional son iguales o similares a las que se emplean en una pipeline de visualizacin bidimensional (Seccin 6.1). Se utiliza un visor bidimensional para posicionar una vista proyectada de la escena tridimensional sobre el dispositivo de salida, y se emplea y
FIGURA 7.10. La fotografia de una escena implica seleccionar la posicin y orientacin de la cmara.
361
una ventana de recorte bidimensional para seleccionar la vista que baya que asignar al visor. Tambin hay que definir una ventana de visualizacin en coordenadas de pantalla, igual que se hace en las aplicaciones bidimensionales. Las ventanas de recorte, los visores y las ventanas de visualizacin se suelen especificar como rectngulos con sus lados paralelos a los ejes de coordenadas. Sin embargo, en visualizacin tridimensional la ventana de recorte se posiciona sobre un plano de visualizacin seleccionado y las escenas se recortan de acuerdo con un volumen que lo encierra, el cual est definido mediante un conjunto de planos de recorte. La posicin de visualizacin, el plano de visualizacin, la ventana de recorte y los planos de recorte se especifican con respecto al sistema de coordenadas de visualizacin. La Figura 7.11 muestra los pasos generales de procesamiento para la creacin y transformacin de una escena tridimensional a coordenadas de dispositivo. Una vez modelada la escena en coordenadas universales, se selecciona un sistema de coordenadas de visualizacin cuya descripcin de la escena se convierte a este nuevo sistema. El sistema de coordenadas de visualizacin define los parmetros de visualizacin, incluyendo la posicin y orientacin del plano de proyeccin (plano de visualizacin), que sera anlogo al plano de la pelcula de la cmara. A continuacin se define una ventana de recorte bidimensional sobre el plano de proyeccin, que se correspondera con un objetivo de la cmara seleccionado, y se establece una regin de recorte tridimensional. Esta regin de recorte se denomina v o l u m e n de v i s u a l i z a c i n y su forma y tamao dependen de las dimensiones de la ventana de recorte, del tipo de proyeccin que seleccionemos y de las posiciones limite seleccionadas segn la direccin de visualizacin. Despus, se realizan operaciones de proyeccin para convertir la descripcin de la escena en coordenadas de visualizacin a un conjunto de coordenadas sobre el plano de proyeccin. Los objetos se mapean a coordenadas normalizadas y todas las partes de la escena que caen fuera del volumen de visualizacin se recortan. Las operaciones de recorte pueden aplicarse despus de completar todas las transformaciones de coordenadas independientes del dispositivo (de coordenadas universales a coordenadas normalizadas). De esta forma, las transformaciones de coordenadas pueden confeccionarse con el fin de conseguir la mxima eficiencia. AI igual que en la visualizacin bidimensional, los lmites del visor pueden especificarse en coordenadas normalizadas o en coordenadas del dispositivo. A la hora de desarrollar los algoritmos de visualizacin, asumiremos qu hay que especificar del visor en coordenadas del dispositivo y que las coordenadas normalizadas deben transferirse a coordenadas del visor despus de las operaciones de recorte. Hay otras cuantas tareas que es preciso llevar a cabo, como especificar las superficies visibles y aplicar los procedimientos de representacin superficial. El paso final consiste en establecer la correspondencia entre las coordenadas del visor y las coordenadas del dispositivo, dentro de una ventana de visualizacin seleccionada. Las descripciones de la escena en coordenadas del dispositivo se expresan en ocasiones con un sistema de referencia que cumple la regia de la mano izquierda, de modo que pueden utilizarse distancias positivas con respecto a la pantalla de visualizacin para medir los valores de profundidad de la escena.
Transformacin de modelado
Transformacin de visualizacin
CV
Transformacin de proyeccin
CP
CN
Transformacin de visor
CD
FIGURA 7.11. Pipeline general tridimensional de translmiacin de la imagen, desde las coordenadas de modelado a las coordenadas universales y desde stas a las coordenadas de visualizacin y a las coordenadas de proyeccin. Finalmente, se efecta la transformacin a coordenadas normalizadas y despus a coordenadas del dispositivo.
362
CAPTULO 7
Visualizacin tridimensional
FIGURA 7.12. Un sistema de coordenadas de visualizacin que cumple la regla de la mano derecha, con ejes *view'->W* y ^icw sistema de referencia en coordenadas universales que tambin cumple la regla de la mano derecha.
r c l a t i v o a un
FIGURA 7.13. Orientacin del plano de visualizacin y del vector normal a dicho plano N.
- Plano de \isualizacin
363
FIGURA 7.14. Tres posibles posiciones para el piano de visualizacin segn el eje z .
view
FIGURA 7.15. Especificacin del vector normal al plano de visualizacin N como la direccin desde un punto de referencia seleccionado P hasta el origen de las coordenadas de visualizacin P .
ref ()
El vector vertical
Una vez seleccionado el vector normal al plano de visualizacin N, podemos establecer la direccin del vector vertical V. Este vector se emplea para establecer la direccin positiva del e j e . y . Usualmente, V se define seleccionando una posicin relativa al origen de coordenadas universales, de modo que la direccin del vector vertical va desde el origen de coordenadas universales a dicha posicin seleccionada. Puesto que el vector normal al plano de visualizacin N define la direccin del eje 2 , el vector V debe ser perpendicular a N. Pero, en general, puede resultar difcil determinar una direccin de V que sea precisamente perpendicular a N. Por tanto, las rutinas de visualizacin suelen ajustar la direccin del vector V definida por el usuario como se muestra en la Figura 7.16, de modo que se proyecta V sobre un plano que sea perpendicular al vector normal al plano de visualizacin.
v ew
v i e w
Podemos seleccionar la direccin que queramos para el vector vertical V, siempre y cuando ste no sea paralelo a N. Una eleccin conveniente suele ser segn una direccin paralela al eje universal y \ en otras ibras, podemos definir V = (0, 1, 0).
w
FIGURA 7.16. Ajuste de la direccin de entrada del vector vertical V a una orientacin perpendicular al vector normal al plano de visualizacin N.
364
CAPTULO 1
visualizacin tridimensional
que cumplen la regla de la mano derecha, ya que stos tienen la misma orientacin que el sistema de referencia en coordenadas universales. Eslo permite que el paquete grfico slo tenga que tratar con una nica orientacin de coordenadas tanto para el sistema de referencia universal como para el de visualizacin. Aunque algunos de los primeros paquetes grficos que aparecieron definan las coordenadas de visualizacin mediante un sistema de referencia que cumpla la regla de la mano izquierda, los estndares grficos actuales deciden las coordenadas de visualizacin sobre la regla de la mano derecha. De todos modos, a menudo se emplean sistemas de referencia que cumplen la regla de la mano izquierda para representar las coordenadas de pantalla y para la transformacin de nonnalizacin. Puesto que la normal al plano de visualizacin N define la direccin del eje z y el vector vertical V se utiliza para obtener la direccin del e j e . y , lo nico que nos queda es determinar la direccin del e j e * . Utilizando los valores introducidos para N y V, calculamos un tercer vector U que sea perpendicular tanto a N como a V. El vector U definir entonces la direccin del eje . v positivo. Podemos determinar la direccin correcta de U realizando el producto vectorial de V y N de modo que se genere un sistema de referencia de visualizacin que cumpla la regla de la mano derecha. El producto vectorial de N y U tambin nos permite obtener el valor ajustado de V, que ser perpendicular tanto a N como a U, segn el eje v positivo. De acuerdo con estos procedimientos, se obtiene el siguiente conjunto de vectores unitarios de coordenadas para un sistema de coordenadas de visualizacin que cumpla la regla de la mano derecha:
v i e w view v i e w vicw v i e w
v = nxu=(v
| 1
v ,r )
v :
El sistema de coordenadas formado por estos tres vectores unitarios se suele denominar sistema de referencia uvn de coordenadas de visualizacin (Figura 7.17).
u
-*vicw
z
vicw
FIGURA 7.17. Un sistema de visualizacin que cumple la regla de la mano derecha, definido mediante los vectores unitarios u, v y n.
365
FIGURA 7.18. Una vista de gran angular para imagen de realidad virtual generada con siete secciones, cada una producida con una direccin de visualizacin ligeramente distinta. (Cortesa del National Center for Sapercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
N FIGURA 7.19. Panormica de una escena, obtenida cambiando la posicin de visualizacin, pero conservando una posicin fija para N. En las aplicaciones interactivas, el vector normal N es el parmetro de normalizacin que ms a menudo se suele cambiar. Por supuesto, cuando cambiamos la direccin de N, tambin tenemos que cambiar los vectores de los otros ejes, con el fin de mantener un sistema de referencia d visualizacin que cumpla la regla de la mano derecha. Si queremos simular un efecto panormico de animacin, como por ejemplo cuando una cmara se mueve a travs de una escena o sigue a un objeto que se est moviendo a travs de una escena, podemos mantener la direccin N fija a medida que desplazamos el punto de vista, como se ilustra en la Figura 7.19. Y para mostrar diferentes vistas de un objeto, como por ejemplo una vista lateral y una vista frontal, podemos mover el punto de vista alrededor del objeto, como en la Figura 7.20. Alternativamente, pueden generarse diferentes vistas de un objeto de un grupo de objetos utilizando transformaciones geomtricas, sin cambiar los parmetros de visualizacin. La Figura 7.21 muestra una interfaz desarrollada para la seleccin interactiva de los valores de los parmetros de visualizacin. Este software incluye un editor de visualizacin, mecanismos de seleccin de mltiples ventanas de visualizacin, mens y otras herramientas de interfaz.
366
CAPTULO 7
Visualizacin tridimensional
FIGURA 7.20. Visualizacin de un objeto desde diferentes direcciones utilizando un punto de referencia fijo.
*y*s
FIGURA 7.21. Una interfaz interactiva para controlar los parmetros de visualizacin, desarrollada en la Universidad de Manchester utilizando la herramienta PH1GS Toolkit. (Cortesa de T. L. J. Howard. J. G Williams y W. T. Hewitt, Department of Computer Science, Universidad de Manchester, Reino Unido.)
7.4
367
coordenadas de visualizacin sobre el sistema de coordenadas universales. Podemos realizar esta conversin utilizando los mtodos de transformacin de sistemas de coordenadas descritos en la Seccin 5.15: (1) (2) Desplazar el origen de coordenadas de visualizacin al origen del sistema de coordenadas universales. Aplicar rotaciones para alinear los ejes # y y z respeclivamente.
w w% v i e w
,y
v i e w
y z
v i e w
El origen de coordenadas de visualizacin se encuentra en la posicin P = {x y , z ) en coordenadas universales. Por tanto, la matriz para desplazar el origen de coordenadas de visualizacin al origen de coordenadas universales es:
t> () {)
-x,
T=
v,
(7.2)
Para la transformacin de rotacin, podemos utilizar los vectores unitarios u, v y n para formar la matriz de rotacin compuesta que superpone los ejes de visualizacin sobre el sistema de referencia universal. Esta matriz de transformacin es:
%
R=
n
X
u.
v
;
0 0 0
1
%
0
n, ti. y 0 0
(7.3)
La matriz de transformacin de coordenadas se obtiene entonces calculando el producto de las dos matrices anteriores de desplazamiento y de rotacin:
M. V.
- u P
-v P
- n P 1
n 0 0
Los factores de desplazamiento de esta matriz se calculan como el producto escalar de cada uno de los vectores unitarios u, v y n por P , que representa un vector que va desde el origen de coordenadas universales hasta el origen de coordenadas de visualizacin. En otras palabras, los factores de desplazamiento son el negado de las proyecciones de Pk sobre cada uno de los ejes de coordenadas de visualizacin (el negado de las componentes de P en coordenadas de visualizacin). Estos elementos de la matriz se evalan de la forma siguiente:
0 0
i )
7 5
-HS
-n-P =-x n -y n .-z, n
t) t} A t) s t :
La Matriz 7.4 transfiere las descripciones de los objetos en coordenadas universales al sistema de referencia de visualizacin.
368
Plano de
369
FIGURA 7.24. Proyecciones ortogonales de un objeto, donde se muestran la vista plana y las vistas de elevacin. que las longitudes y los ngulos se representan de manera precisa y pueden medirse a partir de los propios grficos.
y =y
P
Wl
El valor de la coordenada z para cualquier transformacin de proyeccin se preserva para su uso en los procedimientos de determinacin de la visibilidad. Y cada punto en coordenadas tridimensionales de una escena se convierte a una posicin dentro del espacio normalizado.
370
CAPTULO 7
Visualizaran tridimensional
Plano de visualizaein
Plano de visualizacin
Ventana de recorte
FIGURA 7.27. Una ventana de recorte sobre el plano de visualizacin, en la que las coordenadas mnimas y mximas se especifican en el sistema de referencia de visualizacin.
view
Ventana de recorte
Plano prximo
FIGURA 7.29. Un volumen de visualizacin ortogonal finito con el plano de visualizacin delante del plano prximo.
mente tendremos z < z . de modo que el plano lejano est ms alejado segn el eje z negativo. Algunas bibliotecas grficas proporcionan estos dos planos como opciones, mientras que otras bibliotecas exigen que se utilicen. Cuando se especifican los planos prximo y lejano, se obtiene un volumen de visualizacin ortogonal finito que es un paraleleppedo rectangular, como se muestra en la Figura 7.29, donde tambin se indica una posible colocacin del plano de visualizacin. Nuestra vista de la escena contendr entonces nicamente aquellos objetos que se encuentren dentro del volumen de visualizacin, eliminndose mediante los algoritmos de recorte todas aquellas partes de la escena que caigan fuera del volumen de visualizacin.
far n e a r v i e w
372
CAPITULO 7
Visualizacin tridimensional
Los paquetes grficos proporcionan diversos grados de flexibilidad a la hora de situar los planos de recorte prximo y lejano, incluyendo opciones para especificar planos de recorte adicionales en otras posiciones de la escena. En general, los planos prximo y lejano pueden estar situados en cualquier posicin relativa entre s, con el fin de conseguir diversos efectos de visualizacin, incluyendo posiciones que se encuentren en lados opuestos del plano de visualizacin. De forma similar, el plano de visualizacin puede en ocasiones situarse en cualquier posicin relativa a los planos de recorte prximo y lejano, aunque a menudo suele coincidir con el plano de recorte prximo. Sin embargo, al proporcionar numerosas opciones de posicionamiento para los planos de recorte y de visualizacin, los paquetes grficos suelen perder eficiencia a la hora de procesar escenas tridimensionales.
Ventana de visualizacin
FIGURA 7,30. Un sistema de coordenadas de pantalla que cumple la regla de la mano izquierda.
3 'vic
( - 1 , -1. - I )
RGURA7.31. Transformacin de normalizacin desde un volumen de visualizaein de proyeccin ortogonal al cubo de normalizacin simtrico, dentro de un sistema de referencia que cumple la regla de la mano izquierda. normalizacin. La posicin ( * . v , z ) se mapea sobre la posicin normalizada (- 1, - I, - 1 ) y la posicin U , v , z ) se mapea sobre ( 1 , 1 , 1 ) . La transformacin del volumen de visualizaein paralelepipdico rectangular en un cubo normalizado es similar a los mtodos analizados en la Seccin 6.3 para convertir la ventana de recorte en un cuadrado simtrico normalizado. La transformacin de normalizacin para las posiciones x cy dentro del volumen de visualizaein ortogonal est dada por la matriz de normalizacin 6.9. Adems, tenemos que transformar los valores de la coordenada z desde el rango que va de z a z al intervalo que va de - 1 a 1, utilizando clculos similares.
mm m n near m a x m a x far n u a r f a r
- -
m i n
6
IVT onhit. mu
0
.v'
n u >
-w
m i
(7.7)
0 0
-2
iieu *'fni
tirar **ncu
* fw **rar
Esta matriz se multiplica a la derecha por la transformacin de visualizaein compuesta RT (Seccin 7 .4) para realizar la transformacin completa desde coordenadas universales a coordenadas normalizadas de proyeccin ortogonal. En este etapa de la pipelim de visualizaein, todas las transformaciones de coordenadas independientes del dispositivo se habrn completado y podrn concatenarse en una nica matriz compuesta. Por tanto, la manera ms eficiente de realizar los procedimientos de recorte consiste en aplicarlos despus de la transformacin de normalizacin. Despus del recorte, pueden aplicarse los procedimientos de comprobacin de la visibilidad, de representacin de superficie y de transformacin de visor para generar la imagen final de la escena en pantalla.
X = A + COS0
r
( -^)
=y + s i n 0
La longitud L depende del ngulo a y de la distancia perpendicular del punto (x,y\ z) con respecto al plano de visualizacin:
tana =
L As,
(7.9)
(7JO)
tan a
donde j = cot a, que tambin es el valor de /. cuando z + z == 1. Podemos entonces escribir las Ecuaciones 7.8 de proyeccin paralela oblicua como:
vp
x^x + L^-z^ostp
(7-//)
Podemos ohtener una proyeccin ortogonal cuando = 0 (lo que ocurre para el ngulo de proyeccin a = 90). Las Ecuaciones 7.11 representan una transformacin de inclinacin segn el eje z (Seccin 5.14). De hecho, el efecto de una proyeccin paralela oblicua consiste en desplazar los planos de z constante y proyectarlos sobre el plano de visualizacin. Las posiciones (x, y) sobre cada plano de z constante se desplaza segn una cantidad proporcional a la distancia de un plano con respecto al plano de visualizacin, de modo que todos los ngulos, distancias y lneas paralelas del plano se proyectan de manera precisa. Este efecto se muestra en
(
FIGURA 7.32. Una proyeccin paralela oblicua de un cubo, mostrada en una vista superior (a), puede producir una vista (b) que contenga mltiples superficies del cubo.
(x.y, z)
FIGURA7.33. Proyeccin paralela oblicua del punto (*, v, z) a la posicin (x ,y , z^) sobre un plano de proyeccin situado en la posicin z segn el eje z .
p t vicw
FIGURA 7.34. Una proyeccin paralela oblicua (a) de un cubo (vista superior) sobre un plano de visualizacin que coincide con la cara frontal del cubo. Esto produce la combinacin de vistas frontal, lateral y superior que se muestra en (b).
376
CAPTULO 7
Visualizacin tridimensional
la Figura 7.34, donde el plano de visualizacin est situado sobre la cara frontal de un cubo. La cara posterior del cubo se proyecta y solapa con el plano frontal sobre la superficie de visualizacin. Una arista lateral del cubo que conecte los planos frontal y posterior se proyectar para formar una lnea de longitud A, que formar un ngulo <pcon una lnea horizontal del plano de proyeccin.
FIGURA 7.35. Proyeccin caballera de un cubo sobre un plano de visualizacin para dos valores del ngulo < > . La profundidad del cubo se proyecta con una longitud igual a la de la anchura y la
(a) (b>
FIGURA 7.36. Perspectiva cabinet de un cubo sobre un plano de visualizacin para dos valores del ngulo a. La profundidad se proyecta con una longitud igual a la mitad de la anchura y altura del cubo.
(a)
vector de proyeccin no se ve afectado por el desplazamiento, ya que se trata simplemente de una direccin sin ninguna posicin lija). Una vez establecido el vector de proyeccin en coordenadas de visualizacin, todos los puntos de la escena se transfieren al plano de visualizacin segn una serie de lneas que son paralelas a este vector. La Figura 7.37 ilustra la proyeccin paralela oblicua de un punto en el espacio sobre el plano de visualizacin. Podemos denotar las componentes del vector de proyeccin con respecto al sistema de coordenadas de visualizacin como = (V V , Vp ), donde Vp/Vp tan <p. Entonces, comparando los tringulos similares de la Figura 7.37, tendremos:
= pxy pv Z X
fca
Y podemos escribir el equivalente de las Ecuaciones 7.11 de proyeccin paralela oblicua en trminos del vector de proyeccin, como:
(7.12)
Las coordenadas de proyeccin paralela oblicua de la Ecuacin 7.12 se reducen a las coordenadas de proyeccin ortogonal de la Ecuacin 7.6 cuando V = V = 0.
px py
378
CAPTULO 7
Visualizacin tridimensional
Ventana de recorte Piano de visualizacin
l ^ P l a n o prximo
Plano lejano
FIGURA 7.38. Vista superior de un volumen de visualizacin finito para una proyeccin paralela oblicua en la direccin del vector V .
/(
superior derecha del rectngulo de recorte. Las partes superior, inferior y laterales del volumen de visualizacin se definen entonces mediante la direccin de proyeccin y los lados de la ventana de recorte. Adems, podemos limitar la extensin del volumen de visualizacin aadiendo un plano prximo y otro lejano, como en la Figura 7.38. El volumen de visualizacin finito para proyeccin paralela oblicua es un paraleleppedo oblicuo. Las proyecciones paralelas oblicuas pueden verse afectadas por los cambios en la posicin del plano de visualizacin, dependiendo de cmo haya que especificar la direccin de proyeccin. En algunos sistemas, la direccin de proyeccin paralela oblicua es paralela a la lnea que conecta el punto de referencia con el centro de la ventana de recorte. Por tanto, si se mueve la posicin del plano de visualizacin o de la ventana de recorte sin ajustar el punto de referencia, cambiar la forma del volumen de visualizacin.
%
M
iihli ui4
v.
% i %V,.
(7. 13)
o o o o
Esta matriz desplaza los valores de las coordenadas x cy segn una cantidad proporcional a la distancia con respecto al plano de visualizacin, que se encuentra en la posicin z sobre el eje z . Los valores z de los puntos del espacio no se ven modificados. Si V = V - 0, tendremos una proyeccin ortogonal y la Matriz 7.13 se reduce a la matriz identidad. Para una proyeccin paralela oblicua general, la Matriz 7.13 representa una transformacin de inclinacin segn el eje z. Todos los puntos dentro del volumen de proyeccin oblicuo se vern inclinados segn una cantidad proporcional a su distancia con respecto al plano de visualizacin. El efecto obtenido es la inclinacin del volumen de visualizacin oblicuo. El efecto obtenido es la inclinacin del volumen de visualizacin oblicuo para obtener un paraleleppedo rectangular, como se ilustra en la Figura 7.39. As, los puntos dentro del
v} v e w px py
379
Plano de visualizacin
Plano lejano (a) Volumen de visualizacin para proyeccin oblicua (b) Volumen de visualizacin oblicuo transformado
FIGURA 7.39. Vista superior de una transformacin de proyeccin paralela oblicua. E! volumen de visualizacin para proyeccin oblicua se convierte en un paraleleppedo rectangular y los objetos del volumen de visualizacin, como por ejemplo el bloque verde, se asignan a coordenadas de proyeccin ortogonal. volumen de visualizacin se proyectarn para obtener las coordenadas de proyeccin ortogonal mediante la transformacin de proyeccin paralela oblicua.
Mb)ii|UC,norm
ob)ique
M
ortlw.norm
-M
oblique
(7. 14)
La transformacin M es la Matriz 7.13, que convierte la descripcin de la escena a coordenadas de proyeccin ortogonal, y la transformacin M es la Matriz 7.7, que mapea el contenido del volumen de visualizacin ortogonal sobre el cubo de normalizacin simtrico. Para completar las transformaciones de visualizacin (con la excepcin del mapeo a coordenadas de pantalla del visor), concatenamos la Matriz 7.14 a la izquierda de la transformacin M de la Seccin 7.4. Despus podemos aplicar las rutinas de recorte al volumen de visualizacin normalizado, tras lo cual determinaremos los objetos visibles, aplicaremos los procedimientos de representacin de superficies y realizaremos la transformacin de visor.
o n n o n o r m w c v c
380
CAPTULO 7
Visualizacin tridimensional
FIGURA 7.40. Proyeccin en perspectiva de dos segmentos lineales de igual longitud situados a diferentes distancias del plano de visuali/acin. mos que considerar que los rayos de luz reflejados en los objetos de la escena describen una serie de trayectos convergentes hasta el plano de la pelcula de la cmara. Podemos aproximar este efecto de ptica geomtrica proyectando los objetos hasta el plano de visuali/acin segn una serie de trayectorias convergentes dirigidas al denominado punto de referencia de proyeccin (o centro de proyeccin). Los objetos se muestran entonces con un efecto de acortamiento y la proyeccin de los objetos distantes es ms pequea que la de los objetos del mismo tamao que se encuentren ms prximos al plano de visuali/acin (Figura 7.40).
x=x-(x-x )u
f/fp
/ = ?-(>>->',,> z=z-(z-z )u
pfp
0</<<l
(7.15)
El punto (x\y\ z') representa cualquier punto situado a lo largo de la lnea de proyeccin. Cuando u = 0, estaremos en la posicin P = (.v, v, r). En el otro extremo de la lnea, u = I y tendremos las coordenadas del punto de referencia de proyeccin (x *y > z_J Sobre el plano de visualizacin, z - z y podemos despejar el parmetro u en la ecuacin z' en esta posicin de la lnea de proyeccin:
prp prp vp
14 = ^^
(7.16)
Sustituyendo este valor de u en las ecuaciones correspondientes a * ' e y', obtenemos las ecuaciones generales de transformacin de perspectiva:
381
view
Plano de visualizaein
^^lllllllll
FIGURA7.41. Proyeccin en perspectiva de un puni P con coordenadas (.v, \\ z) hacia un puni de referencia de proyeccin seleccionado. La interseccin con el plano de visualizaein es (x , y , z ).
p p vp
f x=x
l3
(7./T)
7 7
Los clculos para un mapeo en perspectiva son ms complejos que las ecuaciones de proyeccin paralela, ya que los denominadores de los clculos de perspectiva 7.17 estn en funcin de la coordenada z de cada punto en el espacio. Por tanto, necesitamos formular los procedimientos de proyeccin en perspectiva de manera un poco distinta, con el fin de concatenar este mapeo con las otras transformaciones de visualizaein. Pero echemos primero un vistazo a algunas de las propiedades de las Ecuaciones 7.17.
x = x\
p
t z *j*g S'/J 7 7
(7. 18)
Y en ocasiones el punto de referencia de proyeccin est fijo en el origen de coordenadas, de modo que
( 2 ) < v w w - W <-->
****
f0
"% = y
7
V , /
(7.19)
i
i, 'i
382
CAPTULO 7
Visualizacin tridimensional
Si el plano de visualizacin es el plano uv y no hay restricciones en lo que respecta a la colocacin del punto de referencia de proyeccin, tendremos, (3) *, = 0: f
7 l"P 7 * pro
\ z (7.20)
f y=y
'P'V
\ z, z
prp
-y
prp
Con el plano uv como plano de visualizacin y situando el punto de referencia de proyeccin en el eje z , las ecuaciones de la proyeccin en perspectiva son: x = v = z = 0 * (4)
V i e w
prp
-rprp
"vp
x=x
-prp
y =y
r
-prp
(7.21)
7
Por supuesto, no podemos poner el punto de referencia de proyeccin en el plano de visualizacin. En ese caso, toda la escena se proyectara sobre un nico punto. El plano de visualizacin suele situarse entre el punto de referencia de proyeccin y la escena, pero en general podramos colocarlo en cualquier lugar excepto en el punto de proyeccin. Si el punto de referencia de proyeccin est situado entre el plano de visualizacin y la escena, los objetos se vern invertidos en el plano de visualizacin (Figura 7.42). Con la escena situada entre el plano de visualizacin y el punto de proyeccin, los objetos simplemente se agrandan al ser proyectados hacia afuera desde el punto de referencia hacia el plano de visualizacin. Los efectos de perspectiva tambin dependen de la distancia entre el punto de referencia de proyeccin y el plano de visualizacin, como se ilustra en la Figura 7.43. Si el punto de referencia de proyeccin est prximo al plano de visualizacin, los efectos de perspectiva se enfatizan, es decir, los objetos ms prximos parecen mucho mayores que los objetos ms distantes del mismo tamao. De forma similar, cuando alejamos el punto de referencia de proyeccin del plano de visualizacin, la diferencia de tamao entre los objetos prximos y lejanos se reduce. Cuando el punto de referencia de proyeccin est muy lejos del plano de visualizacin, la proyeccin en perspectiva se aproxima a la proyeccin paralela.
- w
FIGURA 7.42. La proyeccin en perspectiva de un objeto se invierte cuando el punto de referencia de proyeccin est situado entre el objeto y el plano de visualizacin.
383
Ventana de r e c o r t e
Ventana de recorte
Ve man a de recorte
FIGURA 7.43. Cambio de los efectos de la perspectiva al alejar el punto de referencia de proyeccin del plano de visualizacin.
384
CAPTULO 7
Visualizacin tridimensional
Punto de fuga
de un OUbO
FIGURA 7.44. Puntos de fuga principales para las proyecciones en perspectiva de un cubo. Cuando el cubo de la figura (a) se proyecta sobre un plano de visualizacin que slo intersecta con el eje z, se genera un nico punto de fuga en la direccin z (b). Cuando el cubo se proyecta sobre un plano de visualizacin que intersecta con los ejes z y x, aparecen dos puntos de tuga (c).
(O
Proyeccin en perspectiva de dos pumos
tamente de la misma forma que nosotros no podemos ver los objetos que estn ms all de nuestra visin perifrica y que caen fuera del cono de visin. Aadiendo planos de recorte prximo y lejano que sean perpendiculares al eje z (y paralelos al plano de visualizacin), cortamos partes del volumen de visualizacin infinito con el fin de formar una pirmide truncada o frustum. La Figura 7.46 ilustra la forma de un volumen de visualizacin finito para proyeccin en
v j e w
perspectiva, con un plano de visuali/acin que est colocado entre el plano de recorte prximo y el punto de referencia de proyeccin. Algunas veces, los paquetes grficos obligan a definir los planos prximo y lejano, mientras que en otros paquetes son opcionales. Usualmente, los planos de recorte prximo y lejano se encuentran a un mismo lado del punto de referencia de proyeccin, estando el plano lejano ms lejos del punto de proyeccin que el plano prximo, segn la direccin de visuali/acin. Y tambin, al igual que en una proyeccin paralela, podemos utilizar los planos prximo y lejano simplemente para limitar la escena que hay que visualizar. Pero con una proyeccin en perspectiva tambin podemos usar el plano de recorte prximo con el fin de eliminar de la escena los objetos de gran tamao que estn muy cerca del plano de visualizacin y que al proyectarse tuvieran una forma irreconocible en la ventana de recorte. De manera similar, el plano de recorte lejano puede emplearse para eliminar los objetos muy alejados del punto de referencia de proyeccin y que se proyectaran para formar pequeos puntitos sobre el plano de visualizacin. Algunos sistemas restringen la colocacin del plano de visualizacin en relacin con los planos prximo y lejano, mientras que otros sistemas permiten situarlo en cualquier punto excepto en la posicin del punto de referencia de proyeccin. Si el plano de visualizacin est detrs del punto de referencia de proyeccin, los objetos se vern invertidos, como se muestra en la Figura 7.42.
donde el parmetro homogneo tiene el valor: = Los numeradores en 7.22 son iguales que en las Ecuaciones 7.17: *H =^ , -z )
l r v
(7.23)
x ,(z . ,-z)
pri l
(7.24)
386
CAPITULO 7
Visualizacin tridimensional
As, podemos formar una matriz de transformacin para convertir una posicin en el espacio a coordenadas homogneas de modo que la matriz slo contenga los parmetros de la proyeccin en perspectiva y no valores de coordenadas. La transformacin para la proyeccin en perspectiva de un punto definido en coordenadas de visualizacin se realiza entonces en dos pasos. En primer lugar, calculamos las coordenadas homogneas utilizando la matriz de transformacin de perspectiva: P ^ M ^ P (7.25)
ht h /r
donde P^ es la representacin en forma de matriz columna del punto de coordenadas homogneas (x y * z h) y P es la representacin en forma de matriz columna de la posicin de coordenadas (x,y, z, I). (En realidad, la matriz de perspectiva se concatenara con las otras matrices de transformacin de visualizacin y luego la matriz compuesta se aplicara a la descripcin en coordenadas universales de una escena con el fin de obtener las coordenadas homogneas). En segundo lugar, despus de haber aplicado otros procesos, como la transformacin de normalizacin y las rutinas de recorte, las coordenadas homogneas se dividen por el parmetro h para obtener las verdaderas posiciones de coordenadas transformadas. Resulta sencillo definir los elementos de la matriz para obtener los valores x t y de coordenadas homogneas de 7.24, pero tambin debemos estructurar la matriz para preservar la infomiacin de profundidad (valor z). En caso contrario, las coordenadas z se veran distorsionadas por el parmetro de divisin homogneo h. Podemos hacer esto definiendo los elementos de la matriz, para la transformacin z de modo que se normalicen las coordenadas z de la proyeccin en perspectiva. Hay varias formas de elegir los elementos de la matriz para generar las coordenadas homogneas 7.24 y el valor z normalizado para una posicin del espacio (x, y, z). La siguiente matriz representa una de las posibles maneras de formular una matriz de proyeccin de perspectiva:
h h p f)
-%
0 0 0
z
0
i
prp
X ?
V
J
0 0
s.
T pn^pf t.
C
(7.26)
-1
PIP
Los parmetros s y /, son los factores de cambio de escala y de traslacin para la normalizacin de los valores proyectados de las coordenadas z. Los valores especficos de .v, y dependern del rango de normalizacin que seleccionemos. La Matriz 7.26 convierte la descripcin de una escena en coordenadas homogneas de proyeccin paralela. Sin embargo, el frustrum de visualizacin puede tener cualquier orientacin, por lo que estas coordenadas transformadas podran corresponderse con una proyeccin paralela oblicua. Esto ocurre si el histmm de visualizacin no es simtrico. En cambio, si el frustrum de visualizacin para la proyeccin en perspectiva es simtrico, las coordenadas de proyeccin paralela resultantes se corresponden con una proyeccin ortogonal. Analicemos por separado estas dos posibilidades.
anchura
-w-nin = % Z i m =
, anchura
+ ~
387
( prp* y'prp'
prf)
FIGURA 7.47. Frustrum de visualizacin para proyeccin en perspectiva simtrica, con el plano de visualizacin situado entre el punto de referencia de proyeccin y el plano de recorte prximo. Este frustrum es simtrico con respecto a la lnea central cuando se mira desde arriba, desde abajo o desde cualquiera de los lados.
altura
prp Mm = prp +
altura
Por tanto, podramos especificar una vista de proyeccin en perspectiva simtrica de una escena utilizando la anchura y la altura de la ventana de recorte en lugar de las coordenadas de la ventana. Esto especifica de manera no ambigua la posicin de la ventana de recorte, ya que sta es simtrica con respecto a las coordenadas x e y del punto de referencia de proyeccin. Otra forma de especificar una proyeccin en perspectiva simtrica consiste en utilizar parmetros que aproximen las propiedades del objetivo de una cmara. Las fotografas se generan mediante una proyeccin en perspectiva simtrica de una escena sobre el plano de la pelcula. Los rayos luminosos reflejados por los objetos de una escena se proyectan sobre el plano de la pelcula desde el cono de visin de la cmara. Este cono de visin puede especificarse mediante un ngulo de c a m p o visual, que es una medida del tamao del objetivo de la cmara. Un gran ngulo de campo visual, por ejemplo, se corresponder con un objetivo de gran angular. En infografa, el cono de visin se aproxima mediante un frustrum simtrico y podemos utilizar un ngulo del campo de visin para especificar el tamao angular del frustrum. Normalmente, el ngulo del campo de visin ser el ngulo existente entre el plano superior de recorte y el plano inferior de recorte del frustrum, como se muestra en la Figura 7.48. Para un punto de referencia de proyeccin y para una posicin del plano de visualizacin dados, el ngulo del campo de visin determina la altura de la ventana de recorte (Figura 7.49), pero no la anchura. Necesitamos por tanto un parmetro adicional, pero no la anchura. Necesitamos por tanto un parmetro adicional para definir completamente las dimensiones de la ventana de recorte, y ese segundo parmetro podra ser la anchura de la ventana o la relacin de aspeeto (anchura/altura) de la ventana de recorte. Fijndonos en los tringulos rectos del diagrama de la Figura 7.49, vemos que: altura/2 (7.27)
de modo que la altura de la ventana de recorte puede calcularse como: altura = 2(z -z ) tan (
piv vp
(7.2
388
CAPITULO 7
Por tanto, los elementos diagonales con el valor quiera de las dos siguientes expresiones: altura
UJ
( 7 2 p )
anchura c o t ( 0 / 2 ) 2aspecto
En algunas bibliotecas grficas, se utilizan posiciones fijas para el plano de visualizacin y el punto de referencia de proyeccin, por lo que una proyeccin en perspectiva simtrica quedar completamente especificada mediante el ngulo del campo visual, la relacin de aspecto de la ventana de recorte y las distancias desde la posicin de visualizacin hasta los planos de recorte prximo y lejano. Normalmente, se aplica la misma relacin de aspecto a la especificacin del visor.
FIGURA 7.48. ngulo del campo de visin 0 para un volumen de visualizacin simtrico de proyeccin en perspectiva, con la ventana de recorte situada entre el plano prximo de recorte y el punto de referencia de proyeccin.
Ventana de recorte
FIGURA 7.49. Relacin entre el ngulo de! campo visual de referencia de proyeccin y el plano de visualizacin.
389
FIGURA 7.50. Al incrementar el ngulo del campo de visin, se incrementa la altura de la ventana de recorte y tambin los efectos de acortamiento derivados de la proyeccin en perspectiva. Si el ngulo del campo de visin se reduce en una aplicacin concreta, los efectos de acortamiento derivados de la prediccin en perspectiva tambin se reducen. Esto seria comparable a alejar el punto de referencia de proyeccin del plano de visualizacin. Asimismo, reducir el ngulo del campo de visin hace que disminuya la altura de la ventana de recorte, y esto proporciona un mtodo para ampliar pequeas regiones de una escena. De forma similar, un gran ngulo del campo de visin da como resultado una mayor altura de la ventana de recorte (la escena se empequeece) y se incrementan los efectos de perspectiva, que es exactamente lo mismo que pasa cuando situamos el punto de referencia de proyeccin muy cerca del plano de visualizacin. La Figura 7.50 ilustra los efectos de diversos ngulos del campo de visin para una ventana de recorte de anchura fija. Cuando el volumen de visualizacin para proyeccin en perspectiva es un frustrum simtrico, la transformacin en perspectiva mapea los puntos situados en el interior del frustrum a una serie de coordenadas de pro-
390
CAPTULO 7
Lnea central
Visualizacin tridimensional
Plano lejano I-i usi rum de visuali/acin simtrico Mapeo de perHpectiva Volumen de visuali/acin paralclepipdico
f
/ P l a n o prximo ^ / Ventana de recorte
;>
Plano de visualizacin
FIGURA 7.51. Un fruslrum de visuali/acin simtrico se mupea a un paraleleppedo ortogonal mediante la transformacin de proyeccin en perspectiva. yeccin ortogonal dentro de un paraleleppedo rectangular. La lnea central del paraleleppedo coincide con la del frustrum, puesto que esta lnea ya es perpendicular al piano de visualizacin (Figura 7.51). Esto es consecuencia del hecho de que todos los puntos situados a lo largo de una lnea de proyeccin dentro del frustrum se mapean al mismo punto (x y ) del plano de visualizacin. As, cada lnea de proyeccin es convertida en la transformacin de perspectiva en una lnea perpendicular al plano de visualizacin y, por tanto, paralela a la lnea central del frustrum. Una ve/, convertido el frustrum simtrico en un volumen de visualizacin de proyeccin ortogonal, podemos pasar a aplicar la transformacin de normalizacin.
py p
FIGURA 7.52. Frustrum oblicuo (cuando se lo ve desde al menos un lado o mediante una vista superior), con el plano de visualizacin situado entre el punto de referencia de proyeccin y el plano de recorte prximo.
7 .8 Proyecciones en perspectiva
391
Un volumen de visualizacin para proyeccin en perspectiva oblicuo puede convertirse en un frustrum simtrico aplicando la matriz de inclinacin del eje z dada en la Ecuacin 5.115. Esta transformacin desplaza todas las posiciones de cualquier plano que sea perpendicular al eje z segn una cantidad proporcional a la distancia del plano con respecto a una posicin de referencia especificada sobre el eje z. En este caso, la posicin de referencia es z que es la coordenada z del punto de referencia de proyeccin, y tendremos que efectuar el desplazamiento segn una cantidad que mueva el centro de la ventana de recorte a la posicin (x y ) sobre el plano de visualizacin. Puesto que la lnea central del frustrum pasa por el centro de la ventana ae recorte, este desplazamiento ajustar la lnea central de modo que quede en posicin perpendicular al plano de visualizacin, como en la Figura 7.47. Los clculos para la transformacin de inclinacin, asi como para las transformaciones de perspectiva y de normalizacin, se simplifican enormemente si hacemos que el punto de referencia de proyeccin sea el origen del sistema de coordenadas de visualizacin. Podemos hacer esto sin prdida de generalidad efectuando una traslacin de todas las coordenadas de la escena de modo que nuestro punto de referencia de proyeccin seleccionado quede situado sobre el origen de coordenadas. O bien, podemos desde el principio definir el sislema de referencia de coordenadas de visualizacin de modo que su origen se encuentre en el punto de proyeccin deseado para la escena. De hecho, algunas bibliotecas grficas fijan el punto de referencia de proyeccin en el origen de coordenadas. Tomando el punto de referencia de proyeccin como (x *y * z ) (0, 0, 0), obtenemos los elementos de la matriz de inclinacin requerida:
prpi prpS = prp prp prp
1 0 0
M
I shcr
sh sh
TA
0 0 0 1 (7JO)
1 0 0
0 0
1 0
Tambin podemos simplificar los elementos de la matriz de proyeccin de perspectiva un poco ms si situamos el plano de visualizacin en la posicin del plano de recorte prximo. Y como lo que queremos ahora es desplazar el centro de la ventana de recorte a las coordenadas (0, 0) en el plano de visualizacin, tendremos que seleccionar los valores de los parmetros de inclinacin de modo que.
0 0
lll'Jl
= M
(7.31)
2z. (7.32) sh
; >
=-
2z.
De forma similar, teniendo el punto de referencia de proyeccin en el origen del sistema de coordenadas de visualizacin y tomando el plano prximo de recorte como plano de visualizacin la matriz de proyeccin de perspectiva 7.26 se simplifica, quedando,
392
CAPTULO 7
Visualizacin tridimensional
0 0
0 0 l <7.ii)
l
M pcts
0 0 0 0 0
1 0
Las expresiones para los parmetros de cambio de escala y de translacin de la coordenada r sern determinados por los requisitos de normalizacin. Concatenando la matriz simplificada de proyeccin de perspectiva 7.33 con ta matriz de inclinacin 7.30, obtenemos la siguiente matriz de proyeccin de perspectiva oblicua, que podemos utilizar para convenir las coordenadas de una escena a coordenadas homogneas de proyeccin ortogonal. El punto de referencia de proyeccin para esta transformacin ser el origen del sistema de coordenadas de visualizacin, mientras que el plano prximo de recorte ser el plano de visualizacin.
=M
0 0 0 0
mili
uux
2 2 s
z
0 0 t. 0 (7.34)
*"near
0 0
-1
Aunque ya no disponemos de opciones para colocar arbitrariamente el punto de referencia de proyeccin y el plano de visualizacin, esta matriz proporciona un mtodo eficiente para generar una vista de proyeccin en perspectiva de una escena, sin sacrificar un alto grado de flexibilidad. Si seleccionamos las coordenadas de la ventana de recorte de modo que .ot' = -xw- y vn> =
* llld* lilil " II).n
-J^min el frustrum de visualizacin ser simtrico y la Matriz 7.34 se reduce a la Matriz 7.33. Esto se debe a que el punto de referencia de proyeccin se encuentra ahora en el origen del sistema de coordenadas de visualizacin. Tambin podramos usar las Ecuaciones 7.29 con z = 0 y z = z ^ , para especificar los dos primeros elementos diagonales de esta matriz en trminos del ngulo del campo visual y de las dimensiones de la ventana de recorte.
prp vp
393
Uw >>W
mln
niin
,z
nca
norm
-view
7
Punto de referencia de proyeccin
(-1.-1.-n
FIGURA 7.53. Transformacin de normalizacin que aplica un volumen de visualizacin para proyeccin en perspectiva transformado (paraleleppedo rectangular) sobre el cubo de normalizacin simtrico dentro de un sistema de referencia que cumple con la regla de la mano izquierda, utilizando el plano prximo de recorte como plano de visualizacin y situando el punto de referencia de proyeccin en el origen del sistema de coordenadas de visualizacin. de visualizacin paralelepipdico rectangular es ahora el eje z , no hace falta ninguna traslacin en las transformaciones de normalizacin de x e y. Lo nico que nos hace falta son los parmetros de cambio de escala para x o y en relacin con el origen de coordenadas. La matriz de cambio de escala para llevar a cabo la normalizacin xv es:
v i e w
VI .tv scale
0 0
0 0 0
1 0 1
Concatenando la matriz de cambio de escala xy con la matriz 7.34, se obtiene la siguiente matriz de normalizacin para una transformacin de proyeccin en perspectiva:
M
normpcfs
=M
.xy scale
M
obliquepers
+ 2
o (7.36)
I "x
=M
nonnpcis
y
7 *.
(7.37)
394
CAPTULO 7
Visualizacin tridimensional
x =n
p
!L
=
h -z (7.38) -z
V
y
= ^ =
>
'
z
-z
p%
Para normalizar esta transformacin de perspectiva, queremos que las coordenadas de proyeccin sean (x y* ) ~ ~ t ; - ' ) cuando las coordenadas de entrada sean (*, v, z) = ( x w yw , z ) , y que las coordenadas de proyeccin tengan el valor (x y , z ) = (1, 1, 1) cuando las coordenadas de entrada sean (JC, y, z) ( ^y x> far)- ^ cuando resolvemos las Ecuaciones 7.38 para calcular los parmetros de normalizacin utilizando estas condiciones, se obtiene:
p p
Crli
xw
mint
min
n e a r
pJ
o r
l a n t 0
ma
mii
s =
(7.39)
s. =
Y los elementos de la matriz de transformacin normalizada para una proyeccin en perspectiva general sern: -2z,
o
-2z.
o
IV! Q o n p a
0 0
tur
0WB
-1
Si el volumen de visualizacin para proyeccin en perspectiva hubiera sido especificado originalmente como un frustrum simtrico, podramos expresar los elementos de la transformacin de perspectiva normalizada en trminos del ngulo del campo visual y de las dimensiones de la ventana de recorte. As, utilizando las Ecuaciones 7.29, con el punto de referencia de proyeccin en el origen y el plano de visualizacin coincidente con el plano prximo de recorte, tendremos: cot(;) aspecto
M nomisymuipm
0 0
cot
(7.41)
*"ncu
^fw
-1
395
La transformacin completa desde coordenadas universales a coordenadas normalizadas de proyeccin en perspectiva es la matriz compuesta formada al concatenar esta matriz de perspectiva a la izquierda del produelo de Iransformacin de visualizacin R T. A continuacin, podemos aplicar las rutinas de recorte al volumen de visualizacin normalizado. Las tareas restantes sern la determinacin de visibilidad, la representacin de superficies y la transformacin del visor.
0 0
&m
2
+
0 0 (i
n o r m
>'" n n
1 1
max
2 mu
2 J_ 2 1
(7.42)
0 0
1
2 0
En coordenadas normalizadas, la cara = I del cubo simtrico se corresponde con el rea de la ventana de recorte. Y esta cara del cubo normalizado se mapea sobre el visor rectangular, que ahora estar refercnciado en " = 0. As, la esquina inferior izquierda del rea de pantalla del visor estar en la posicin Vm - 'mm* > y q superior izquierda se encontrar en ( x v , T , 0). Cada posicin xy del visor se corresponde con una posicin del bfer de refresco, que contiene la informacin de color para dicho punto de la pantalla. Y el valor de profundidad para cada punto de la pantalla se almacena en otra rea de bfer, denominada bfer Je profundidad. En captulos posteriores, analizaremos los algoritmos para determinar las posiciones de las superficies visibles y sus colores. Posiconemos el visor rectangular sobre ta pantalla exactamente igual que hacamos en las aplicaciones bidimensionales. La esquina inferior izquierda del visor se suele colocar en una posicin cuyas coordenadas se especifican en relacin con la esquina inferior izquierda de la ventana de visualizacin. Y las proporciones de los objetos se mantienen si hacemos que la relacin de aspecto de este rea del visor sea igual que la de la ventana de recorte.
s a e n
n
l a e s
u i n a
max
m a x
396
CAPTULO 7
Visualization tridimensional
Los parmetros de visualizacin se especifican mediante la siguiente funcin GLU, que se encuentra en la biblioteca OpenGL Utility porque invoca las rutinas de traslacin y rotacin de la biblioteca bsica OpenGL:
gluLookAt (xO, yO, zO, xret, yref, zref, Vx, Vy, Vz);
Es necesario asignar valores de coma flotante y doble precisin a todos los parmetros de esta funcin. Esta funcin designa el origen del sistema de referencia de visualizacin mediante el punto P , = ( x O , y O , z O ) en coordenadas universales; la posicin de referencia se designa mediante P = (xref, yref, zref) y el vector vertical ser V = ( V x , v y , v z ) . El eje r positivo para el sistema de coordenadas de visualizacin estar en la direccin N = P + P r e -y los vectores unitarios de eje para el sistema de referencia de visualizacin se calculan mediante las Ecuaciones 7.1. Puesto que la direccin de visualizacin est definida segn el eje - * , la posicin de referencia P tambin se denomina punto observado. Normalmente, este punto observado es alguna posicin en el centro de la escena que podemos usar como referencia para especificar los parmetros de proyeccin. Y podemos considerar la posicin de referencia como el punto al que dirigiramos una cmara que estuviera ubicada en el origen de visualizacin. La orientacin vertical de la cmara se especifica mediante el vector V, que se ajusta a una direccin perpendicular a N. Los parmetros de visualizacin especificados mediante la funcin g l u L o o k A t se utilizan para formar la matriz de transformacin de visualizacin 7.4 de la que hemos hablado en la Seccin 7.4. Esta matriz se forma como una combinacin de una traslacin (que desplaza el origen de visualizacin al origen de coordenadas universales) y una rotacin, que alinea los ejes de visualizacin con los ejes universales. Si no invocamos la funcin g l u L o o k A t , los parmetros de visualizacin predeterminados en OpenGL son:
( r e |
y c w
( )
v i e w
r e f
P =(0,0,0) P =(0,0,-1)
K{
V = (0,1.0) Para estos valores predeterminados, el sistema de referencia de visualizacin coincide con el de coordenadas universales, con la direccin de visualizacin segn el eje z negativo. En muchas aplicaciones, podemos usar sin problemas los valores predeterminados como parmetros de visualizacin.
w a r l d
397
Entonces, cuando ejecutemos cualquier comando de transformacin, la matriz resultante se concatenar con la matriz de proyeccin actual. Los parmetros de proyeccin ortogonal se eligen mediante la funcin:
glOrtho (xwmin, xwmax, ywmin, ywmax, dnear, dfar);
Todos los valores de los parmetros en esta funcin deben ser nmeros en coma flotante y doble precisin. Utilizamos glOrtho para seleccionar las coordenadas de la ventana de recorte y las distancias entre el origen de visualizacin y los planos de recorte prximo y lejano. En OpenGL no hay ninguna opcin para definir la situacin del plano de visualizacin. El plano de recorte prximo coincide siempre con el plano de visualizacin. por lo que la ventana de recorte estar siempre situada sobre el piano prximo del volumen de visualizacin. La funcin g l O r t h o genera una proyeccin paralela que es perpendicular al plano de visualizacin (el plano de recorte prximo). As, esta funcin crea un volumen de visualizacin finito de proyeccin ortogonal para la ventana de recorte y para los planos de recorte especificados. En OpenGL, los planos de recorte prximo y lejano no son opcionales; siempre hay que especificarlos para toda transformacin de proyeccin. Los parmetros dnear y d f a r denotan las distancias en la direccin z negativa, a partir del origen del sistema de coordenadas de visualizacin. Por ejemplo, si d f a r = 55.0, entonces el plano lejano de recorte estar en la posicin z - = 55.0. Un valor negativo de alguno de los parmetros denotar una distancia por detrs del origen de visualizacin, segn el eje z positivo. Podemos asignar los valores que queramos (positivos, negativos o cero) a estos parmetros, siempre que se cumpla que d n e a r < d f a r . El volumen de visualizacin resultante para esta transformacin de proyeccin es un paraleleppedo rectangular. Las coordenadas dentro de este volumen de visualizacin se transforman a ubicaciones dentro del cubo normalizado simtrico, en un sistema de referencia que cumpla con la regla de la mano izquierda, utilizando la Matriz 7.7 con z = -dnear y z = -dfar. Los valores predeterminados de los parmetros para la funcin de proyeccin ortogonal OpenGL son 1 , que producen un volumen de visualizacin que es un cubo normalizado simtrico en el sistema de coordenadas de visualizacin, que cumple la regla de la mano derecha. Estos valores predeterminados son equivalentes a ejecutar la instruccin:
v i c w ( ar v e w n e a r f a r
glOrtho
(-1.0,
1.0,
-1.0,
1.0,
-1.0,
1.0);
La ventana de recorte predeterminada es, por tanto, un cuadrado normalizado simtrico y el volumen de normalizacin predeterminado es un cubo normalizado simtrico con z = LO (por detrs de la posicin de visualizacin) y z = 1.0. La Figura 7.54 muestra la apariencia y la posicin del volumen de visualizacin predeterminado para proyeccin ortogonal. Para aplicaciones bidimensionales, utilizbamos la funcin g l u O r t h o 2 D para definir la ventana de recorte. Tambin podramos haber usado la funcin g l O r t h o para especificar la ventana de recorte, siempre y cuando asignramos a los parmetros d n e a r y d f a r valores situados en lados opuestos del origen de coordenadas. De hecho, una llamada a g l u O r t h o 2 D es equivalente a otra llamada a g l O r t h o con dnear = LO y dfar = 1.0. No hay ninguna funcin en OpenGL para generar una proyeccin oblicua. Para producir una vista de proyeccin oblicua de una escena, podramos definir nuestra propia matriz de proyeccin, como en la Ecuacin 7.14; despus, tendramos que hacer de esta matriz la matriz de proyeccin OpenGL actual, utilizando las funciones de matrices que hemos analizado en la Seccin 5.17. Otra forma de generar una vista en proyeccin oblicua consiste en rotar la escena hasta una posicin apropiada, de modo que una posicin ortogonal en la direccin z, nos de la vista deseada.
n e a r f a r
398
CAPTULO 7
Visualizacin tridimensional
Ventana de recorte
FIGURA 7.54. Volumen de visualizacin predeterminado para proyeccin ortogonal. Los rangos de coordenadas para este cubo simtrico van de -1 a +1 en cada direccin. El plano de reeorie prximo est en z = I y el plano de recorte lejano e n z = - I .
ncar rar
El frustrum de visualizacin simtrico para proyeccin en perspectiva se define mediante la funcin GLU,
gluPerapective (theta, aspect, dnear, dfar);
donde a cada uno de estos cuatro parmetros se le asigna un nmero de coma flotante y doble precisin. Los dos primeros parmetros definen el tamao y la posicin de la ventana de recorte sobre el plano prximo, mientras que los ltimos dos parmetros especifican las distancias entre el punto de vista (origen de coordenadas) y los planos de recorte prximo y lejano. El parmetro t h e t a representa el ngulo del campo visual, que es el ngulo entre los planos de recorte superior e inferior (Figura 7.48). Podemos asignar a este ngulo cualquier valor desde 0" hasta 180. Al parmetro a s p e c t se le asigna el valor correspondiente a la relacin de aspecto ( a n c h u r a / a l t u r a ) de la ventana de recorte. Para una proyeccin en perspectiva OpenGL, los planos de recorte prximo y lejano deben estar situados sobre el eje z negativo; ninguno de los dos puede estar detrs de la posicin de visualizacin. Esta restriccin no se aplica a una proyeccin ortogonal, pero impide la proyeccin en perspectiva invertida de un objeto cuando el plano de visualizacin se encuentra por detrs del punto de vista. Por tanto, tanto d n e a r como d f a r deben tener valores numricos positivos y las posiciones de los planos prximo y lejano se calculan c o r a o 2 = -dnear y z = -dfar.
v e w
n e a r
tar
Si no especificamos una funcin de proyeccin, nuestra escena se mostrar utilizando la proyeccin ortogonal predeterminada. En este caso, el volumen de visualizacin es el cubo normalizado simtrico que se muestra en la Figura 7.54. El frustrum de visualizacin definido mediante al funcin g l u P e r s p e c t i v e es simtrico en torno al eje s negativo. Y la descripcin de la escena se convierte a coordenadas de proyeccin homogneas normalizadas mediante la Matriz 7.41.
v i e w
399
Todos los parmetros de esta funcin deben tener valores de coma flotante y doble precisin. Al igual que las otras funciones de proyeccin de visualizacin, el plano prximo se encuentra sobre el plano de visualizacin y el punto de referencia de proyeccin est situado en la posicin de visualizacin (origen de coordenadas). Esta funcin tiene los mismos parmetros que la funcin de proyeccin paralela ortogonal, pero ahora las distancias de los planos de recorte prximo y lejano deben ser positivas. Los primeros cuatro parmetros establecen las coordenadas de la ventana de recorte sobre el plano prximo, mientras que los ltimos dos especifican la distancia entre el origen de coordenadas y los planos prximo y lejano de recorte a lo largo del eje viw negativo. Las ubicaciones de los planos prximo y lejano sern z = dnear y z = - d f a r . La ventana de recorte puede especificarse en cualquier punto de plano prximo. Si seleccionamos las coordenadas de la ventana de recorte de modo que xw = xw y yw - = ~yw , obtendremos un frustrum simtrico (teniendo como lnea central el eje r negativo). De nuevo, si no invocamos explcitamente un comando de proyeccin, OpenGL aplicar la proyeccin predeterminada ortogonal a la escena. El volumen de visualizacin en este caso ser el cubo simtrico (Figura 7.54).
r f a r mi) max m m max v i c w
Los primeros dos parmetros de esta funcin especifican la posicin entera de pantalla de la esquina inferior izquierda del visor, de forma relativa a la esquina inferior izquierda de la ventana de visualizacin. Los dos ltimos parmetros, por su parte, proporcionan la anchura y altura enteras del visor. Para mantener las proporciones de los objetos en la escena, definiremos la relacin de aspecto del visor de modo que sea igual a la de la ventana de recorte. Las ventanas de visualizacin se crean y gestionan mediante rutinas CiLUT y en la Seccin 6.4 hemos analizado en detalle las diversas funciones de la biblioteca GLUT para ventanas de visualizacin. El visor predeterminado OpenGL tiene el tamao y la posicin de la ventana de visualizacin actual.
CAPTULO 7
Visualizacin tridimensional
/*
Establecer
lmites -40.0,
de
para
ventana
de
recorte: ywMax = y
*/ 60.0; */
ywMin = los
xwMax = de
40.0,
posicin de = 25.0,
r e c o r t e prximo
lejano;
GLfloat void
dfar =
init
(void)
(1.0,
1.0,
1.0,
0.0);
(GL MODELVIEW); yO, zO, xref, yref, zref, Vx, Vy, Vz);
(xO,
ywMax,
dnear,
dfar);
}
void cUsplayFcn (void)
glClear /*
glColor3f
0.0);
Seleccionar
GL_FRONT, (GL_BACK,
(GL_QUADS); {0.0, (100.0, (100.0, (0.0, 0.0, 0.0, 100.0, 100.0, 0.0); 0.0); 0.0); 0.0);
glFlush
void
reshapeFcn
(GLint (0, 0,
newWidth, newWidth,
GLint
newHeight)
glViewport
newHeight);
void
main
(int
argc,
char**
argv)
glutlnit
(&argc,
glutlnitDisplayMode
(winWidth, ("Perspective
i n i t < );
glutDisplayFunc glutReshapeFunc glutMainLoop { (displayFcn); (reshapeFcn); );
401
mmr<
BtriHI
( 7 4 3 )
Los limites de recorte x cy son los lmites normalizados de la ventana de recorte, mientras que los lmites de recorte z son las posiciones normalizadas de los planos de recorte prximo y lejano. Los algoritmos de recorte para visualizacin tridimensional identifican y guardan todas las secciones de los objetos que se encuentran dentro del volumen de visualizacin normalizado, para mostrarlas en el dispo-
402
CAPTULO 7
Visualizacin tridimensional
sitivo de salida. Todas las partes de los objetos que se encuentren fuera de los planos de recorte del volumen de visualizacin se eliminarn. Con ello, los algoritmos sern ahora extensiones de mtodos bidimensionales, utilizando los planos de contorno normalizados del volumen de visualizacin en lugar de usar las lneas de contorno de la ventana de recorte normalizada.
%
sil
%
h
=M
z 1
(7.44)
donde la matriz M representa la concatenacin de todas las diversas transformaciones de coordenadas universales a coordenadas de proyeccin homogneas normalizadas, y el parmetro homogneo h puede no tener ya el valor 1. De hecho, h puede tener cualquier valor real, dependiendo de cmo hayamos representado los objetos en la escena y del tipo de proyeccin que utilicemos. Si el parmetro homogneo /; tiene el valor 1, las coordenadas homogneas sern guales que las coordenadas de proyeccin cartesianas. Esto suele suceder en el caso de transformacin de proyeccin paralela, pero una proyeccin en perspectiva produce un parmetro homogneo que est en funcin de la coordenada z de cada punto concreto del espacio. El parmetro homogneo de proyeccin en perspectiva puede incluso ser negativo, lo que ocurre cuando un cierto punto se encuentra por detrs del punto de referencia de proyeccin. Asimismo, la representacin mediante spiines regionales de las superficies de ios objetos suele formularse en coordenadas homogneas, donde el parmetro homogneo puede ser positivo o negativo. Por tanto, si se realiza el recorte en coordenadas de proyeccin despus de la divisin por el parmetro homogneo /?, puede perderse cierta informacin acerca de las coordenadas y puede que los objetos no se recorten correctamente. Un mtodo efectivo para tratar con todas las posibles transformaciones de proyeccin y todas las posibles representaciones de los objetos consiste en aplicar las rutinas de recorte a la representacin en coordenadas homogneas de los puntos del espacio. Adems, como todos los volmenes de visualizacin pueden convertirse a un cubo nomializado, basta con impiemenlar un nico procedimiento de recorte en el hardware para recortar los objetos en coordenada homogneas de acuerdo con los planos de recorte normalizados.
403
tul
6
bit 5
b i t 4
bit
bit 2
bit
Lejano Prximo
Superior Inferior
Derecho Izquierdo
FIGURA 7.56. Una posible ordenacin de los lmites de recorte del volumen de visualizacin, que se corresponden con las posiciones de bit en el cdigo de regin.
coordenadas de produccin, que habrn sido transformadas a un espacio normalizado. Despus de la transformacin de proyeccin, cada punto de una escena liene la representacin de cuatro componentes P (x ,y , z Ji). Suponiendo que estemos efectuando el recorte de acuerdo con los lmites del cubo simtrico normalizado (Ecuaciones 7.43), un punto estar dentro de este volumen de visualizacin normalizado si las coordenadas de proyeccin del punto satisfacen las siguientes seis desigualdades:
f h h
{7.45) h h -1<^<I h
A menos que se haya producido un error, el valor del parmetro homogneo h ser distinto de cero. Pero, antes de implementar los procedimientos del cdigo de regin, podemos primero comprobar si tenemos un parmetro homogneo con un valor cero o con un valor extremadamente pequeo. Asimismo, el parmetro homogneo puede ser positivo o negativo. Por tanto, suponiendo que h * 0, podemos escribir las desigualdades anteriores de la forma: -h < x, <k, h<x < -//,
h
-h% y.,
lt
~h< z < h
h
si h > 0 si h < 0
(7.46)
h ^z < -h
h
En la mayora de los casos h > 0 y podemos asignar los valores de bit del cdigo de regin para un determinado punto de acuerdo con las comprobaciones: bit 1 = 1 bit 2 = bit 3 = bit 4 = bit 5 = bit 6 =
1 1 1 1 1
si h + x < 0
h
(7.47)
si
h-x <Q
h b
si Ji + y < 0 si h - y, < 0
(
si h + z < 0
h
si /; - z < 0
h
Estos valores de bit pueden definirse utilizando la misma tcnica que en el recorte bidimcnsional. Es decir, simplemente utilizamos el bit de signo de uno de los clculos h h y o h z para asignar el correspondiente valor al bit del cdigo de regin. La Figura 7.57 enumera los 27 cdigos de regin para un volumen de visualizacin. En aquellos casos en los que h < 0 para algn punto, podramos aplicar los mecanismos de recorte utilizando el segundo conjunto de desigualdades de la Ecuacin 7.46, o podramos invertir el signo de las coordenadas y efectuar el recorte utilizando las comprobaciones para h > 0.
fl h
404
CAPTULO 7
Visualizacin tridimensional
Superior
Inferior
(a)
011001
I1O0 J 011010
001001
001000
001010
101001 i
101000 j 101010
i
010001
010000 i 010010
1
000001
000000
000010
IOiuo
_
00060 ! 100010
-i
010101 010100 i 010110 000101 000100 000110 Cdigos de regin delante del plano prximo Cdigos de regin entre los planos prximo y lejano
FIGURA 7.57. Valores para el cdigo de regin tridimensional de seis bits que identifica las posiciones en el espacio en relacin con los lmites del volumen de visualizacin. establecerse utilizando las condiciones 7.47. Entonces, una vez determinado el cdigo de regin para cada posicin de la escena, podemos determinar fcilmente si un punto est fuera o dentro del volumen de visualizacin. Por ejemplo, un cdigo de regin 101000 nos dice que el punto est por encima y directamente detrs del volumen de visualizacin, mientras que el cdigo de regin 000000 indica un punto situado dentro del volumen (Figura 7.57). Por tanto, para el recorte de puntos, simplemente eliminaremos todos los puntos individuales cuyo cdigo de regin no sea 000000. En otras palabras, si cualquiera de los test 7.47 es negativo, el punto estar fuera del volumen de visualizacin. Los mtodos para el recorte de lneas tridimensionales son esencialmente iguales que para lneas bidimensionales. Podemos comprobar primero los cdigos de regin de los extremos de la lnea para la aceptacin o rechazos triviales de la lnea. Si el cdigo de regin de ambos extremos de una lnea es 000000, la lnea estar completamente contenida dentro del volumen de visualizacin. De manera equivalente, podemos aceptar trivialmente la lnea si la operacin or lgica de los dos cdigos de regin de los extremos produce un valor igual a 0. Asimismo, podemos rechazar trivialmente la lnea si la operacin lgica and de los dos cdigos de regin de los extremos produce un valor distinto de 0. Este valor distinto de cero indica que los cdigos de regin de los dos extremos tienen un valor 1 en la misma posicin de bit, por lo que la lnea estar completamente fuera de los planos de recorte. Como ejemplo, la lnea que va de P a P en la Figura 7.58 tiene los valores de cdigo de regin 010101 y 100110 para sus dos puntos extremos. Por tanto, esta lnea est completamente por debajo del plano de recorte inferior. Si una lnea no cumple ninguno de estos dos tests, analizaremos la ecuacin de la lnea para determinar si es necesario preservar alguna parte de la misma.
3 4
405
P, (001001)
P,(01010I)
FIGURA 7.58. Cdigos de regin iridimensionales para dos segmentos de lnea. La lnea P , P intersecta los lmites de recorte derecho y superior del volumen de visualizacin, mientras que la linea P P est completamente situada por debajo del plano de recorte inferior.
2 3 4
Las ecuaciones de los segmentos de lnea tridimensionales pueden expresarse de manera conveniente en forma paramtrica y los mtodos de recorte de Cyrus-Bcck o Liang-Barsky (Seccin 6.7) pueden ampliarse a escenas tridimensionales. Para un segmento de lnea con extremos P = U / , p . v , , z | , / | ) y P = (x *y * h2> /? ), podemos escribir la ecuacin paramtrica que describe a los puntos situados a lo largo de la lnea como:
z A /( 2 /2 h2 2
p = p +(p _ P )
i
0<
(7.48)
Cuando el parmetro de la lnea tiene el valor U = 0, estaremos en la posicin P,, mientras que si u = 1 estaremos en el otro extremo de la lnea, P-,. Escribiendo la ecuacin paramtrica de la lnea explcitamente en tnninos de las coordenadas homogneas, tendremos.
x =x ^{x -x )u
h h h2 hl
>\
.v+(y, -y )w
: ; i l
0<w<l
(7.49)
k = h, +
-h. )u
Utilizando los cdigos de regin de los extremos de un segmento de lnea, podemos primero determinar con qu planos de recorte intersecta. Si uno de los cdigos de regin de los extremos tiene un valor 0 en una determinada posicin de bit mientras que el otro cdigo tiene un valor 1 en la misma posicin de bit, la lnea cruzar dicho plano de recorte. En otras palabras, uno de los tests 7.47 genera un valor negativo, mientras que el mismo test para el otro extremo de la lnea produce un valor no negativo. Para hallar el punto de interseccin con este plano de recorte, primero utilizamos las ecuaciones apropiadas de 7.49 para determinar el valor correspondiente al parmetro u. Despus, calculamos las coordenadas del punto de interseccin. Como ejemplo del procedimiento de clculo de interseccin, vamos a considerar un segmento de linca P,P de la Figura 7.58. Esta lnea intersecta el plano de recorte derecho, que puede describirse con la ecuacin -v = 1. Por tanto, determinamos el valor de interseccin del parmetro u haciendo igual a 1 la coordenada de proyeccin x:
2 max
406
CAPTULO 1
Visualizacin tridimensional
Despejando el parmetro
obtenemos; u= (7.5/)
A continuacin, determinamos los v a l o r e s ^ , y z en este plano de recorte utilizando el valor calculado de u. En este caso, los valores de interseccin^, y z se encuentran dentro de los lmites 1 del volumen de visualizacin y la lnea pasa al interior de dicho volumen. Por tanto, procedemos a continuacin a localizar el punto de interseccin con el plano de recorte superior. Eso completara el procesamiento para este segmento de linea, porque los puntos de interseccin con los planos de recorte superior y derecho identilcan la parte de la lnea contenida dentro del volumen de visualizacin, as como las secciones de la lnea que caen fuera de dicho volumen. Cuando una lnea intersecta un plano de recorte pero no pasa al interior del volumen de visualizacin, continuamos el procesamiento de la lnea como en el caso del recorte bidimensional. La seccin de la lnea que cae fuera de dicho limite de recorte se elimina y actualizamos la informacin de cdigo de regin y los valores del parmetro // para la parte de la linea que est dentro de dicho lmite. Despus, comprobamos la seccin restante de la lnea de acuerdo con los otros planos de recorte para su posible rechazo o para realizar clculos adicionales de interseccin. Los segmentos de lnea en las escenas tridimensionales no suelen estar aislados, sino que suelen ser componentes de la descripcin de los objetos slidos de la escena, con lo que necesitamos procesar las lneas como parte de las rutinas d recorte de superficie.
FIGURA 7.59. Recorte de un objeto tridimensional. Las secciones de la superficie que caen fuera de los planos de recorte del volumen de visualizacin se eliminan de la descripcin del objeio, pudiendo ser necesario construir nuevas caras de la superficie.
407
Podemos primero comprobar el poliedro para su aceptacin o rechazo triviales utilizando una caja de contomo, una estera circunscrita o alguna otra medida de los lmites de sus coordenadas. Si los lmites de las coordenadas del objetos se encuentran dentro de los limites de recorte, conservamos el objeto completo. Si los limites de coordenadas se encuentran completamente fuera de alguno de los lmites de recorte, eliminamos el objeto completo. Cuando no podemos guardar o eliminar el objeto completo, se puede procesar la lista de vrtices del conjunto de polgonos que definen las superficies del objeto. Aplicando mtodos similares a los del recorte de polgonos bidimensionales, podemos recortar las aristas para obtener nuevas listas de vrtices para las superficies del objeto. Puede que tambin tengamos que crear algunas nuevas de listas de vrtices para superficies adicionales que resulten de las operaciones de recorte. Asimismo, las tablas de polgonos debern ser actualizadas para agregar cualesquiera nuevas superficies de polgonos y para revisar la conectividad y la informacin de aristas compartidas de las superficies. Para simplificar el recorte de poliedros generales, las superficies poligonales se suelen dividir en secciones triangulares y describirlas mediante bandas de tringulos. Entonces, podemos recortar las bandas de tringulos utilizando la tcnica de Sutherland-Hodgman expuesta en la Seccin 3.15. Cada una de las bandas de tringulos se procesa por turnos con respecto a los seis planos de recorte para obtener la lista final de vrtices de la banda. Para polgonos cncavos, podemos aplicar mtodos de divisin (Seccin 3.15) para obtener, por ejemplo, un conjunto de tringulos y luego recortar los tringulos. Alternativamente, podramos recortar los polgonos tridimensionales cncavos utilizando el algoritmo de Weiler-Alherton descrito en la Seccin 6 .H.
408
CAPTULO 7
Visualizacin tridimensional
Ax + By + Cz + D<0
(7.52)
Como ejemplo, si el conjunto de parmetros del plano tiene los valores (/I, /i, C\ D) = (1.0, 0.0, 0.0, 8.0), entonces todo punto que satisfaga x H- 8.0 < 0.0 (o x < - 8 . 0 ) ser eliminado de la escena. Para recortar un segmento de lnea, primero podemos comprobar sus dos extremos para ver si la lnea se encuentra completamente detrs del plano de recorte o completamente delante suyo. Podemos representar la desigualdad 7.52 en forma vectorial utilizando el vector normal al plano N = (A, f, C). Entonces, para un segmento de lnea con extremos P| y P->, recortaremos la lnea completa si ambos extremos satisfacen, NP +D<0,
k
k = l2
(7H)
k = 1,2
(7M)
En caso contrario, los extremos se encuentran en lados opuestos del plano de recorte, como ilustra la Figura 7.60, y deberemos calcular el punto de interseccin con la lnea. Para calcular el punto de interseccin de la lnea con el plano de recorte, podemos emplear la siguiente representacin paramtrica del segmento de linea: P = P, + ( P , -P,)w,
0<M< I
i
7 5 5
El punto P se hallar sobre el plano de recorte si satisface la ecuacin del plano, NP+D=0 Sustituyendo el valor de P dado en 7.55, tendremos: N-[P,+(P -P )w| + D = 0
2 l
(7-57)
(7.58) '
Entonces sustituimos este valor de u en la representacin paramtrica vectorial de la lnea (Ecuacin 7.55) para obtener los valores de las coordenadas x y y z del punto de interseccin. Para el ejemplo de la Figura
y
FIGURA 7.60. Recorte de un segmento de lnea mediante un plano con vector normal N.
409
fe Para el caso de poliedros, como por ejemplo la pirmide de la Figura 7.61, aplicamos procedimientos de recorte similares. Primero vemos si el objeto est completamente detrs o completamente delante del plano de recorte. En caso contrario, procesamos la lista de vrtices de cada superficie poligonal. Aplicamos mtodos de recorte de lnea a cada arista sucesiva del polgono, como en el caso de recorte para volmenes de visualizacn, con el fin de producir las nuevas listas de vrtices de la superficie. Pero en este caso, slo tenemos que tomar en consideracin un nico plano de recorte. Recortar un objeto curvo de acuerdo con un nico plano de recorte es ms fcil que recortar el objeto segn los seis planos de un volumen de visualizacin, pero seguir siendo necesario resolver un conjunto de ecuaciones no lineales para localizar las intersecciones, a menos que aproximemos los contornos de la curva mediante secciones lineales.
(id);
El parmetro id se utiliza como identificador para un plano de recorte. A este parmetro se le asignan los valores G L _ C L I P _ P L A N E O , G L _ C L I P _ P L A N E I , etc., hasta un mximo definido por cada implementacin. El
410
CAPTULO 1
Visualizacin tridimensional
plano se define entonces utilizando la matriz de cuatro elementos p l a n e P a r a m e t e r s , cuyos elementos son los valores de coma flotante y doble precisin de los cuatro parmetros de la ecuacin del plano A y D.
t
Para desactivar un plano de recorte activo al que se le haya asignado el identificador id se utiliza la instruc
cin:
glDisable (id);
Los parmetros del plano A, /?, y D se transforman a coordenadas de visualizacin y se utilizan para comprobar las posiciones en coordenadas de visualizacin dentro de una escena. Los subsiguientes cambios en los parmetros de visualizacin o de transformacin geomtrica no afectan a los parmetros del plano almacenados. Por tanto, si especificamos planos de recorte opcionales antes de especificar las transformaciones geomtricas o de visualizacin, los parmetros del plano almacenados coincidirn con los parmetros que se hayan introducido. Asimismo, puesto que las rutinas de recorte para estos planos se aplican en coordenadas de visualizacin y no en el espacio de coordenadas normalizadas, el rendimiento de un programa puede degradarse cuando se activan los planos opcionales de recorte. Todos los puntos que se encuentre detrs de un plano de recorte OpenGL activado se eliminarn. Asi, una posicin (x,v, z) en coordenadas de visualizacin ser recortada si satisface la condicin 7.52. Hay disponibles seis planos de recorte opcionales en cualquier implementacin OpenGL, aunque puede que alguna implementacin concreta proporcione ms. Podemos ver cuntos planos de recorte opcionales pueden emplearse en una implementacin OpenGL concreta utilizando la instruccin,
glGetlntegerv (GL_MAX_CLIP_PLANES, numPlanes);
El parmetro n u m P l a n e s es el nombre de una matriz de enteros a la que hay que asignar un valor culero igual al nmero de planos de recorte opcionales que podemos utilizar. El comportamiento predeterminado para la funcin g l c l i p P l a n e es que se asigna un valor 0 a los parmetros , , y D de todos los planos
de recorte opcionales. Asimismo, inicialmente, todos los planos de recorte opcionales estn desactivados.
7.13 RESUMEN
Los procedimientos de visualizacin para las escenas tridimensionales siguen el enfoque general utilizado en visualizacin bidimensional. Primero creamos una escena en coordenadas universales, bien a partir de las definiciones de los objetos en coordenadas de modelado o directamente en coordenadas universales. Despus, establecemos un sistema de referencias de coordenadas de visualizacin y transferimos las descripciones de los objetos de coordenadas universales a coordenadas de visualizacin. A continuacin, las descripciones de los objetos se procesan a travs de varias rutinas para obtener las coordenadas de dispositivo. Sin embargo, a diferencia de la visualizacin bidimensional, el caso de la visualizacin tridimensional requiere rutinas de proyeccin para transfonnar las descripciones de los objetos a un plano de visualizacin antes de la transfonnacin a coordenadas de dispositivo. Asimismo, las operaciones de visualizacin tridimensional requieren ms parmetros espaciales. Podemos utilizar la analoga de la cmara para describir los parmetros de visualizacin tridimensionales. Se establece un sistema de referencia de coordenadas de visualizacin con un punto de vista de referencia (la posicin de la cmara), un vector normal al plano de visualizacin N (la direccin del objetivo de la cmara) y un vector vertical V (la direccin que apunta hacia arriba en la cmara). Entonces, la posicin del plano de visualizacin se estahlece a lo largo del eje de visualizacin " y las descripciones de los objetos se proyectan sobre este plano. Pueden utilizarse mtodos de proyeccin paralela o proyeccin en perspectiva para transferir las descripciones de los objetos al plano de visualizacin. Las proyecciones paralelas pueden ser ortogrficas u oblicuas y pueden especificarse mediante un vector de proyeccin. Las proyecciones paralelas ortogrficas que muestran ms de una cara de un objeto se denominan proyecciones axonomtricas. Obtenemos una isomtrica de un objeto mediante una proyeccin axono-
Resumen
411
mtrica que acorte todos los ejes principales segn un mismo factor. Las proyecciones oblicuas ms comnmente utilizadas son la perspectiva caballera y la perspectiva cabinet. Las proyecciones en perspectiva de los objetos se obtienen mediante lneas de proyeccin que se cruzan en el punto de referencia de proyeccin. Las proyecciones paralelas mantienen las proyecciones de los objetos, mientras que las proyecciones en perspectiva reducen el tamao de los objetos distantes. Las proyecciones en perspectiva hacen que las lneas paralelas parezcan converger en un punto de fuga, supuesto que las lneas no sean paralelas al plano de visualizacin. Pueden generarse diagramas de ingeniera y arquitectura con proyecciones en perspectiva de un punto, dos puntos o tres puntos, dependiendo del nmero de ejes principales que intersecten el plano de visualizacin. Obtenemos una proyeccin en perspectiva oblicua cuando la lnea que une el punto de referencia de proyeccin con el centro de la ventana de recorte no es perpendicular al plano de visualizacin. Los objetos de una escena tridimensional pueden recortarse de acuerdo con un volumen de visualizacin, con el fin de eliminar las secciones no deseadas de la escena. La parte superior, la inferior y las laterales del volumen de visualizacin se forman con planos paralelos a las lineas de proyeccin y que pasan a travs de los lados de la ventana de recorte. Los planos prximo y lejano (tambin denominados anterior y posterior) se utilizan para crear un volumen de visualizacin cerrado. Para una proyeccin paralela, el volumen de visualizacin es un paraleleppedo. Para una proyeccin en perspectiva, el volumen de visualizacin es un frustrum. En cualquiera de los dos casos, podemos convertir el volumen de visualizacin en un cubo normalizado con lmites en 0 y l para cada coordenada o en 1 y 1. Una serie de eficientes algorilmos de recorte procesan los objetos de la escena de acuerdo con los planos que limitan el volumen de visualizacin normalizado. El recorte se suele llevar a cabo en los paquetes grficos en coordenadas homogneas de cuatro dimensiones, despus de las transformaciones de proyeccin y de normalizacin del volumen de visualizacin. Entonces, las coordenadas homogneas se convierten a coordenadas de proyeccin cartesianas tridimensionales. Tambin pueden utilizarse planos de recorte adicionales con una orientacin arbitraria, con el fin de eliminar partes seleccionadas de una escena o de conseguir electos especiales. La biblioteca OpenGL Utility incluye una funcin de visualizacin tridimensional para especificar los parmetros de visualizacin {vase la Tabla 7 . 1 ) . Esta biblioteca tambin incluye una funcin para establecer una transformacin de produccin de perspectiva simtrica. Hay disponibles otras tres funciones de visualizacin en la biblioteca bsica OpenGL para especificar una proyeccin ortogrfica, una proyeccin en perspectiva general y planos de recorte opcionales. La Tabla 7.1 resume las funciones de visualizacin OpenGL analizadas en este captulo. Adems, la tabla incluye algunas otras funciones relacionadas con la visualizacin.
Funcin
gluLookAt glOrtho
Descripcin Especifica los parmetros de visualizacin tridimensional Especifica los parmetros de una ventana de recorte y de los planos de recorte prximo y lejano para una proyeccin ortogonal. Especifica el ngulo del campo visual de otros parmetros para una proyeccin en perspectiva simtrica. Especifica los parmetros para una ventana de recorte y para los planos de recorte prximo y lejano para una proyeccin en perspectiva (simtrica u oblicua). Especfica los parmetros para un plano de recorte opcional.
gluPerepective
glFrustum
glClipPlane
412
CAPITULO 1
Visualizacin tridimensional
REFERENCIAS
Puede encontrar un anlisis de los algoritmos de visualizacin tridimensional y de recorte en Weiler y Atherton (1977), Weiler (1980), Cyrus y Beck (1978) y Liang y Barsky (1984). Los algoritmos de recorte en coordenadas homogneas se describen en Blinn y Newell (1978), Riesenfeld (1981) y Blinn (1993, 1996 y 1998). Tambin puede encontrar un anlisis de diversas tcnicas de programacin para visualizacin tridimensional en Glassncr (1990), Arvo (1991), Kirk (1992), Heckbert (1994) y Paeth (1995). Puede encontrar el listado completo de funciones de visualizacin tridimensionales OpenGL en Shreiner (2000). Si est interesado en consultar ejemplos de programacin OpenGL que utilicen visualizacin tridimensional, le recomendamos Woo, Neider, Davis y Shreiner (1999). Tambin puede encontrar ejemplos de programacin adicionales en el sitio web tutorial de Nate Robins: http://www.csMtah.edu/ -narohins/opengl. html.
EJERCICIOS
7.1 Escriba un procedimiento para especificar la matriz que transforme los puntos en coordenadas universales a coordenadas de visualizacin tridimensionales, dados P , N y V. El vector vertical puede encontrarse en cualquier direccin que no sea paralela a N.
0
7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12
Escriba un procedimiento para transformar los vrtices de un poliedro a coordenadas de proyeccin utilizando una proyeccin paralela con cualquier vector de proyeccin especificado. Escriba un procedimiento para obtener diferentes vistas de proyeccin paralela de un poliedro aplicando primero una rotacin especificada. Escriba un procedimiento para realizar una proyeccin en perspectiva de un punto de un objeto. Escriba un procedimiento para realizar una proyeccin en perspectiva de dos puntos de un objeto. Desarrolle una rutina para realizar una proyeccin en perspectiva de tres puntos de un objeto. Escriba una rutina para convertir un frustrum de proyeccin en perspectiva en un paraleleppedo rectangular.. Modifique el algoritmo de recorte de lneas bidimensional de Cohen-Sutherland para recortar lincas tridimensionales segn el volumen de visualizacin simtrico normalizado. Modifique el algoritmo de recorte de lneas bidimensional de Liang-Barsky para recortar lneas tridimensionales segn un paraleleppedo regular especificado. Modifique el algoritmo de recorte de lneas bidimensional de Liang-Barsky para recortar un poliedro de acuerdo con un paraleleppedo regular especificado. Escriba una rutina para realizar el recorte de lineas en coordenadas homogneas. Desarrolle un algoritmo para recortar un poliedro segn un frustrum definido. Compare las operaciones necesarias en este algoritmo con las que haran falta en un algoritmo que recortara el poliedro de acuerdo con un paraleleppedo regular. Ample el algoritmo de recorte de polgonos de Sutherland-Hodgman para recortar un poliedro convexo de acuerdo con un volumen de visualizacin simtrico normalizado. Escriba una rutina para implementar el ejercicio anterior. Escriba una rutina para realizar el recorte de poliedros en coordenadas homogneas. Modifique el ejemplo de programa de la Seccin 7.10 para permitir a un usuario especificar una vista para la parte frontal o posterior del cuadrado. Modifique el ejemplo de programa de la Seccin 7.10 para permitir que el usuario introduzca los parmetros de visualizacin en perspectiva.
413
Modifique el ejemplo de programa de la Seccin 7.10 para generar una vista de cualquier poliedro de entrada. Modifique el programa del ejercicio anterior para generar una vista del poliedro utilizando una proyeccin ortogrfica. Modifique el programa del ejercicio anterior para generar una vista del poliedro utilizando una proyeccin paralela oblicua.
Poliedros Punciones para poliedros en OpenGL Superficies curvadas Superficies cudricas Supercudricas funciones OpenGL para superficies cudricas y superficies cbicas Objetos sin forma Representaciones mediante splines Mtodos de interpolacin mediante splines cbicos
8 . 1 6 Conversin entre representaciones mediante sp/ines 8 . 1 7 Visualizacin de curvas y superficies mediante sp/ines 8 . 1 8 Punciones de splines de aproximacin en OpenGL 8.1 Representaciones de barrido 8 . 2 0 Mtodos de geometria de slidos constructiva 8 . 2 1 rboles ocales 8 . 2 2 rboles BSP 8 . 2 3 Mtodos de geometria fractal 8 . 2 4 Gramticas de fonnas y otros mtodos procedimentales 8 . 2 5 Sistemas de partculas 8 . 2 6 Modelado basado en las caractersticas fsicas 8 . 2 7 Visualizacin de conjuntos de datos 8 . 2 8 Resumen
8.10 Curvas mediante splines de Bzier 8.11 Superficies de Bzier 8.12 Curvas mediante splines \\ 8.13 Superficies mediante splines B 8.14 Splines beta 8.15 Splines racionales
Las escenas grficas pueden contener muchas clases diferentes de objetos y superficies de materiales: rboles, llores, nubes, rocas, agua, ladrillos, tableros de madera, goma, papel, mrmol, acero, cristal, plstico y tela, por mencionar unos pocos. Por tanto, no puede sorprender que no haya un nico mtodo que podamos utilizar para describir objetos que incluyan todas las caractersticas de estos materiales diferentes. Las superficies de polgonos y de cudricas proporcionan descripciones precisas de objelos euclideos simples, tales como los poliedros y los elipsoides; las superficies medanle splines y las tcnicas de la geometra slida constructiva son tiles para disear alas de avin, ruedas dentadas y otras estructuras de ingeniera con superficies c u n a d a s ; los mtodos procedimentales. tales como las construcciones (Vacales y los sistemas de partculas, nos permiten modelar las caractersticas del terreno, nubes, prados de csped y otros objetos naturales; los mtodos de modelado basados en la Fsica, que utilizan sistemas de fuerzas de interaccin, se pueden utilizar para describir el comportamiento no rgido de una prenda de ropa o una porcin de gelatina; las codificaciones mediante rboles ocales se utilizan para representar caractersticas internas de objelos. tales como las obtenidas a partir de imgenes CT mdicas; y las visualizaciones mediante superficies de nivel, los sombreados de volmenes y otras tcnicas de visualizacin se aplican a conjuntos de datos discretos tridimensionales para obtener representaciones visuales de los datos. Las tcnicas de representacin de objelos slidos se dividen a menudo en dos grandes categoras, aunque no todas las representaciones pertenecen con claridad a una de estas dos categoras. Las representaciones por lmites describen un objeto tridimensional como un conjunto de superficies que separan el interior del objeto de su enlomo. Los ejemplos habituales de representaciones por lmites son las facetas de polgonos y parches con splines. Las representaciones de particionamiento del espacio se utilizan para describir propiedades internas, particionando la regin del espacio que contiene un objeto en un conjunto de slidos pequeos, contiguos y que no se superponen (habitualmente cubos). Una descripcin habitual de particionamiento del espa-
416
CAPTULO 8
ci de un objeto tridimensional es una representacin mediante un rbol oclal. En este captulo consideramos las caractersticas de las distintas tcnicas de representacin y cmo se utilizan en aplicaciones grficas por computadora.
8.1 POLIEDROS
La representacin por lmites de un objeto grfico tridimensional que se utiliza ms habitualmente consiste en un conjunto de polgonos que encierra el interior del objeto. Muchos sistemas grficos almacenan todas las descripciones de los objetos como conjuntos de polgonos. Fisto simplifica y acelera el sombreado de las superficies y la visualizacin de los objetos, ya que todas las superficies se describen con ecuaciones lineales. Por esta razn, las descripciones de polgonos se denominan a menudo objetos grficos estndar. En algunos casos, una representacin poligonal es la nica disponible, pero muchos paquetes tambin permiten describir las superficies de los objetos con otras tcnicas, tales como superficies mediante splines, que habitualmente se convierten en representaciones poligonales para su procesamiento en la pipeline de visualizacin. Para describir un objeto como un conjunto de facetas poligonales, damos la lista de coordenadas de los vrtices de cada polgono sobre la superficie del objeto. Las coordenadas de los vrtices y la informacin de las aristas de las parles de la superficie se almacenan a continuacin en tablas (Seccin 3.15), junto con otra informacin tal como el vector normal a la superficie para cada polgono. Algunos paquetes grficos proporcionan subrutinas para la generacin de mallas de polgonos como un conjunto de tringulos o de cuadrilteros. Esto nos permite describir una gran parte de la superficie lmite de un objeto, o incluso toda la superficie, con una nica orden. Algunos paquetes tambin proporcionan subrutinas para mostrar formas comunes, tales como un cubo, una esfera, o un cilindro, representados con superficies de polgonos. Los sistemas grficos sofisticados utilizan sombreadores (renderers) rpidos de polgonos implementados en hardware que tienen la capacidad de mostrar un milln o ms de polgonos (habitualmente tringulos) sombreados por segundo, en los que se incluye la aplicacin de texturas a su superficie y de efectos especiales de iluminacin.
8.2
417
dro regular son iguales, todos los ngulos entre las aristas son iguales y lodos los ngulos entre las caras son iguales. A los poliedros se les asigna un nombre de acuerdo con el nmero de caras en cada uno de los slidos. Los cinco poliedros regulares son el tetraedro regular (o pirmide triangular, con 4 caras), el hexaedro regular (o cubo, con 6 caras), el octaedro regular (8 caras), el dodecaedro regular (12 caras) y el icosaedro regular (20 caras). GLUT proporciona diez funciones GLUT para generar estos slidos: cinco de las funciones producen objetos de malla de alambre y cinco muestran las facetas de los poliedros como reas de relleno sombreadas. Las caractersticas de la superficie mostrada de las reas de relleno se determinan mediante las propiedades del material y las condiciones de iluminacin que se establecen para una escena. Cada poliedro regular se describe en coordenadas de modelado, de modo que cada uno est centrado en el origen del sistema de coordenadas universales. Obtenemos la pirmide triangular, regular y de cuatro caras utilizando cualquiera de las dos funciones siguientes:
glutWireTetrahedron ( );
o
glutSolidTetrahedron ( ) ;
Este poliedro se genera con su centro en el origen del sistema de coordenadas universales y con un radio (distancia desde el centro del tetraedro a cualquier vrtice) igual a El hexaedro regular de seis caras (cubo) se visualiza con:
glutWireCube 0 glutSolidCube edgeLength); edgeLength);
Al parmetro e d g e L e n g t h se le puede asignar cualquier valor en punto llotante de doble precisin y positivo, y el cubo est centrado en el origen de coordenadas. Para visualizar el octaedro regular de ocho caras, invocamos cualquiera de los siguientes comandos:
glutWireOctahedron 0 glutSolidOctahedron ( ) ; ( ) ;
Este poliedro tiene caras triangulares equilteras, y el radio (distancia desde el centro del octaedro situado en el origen de coordenadas hasta cualquier vrtice) es 1.0. El dodecaedro regular de doce caras, centrado en el origen del sistema de coordenadas universales se genera con:
glutWireDodecahedron ( ) ;
o
glutSolidDodecahedron ( ) ;
Cada cara de este poliedro es un pentgono. Y las siguientes funciones generan el icosaedro regular de veinte caras.
glutWirelcosahedron O glutSolidlcosahedron { ) ; ( ) ;
El radio (distancia desde el centro del poliedro, situado en el origen de coordenadas, hasta cualquier vrtice) predeterminado del icosaedro es 1.0 y cada cara es un tringulo equiltero.
418
CAPTULO 8
FIGURA 8 .1. Una vista en perspectiva de los cinco poliedros de G L U T , cambiados de escala y posicionados dentro de una ventana de visualizacin por el procedimiento d i s p l a y W i r e P o l y h e d r a .
ttinclude GLsizei
//visualizacin. void { glClearColor (1.0, 1.0, 1.0, 0.0); // Ventana de visualizacin en blanco init (void)
void
displayWirePolyhedra
(void)
glClear glColor3f /*
// //
Borra
la
ventana el
de
Establece
color */ 1.0,
Establece (5.0,
gluLookAt /*
0.0); */
l o m u e s t r a como p a r a l e l e p p e d o a l m b r i c o .
glScalef
1.0);
419
glutWireCube /* Cambia de
glScalef
(0.8,
glTranslatef
(-6.0,
glutWireDodecahedron
/*
Traslada
un
t e t r a e d r o en modelo a l m b r i c o .
*/
glTranslatef
2.0) ;
glutWireTetrahedron
) ;
/*
un
o c t a e d r o en modelo a l m b r i c o .
*/
glTranslatef
0.0) ; .J
glutWireOctahedron
/*
Cambia
de
escala, 0.6,
traslada
y muestra
un
i c o s a e d r o en modelo a l m b r i c o .
*/
glScalef
(0.8,
glTranslatef
(4.3,
glutWirelcosahedron
glFlush
) ;
void winReshapePcn
(QLint
newWidth,
QLint
newHeight)
glViewport
(0,
0,
newWidth,
newHeight);
glMatrixMode glFrustum
(-1.0,
(GL_MODELVIEW);
(int
{
glutlnit (&argc, argv); (GLUT_SINGLE (100, | GLT_RGB); glutlnitDisplayMode
(winWidth, ("Poliedros
init ( );
glutDisplayFunc glutReshapeFunc (displayWirePolyhedra); (winReshapeFcn);
glutMainLoop
);
420
CAPTULO 8
Esfera
En coordenadas cartesianas, una superficie esfrica de radio r centrada en el origen de coordenadas se define como el conjunto de puntos (x,y, z) que satisface la ecuacin:
Tambin podemos describir la superficie esfrica de forma paramtrica, utilizando los ngulos de la latilud y la longitud (Figura 8.2):
X = r eos < > eos 0 y = r e o s 0sin
y
ft
-n<Q<n
(8.2)
z = r sin <p La representacin paramtrica de las Ecuaciones 8.2 propociona un rango simtrico para los parmetros angulares 0 y < > . Como alternativa, podramos escribir las ecuaciones paramtricas utilizando coordenadas esfricas estndar, en las que el ngulo t> se especifica como eolatitud (Figura 8.3). Entonces, 0 se define dentro del rango 0 < 0 < n y 6 se toma a menudo en el rango 0 < 6 < 2/r. Podramos tambin establecer la representacin utilizando parmetros uy v definidos sobre el rango que vara entre 0 y I, haciendo las sustituciones <f> = k u y 0 = 2k v.
eje x
eje x
FIGURA 8.3. Parmetros de las coordenadas esfricas (r, 0 <p), utilizando la eolatitud para el ngulo 0.
t
8.4
Superficies cudricas
421
Elipsoide
Una superficie elipsoidal se puede describir como una ampliacin de la superficie esfrica, en la que el radio en ires direcciones perpendiculares entre s puede tener valores diferentes (Figura 8.4). La representacin cartesiana de los puntos de la superficie de un elipsoide centrado en el origen es:
Una representacin paramlrica de un elipsoide en funcin del ngulo de la latitud 0 y del ngulo de la longitud 0 d e la Figura 8.2 es:
x = r eos 0 eos
x
ft
-7i/2 <<p<7V/2
- k<
y = t\ eos 0 sin
Z = r. Sin 0
ft
6<
(8.4)
Un objeto con forma de donut se denomina toro. Muy a menudo se describe como la superficie generada al hacer girar un crculo o una elipse alrededor de un eje coplanario que es externo a la cnica. Los parmetros de definicin de un toro son entonces la distancia del centro de la cnica al eje de rotacin y las dimensiones de la cnica. En la Figura 8.5 se muestra un toro generado por la rotacin de un circulo de radio / en el plano v- alrededor del eje z. Con el centro del crculo en el eje>\ el radio axial, r del toro resultante es igual a la distancia en la direccin del eje y al centro del crculo desde el eje z (eje de rotacin). El radio de la seccin recta del toro es el radio del crculo generatriz. La ecuacin del crculo de la seccin recta que se muestra en la vista lateral de la Figura 8.5 es:
a x i a h
Al hacer girar este crculo alrededor del eje z se genera el toro cuya superficie se describe con la ecuacin cartesiana:
* eje
y eje l
Vista lateral Vista superior
Un toro centrado en el origen de coordenadas con una seccin recta circular y con el eje del toro segn el
422
CAPTULO 8
Y las ecuaciones paramtricas correspondientes del toro con una seccin recta circular son: x = 0'
axvM
+ / eos 0) eos 6\
+
r
- /r < 0 < ;r
) ' = (fatal
eos 0) sin 0,
-n<e<n
Z = r Sin 0
Tambin podramos generar un toro haciendo girar una elipse, en lugar de un crculo, alrededor del eje z. En el caso de una elipse situada en el plano yz con semidimetro principal y semidimetro secundario referenciados como r., y /\, podemos escribir la ecuacin de la elipse como:
'uiol
=I
r.
K J
1
en la que r es la distancia segn el eje y desde el eje de rotacin z al centro de la elipse. De este modo, se genera un loro que se puede describir con la ecuacin cartesiana.
lM-i
';uiul
(8.7)
La representacin paramtrica correspondiente del toro con una seccin recta elptica es = (%i + * eos < W eos 0,
}' = <>uxu.i
- / r < 0 < /r ft
-n<e<n
(8.8)
Z = f sin 0
:
Son posibles otras variaciones de las ecuaciones anteriores del toro. Por ejemplo, podramos generar una superficie toroidal haciendo girar un crculo o una elipse siguiendo una trayectoria elptica alrededor del eje de rotacin.
8.5 SUPERCUDRICAS
Esta clase de objetos es una generalizacin de las cudricas. Las supercudricas se crean incorporando parmetros adicionales a las ecuaciones de las cudricas, para proporcionar una mayor flexibilidad en el ajuste de las formas de los objetos. Se aade un parmetro adicional a las ecuaciones de una curva y se utilizan dos parmetros adicionales en las ecuaciones de las superficies.
Superelipse
Obtenemos la representacin cartesiana de una superelipse a partir de la ecuacin de una elipse permitiendo que el exponente de los trminos rey sea variable. Un modo de hacer esto es escribir la ecuacin cartesiana de la superelipse en la forma:
\2/s
(8.9)
en la que al parmetro s se le puede asignar cualquier valor real-. Cuando s ~ 1. tenemos una elipse ordinaria. Las ecuaciones paramtricas correspondientes a la superelipse de la Ecuacin H. se pueden expresar como
8.5 Supercudricas
423
OOOO^
0.5 1.0
1.5
2.0
2.5
3.0
FIGURA 8.6. Superelipses dibujadas con valores del parmetro .s \ariando desde 0.5 a 3.0 y con r = r
x
x = r . c o s 0, y = r sin e
5 y
-K<, 9<> K
(8.10)
La Figura 8.6 muestra las formas de superelipses que se pueden generar utilizando varios valores del parmetro s.
Superelipsoide
Una representacin cartesiana de un superelipsoide se obtiene a partir de la ecuacin de un elipsoide incorporando dos parmetros exponenciales:
2/j / >
I
f \ 2/1,
= 1
(8.11)
Con | = s = 1. tenemos un elipsoide ordinario. Podemos a continuacin escribir la representacin parametrica correspondiente al superelipsoide de la Ecuacin 8.11 como.
2
x = r eos' 0 c o s
A 1
,J
0,
y = e o s ' &x\ 0,
h
FIGURA 8.7. Superelipsoidcs dibujados con valores de los parrmetros s, y s variando desde 0.0 a 2.5 v con r . = r . r..
2
424
CAPTULO 8
La Figura 8.7 muestra las formas de los superelipsoides que se pueden generar utilizando varios valores de los parmetros ,v, y ,s . Estas y otras formas de supercudricas se pueden combinar para crear estructuras ms complejas, tales como descripciones de muebles, tomillos roscados y otros artculos de ferretera.
2
en las que el radio de la esfera se determina con el nmero en punto flotante de doble precisin que asignemos al parmetro r. Los parmetros n L o n g i t u d e s y n L a t i t u d e s se utilizan para seleccionar el nmero entero de lneas de longitud y de latitud que se utilizaran para aproximar la superficie esfrica mediante una malla de cuadrilteros. Las aristas de los parches de superficie de cuadrilteros son aproximaciones de lneas rectas de las lneas de longitud y de latitud. La esfera se define con coordenadas de modelado, centrada en el origen de coordenadas universal con su eje polar segn la direccin del eje z. Un cono con GLUT se obtiene con:
glutWireCone (rBase, height, nLongitudes, nLatitudes);
o
glutSolidCone (rBase, height, nLongitudes, nLatitudes);
Establecemos los valores en punto flotante de doble precisin para el radio de la base del cono y la altura del cono, utilizando los parmetros r b a s e y h e i g h t , respectivamente. Como en el caso de la esfera, a los parmetros n L o n g i t u d e s y n L a t i t u d e s se les asignan valores enteros que especifican el nmero de lneas ortogonales de superficie en la aproximacin mediante una malla de cuadrilteros. Una lnea de longitud de un cono es un segmento de lnea recta sobre la superficie del cono, desde el vrtice hacia la base, que se encuentre en un plano que contenga al eje del cono. Cada lnea de longitud se visualiza como un conjunto de segmentos de lnea recta alrededor de la circunferencia de un circulo, en la superficie del cono que es paralelo a la base del cono y que se encuentre en un plano perpendicular al eje del cono. El cono se describe con coordenadas de modelado, con el centro de la base en el origen de coordenadas universal y con el eje del cono en la direccin del eje z. Las visualizaciones almbricas o con superficie sombreada de un toro con seccin recta circular se generan mediante:
425
o
glutSolidTorus (rCrossSection, rAxial, nConcentrics, nRadialSlices);
El toro que se obtiene con estas subrutinas de GLUT se puede describir como la superficie generada mediante la rotacin de un crculo de radio r C r o s s S e c t i o n alrededor del eje z eoplanario, en la que la distancia del centro del crculo al eje z es r A x i a l (Seccin 8.4). Seleccionamos un tamao del toro utilizando valores en punto dotante de doble precisin para estos radios en las funciones de GLUT. Y el tamao de los cuadrilteros de la malla de aproximacin de la superficie del toro se establece con los valores enteros de los parmetros n C o n c e n t r i c s y n R a d i a l S l i c e s . El parmetro n C o n c e n t r i c s especifica el nmero de crculos concntricos (con centro en el eje z) que se deben utilizar en la superficie del toro y el parmetro n R a d i a l S l i c e s especifica el nmero de secciones radiales de la superficie del toro. Estos dos parmetros hacen referencia al nmero de lineas de la cuadrcula ortogonal sobre la superficie del toro, que se visualizan como segmentos de lnea recta (los limites de los cuadrilteros) entre las intersecciones. El toro mostrado est centrado en el origen de coordenadas universal y tiene su eje en la direccin del eje z universal.
Funcin de GLUT para la generacin de una tetera con una superficie cbica
Durante el desarrollo inicial de los mtodos de los grficos por computadora, se construyeron tablas de datos de mallas poligonales que describen varios objetos tridimensionales que se pudieron utilizar para probar las tcnicas de sombreado. Entre estos objetos se incluyen las superficies de un automvil Volkswagen y una tetera, que fueron desarrollados en la universidad de UTA. El conjunto de datos de la tetera de UTA, como fue construido por Martin Newell en 1975, contiene 306 vrtices, que definen 32 parches de superficies de Bzier bicbicas (Seccin 8.11). Ya que la determinacin de las coordenadas de la superficie de un objeto complejo requiere un tiempo, estos conjuntos de datos, sobre lodo la malla de la superficie de la tetera, llegaron a ser profusamente utilizados. Podemos visualizar la tetera, como una malla de cerca de mil parches de superficies bicbicas, utliIizando cualquira de las dos funciones siguientes de GLUT:
glutWireTeapot (size);
0
glutSolidTeapot (size);
La superficie de la tetera se genera utilizando funciones de curvas de Bzier de OpenGL (Seccin 8.11). El parmetro s i z e establece el valor en punto flotante de doble precisin del radio mximo de la vasija de la tetera. La tetera est centrada en el origen de coordenadas UNIVERSAL y su eje vertical lo tiene en la direccin del ejej>.
= gluNewQuadric
426
CAPTULO 8
nLongitudes,
l la primera linca de cdigo se define un nombre para el objeto de tipo cudrica. En este ejemplo, hemos elegido el nombre s p h e r e l . Este nombre se utiliza despus en otras funciones de GLU para hacer referencia a esta superficie cudrica particular. A continuacin, se activa el sombreador de cudricas con la funcin g l u N e w Q u a d r i c , entonces se selecciona el modo de visualizacin GLULINE para s p h e r e l con el comando g l u Q u a d r i c D r a w S t y l e . Por tanto, la esfera se muestra en su modelo almbrico con un segmento de lnea recta entre cada par de vrtices de la superficie. Al parmetro r se le asigna un valor de doble precisin para usarlo como radio de la esfera. La esfera se divide en un conjunto de carus poligonales mediante lineas de longitud y de latitud equiespaciadas. Especificamos el nmero entero de lincas de longitud y de lneas de latitud como valores de los parmetros n L o n g i t u d e s y n L a t i t u d e s . May disponibles otros tres modos de visualizacin de superficies cudricas con GLU. Utilizando la constante simblica GLU_P0INT en g l u Q u a d r i c D r a w S t y l e , visualizamos una superficie cudrica como un dibujo de puntos. En el caso de la esfera, se visualiza un punto en cada vrtice de la superficie determinado por la interseccin de una lnea de longitud y una lnea de latitud. Otra opcin es la constante simblica GLU_SILHOUTTE. Esta produce una visualizacin almbrica eliminando las aristas comunes entre dos caras poligonales coplanarias. Con la constante simblica GLU_FILL, visualizamos los parches de polgonos como reas de relleno sombreadas. Utilizando la misma secuencia bsica de comandos generamos visualizaciones de las otras primitivas para superficies cudricas con GLU. Para producir una vista de un cono, un cilindro, o cilindro con tapas, reemplazamos la funcin g l u S p h e r e por
gluCylinder (quadricName, rBase, rTop, height, nLongitudes, nLatitudes) ;
La base de este objeto se encuentra en el plano xy ( z = 0 ) y su eje es el eje z. Utilizando el parmetro rBase asignamos un valor de doble precisin al radio de la base de esta superficie cudrica y utilizando el parmetro r T o p al radio de la tapa superior. Si s t o p = 0.0, obtenemos un cono; si r T o p = r B a s e obtenemos un cilindro. En caso contrario, se obtiene un cilindro con tapas. Al parmetro h e i g h t se le asigna un valor de doble precisin de la altura y la superficie queda dividida en un nmero de lneas verticales y horizontales equiespaciadas que viene determinado por los valores enteros asignados a los parmetros n L o n g i t u d e s y nLatitudes. Una corona circular plana o disco slido se visualiza en el plano xy ( r = 0 ) y centrado en el origen de coordenadas universal con:
gluDisk (ringName, rlnner, rOuter, nRadii, nRings);
Con los parmetros r l n n e r y r O u t e r establecemos los valores de doble precisin del radio interior y del radio exterior. Si r l n n e r 0, el disco est completamente relleno. De lo contrario, se visualiza con un agujero concntrico en el centro del disco. La superficie del disco est dividida en un conjunto de facetas mediante los parmetros enteros n R a d i i y n R i n g s , que especifican el nmero de rodajas radiales que hay que utilizar en la tcselacin y el nmero de anillos circulares concntricos, respectivamente. La orientacin del anillo se define con respecto al eje r, la cara frontal del anillo est orientada en la direccin del semieje positivo z y la cara posterior en la direccin del semieje negativo z. Podemos especificar una parte de una corona circular con la siguiente funcin de GLU.
gluPartialDisk (ringName, rlnner, rOuter, nRadii, nRings, startAngle, sweepAngle);
El parmetro de doble precisin s t a r t A n g l e hace referencia al ngulo en grados en el plano xy medido en el sentido de las agujas del reloj desde el semieje positivo y. De forma similar, el parmetro sweepAngle hace referencia a la distancia angular en grados desde el ngulo s t a r t A n g l e . Por tanto, una parte de una corona circular plana se visualiza desde el ngulo s t a r t A n g l e hasta s t a r t A n g l e + s w e e p A n g l e . Por
ejemplo, si s t a r t A n g l e = 0.0 y s w e e p A n g l e = 90.0, entonces se muestra la parte de la corona circular situada en el primer cuadrante del plano xy. La memoria reservada para cualquier superficie cudrica creada con GLU se puede liberar adems de eliminar la superficie con,
gluDeleteQuadric quadricNameJ;
Tambin, podemos definir las direcciones de la cara frontal y la cara posterior de cualquier superficie cudrica con la funcin de orientacin:
gluQuadricOrientation (quadricName, normalVectorDirection);
Ai parmetro n o r m a l V e c t o r D i r e c t i o n se le asigna GLU_OUTSlDE o G L U _ I N S I D E para indicar una direccin de los vectores normales a la superficie, donde outside indica la direccin de la cara frontal e inside indica la direccin de la cara posterior. El valor predeterminado es G L U _ O T S I D E . La direccin predeterminada de la cara frontal de una corona circular plana es la del semieje positivo i (por encima del disco). Otra opcin es la generacin de los vectores normales a la superficie.
g 1 uQuad r i cNorma1s (quadr i cName, gene rat ionMode) ;
Al parmetro g e n e r a t i o n M o d e se le asigna una constante simblica para indicar cmo se deberan generar los vectores normales a la superficie. La constante predeterminada es G L U _ N O N E , que significa que no hay que generar normales a la superficie y, habitualmente, no se aplican condiciones de iluminacin a la superficie de la cudrica. En el caso de sombreado plano de la superficie (un color constante en cada superficie), utilizamos la constante simblica G L U _ F L A T . Esta produce una normal a la superficie para cada cara poligonal. Cuando hay que aplicar otras condiciones de iluminacin y sombreado, utilizamos la constante G L U _ S M O O T H , que genera un vector normal para cada vrtice de la superficie.
FIGURA 8 . 8 . Visual izaein de una esfera creada con GLUT, un cono creado con GLUT y un cilindro creado con GLU, posicionados dentro de una ventana de visualizacin con el procedimicnlo wireQuadSurfs.
428
CAPTULO 8
Entre otras opciones para las superficies cudricas con (LU se incluye la modificacin de parmetros de la textura de la superficie. Podemos designar una funcin que se ha de invocar cuando ocurre un error durante la generacin de una superficie eudrica:
gluQuadricCallback (quadricName, GLU ERROR, function);
Ejemplo de programa que utiliza las funciones de creacin de superficies cudricas de GLUT y GLU
Se visualizan tres objetos con superficies cudricas (una esfera, un cono y un cilindro) en su modelo almbrico con el siguiente programa de ejemplo. Establecemos la direccin de la vista como el semieje positivo z para que el eje de todos los objetos visualizados sea vertical. Los tres objetos se posicionan en diferentes localizaciones dentro de una nica ventana de visualizacin, como se muestra en la Figura 8.8.
finclude QLsizei
visualizacin.
void
init
(void)
{
glClearColor (1.0, 1.0, 1.0, 0.0); // // Establece de el color de la ventana visualizacin.
void {
wireQuadSurfs
(void)
glClear
// // //
Borra
la
ventana el color
de de
glColor3f
/* *
Establece
los
parmetros
de */
visualizacin
eje
universal
como
gluLookAt /*
0.0,
0.0,
0.0,
0.0,
1.0); */
Posiciona (
y muestra ); 1.0, 8,
una
e s f e r a a l m b r i c a d e GLUT.
glPuahMatrix glTranslatef
(1.0,
0.0); 6);
glutWireSphere glPopMatrix /* (
(0.75, )
u n c o n o a l m b r i c o d e GLUT.
*/
(1.0, (0.7, );
0.5) ; 7, 6);
429
/*
*/ objeto de cudrica de
GLUquadricObj
); 1.2,
(0.0,
0.800^
( ); GLU_LINE); 1.5, 6, 4) 0.6,
gluNewQuadric (cylinder, ( );
(cylinder, 0.6,
void
winReshapeFcn
(GLint
newWidth,
GLint
newHeight)
i
glViewport (0, 0, newWidth, newHeight);
glMatrixMode glClear
(GL_MODELVIEW);
(GL__C0L0R_BUFFER_BIT) ;
)
v o i d main (int argc, char** argv)
glutlnit
(&argc,
glutlnitDisplayMode
(winWidth, ("Superficies
glutDisplayFunc
(wireQuadSurfs);
430
88
O O
FIGURA 8.10. Formas de msculos sin forma de un brazo humano.
FIGURA 8.9. Enlace molecular. A medida que dos molculas se separan una de la otra, las formas de la superficie se estiran, se rompen en dos y finalmente se contraen para formar esteras.
Una forma molecular, por ejemplo, se puede describir como esfrica cuando est aislada, pero esta forma cambia cuando la molcula se aproxima a otra molcula, listo es debido al hecho de que la forma de la nube de densidad de electrones se distorsiona con la presencia de otra molcula, para que tenga lugar un efecto de unin entre las dos molculas. La Figura 8.9 muestra los efectos de estiramiento, de ruptura en dos y de contraccin de las formas moleculares cuando dos molculas se separan. Estas caractersticas no se pueden describir adecuadamente con simples formas esfricas o elpticas. De forma similar, la Figura 8.10 muestra formas musculares de un brazo humano, que presenta caractersticas similares. Se han desarrollado varios modelos para representar objetos sin forma como funciones de distribucin sobre regiones del espacio, llabitualmcntc, las formas de la superficie se describen de forma que el volumen del objeto permanece constante durante cualquier movimiento o interaccin. Un mtodo de modelado de objetos sin forma consiste en utilizar una combinacin de funciones de densidad gaussianas, o bultos gaussianos (Figura 8.11). De esta manera, una funcin de la superficie se define como:
donde r = x~l + y + r, el parmetro 7" es algn umbral especificado, y los parmetros a y h se utilizan para ajustar la cantidad de sin forma de las componentes individuales de la superficie. Los valores negativos de h se pueden utilizar para producir hendiduras en lugar de abultamientos. La Figura 8.12 muestra la estructura de la superficie de un objeto compuesto modelado con cuatro funciones de densidad gaussianas. En el nivel del umbral, se utilizan tcnicas numricas de bsqueda de races para localizar los valores de las coordenadas de la interseccin. Las secciones rectas de los objetos individuales se modelan como crculos o elipse. Si las dos secciones rectas estn prximas entre s, se fusionan para dar lugar a una forma sin forma como se muestra en la Figura 8.9, cuya estructura depende de la separacin de los dos objetos.
k k k k
FIGURA 8.11. Una funcin de densidad gaussiana tridimensional centrada en el valor 0, con altura b y desviacin estndar a.
FIGURA 8.12. Un objeto compuesto sin forma formado por cuatro abultamientos gaussianos.
431
FIGURA 8.13. Una distribucin de pantalla, utilizada en los paquetes Blob Modeler y Blob Animador, para modelar objetos con metaboias. {Cortesa de Thomson Digital Image.) Otros mtodos para generer objetos sin forma utilizan funciones de densidad que decrecen hasta 0 en un intervalo finito, en lugar de exponencialmente. El modelo de metaboias describe los objetos compuestos como combinaciones de Junciones de densidad cudricas de la forma: si 0 < r < -
di
3 si r >d
mm
4/ 9d"
f(r) =
si 0 < / < d
si r >
9d
8.15)
Algunos paquetes de diseo y dibujo ahora proporcionan modelado de funciones sin forma para manejar aplicaciones que no se pueden modelar adecuadamente con otras representaciones. La Figura 8.13 muestra una interfaz de usuario de un modelador de objetos sin forma que utiliza metaboias.
432
FIGURA 8.14. Conjunto de seis puntos de control interpolados con secciones polinmicas continuas por tramos.
FIGURA 8.15. Conjunto de seis puntos de control aproximados con secciones polinmicas continuas por tramos.
aplicaciones de grficos por computadora. Cada especificacin individual simplemente hace referencia a un tipo particular de polinomio con ciertas condiciones especficas en los lmites. Los splines se utilizan para disear formas de curvas y de superficies, para digitalizar dibujos y para especificar trayectorias de animacin de objetos o la posicin de la cmara en una escena. Entre las aplicaciones habituales de C A D con splines se incluyen el diseo de la carrocera de un automvil, las superficies de aviones o naves espaciales, los cascos de las embarcaciones y los electrodomsticos.
433
FIGURA 8.16. Una superficie de aproximacin con sp/ines de una aplicacin de CAD de diseo de automviles. Los contornos de la superficie se dibujan con parles de curvas polinmicas y los puntos de control de la superficie estn conectados mediante segmentos de lnea recta. {Cortesa de Evans & SutherJand.) proporciona una medida de la desviacin de una curva o una superficie de la regin del espacio prxima a los puntos de control. En la mayora de los casos, un spline est confinado dentro de su armazn convexo, lo cual garantiza que la forma de objeto sigue los puntos de control sin oscilaciones errticas. Tambin, el armazn convexo proporciona una medida de las amplitudes de las coordenadas de una curva o una superficie diseadas, por lo que es til en subrutinas de recorte y de visualizacin. Una polilnea que conecta la secuencia de puntos de control de una curva de aproximacin con splines se muestra habitualmente, para recordar al diseador las posiciones de los puntos de control y su ordenacin. Este conjunto de segmentos de lnea conectados se denomina grafo de control de la curva. A menudo, el grafo de control se denomina polgono de control o polgono caracterstico, aunque el grafo de control es una polilnea y no un polgono. La Figura 8.18 muestra la forma del grafo de control de las secuencias de puntos de control de la Figura 8.17. En una superficie con splines, dos conjuntos de polilneas que conectan los puntos de control forman las aristas de las caras poligonales, de una malla de cuadrilteros del grafo de control de la superficie, como se muestra en la Figura 8.16.
ib) p,* , \
FIGURA 8.17. Fonnas de los armazones convexas (lneas discontinuas) de dos conjuntos de puntos de control en el plano xy.
434
I % i v
(8.16)
establecemos la continuidad paramtrica haciendo coincidir las derivadas paramtricas de las partes contiguas de la curva en sus extremos comunes. La continuidad paramtrica de orden cero, representada como continuidad C", significa que las curvas se encuentran, Es decir, los valores de.r, j> y z evaluados en u en la primera parte de la curva son guales, respectivamente, a los valores de x,y y z evaluados en u, en la siguiente parte de la curva. La continuidad paramtrica de primer orden, referenciada como continuidad C, significa que las primeras derivadas (lneas tangentes) de las funciones de las coordenadas de las Ecuaciones 8.16 de dos partes sucesivas de la curva son iguales en su punto de unin. La continuidad paramtrica de segundo orden, o continuidad C , significa que tanto la primera como la segunda derivada paramtrica de las dos partes de la curva son iguales en la interseccin. Las condiciones de continuidad paramtrica de orden superior se definen de forma similar. La Figura 8.19 muestra ejemplos de continuidad C , C y C . Con continuidad paramtrica de segundo orden, las tasas de cambio de los vectores tangente de las partes con conexin son iguales en su interseccin. Por tanto, la transicin de las lneas tangentes es suave de una parte de la curva a la siguiente (Figura 8.19(c)). Pero con continuidad paramtrica de primer orden, la lasa de cambio de los vectores tangentes de las dos partes pueden ser bastante diferentes (Figura 8.19(b)), de modo que las formas generales de las dos partes adyacentes pueden cambiar abruptamente. La continuidad paramtrica de primer orden es a menudo suficiente para la digitalizacin de dibujos y para algunas aplicaciones de diseo, mientras que la continuidad de segundo orden es til para establecer las trayectorias de animacin de movimiento de una cmara y para muchos requisitos de C'AD de precisin. Una cmara desplazndose segn la trayectoria curva de la Figura 8.l9(b) con incrementos iguales en el parmetro u experimentara un cambio abrupto en la aceleracin en la frontera de las dos partes, produciendo una discontinuidad en la secuencia de movimientos. Pero si la cmara estuviese desplazndose segn la trayectoria de la Figura 8.l9(c), la secuencia de cuadros del movimiento sufrira una transicin suave en la frontera.
2 2 1 2
435
FIGURA 8.20. Tres puntos de control ajustados mediante dos partes de curva unidas con (a) continuidad paramlrica y con (b) continuidad geomtrica, en la que el vector tangente de la curva C\ en el punto P, tiene una mayor magnitud que el vector tangente de la curva C, en P,.
La continuidad geomtrica de orden cero, descrita como continuidad G , es la misma que la continuidad paramtrica de orden cero. Es decir, dos partes sucesivas de la curva deben tener las mismas coordenadas en el punto frontera. La continuidad geomtrica de primer orden, o continuidad G , significa que las primeras derivadas paramtricas son proporcionales en la interseccin de dos partes sucesivas. Si hacemos referencia a la posicin paramlrica en la curva como P(w), la direccin del vector tangente P'(w), pero no necesariamente su magnitud, ser la misma en dos partes sucesivas de la curva en su punto comn con continuidad G . La continuidad geomtrica de segundo orden, o continuidad G , significa que tanto la primera como las segundas derivadas paramtricas de las dos partes de la curva son proporcionales en su frontera. Con continuidad G~, las curvaturas de dos partes de la curva coincidirn en el punto de unin. Una curva generada con condiciones de continuidad geomtrica es similar a una generada con continuidad paramtrica, pero con ligeras diferencias en la forma de la curva. La Figura 8.20 proporciona una comparacin de las continuidades geomtrica y paramtrica. Con continuidad geomtrica, la curva se desplaza hacia la parte con mayor magnitud en su vector tangente.
1 1 2
Especificaciones de splines
Existen tres mtodos equivalentes para especificar una representacin de spline concreta, dado el grado del polinomio y los puntos de control: (1) Podemos establecer el conjunto de condiciones en la frontera que se imponen en el spline; o (2) podemos establecer la matriz, que caracteriza el spline; o (3) podemos establecer el conjunto de Junciones de combinacin (o Junciones base) que determinan cmo las restricciones especificadas en la curva se combinan para calcular los puntos de la trayectoria de la curva. Para mostrar estas tres espeficaciones equivalentes, suponga que tenemos la siguiente representacin poiinmica cbica paramtrica para la coordenadas a lo largo de la trayectoria de una parte de una curva con spline:
0<u< 1
(8,17)
Las condiciones de la frontera de esta curva se pueden establecer en los puntos extremos .v(0) y x(\) y en las primeras derivadas paramtricas en los puntos extremos: x'(0) y x'(\). Estas cuatro condiciones de la frontera son suficientes para determinar los valores de los cuatro coeficientes a , b c y d . A partir de las condiciones de la frontera, podemos obtener la matriz que caracteriza esta curva con splines reescribiendo en primer lugar la Ecuacin 8.17 como un producto matricial:
x xt x x
436
xUi) = \u
I]
i
=U C (818)
en el que U es la matriz fila con las potencias del parmetro u y C es la matriz columna de coeficientes. Utilizando la Ecuacin 8. 1 8, podemos escribir las condiciones en la frontera en forma matricial y resolver para la matriz de coeficientes C de este modo, C = M
gcm spfine
geom
(8.19)
donde M es una matriz columna de cuatro elementos que contiene los valores de las restricciones geomtricas (condiciones en la frontera) del spline, y M es la matriz de tamao 4 por 4 que transforma los valores de las restricciones geomtricas en los coeficientes del polinomio y proporciona una caracterizacin de la curva con splines. La matriz M contiene las coordenadas de los puntos de control y otras restricciones geomtricas que se hayan especificado. Por tanto, podemos sustituir la matriz C de la Ecuacin 8.18 para obtener:
S/IIW Bmm
x(n) N V m . \ l
m
g e n m
(8.20)
La matriz M^//> que caracteriza una representacin de un spline, a veces llamada matriz base, es particularmente til para transformar una representacin de un spline a otra. Finalmente, podemos desarrollar la Ecuacin 8.20 para obtener una representacin polinomial de la coordenada x en trminos de los parmetros de las restricciones geomtricas g como las coordenadas de los puntos de control y la pendiente de la curva en los puntos de control:
h
-v(") = ^ r B F ( )
(8,21)
Los polinomios BF (w), con k = 0, 1,2, 3, se denominan funciones de combinacin o funciones base porque combinan (funden) los valores de las restricciones geomtricas para obtener las coordenadas a lo largo de la curva. En las secciones siguientes, exploraremos las caractersticas de varias curvas y superficies con splines que son tiles en aplicaciones de grficos por computadora, incluyendo la especificacin de sus representaciones con matriz y con funcin de fundido.
4
(8.22)
Los parmetros de superficie u y v a menudo varan dentro del rango de 0 a I, pero este rango depende del tipo de curvas con splines que utilicemos. Un mtodo para designar los puntos de control tridimensionales consiste en seleccionar valores de la altura por encima de una malla bidimensional de puntos sobre un plano de tierra.
437
FIGURA 8.21. Modificacin de una parte de una superficie utilizando curvas de recorte.
FIGURA 8.22. Interpolacin con splines cbicos continuos por tramos de n + I puntos de control,
k = 0, 1,2,. . ., n
438
En la Figura 8.22 se muestra un ajuste de interpolacin cbica de estos puntos. Podemos describir el polinomio cbico paramtrico que hay que ajustar entre cada par de puntos de control con el siguiente conjunto de ecuaciones: .\{u) = a M" + h u -t c u + d
y x x 2 x
y(u) = a u + b u + c u +
y y y
(0 < u < I)
:
(8.23)
z(u) = a i? + b.ir +
:
cm
+ d
Para cada una de estas tres ecuaciones, necesitamos determinar los valores de los cuatro coeficientes a. />, c y d de la representacin polinmica de cada una de las n partes de la curva, entre los n + I puntos de control. Macemos esto estableciendo sullcientes condiciones en los lmites en los puntos de control entre partes de la curva, para que podamos obtener los valores numricos de todos los coeficientes. En las siguientes secciones, estudiaremos mtodos habituales para establecer las condiciones en los limites de los splines cbicos de interpolacin.
Aunque los splines cbicos naturales son un modelo matemtico del spline de generacin de borradores, tienen una desventaja principal. Si la posicin de cualquiera de los puntos de control se modifica, la curva entera se ve afectada. Por tanto, los splines naturales cbicos no permiten control local, por lo que no podemos reestructurar parle de la curva sin especificar un conjunto totalmente nuevo de puntos de control. Por esta razn, se han desarrollado otras representaciones para un spline cbico de interpolacin.
Interpolacin de Hermite
Un spline de Hermite (denominado as en honor de un matemtico francs llamado Charles Hermite) es un polinomio de interpolacin cbico por tramos con una tangente especfica en cada punto de control. A diferencia de los splines cbicos naturales, los splines de Hermite se pueden ajustar localmcnte porque cada parte de la curva slo depende de las restricciones de sus puntos extremos. Si P (M) representa una funcin paramtrica cbica de punto para la parte de la curva entre los puntos de control P A y P + |, como se muestra en la Figura 8.23, entonces las condiciones en los lmites que definen esta parte de curva de Hermite son:
8.9
439
Pin) = M
M ;())
P*+ i
FIGURA 8.23. Funcin paramlrica de punto P(u) para una parle de curva de llcrmite emre los puntos de control p y p ,
A H
p () =
p.
(8.24)
P(D = P . . ,
P'(0) = D p .
P'd) = Dp.
A + I
donde Dpi y Dp,, especifican los valores de las derivadas paramtricas (pendientes de la curva) en los puntos de control p y p, |, respectivamente. Podemos escribir el vector equivalente a las Ecuaciones 8.23 para esta parte de la curva de Hermite como:
P(w) = a w
J
+ bw
3 x
+ cw + d,
2 x t x
0 < u < 1
(8.25)
donde la componente .v de P(w) es x{u) = a w + b u + c u + d , y de forma similar para las componentes y y z. La matriz equivalente a la Ecuacin 8.25 es:
a
b
i
(8.26)
P ' ( m ) = [3m
2 U
01
(8.27/
Sustituyendo los valores de los puntos extremos 0 y I en el parmetro u de las dos ecuaciones anteriores, podemos expresar las condiciones 8.24 de Hermite en los lmites en forma matricial: p, p-, D
P l
ro
il
[al 1) c d
(8.28)
l i l i 0 3 0 2 1 1 0 0
Resolviendo esta ecuacin para los coeficientes de los polinomios, tenemos: [a] b c d 0 I 0 3 0 1 0 2 0 1 1 1 1 0
D
f -i
p. Dp P*
2 - 2 1 1 -3
(
p. -1 DP, DP,,,
P.
(8.29)
3 0
-2 0
0
1
1 0 0
Dp, DP..,
1 0
440
CAPTULO 8
donde M/,, la matriz de Hermite, es la inversa de la matriz de restricciones en los lmites. La Ecuacin 8.26 se puede escribir por tanto en funcin de las condiciones en el lmite como:
P( ) = [
M
3 W
IJ-M
P* . Dp
t
(8.30)
Finalmente, podemos determinar las expresiones de las funciones de combinacin de los polinomios de Hermite, H (u) con k = 0, 1, 2, 3, realizando las multiplicaciones de las matrices de la Ecuacin 8.30 y agrupando los coeficientes de las restricciones en los lmites para obtener la forma polinmica:
k
+ Dp +,(w + u )
4
= p HM
k
P * i Hy + Dp, H, + Dp,+ , H
(831)
La Figura 8.24 muestra la forma de las cuatro funciones de combinacin de Hermite. Los polinomios de Hermite pueden ser tiles en algunas aplicaciones de digitalizacin en las que puede que no sea demasiado difcil especificar o aproximar las pendientes de la curva. Pero en la mayora de los problemas de grficos por computadora es ms til generar curvas con splines que no requieran la introduccin
1
0.8
i-
0,6 :
Mr
.2 u
-0.2
(d)
441
de los valores de las pendientes de la curva u otra informacin geomtrica, adems de las coordenadas de los puntos de control. Los splines cardinales y los splines de Kochanek-Bartels, estudiados en las dos secciones siguientes, son modificaciones de los splines de Hermite que no requieren la introduccin de los valores de las derivadas de la curva en los puntos de control. Los procedimientos para estos splines calculan las derivadas paramtricas a partir de las coordenadas de los puntos de control.
Splines cardinales
Al igual que los splines de Hermite, los splines cardinales son polinomios de interpolacin por tramos cbicos con tangentes especificas en los puntos extremos en los lmites de cada seccin de la curva. La diferencia es que no introducimos los valores de las tangentes en los puntos exiremos. En un spline cardinal, la pendiente en el punto de control se calcula a partir de las coordenadas de los dos punios de control adyacentes. Una seccin de un spline cardinal queda completamente determinada con cuatro puntos de control consecutivos. Los puntos de control centrales son los puntos extremos de la seccin, y los otros dos puntos se utilizan en el clculo de las pendientes en los puntos extremos. Si tomamos P(//) como la representacin de la funcin de punto paramtrica cbica de la seccin de curva entre los puntos de control p y p*, como en la Figura 8.25, entonces los cuatro puntos de control desde p , hasta p*., se utilizan para establecer las condiciones en los lmites de la seccin de spline cardinal de este modo:
A A
P (0) = p,
p'<o> = ^ i - n ( P'(])
P l
.-p
l l
>
< >
H n
I(i-,)(p
l 3
- )
P i
Por tanto, las pendientes en los puntos de control p y p+, se toman proporcionales, respectivamente, a las cuerdas p ,p ,, y p^p^ (Figura 8.26). El parmetro / se denomina parmetro de tensin, ya que controla cmo de flojo o apretado se ajusta el spline cardinal a los puntos de control de entrada. La Figura 8.27 muestra la forma de una curva cardinal con un valor muy pequeo y con un valor muy grande de la tensin /. Cuando / = 0, esta clase de curvas se denomina splines de C'almull-Rom, o splines de Overhauser.
t 4 A l
pon P* i
i
P*-1
Pt + 2
FIGURA 8.25. Funcin paramtrica de punto P(w) de una seccin de spline cardinal entre los puntos de control p y p .
A i H
P* * Pt
FIGURA 8.26. Los vectores tangentes en los puntos extremos de una seccin de spline cardinal son paralelos a las cuerdas formadas con los puntos de control vecinos (lneas discontinuas).
r>
(Curva ms cerrada)
FIGURA 8.27. Efecto del parmetro de tensin sobre la forma de una seccin de spline cardinal.
442
-0.2
(a)
FIGURA 8.28. Funciones de combinacin de splines cardinales con / = 0 (.v = 0.5). Utilizando mtodos similares a los utilizados para los polinomios de Hermite, podemos convertir las condiciones 8.32 de los lmites a su forma matricial.
P* P. .
+
(8.33)
9m
2-.v
s-3
.v-2
3-2J
s (8.34) 0 0
m
-s 0
0 1
s 0
443
= P * - , C A R ( ) + p* C A R , ( w ) + p
0 W A
4 + l
donde los polinomios CAR () con A = 0, I, 2, 3 son las funciones de combinacin de los splines cardinales. La Figura 8,28 proporciona un dibujo de las funciones base para los splines cardinales con / = 0. En las Figuras 8.29, 8.30 y 8.31 se proporcionan ejemplos de curvas producidas con las funciones de combinacin de splines cardinales. En la Figura 8.29, se dibujan cuatro secciones de un spline cardinal para formar una curva cerrada. La primera paite de la curva se genera utilizando el conjunto de puntos de control p, , Pi. fr* P i K ' segunda curva se produce con el conjunto de puntos de control {p,, p , p p}, la tercera curva tienen los puntos de control p , p, p , p,} y la ltima seccin de la curva tiene los puntos de control {p , p , p p . En la Figura 8.30, se obtiene una curva cerrada con una nica seccin de spline cardinal cambiando la posicin del tercer punto de control a la posicin del segundo punto de control. En la Figura 8.31, se produce una seccin de spline cardinal que se autointersecta estableciendo la posicin del tercer punto de control muy cerca de la posicin del segundo punto de control. La aulointerseccin que resulta es debida a las restricciones en la pendiente de la curva en los puntos extremos p. y p .
( a 2 : 0 3 0 : 2
6 '5
4
3 2
II
:la i
-1
. 1 . . . . 1 , 4 6
, . , 1 ,_ i
1 )
i
nt)
Jf
i_
FIGURA 8.29. Una curva cerrada con cuatro secciones de spline cardinal, obtenida con una permutacin circular de los punios de control y con un parmetro de tensin t = 0.
10 8 6
4
Q
P. P2
=
' ' 1 0
2
'
I 4
l_J
I 6
I 8
l_J
iP 10
FIGURA 8.30. Un bucle de spline cardinal producido con unos puntos extremos de la curva en la misma posicin en coordenadas. Se asigna el valor 0 al parmetro de tensin.
444
r-
2.25 '-
\t
2.00 r 1.75
7
10
P*
FIGURA 8.31. Una parte de una curva con spline cardinal que se auloinlcrsecta producida con posiciones de los puntos extremos de la curva muy prximos en el espacio. El valor del parmetro de tensin se establece en el valor 0.
Splines de Kochanek-Bartels
Estos polinomios de interpolacin cbicos son extensiones de los splines cardinales. Se introducen dos parmetros adicionales en las ecuaciones de las restricciones que definen los splines de Kochanek-Bartels para proporcionar mayor flexibilidad en el ajuste de las formas de las secciones de la curva. Dados cuatro puntos de control consecutivos, etiquetados como p_|, p , p ,, y p d e f i n i m o s las condiciones de los lmites de una seccin de curva de Kochanek-Bartels entre p y p ,, del modo siguiente:
A k 4 A A
P(()) = p
P(l) = P
p
4frI
'< ,n =
+ (l-/')(l + c)(p, -p )|
( l A
(SiJ6)
^*U=^(l-/)|U/0(l r)p
+
t ( |
-pJ
P i M
+ (|-/7)(l- -)(p^-
)|
donde / es el parmetro de tensin, h es el parmetro de desplazamiento (bias) y c es el parmetro de continuidad. En la formulacin de Kochanek-Bartels, las derivadas paramtricas podran no ser continuas en los lmites de las secciones. El parmetro de tensin / se interpreta del mismo modo que en la formulacin del spline cardinal; es decir, controla lo suelto o apretado de las secciones de la curva. El parmetro de desplazamiento. A, se utiliza para ajustar la curvatura en cada extremo de una seccin, para que las secciones de la curva se puedan desplazar hacia un extremo o hacia el otro (Figura 8.32). El parmetro c controla la continuidad del vector tangente en los lmites de las secciones. Si a c se le asigna un valor distinto de cero, existe una discontinuidad en la pendiente de la curva en los lmites de las secciones. Los splines de Kochanek-Bartels se disearon para modelar trayectorias de animacin. Concretamente, los cambios bruscos en el movimiento de un objeto se pueden simular con valores distintos de cero en el parmetro c. Estos cambios de movimiento se utilizan en dibujos animados, por ejemplo, cuando un personaje de dibujos animados se detiene rpidamente, cambia de direccin o colisiona con algn otro objeto.
445
P 2
p
v _yPi b<Q
> 1
* ^ y P i b>0
PV^*P-
FIGURA 8 .32. Efecto del parmetro de dcsplazamiento sobre la forma de una seccin de un spfine de Kochanek-Bartels.
P ( W ) = p *
* > ) '
0< <1
W
(8.37)
Las funciones de combinacin de Bzier BEZ (w) son los polinomios de Berstein,
4(1
BEZ*(w) =
C(A/,*)/(I - )""*
(8.38)
donde los parmetros C (w, k) son los coeficientes binomiales: C(n,k) = ^ k\(n-k)\ (8.39)
La Ecuacin vectorial 8.37 representa un sistema de tres ecuaciones paramtricas en las coordenadas individuales de la curva:
*() = * B E Z
t t
(8.40)
z(w) = z B E Z
4 t
*=0
446
CAPITULO 8
En la mayora de los casos, una curva de B/ier es un polinomio de un grado menos que el nmero de puntos de control designados: tres puntos generan una parbola, cuatro puntos una curva cbica, y asi sucesivamente. La Figura 8.33 muestra la apariencia de algunas curvas de B/ier para varias selecciones de puntos de control en el plano xy (z = 0). Con ciertas posiciones de los puntos de control, sin embargo, obtenemos polinomios de B/ier degenerados. Por ejemplo, una curva de B/ier generada con tres puntos de control colineales es un segmento de lnea recta. Y un conjunto de puntos de control que estn todos en la misma posicin producen una curva de B/ier que es un nico punto. Se pueden utilizar clculos recursivos para obtener los valores sucesivos de los coeficientes binomiales del siguiente modo: C(n.k)= ~ C(n,k -1) k para n > k. Tambin, las funciones de combinacin de B/ier satisfacen la relacin recursiva, B E Z * = (I - u)BEZ donde B E Z = M* y B E Z
(U kj n k+ l
(SAI)
,(*/) + // BEZ,_,-,(),
n> k > 1
(8.42)
= (1 - f.
Pl
Pl
P2
(e) FIGURA 8 . 3 3 . I jcmplos de curvas de Bzier bidimcnsionales generadas con tres, cuatro y cinco puntos de control. Las lincas discontinuas conectan los puntos de control.
447
FIGURA 8.34. Una curva de Bzier visualizada mediante el programa de ejemplo. trayectoria de la curva. Estos valores se pasan al procedimiento b z i e r , y se dibujan las posiciones de los pixeles utilizando las subrutinas de dibujo de puntos de OpenGL. De forma alternativa, podramos haber aproximado la trayectoria de la curva con segmentos de lnea recta, utilizando menos puntos. En la Seccin 8.17 se estudian mtodos ms eficientes para generar las coordenadas a lo largo de la trayectoria de una curva con splines. En este ejemplo, los lmites de las coordenadas universales se establecen para que se visualicen slo los puntos de la curva dentro del visor (Figura 8.34). Si quisiramos tambin dibujar los puntos de control, el grafo de control, o el armazn convexo, necesitaramos ampliar los lmites de la ventana de recorte en coordenadas universales.
<GL/glut.h> <stdlib.h> <math.h> el tamao i n i c i a l = 600, de la ventana 600; de recorte en coordenadas universales. de v i s u a l i z a c i o n . */
Establece
GLaizei /*
winWidth el = =
winHeight la
ventana = =
*/
GLfloat QLfloat
xwcMax ywcMax
50.0; 50.0;
{ x, y, z;
void /*
init
Establece
glClearColor
1.0,
void plotPoint
(wcPt3D b e z C u r v e P t )
\
glBegin glEnd ( (GL_POINTS); (bezCurvePt.x, bezCurvePt.y); ); glVertex2f
/*
Calcula
los
coeficientes (GLint n,
binomiales GLint * C)
C para un v a l o r dado de
n.
*/
I^^^^^^^^P
GLint k, j;
void binomialCoeffe
^^^^^^^^^^^^^^^
:
f o r (k = 0;
/* C for [k] (j
k <= n;
k++l
C [k] C ik]
( j - n - k; /- j ;
ir+)
^^^^^^^^^^^^^^^^^^^^^^^
void computeBezPt (GLfloat u, wcPt3D * bezPt, GLint nCtrlPts, wcPt3D * G L i n t k, GLfloat bezPt->x /* n nCtrlPts 1; ctrlPts, G L i n t * C)
Calcula
funciones de */
k++)
- u,
n - k);
449
void b e z i e r
(wcPt3D
ctrlPts,
GLint
nCtrlPts,
GLint nBezCurvePti
*C,
Reserva
los
coeficientes
binomiales
*/
new G L i n t
1,
(bezCurvePt);
void /*
deben d i b u j a r a
GLint wcPt3D
nCtrlPts ctrlPte
[4]
4, =
-40.0, -200.0, //
glClear
Borra
la ventana de visualizacin.
(1.0,
//
Establece
el
color
de
los
puntos
en
rojo
(ctrlPts, ( ) ;
nCtrlPts,
nBezCurvePts) ;
void
winReshapeFcn
(GLint
newWidth,
GLint
newHeight)
1
/* M a n t i e n e una (0, 0, relacin de aepeto de valor newHeight); 1.0. */ glViewport newHeight,
(xwcMin,
(GL_COLOR_BUFFER_BIT);
}
v o i d main (int arge, char** argv)
450
CAPTULO 8
glutlnit
(&argc,
gliltJnitDisplayMode
GLDT_RGB ;
(winWidth, ("Curva de
(displayFcn) (winReshapeFcn);
P(0) = p
PCD-P.
( S A > )
Los valores de las primeras derivadas paramtricas de una curva de Bzier en los puntos extremos, se pueden calcular a partir de las coordenadas de los puntos de control del siguiente modo: P'(0) = -np + p,
t
( Ptt
En estas expresiones, vemos que la pendiente en el comienzo de la curva tiene la direccin de la lnea que une los dos primeros puntos de control y la pendiente en el extremo final de la curva tiene la direccin de la lnea que une los dos ltimos puntos extremos. De forma similar, las segundas derivadas paramtricas de una curva de Bzier en sus puntos extremos se calcula como sigue:
P"(l) = / ! ( - D K R . - 2 - P , ,)-(P , - p ) J Otra propiedad importante de cualquier curva de Bzier es que se encuentra dentro del armazn convexo (polgono convexo) de los puntos de control. Esto se deriva del hecho de que las funciones de combinacin de Bzier son todas positivas y su suma es siempre 1, BEZ >)=1
4
(8.46)
de forma que cualquier punto de la curva es simplemente la suma ponderada de los puntos de control. La propiedad del armazn convexo de una curva de Bzier garantiza que el polinomio sigue suavemente los puntos de control sin oscilaciones errticas.
451
9a
FIGURA 8.35. Una curva de Bzier cerrada generada especificando el primer y el kimo punto de control en la misma posicin.
FIGURA 8.36. Se puede conseguir que una curva de Bzier pase ms cerca de una posicin dada asignando mltiples puntos de control a dicha posicin.
puntos de control en una nica posicin proporciona ms peso a dicha posicin. En la Figura 8.36, una nica posicin de coordenadas se introduce como dos puntos de control y la curva resultante se desplaza hacia las proximidades de esta posicin. Podemos ajustar una c u n a de Bzier a cualquier nmero de puntos de control, pero esto requiere el clculo de funciones polinmicas de grado superior. Cuando hay que generar curvas complicadas, stas se pueden formar uniendo varias secciones de curvas de Bzier de menor grado. La generacin de secciones de curvas de Bzier ms pequeas tambin proporciona un mejor control local sobre la forma de la curva. Ya que las curvas de Bzier tienen la importante propiedad de que la tangente a la curva en un punto extremo tiene la direccin de la lnea que une aquel punto extremo con el punto de control adyacente. Por tanto, para obtener continuidad de primer orden entre las secciones de la curva, podemos seleccionar los puntos de control p y p, para la siguiente seccin de la curva de forma que estn sobre la misma lnea que los puntos de control P*-i y de la parte anterior (Figura 8.37). Si la primera seccin de la curva tiene // puntos de control y la sigeme seccin tiene n' puntos de control, entonces hacemos coincidir las tangentes a la curva colocando el punto de control p, en la posicin
P ^ + ^ P ^ - P n - l )
(H.47)
Para simplitlar la colocacin de p , , podemos requerir slo continuidad geomtrica y colocar p,. en cualquier sitio sobre la lnea que une p. , y p. Obtenemos continuidad C utilizando las expresiones de las Ecuaciones 8.45 para emparejar las segundas derivadas paramtricas de las dos partes de Bzier adyacentes. Esto establece una posicin para el punto de control p , adems de las posiciones lijadas para p- y p que necesitamos para obtener continuidad & y C . Sin embargo, requerir continuidad de segundo orden para las secciones de la curva de Bzier puede ser una restriccin innecesaria. Esto es particularmente cierto en curvas cbicas, que tienen slo cuatro puntos de control en cada parte. En este caso, la continuidad de segundo orden tija la posicin de los tres primeros puntos de control y nos deja slo un punto para que podamos ajustar la forma del segmento de curva.
: 1 ? r
452
CAPTULO 8
FIGURA 8.37. Curva de aproximacin por tramos formada por dos secciones de Bzier. La continuidad de orden cero y de primer orden se logra en las dos secciones de la curva estableciendo p = p y definiendo p, sobre la lnea formada por los puntos p y p .
: 2
(c)
(d)
FIGURA 8.38. Las cuatro funciones de combinacin para curvas cbicas (n = 3).
453
funciones de combinacin para curvas de Bzier cbicas, obtenidas sustituyendo n = 3 en la Ecuacin 8.38, son:
BEZ = (1 - u?
W
BEZ
I>3
= 3w(l - $ = 3w-(l - u) = w?
(8.48)
BEZ BEZ
2 3
3 3
En la Figura 8.38 se proporcionan grficas de las cuatro funciones cbicas de fundido de Bzier. La forma de las funciones de combinacin determina la influencia de los puntos de control en la forma de la curva para los valores del parmetro u en el rango que vara desde 0 a I. Para u = 0, la nica funcin de fundido distinta de cero es B E Z q , que tiene el valor 1. Para u = 1, la nica funcin de fundido distinta de cero es B E Z (1) = I, Por tanto, una curva de Bzier cbica siempre comienza por el punto de control pt, y termina en el punto de control p . Las otras funciones, B E Z , , y B E Z , influyen en la forma de la curva para valores intermedios del parmetro w, de modo que la curva resultante tiende hacia los puntos p, y p . La funcin de fundido BEZ, tiene su mximo en u = 1/3, y B E Z en u = 2/3.
3 U 3 2 i 2 2 3
En la Figura 8.38 apreciamos que cada una de las cuatro funciones de combinacin es distinta de cero sobre todo el rango del parmetro u entre los puntos extremos. Por tanto, las curvas de Bzier no permiten control local de la forma de la curva. Si reposicionamos cualquiera de los puntos de control, se ve afeclada toda la curva. En los puntos extremos de la curva de Bzier cbica, las primeras derivadas (pendientes) paramtricas son:
P'(0) = 3(p, - p ),
0
P'(D = 3 ( P . i - p )
2
P"(0) = 6 ( p - 2 p , + p ),
o 2
P"<l) = 6 ( - 2 p + p )
P l 2 3
Podemos construir curvas complejas con splines utilizando una serie de secciones de curvas cbicas de Bzier. Utilizando expresiones para las derivadas paramtricas, podemos igualar las tangentes a la curva para lograr continuidad C entre las secciones de la curva. Y podramos utilizar las expresiones para las segundas derivadas para obtener continuidad C\ aunque esto nos deja sin opciones en la colocacin de los tres primeros puntos de control. Se obtiene una formulacin matemtica para la funcin de curva de Bzier cbica, desarrollando las expresiones polinmicas de las funciones de combinacin y reestructurando las ecuaciones como se indica a continuacin.
P
P(u) = l
3
l ] M tici
Pl
(8.49)
p p,
3
- 3
1
- 3
-6
3
0 0
0 0 0
(8.50)
Tambin podramos introducir parmetros adicionales que permitan ajustar la tensin y el desplazamiento de la curva como hicimos con los splines de interpolacin. Pero los splines B que son ms verstiles, as como los splines / j , se proporcionan a menudo con esta capacidad.
454
CAPTULO 8
P<^) = p , B E Z , ( v ) B E Z , ( / i )
i ; ( i i (
(8.51)
donde p especifica la localizacin de los (m + I) por (n + 1) puntos de control. La Figura 8.39 muestra dos dibujos de superficies de Bzier. Los puntos de control se unen mediante lneas discontinuas, y las lincas continuas muestran las curvas con // constante y v constante. Cada curva con u constante se dibuja variando v en el intervalo de 0 a 1, manteniendo en un valor fijo // dentro de este intervalo unitario. Las curvas con v constante se dibujan de forma similar. Las superficies de Bzier tienen las mismas propiedades que las curvas de Bzier y proporcionan un metodo conveniente para aplicaciones interactivas de diseo. Para especificar las posiciones de los puntos de control con coordenadas tridimensionales, podramos en primer lugar construir una cuadrcula rectangular en el plano xy de tierra. A continuacin, elegimos las alturas sobre el plano de tierra en las intersecciones de la cuadrcula como los valores de la coordenada z de los puntos de control. Los parches de superficie se pueden representar con polgonos y sombrear utilizando las tcnicas de sombreado expuestas en el Captulo 10. La Figura 8.40 muestra una superficie formada por dos secciones de superficie de Bzier. Como en el caso de las curvas, se garantiza una transicin suave de una seccin a otra estableciendo tanto continuidad de orden cero como de primer orden en la lnea lmite. La continuidad de orden cero se obtiene haciendo coincidir los puntos de control en los lmites. La continuidad de primer orden se obtiene seleccionando los puntos de control a lo largo de una lnea recta que recorre el lmite y manteniendo una relacin constante entre los segmentos de lnea colineales para cada conjunto de puntos de control especficos de los lmites de las secciones.
/tJt
P<) = I p A >
pj
* * " S 9 m m
2<< / < /i + 1
(8.52)
donde pt define un conjunto de entrada de n -F 1 puntos de control. Existen varias diferencias entre esta for
mulacin con splines B y las expresiones de una curva con splines de Bzier. El rango de variacin del parmetro // ahora depende de cmo elijamos los otros parmetros de los splines B. Y las funciones de combina-
455
cin de los splines B B , son polinomios de grado d - 1, donde des el p a r m e t r o de grado. (A veces al parmeiro /se le llama orden del polinomio, pero esto puede confundir, ya que el trmino orden se utili/a a menudo tambin para indicar simplemente el grado del polinomio, que es d 1.) Al parmetro de grado dse le puede asignar cualquier valor entero dentro del rango que vara desde 2 hasta el nmero de puntos de conIrol n + 1. Realmente, podramos tambin establecer el valor del parmetro de grado en 1, pero entonces nuestra curva sera slo una grfica de puntos con los puntos de control. El control local en los splines B se logra definiendo las funciones de combinacin sobre subintervalos del rango total de variacin de u.
k
(a)
(b)
FIGURA 8.39. Superficies de B/ier en modelo almbrico contruidas con (a) nueve puntos de control dispuestos en una malla de tamao 3 por 3 y (b) diecisis puntos de control dispuestos en una malla de tamao 4 por 4. Las lineas discontinuas unen los puntos de control.
FIGURA 8.40. Un superficie de B/ier compuesta eonstruida con dos secciones de Bezier, unidas por la lnea lmite indicada. Las lneas discontinuas unen los puntos de control. La continuidad de primer orden se establece haciendo que la relacin entre la longitud /., y la longitud Z. sca constante para cada linea colineal de puntos de control en el limite entre las secciones de la superficie.
;
456
FIGURA 8.41. Modificacin loca! de una curva con sptines B. Cambiando uno de los puntos de control en (a) se genera la curva mostrada en (b), que slo se modifica en la vencindad del punto de control alterado. Las funciones de combinacin para las curvas con de Cox-deBoor: 1 0
k
sptines
it
si u <u<u traducir
(8.53)
donde cada funcin de fundido se define sobre d stibintervalos del rango total de variacin de //. Cada punto extremo de los subintervalos se denomina nudo, y el conjunto entero de los puntos extremos seleccionados de los subintervalos se denomina vector de nudos. Podemos elegir valores cualesquiera para los puntos extremos de los subintervalos con tal de que u <u,. Los valores de w y entonces dependen del nmero de puntos de control que seleccionemos, del valor que elijamos para el parmetro de grado d, y de cmo establezcamos los subintervalos (vector de nudos). Ya que es posible elegir los elementos del vector de nudos de modo que el resultado de la evaluacin de algunos denominadores de los clculos de Cox-deBoor sea nulo, esta formulacin asume que a cualquier trmino cuya evaluacin resulte 0/0 hay que asignarle el valor 0.
j v min
La Figura 8.41 muestra las caractersticas de control local de los splines B. Adems del control locah los splines B nos permiten variar el nmero de puntos de control utilizados para disear una curva sin cambiar el grado del polinomio. Y podemos incrementar el nmero de valores del vector de nudos para ayudar al diseo de la curva. Cuando se hace esto, sin embargo, debemos aadir puntos de control ya que el tamao del vector de nudos depende del parmetro /;. Las curvas con splines B tienen las siguientes propiedades: La curva polinmica tiene grado d 1 y continuidad C'
2
En los n + 1 puntos de control, la curva se describe con n + I funciones de combinacin. Cada funcin de fundido B se define sobre d subintervalos del rango total de variacin de zando por el nodo de valor u .
u k
El rango de variacin del parmetro u se divide en n + /subintervalos con los n 4- d 4- 1 valores especificados en el vector de nudos. Dado que los valores de los nodos estn etiquetados como {w, W, la curva con splines B resultante est definida nicamente en el intervalo que varia desde el valor de nudo u _ , hasta el valor de nudo w . (Algunas funciones de combinacin no estn definidas fuera de este intervalo.)
d n+l
Cada seccin de la curva con splines (entre dos valores de nodo sucesivos) se ve influenciada por d puntos de control.
8.12 Curvas can splines B Cualquier punto de control puede afectar a la forma de a lo sumo d secciones de la curva.
457
Adems, una curva con splines B se encuentra dentro del casco convexo de a lo sumo d + I puntos de control, de modo que los splines B estn ajustadamente ligados a las posiciones de entrada. Para algn valor de N del intervalo desde el valor tic nudo w , a w, . la suma sobre todas las funciones base es I:
rf H
(8.54)
Dadas las posiciones de los puntos de control y el valor del parmetro de grado d, entonces necesitamos especificar los valores de los nudos para obtener las funciones de combinacin utilizando las relaciones de reeurrencia 8.53. Hay tres clasificaciones generales de los vectores de nudos: uniforme, uniforme abierto y no uniforme. Los splines B se describen habitualmente segn la clase seleccionada de vector de nudos.
FIGURA 8.42. Funciones de combinacin de splines B peridieos para n ~ d = 3 y un vector de nudos uniforme y entero.
458
Los splines B uniformes tienen funciones de combinacin peridicas. Es decir, para valores dados de n y d, todas las funciones de combinacin tienen la misma forma. Cada funcin sucesiva de fundido es simplemente una versin desplazada de la funcin anterior: (X.55) donde Aw es el intervalo entre valores de nudo adyacentes. La Figura 8.42 muestra las funciones de combinacin de splines B uniformes y cuadrticos generados en el siguiente ejemplo para una curva con cuatro puntos de control.
Ejemplo 8 . 1
Para ilustrar la formulacin de las funciones de combinacin de splines B para un vector de nudos uniforme y entero, seleccionamos los valores de los parmetros n = d = 3. El vector de nudos debe contener n -h d +- \ = 7 valores de nudo: {0, 1 , 2 . 3 , 4 , 5 , 6 ! y el rango de variacin del parmetro u es de 0 a 6, con /; + d = 6 subintcrvalos. Cada una de las cuatro funciones de combinacin abarca d = 3 subintcrvalos del rango total de variacin de w, Utilizando las relaciones de recurrencia 8.53, obtenemos la primera funcin de fundido: para < u < 1 1(2- ) + 1(-1)(3-H),
M
Obtenemos la siguiente funcin peridica de fundido utilizando la relacin 8.55, sustituyendo // por u 1 en 5 , y desplazando las posiciones de comienzo hacia arriba una unidad:
0
i<4->>
Similarmente, las dos restantes funciones peridicas se obtienen desplazando sucesivamente 5,,, hacia la derecha: para 2 < M < 3 ^(M-2)(4-H) + ^0/-3)(5-M). para 3 < H < 4 para 4 < u < 5
459
En la Figura 8.42 se proporciona una grfica de las cuatro funciones peridicas y cuadrticas de fundido, que muestra la caraterstica local de los splines B. E^l primer punto de control se multiplica por la funcin de fundido # (w). Por tanto, el cambio de la posicin del primer punto de control slo afecta a la forma de la curva hasta // = 3. De forma similar, el ltimo punto de control influye en la forma de la curva con spltnes en el intervalo donde B est definida. La Figura 8.42 tambin muestra los lmites de la curva con splines B para este ejemplo. Todas las funciones existen en el intervalo que vara desde = 2 hasta w = 4. Por debajo de 2 y por encima de 4, no todas las funciones de combinacin existen. Este intervalo desde 2 a 4, es el rango de variacin de la curva polinmica, y el intervalo en el que la Ecuacin 8.54 es vlida. Por tanto, la suma de todas las funciones de combinacin vale 1 dentro de este intervalo. Fuera de este intervalo, no podemos sumar todas las funciones de combinacin, ya que no todas ellas estn definidas por debajo de 2 y por encima de 4. Ya que el rango de variacin de la curva polinmica que resulta es desde 2 a 4, podemos determinar el punto inicial y el punto llnai de la curva evaluando las funciones de combinacin en estos puntos para obtener:
(U X} n H
P , i = ^ P < , + P,>.
Pn=^(P +P,)
2
Por tanto, la curva comienza en el punto medio entre los dos primeros puntos de control y termina en el punto medio de los dos ltimos puntos de control. Tambin podemos determinar las derivadas paraintricas en el punto inicial y en el punto final de la curva. Tomando las derivadas de las funciones de combinacin y sustituyendo el parmetro // por su valor en los puntos extremos, encontramos que: Plni = Pi - Po. P 'im = ?^ - P:
La pendiente paramtrica de la curva en el punto inicial es paralela a la lnea que une los dos primeros puntos de control, y la pendiente paramtrica en el punto final de la curva es paralela a la lnea que une los dos ltimos puntos de control. En la Figura 8.43 se proporciona un dibujo de una curva con splines B cuadrlicos y peridicos para cuatro puntos de control situados en el plano xy.
Pl
P2
FIGURA 8.43. Un spline B cuadrtico y peridico ajustado a cuatro puntos de control situados en el plano xy.
En el ejemplo anterior, observamos que la curva cuadrtica comienza entre los dos primeros puntos de control y termina en un punto entre los dos ltimos puntos de control. Este resultado es vlido para los spli-
460
nes B cuadrticos y peridicos ajustados a cualquier nmero de punios de control distintos. Por lo general, en los polinomios de orden ms elevado, el punto de comienzo y el punto final son cada uno medias ponderadas de d - I puntos de control. Podemos aproximar a cualquier punto de control cualquier curva con spiines especificando dicho punto mltiples veces. Las expresiones generales de las condiciones en los lmites de los spiines B peridicos se pueden obtener volviendo a parametrizar las funciones de combinacin, de manera que el rango de variacin del parmetro u se transforme en el intervalo que vara desde 0 a 1. Las condiciones de comienzo y fin se obtienen entonces para u 0 y u = 1.
P(0)
-(Po+4p,+p )
2
P(D
7<P,+4p +ft)
2
P'(l)
FIGURA 8.44. Un spline B cbico por tramos, peridico y cerrado construido utilizando una especificacin cclica de cuatro puntos de control en cada seccin de la curva.
8.12
461
Estas condiciones en los lmites son similares a las de los splines cardinales: las secciones de la curva se definen con cuatro puntos de control y las derivadas paramtricas (pendientes) en el comienzo y en el final de cada seccin de la curva son paralelas a las cuerdas que unen los puntos de control adyacentes. La seccin de la curva con splines B comienza en una posicin cercana a p, y termina en una posicin cercana a p . Una formulacin matricial de un spline B cbico y peridico con cuatro puntos de control se puede escribir del siguiente modo:
:
Pn P. P P, donde la matriz del spline B para polinomios cbicos y peridicos es: -i 3 6 -3 I Esta matriz se puede obtener resolviendo los coeficientes en una expresin general polinomial cbica, utilizando las cuatro condiciones especficas en los limites. Tambin podemos modificar las ecuaciones del spline B para incluir un parmetro de tensin / (como en los splines cardinales). La matriz de un spline B peridico y cbico, en la que se incluye el parmetro de tensin /, es: -i 3 ' 6 -3/ ; 3 -6 -3 3 (8.57)
\2-9t
I2/-I8 0 6-2/
que coincide con M cuando / = 1. Obtenemos las funciones de combinacin de splines B peridicos y cbicos en el rango de variacin del parmetro desde 0 a 1 desarrollando la representacin matricial hasta la forma polinmica. Por ejemplo, utilizando el valor de tensin 1=1, tenemos: fi () = | ( l - ) \ o
n i M
0<w<l
2
e ( )=
ll M
(8.60)
&u(u) = y{-3u + 3 / r + 3 + l ) 6
462
nes B abiertos y uniformes, o simplemente splines B abiertos, el espaciado de los nudos es uniforme excepto en los extremos, en los que los valores de los nudos se repiten d veces. A continuacin se muestran dos ejemplos de vectores de nudos abiertos, uniformes y enteros que comienzan por el valor 0. {0, 0, 1, 2, 3, 3} {0, 0, 0, 0, 1, 2, 2, 2, 2} donde d = 2 y n = 3 (8.61) donde d = 4 y n = 4
Podemos normalizar estos vectores de nudos al intervalo que vara desde 0 a I del siguiente modo: {0, 0, 0.33, 0.67, 1, 11 donde d = 2 y n = 3 ^ ^
{ 0 , 0 , 0 , 0 , 0 . 5 , 1. i, I, 1} donde / = 4 y * = 4 Para valores cualesquiera de los parmetros dy //, podemos generar un vector de nudos abierto y uniforme con valores enteros utilizando los clculos: 0 jd +1 n-d + 2 para < j < d para d < j < n para / > n (8,63)
para valores de j dentro del rango de variacin de 0 a n + d. Con esta asignacin, a los primeros d nudos se les asigna el valor 0 y los ltimos d nudos tienen el valor n d + 2. Los splines B uniformes tienen caractersticas que son muy similares a las de los splines de Bzier. De hecho, cuando d = n +1 (el grado del polinomio es w), los splines B son idnticos a los splines de Bzier, y lodos los valores de los nudos son 0 o 1. Por ejemplo, pan un spl/ne B abierto y cbico (d = 4) y cuatro puntos de control, el vector de nudos es: 0 , 0 , 0, 0. 1, 1. I. 1} La curva polinmica de un spline B abierto une los primeros con los ltimos puntos de control. Tambin, la pendiente paramtrica de la curva en el primer punto de control es paralela a la lnea recta formada por los dos primeros puntos de control, y la pendiente paramtrica en el ltimo punto de control es paralela a la lnea definida por los dos ltimos puntos de control. Por tanto, las restricciones geomtricas para hacer coincidir las secciones de la curva son las mismas que las de las curvas de Bzier. Como en las curvas de Bzier, especificar mltiples puntos de control en la misma posicin en coordenadas desplaza cualquier curva con splines B ms cerca de dicha posicin. Ya que los splines B abiertos comienzan por el primer punto de control y terminan en el ltimo punto de control, se puede generar una curva cerrada estableciendo el primer punto de control y el ltimo en la misma posicin de coordenadas.
Ejemplo 8 . 2 Splines B a b i e r t o s , u n i f o r m e s y c u a d r t i c o s A partir de las condiciones 8.63 con d = 3 y n = 4 (cinco puntos de control), obtenemos los ocho valores siguientes del vector de nudos: g w ,i/ , M . w , % ity ! = {0, 0, 0, 1 , 2, 3, 3, 3
2 3 4 5
El rango total de variacin de tt se divide en siete subintervalos, y cada una de las cinco funciones de combinacin B estn definidas sobre tres subintervalos, comenzando por el nudo u . Por tanto, 5, est definido desde u = 0 hasta = 1, B est definido desde H, = 0 hasta u = 2 y B est definido desde // = 2 hasta u- 3. Las expresiones explcitas polinmicas de las funciones de combinacin se obtienen a partir de las relaciones de recurrencia 8.53 y son las siguientes:
u k { ) u A A > 3 4
B {u)
ll}
=
1
(\-u)
M(4-3M) 2
2
<2-)
fi,,( ) =
M
-H(2-H)+-(-1)(3-M) 2 2
1SM<2
2 < < 3
464
\<u<2 (3-w)(3i#-5) B
4
2<w<3 2<u<3
= (i/-2)
La Figura 8.45 muestra la forma de estas cinco funciones de combinacin. Se observan de nuevo las caractersticas locales de los splines B. La funcin de fundido f es distinta de cero slo en el subinlervalo que vara de 0 a 1, de modo que el primer punto de control slo influye en la curva en este intervalo. De forma similar, la funcin B , es 0 fuera del intervalo que vara de 2 a 3, y la posicin del ltimo punto de control no afecta a la forma del comienzo ni a las partes medias de la curva.
O 4
Las formulaciones matricialcs de los splines B abiertos no se generan tan cmodamente como las de los splines B peridicos y uniformes. Esto es debido a la multiplicidad de los valores de los nodos en el comienzo y final del vector de nudos.
465
FIGURA 8.46. Un prototipo de helicptero, diseado y modelado por Daniel Langlois de SOFTIMAGE, Inc., Montreal, Quebec, Canad, utilizando 180.000 parches de superficie con splines B. La escena se sombre utilizando trazado de rayos, mapas de abultamienlos y mapas de rellexin. {Cortesa de Silicon Graphics, Inc.)
P(,v) =
Pt,A.,
(),.,
(8.64)
A-0A,0
Las superficies con splines B exhiben las mismas propiedades que sus curvas componentes con splines B. Una superficie se puede construir a partir de valores seleccionados para los parmetros de grado d y d que
u V9
establecen los grados de los polinomios ortogonales de la superficie en d - 1 y d - 1. Para cada parmetro u y v de la superficie, tambin podemos seleccionar valores para los vectores de nudos, que determinan el rango del parmetro en las funciones de combinacin. La Figura 8.46 muestra un objeto modelado con superficies con splines B.
v
(8.65)
La continuidad de primer orden {continuidadde tangente unitaria), G\ se obtiene requiriendo que los vectores tangente sean proporcionales:
J
8 p;. ( ) = P >
l 1 y
) ,
A>o
(8.66)
En este punto, las primeras derivadas paramtricas son proporcionales y los vectores unitarios tangentes son continuos a travs del nudo.
466
CAPTULO 8
P.l)
FIGURA 8.47.
P. " I
FIGURA 8.48.
Pi I
splines
beta.
P: -
FIGURA 8.49. bfeclo del parmetro /J,on la forma de una curva con splines beta. La continuidad de segundo orden (continuidad Je vector Je curvatura), G^, se impone con la condicin:
mn
donde a f} se le puede asignar cualquier nmero real y /3, > 0. El vector de curvatura! proporciona una medida de la cantidad que se dobla la curva en la posicin u Cuando /3, = I y fi, = 0, los splines beta se convierten en splines B. El parmetro /3, se denomina parmetro Je Jesplazamiento ya que controla el desplazamiento de la curva. Parfl \ > 1. la curva tiende a alisarse a la derecha en la direccin del vector unitario tangente en los nudos. Para ( < /3, < 1. la curva tiende a alisarse hacia la izquierda. El efecto de /3, sobre la forma de la curva con splines se muestra en la Figura 8.48. El parmetro /3 se denomina parmetro Je tensin ya que controla cmo de tenso o suelto se ajusta el spline al gralb de control. A medida que crece, la curva se aproxima a la forma del grafo de control, como se muestra en la Figura 8.4.
r :
*4
- 3 ( f t +
2/V+2/J;)
3 ( & + 2 / 3 f )
(8.68)
6( # - / ? , ) &+4<tf+A) 2
467
Obtenemos la matriz M del spline B cuando /, = 1 y f = 0. Y tenemos la matriz M de tensin del spline B (Ecuacin 8.59) cuando.
H 2 Hl
donde P define un conjunto de n + I puntos de control. Los parmetros 0) son los factores de ponderacin de los puntos de control. Cuanto mayor es valor de un ( concreto, tanto ms es atrada la curva hacia el punto de control p ponderado por aquel parmetro. Cuando lodos los factores de ponderacin tienen el valor I, tenemos la curva estndar con splines B. ya que el denominador de la Ecuacin 8.69 es entonces simplemente la suma de las funciones de combinacin, la cual toma el valor 1 (Ecuacin 8.54). Los splines racionales presentan dos ventajas importantes comparados con los splines no racionales. En primer lugar, proporcionan una representacin exacta de curvas cuadrticas (cnicas), tales como los crculos y las elipses. Los splines no racionales, que son polinomios, slo representan de forma aproximada las cnicas. Esto permite a los paquetes grficos modelar todas las formas de las curvas con una representacin, splines racionales, sin necesidad de una biblioteca de funciones de curvas para manejar formas de diseo diferentes. La segunda ventaja de los splines racionales es que son invariantes frente a las transformaciones de visualizaein (Seccin 7.8). Esto significa que podemos aplicar una transformacin de visualizacin a los puntos de control de una curva racional, y obtendremos la vista correcta de la curva. Los splines no racionales, en cambio, no son invariantes frente a una transformacin de visualizacin de la perspectiva. Ilabitualmenie. los paquetes de diseo tic grficos utilizan representaciones con vectores no uniformes de nudos para construir splines B racionales. Estos splines se denominan NURBS (nonuniform rational W-splines\ splines B racionales no uniformes), o NURBs. Las representaciones con coordenadas homogneas se utilizan en splines racionales, ya que el denominador se puede tratar como el tactor homogneo h en una representacin de cuatro dimensiones de los puntos de control. Por tanto, un spne racional se puede considerar como la proyeccin de un spline no racional de cuatro dimensiones sobre un espacio tridimensional. Por lo general, la construccin de una representacin con un spline B racional se realiza utilizando los mismos procedimientos que empicamos para obtener una representacin no racional. Dado el conjunto de puntos de control, el grado del polinomio, los factores de ponderacin y el vector de nudos, aplicamos las relaciones de redundancia para obtener las funciones de combinacin. En algunos sistemas CAD, construimos una seccin de una cnica especificando tres puntos de un arco. Una representacin de un spline racional en coordenadas homogneas se determina a continuacin calculando las posiciones de los puntos de control que generan el lipo de cnica seleccionado. Como ejemplo de la descripcin de secciones de cnicas con splines racionales, podemos utilizar una funcin de splines B cuadrticos {ti = 3), tres puntos de control y un vector abierto de nudos,
k k
0. 0, ,
U h l
que es el mismo que el del spline cuadrtico de Bzier. Despus establecemos las funciones de ponderacin en los valores:
468
CAPTULO 8
()</<!
(8.70)
P() =
Posteriormente, obtenemos las distintas cnicas (Figura 8.50) con los siguientes valores del parmetro r. r > 1/2, r = 1/2, r < 1/2, r = 0, ft), fi), > 1 o), = 1 < I o>, = 0 seccin de hiprbola seccin de parbola seccin de elipse segmento de lnea recta
Podemos generar un arco formado por un cuarto de un crculo unidad del primer cuadrante del plano y (Figura 8.5 1 ) estableciendo el valor de o, en eos <p y eligiendo los siguientes puntos de control: Po = ( 0 J ) , p, = ( U ) , p = (1 .0)
2
/
Lnea recta (r - O . o , = 0 )
FIGURA 8.50. Secciones de cnicas generadas utilizando varios valores del factor de ponderacin de splines racionales o),.
Elipse
(r<
1/2,
to, < l
Po=<0. 1
Pi = ( U )
Pj=
( L O ) *
469
Se puede obtener un crculo generando secciones en los otros tres cuadrantes utilizando puntos de control similares. O podramos producir un crculo completo a partir de la seccin del primer cuadrante utilizando transformaciones geomtricas en el plano xy. Por ejemplo, podemos reflejar el arco circular de un cuadrante segn los ejes x e y para obtener los arcos circulares de los otros tres cuadrantes. Esta es una representacin homognea de un arco circular unidad del primer cuadrante del plano xy.
U (u)~
h
fM
h(u)
\ ~" }
2u (8.72)
2
0
l+
Esta representacin homognea conduce a las ecuaciones paramtricas del crculo en el primer cuadrante.
xrr
x (u) h(u)
h
_\- \+u
u
2 ( 8 J 3 )
_2u_
2
h(u)
I + H
(8.74)
donde M es la matriz que caracteriza la representacin con splines y M^^, es la matriz columna con las restricciones geomtricas (por ejemplo, las coordenadas de los puntos de control). Para transformarla a una segunda representacin con la matriz del spline M , debemos determinar la matriz de restricciones geomtricas M que produce la misma funcin vectorial de punto para el objeto. Es decir,
spliw2 gcom2
Plu) = V M o
st>llne2
geom2
(8.75)
U M**a
Resolviendo en M^
(llll2
&om2 =
U M^, M
BCOmt
(8.76)
, tenemos: (8.77)
= M
, u : '
p , n i
Por tanto, la matriz requerida de transformacin que convierte la primera representacin con splines a la segunda es: M,,=M, : .M , ,
( wj ip/ f
(8.78)
470
CAPTULO 8
Un spline B no uniforme no se puede canicleri/ar con una mairi/ general de splines. Pero podemos reorganizar la secuencia de nudos para convenir el spline B no uniforme en una representacin de Bzier. A continuacin la matriz de Bzier se puede convertir a cualquier otra forma. El siguiente ejemplo calcula la matriz de transformacin para convertir una representacin con spline B peridico y cbico a una representacin con spline de Bzier cbico.
-I
3 -3
3 -6 1
-3 3
I
0 0
-I 3 -3 1 4
3 -6 0
-3 3 3
1] 0 0 1 0 (8
o o
1 2 4 4 0 0 0 1
I
1
o
4 4 2 1
0 0 0
Y la matriz de transformacin para convertir desde una representacin de Bzier cbica a una representacin con spline B peridico y cbico es:
i
T-i
M
3 -6 3
-3 3
i]
0
)
3 -3 1 0
o o
0
0 . 2
o
0
(8.60)
\6
0 0 0
-7 -1
2 2
()] 0
2 - 1 0 2 - 7 6
Regla de Horner
El mtodo ms simple para evaluar un polinomio, aparte del clculo directo de cada trmino de forma sucesiva, es la regla de lamer, que realiza los clculos mediante una lctorizacin sucesiva. Esto requiere una multiplicacin y una suma en cada paso. Para un polinomio de grado n. hay n pasos.
47 1
A modo de ejemplo, suponga que tenemos una representacin con spline cbico donde la coordenada x se expresa como: x(u) = ajf + hM + c\u + d
2 x
(8.81)
Las expresiones para las coordenadas y y z son similares. Para un valor concreto del parmeiro % evaluamos este polinomio en el siguiente orden factori/ado. x(n) = [(a u + b )u + cjw + A
x x
(8.82)
El clculo de cada valor de v requiere tres multiplicaciones y tres sumas, de modo que la determinacin de cada posicin en coordenadas (v, \\ z) sobre la curva con spline cbico requiere nueve multiplicaciones y nueve sumas. Se podran aplicar manipulaciones adicionales de factorizacin para reducir el nmero de clculos requeridos por el mtodo de Horner, especialmente en el caso de polinomios de mayor orden (grado mayor que 3). Pero la determinacin repetida de las posiciones en coordenadas sobre el rango de una funcin de spline, se puede calcular mucho ms rpidamente utilizando clculos de diferencias hacia delante o mtodos de subdivisin de splines.
(8.83)
Por tanto, una vez que conocemos el incremento y el valor de v, de un paso cualquiera, obtenemos el valor siguiente simplemente aadiendo el incremento a X , El incremento Av en cada paso se denomina diferencia hacia delante. En el caso de la representacin paramtrica de la curva, obtenemos las diferencias hacia delante a partir de los intervalos que seleccionamos para el parmetro u. Si dividimos el rango total de variacin de u en subintervalos de tamao lijo A entonces dos valores sucesivos de X son x ~ x(u ) yx ^ - x(u ,,), donde:
k k k k } t
" A + I - %+-*|
A = 0, 1 , 2 , . . .
(8.84)
y"o=0. Para ilustrar este mtodo, consideraremos en primer lugar la representacin polinmica x(u) ~ a u + b para las coordenadas a lo largo de una curva con spline lineal. Dos valores sucesivos de la coordenada v se representan como:
y t
Xi = a u + b
x k
(8,85, j | = ".('A + o) + % Restando las dos ecuaciones, obtenemos la siguiente diferencia hacia delante: &Xk k-\ " k Sfe
= x x =
(8.86)
En este caso, la diferencia hacia adelante es una constante. En el caso de polinomios de orden ms elevado, la diferencia hacia adelante es ella misma una funcin polinmica del parmetro //. Esta diferencia hacia adelante polinmica tiene un grado menos que el polinomio original. En la representacin con splines cbicos de la Ecuacin 8.81, dos valores sucesivos de la coordenada .v tienen las representaciones polinmicas:
=a ul+b u; + r w + <
t t
f 4
472
CAPTULO 8
(8.88)
que es una funcin cuadrtica del parmetro u . Ya que Ax es una funcin polinmica de //, podemos utilizar el mismo procedimiento incremcntal para obtener valores sucesivos de Ax . lis decir,
k
j M ^ , = Ax +
k
(0,89)
(8.90)
Repitiendo este proceso una vez ms, podemos escribir, A ^ . ^ A ^ + A^ en la que la tercera diferencia hacia adelante es la expresin constante: A,** = 6a
x
(8.91)
8"
(8.92)
Las licuaciones 8.83, 8.89, 8.91 y 8.92 proporcionan un clculo incrementa! de las diferencias hacia delante de los puntos a lo largo de la curva cbica. Comenzando por u = 0 con un paso constante de tamao \ los valores iniciales de la coordenada x y sus primeras dos diferencias hacia adelante son:
0
x = d
0 0 x
Ax = a 8* + b S + c\S
x
(8.93)
AvC
(t
= 6a 8' + 2b 8
t x
Una vez que se han calculado estos valores iniciales, el clculo de cada valor sucesivo de la coordenada x requiere slo tres sumas. Podemos aplicar los mtodos de las diferencias hacia adelante para determinar los puntos a lo largo de curvas con splines de cualquier grado n. Cada punto sucesivo (x, y, z) se evala con una serie de 3/; sumas. Para las superficies, los clculos incremntales se aplican tanto al parmetro u como al parmetro v.
Mtodos de subdivisin
Los procedimientos recursivos de subdivisin de splines se utilizan para dividir repetidamente una seccin de curva por la mitad, incrementando el nmero de puntos de control en cada paso. Los mtodos de subdivisin son tiles para visualizar curvas de aproximacin con splines, ya que podemos continuar con el proceso de subdivisin hasta que el grato de control se aproxime a la trayectoria de la curva. Las coordenadas de los puntos de control se pueden entonces dibujar como puntos de la curva. Otra aplicacin de la subdivisin es generar ms puntos de control para perfilar una curva. Por tanto, podramos disear una forma general de una curva con unos pocos puntos de control, para a continuacin aplicar un procedimiento de subdivisin para obtener puntos de control adicionales. Con los puntos de control aadidos, podemos entonces realizar un ajuste fino en secciones pequeas de la curva. La subdivisin de splines se aplica ms fcilmente a una seccin de curva de Bzier, porque la curva comienza en el primer punto de control y termina en el ltimo punto de control, el rango de variacin del parmetro U es siempre de 0 a 1 y es fcil determinar cundo los puntos de control estn suficientemente cerca de la trayectoria de la curva. La subdivisin de Bzier se puede aplicar a otras representaciones con splines mediante la siguiente secuencia de operaciones. (1) (2) (3) Conversin de la representacin actual con splines en una representacin de Bzier. Aplicacin del algoritmo de subdivisin de Bzier. Conversin de la representacin de Bzier en la representacin original con splines.
473
l 2
Pn
P20
21
Antes de la subdivisin
Despus de la subdivisin
FIGURA 8 .52. Subdivisin de una seccin de curva de Bzier cbica en dos segmentos, cada uno con cuatro puntos de control.
La Figura 8.52 muestra el primer paso de una subdivisin recursiva de una seccin de curva de Bzier cbica. Los puntos a lo largo de la curva de Bzier se describen con la funcin de punto paramtrica P(//) con 0 < w < 1. En el primer paso de la subdivisin, utilizamos el punto medio P(0.5) para dividir la curva original en dos segmentos. El primer segmento se describe a continuacin con la funcin de punto P,(.v) y el segundo segmento se describe con P ( / ) , donde
2
g = 2w, t= 2u - 1,
(8.94)
Cada uno de los dos segmentos de curva tiene el mismo nmero de puntos de control que la curva original. Tambin, las condiciones en los lmites (posicin y pendiente paramtrica) de los extremos de cada uno de los dos segmentos de curva deben coincidir con la posicin y la pendiente de la funcin de la curva original P(w). Esto nos proporciona cuatro condiciones para cada segmento de curva que podemos utilizar para determinar la posicin de los puntos de control. Para el primer segmento, los cuatro puntos de control son:
P..o = Po
Pu = ^ ( P o + P . )
Pu Pi.
i =-(P + 2 p , + p )
2 =
(8.95)
^(Po + 3
P l
+3p +p )
2 3
Pi
+ 3
P: P>
P: = P j
Se puede establecer un orden eficiente para el clculo del nuevo conjunto de puntos de control, utilizando slo operaciones de suma y desplazamiento (divisin por 2) del siguiente modo:
Pi.o = Po
Pu = | ( P o + P )
l
T = j(p,+p )
2
474
fe =p*
P .2 = ^ ( P 2 + P . O
3
mm
P2,=^T+P
2 ; 2
P2.0 =^<P|.2
Pl4
=
IftjP
P-2JI
Los pasos anteriores se pueden repetir cualquier nmero de veces, dependiendo de si subdividimos la curva para obtener ms puntos de control o intentamos localizar puntos aproximados de la curva. Cuando subdividimos para obtener un conjunto de puntos de visualizarn, podemos terminar el procedimiento de subdivisin cuando los segmentos de la curva son suficientemente pequeos. Un modo de determinar esto consiste en comprobar la distancia desde el primero al ltimo punto de control de cada segmento. Si esta distancia es suficientemente pequea, podemos detener la subdivisin. Otra prueba consiste en comprobar las distancias entre pares adyacentes de puntos de control. O podramos detener la subdivisin cuando el conjunto de puntos de control de cada segmento est prximo a la trayectoria de una lnea recta. Los mtodos de subdivisin se pueden aplicar a curvas de Bzier de cualquier grado. En el caso de un polinomio de Bzier de grado n 1, los 2n puntos de control de cada uno de los dos segmentos iniciales de curva son:
A' = 0 , U , . . . ,
I Pz<
=
V'
C( A
M M donde C{J\,j) y C\tt ~ k, n j) son los coelicientes binomiales. Los mtodos de subdivisin se pueden aplicar directamente a splines B no uniformes aadiendo valores al vector de nudos. Pero, por lo general, estos mtodos no son tan eficientes como la subdivisin de splines de Bzier.
8.18
475
glMapl* glEnable
(GL_MAP1_VERTEX_3, (GL_MAP1_VERTEX
uMin,
uMax,
stride,
nPts,
*ctrlPta);
3);
Se emplea el sufijo f o d en g l M a p l para indicar que los valores d e los datos se especifican en punto flotante o doble precisin. Los valores mnimo y mximo del parmetro de la curva u se especifican en los parmetros u M i n y u M a x , aunque estos valores se establecen para una curva de Bzier habitualmente en 0 y 1.0, respectivamente. Los valores de las coordenadas cartesianas tridimensionales en punto dotante de los puntos de control de Bzier se enumeran en la matriz c t r l P t s , y el nmero d e elementos d e esta matriz se proporciona como un entero positivo utilizando el parmetro n P t s . Al parmetro s t r i d e se le asigna un entero d e incremento (offset) que indica el nmero de datos entre el comienzo de una posicin en coordenadas en la matriz c t r l P t s y el comienzo d e la siguiente posicin d e coordenadas. Para una lista d e puntos d e control iridimcnsionales, planteamos que s t r i d e = 3 . Un valor mayor en s t r i d e se utilizara si especificsemos los puntos de control utilizando coordenadas homogneas de cuatro dimensiones o entrelazsemos los valores de las coordenadas con otros datos, tales como el color. Para expresar las posiciones de los puntos de control en coordenadas homogneas de cuatro dimensiones (v, y, z, //), slo necesitamos cambiar el valor de
s t r i d e y d e la constante simblica en g l M a p l y en g l E n a b l e a G L _ M A P i _ V E R T E X _ 4 .
Despus de que hayamos establecido los parmetros de Bzier y activado las subrutinas de generacin declinas, necesitamos evaluar las posiciones a lo largo de la trayectoria del spline y visualizar la curva resultante. Una posicin de coordenadas a lo largo de la trayectoria de la curva se calcula con:
glEvalCoordl" (uValue);
donde al parmetro u V a l u e se le asigna algn valor dentro del intervalo que vara desde u M i n a u M a x . El cdigo de sufijo para esta funcin puede ser f o d, y podemos tambin utilizar el cdigo de sufijo v para indicar que el valor del argumento se proporciona en forma de matriz. La funcin g l E v a l C o o r d l calcula una posicin de coordenadas utilizando la Ecuacin 8.37 con el valor del parmetro: ~" '
n,
(8.99)
que mapca el valor u V a l u e al intervalo que vara 0 a 1.0. Cuando g l E v a l C o o r d l procesa un valor del parmetro de la curva //. genera una funcin g l V e r t e x 3 . Para obtener una curva de Bzier. invocamos por tanto repetidamente la funcin g l E v a l C o o r d l para producir un conjunto de punios a lo largo de la trayectoria de la c u n a , utilizando valores seleccionados del rango de variacin desde u M i n a u M a x . Uniendo estos puntos con segmentos de lnea recta, podemos aproximar la curva con splines medante una polilnea. Como un ejemplo de subrutinas para creacin de curvas de Bzier con OpenGL, el cdigo siguiente utiliza los cuatro puntos de control del programa de la Seccin 8.10 para generar una curva de Bzier cbica bidimensional. En este ejemplo, se dibujan 50 puntos a lo largo de la trayectoria de la curva, y se conectan los puntos de la curva mediante segmentos de lnea recta. La trayectoria de la curva se visualiza a continuacin como una polilnea azul, y los puntos de control se dibujan como puntos rojos de tamao 5 (Figura S.53 en escala de grises).
GLfloat
ctrlPts
[4] [3]
{-40.0, (10.0,
40.0,
0.0),
(-10.0, {40.0,
200.0, 40.0,
0.0}, 0.0} };
-200.0, 3, 4,
0.0},
glMaplf glEnable
(GL_MAP1_VERTEX_3 ,
0.0,
1.0,
*ctrlPts)
(GL_MAP1_VERTEX_3);
GLint
glColor3f glBegin
(GL_LINE_STRIP);
"curva"
f o r (k = 0 ; k < - 5 0 ; k+ + ) glEvalCoordlf glEnd ( ); (1.0, 0.0, 0.0); // // glPointSize glBegin (5.0); // // Establece rojo. Establece Dibuja los el tamao de del punto en 5.0. el color de los puntos en (GLfloat (k) / 50.0);
glColor
(GL_P0INTS);
puntos
control,
FIGURA 8.53. Un conjunto de cuatro puntos de control y la curva de Bzier asociada, visualizados con las subrutinas de OpenCiL como una polilnea de aproximacin. Aunque el ejemplo anterior gener una curva con spl'mes con valores del parmetro espaciados uniformemente, podemos utilizar la funcin g l E v a l C o o r d l f para obtener cualquier espaciado del parmetro %
8.18
477
Habitualmente, sin embargo, una curva con splines se genera con valores del parmetro uniformemente espaciados, y OpenGL proporciona las siguientes funciones que podemos utilizar para producir un conjunto de valores del parmetro uniformemente espaciados.
glMapGridl* glEvalMeshl (n, ul, u2); ni, n2) ;
Imode,
El cdigo de sufijo de g l M a p G r i d l puede ser f o d. El parmetro n especifica el nmero entero de subdivisiones iguales sobre el rango de variacin de ul a u 2 , y los parmetros ni y n2 especifican un rango entero correspondiente a u l y u 2 . Al parmetro m o d e se le asigna G L _ P O I N T o G L L I N E , dependiendo de si queremos visualizar la curva utilizando puntos discretos (una curva de puntos) o utilizando segmentos de lnea recta. Para una curva que hay que visualizar c o m o una polilnea, la salida de estas dos funciones es la misma que la salida del siguiente cdigo, excepto que el argumento de g l E v a l C o o r d l se establece en ul o u2 si k = 0 o si k = >/, respectivamente, para evitar errores de redondeo. En otras palabras, con m o d e = GL__LINE, los comandos anteriores de OpenGL son equivalentes a:
glBegin (GL_LINE_STRIP);
Por tanto, en el ejemplo de programacin anterior, podramos reemplazar el bloque de cdigo que contiene el bucle de generacin de la curva de Bzier por las siguientes lneas.
glColor3f (0.0, (50, 0.0, 0.0, 1.0); 1.0); 0, 50);
glMapGridlf glEvalMeshl
(GL_LINE,
Mediante el uso de las funciones g l M a p G r i d l y g l E v a l M e s h l , podemos dividir un curva en un nmero de segmentos y seleccionar el parmetro de espaciado de cada segmento de acuerdo con su curvatura. Por tanto, a un segmento con ms oscilaciones se le podran asignar ms intervalos y a una seccin ms recta de la curva se le podran asignar menos intervalos. En lugar de visualizar curvas de Bzier, podemos utilizar la funcin g l M a p i para especificar valores para otras clases de datos. Hay disponibles otras siete constantes simblicas de OpenGL para este propsito. Con la constante simblica G L _ M A P I C O L O R _ 4 , utilizamos la matriz c t r l P t s para especificar una lista de colores de cuatro elementos (rojo, verde, azul, alfa). Despus se puede generar un conjunto de colores linealmente interpolados para su uso en una aplicacin, y estos valores de color generados no cambian la configuracin actual del estado de color. De forma similar, podemos especificar una lista de valores de la tabla de color indexado con Gtj M A P I _ I N D E X . Y una lista de vectores tridimensionales normales a la superficie se especifica en la matriz c t r l P t s cuando utilizamos la constante simblica G L _ M A P I _ N O R M A L . Las cuatro restantes constantes simblicas se utilizan con listas de informacin sobre la textura de la superficie. Se pueden activar simultneamente mltiples funciones g l M a p i , y las llamadas a g l E v a l C o o r d l o g l M a p G r i d l y g l E v a l M e s h l producen entonces puntos con datos para cada tipo de datos habilitado. Esto nos permite generar combinaciones de posiciones en coordenadas, valores de color, vectores nonnales a la superficie y datos de la textura de la superficie. Pero no podemos activar simultneamente G L _ M A P I _ V E R TEX _3 y M A P I _ _ V E R T E X _ 4 . Slo podemos activar uno de los generadores de texturas de la superficie en cualquier momento.
splines
de Bzier
La activacin y la especificacin de parmetros de las subrutinas de OpenGL para superficies de Bzier se realizan con:
478
punto flotante o de doble precisin. Para una superficie, especificamos los valores mnimo y mximo lano del parmetro u como del parmetro v. Las coordenadas cartesianas tridimensionales de los puntos de control de Bzier se enumeran en la matriz de doble ndice c t r l P t s , y el tamao entero de la matriz se proporciona con los parmetros n u P t s y n v p t s . Si hay que specificar los puntos de control con coordenadas homogneas de cuatro dimensiones, utilizamos la constante simblica G L _ M A P 2 _ V E R T E X _ 4 en lugar de GL_MAP2_ VERTEX3. El incremento entero entre el comienzo de los valores de las coordenadas del punto de control p,> lo proporciona u s t r i d e . Y el incremento entero entre el comienzo de las coordenadas del punto de control p y las coordenadas del punto de control p , , , lo proporciona v S t r i d e . Esto permite entrelazar los datos de las coordenadas con otros datos, de modo que slo necesitamos especificar los incrementos para localizar los valores de las coordenadas. Desactivamos las subrutinas para las superficies de Bzier con:
y
glDisable
o con
glEvalCoord2*v (uvArray);
Al parmetro uValue se le asigna algn valor dentro del intervalo que varia desde uMin a uMax, y al parmetro w a l u e se le asigna un valor dentro del intervalo que vara desde vMin a vMax. El vector de versin es uvArray = (uValue, v V a l u e ) . El cdigo de sufijo para cualquiera de las dos funciones puede ser f o d. La funcin g l E v a l C o o r d 2 calcula una posicin de coordenadas utilizando la Ecuacin 8.51 con los valores de los parmetros: //Value-Min /Max - Min v t'Value-vMin vMax - viv in
(8.100)
que mapea cada uno de los valores uValue y v V a l u e al intervalo que vara de 0 a 1.0. Para visualizar una superficie de Bzier, invocamos repetidamente g l E v a l c o o r d 2 , que genera una serie de funciones g i v e r t e x 3 . Esto es similar a la generacin de una curva con splines excepto en que ahora tenemos dos parmetros. // y v. Por ejemplo, una superficie definida con 16 puntos de control, distribuidos en una cuadrcula de tamao 4 por 4, se puede visualizar como un conjunto de lneas de superficie con el cdigo siguiente. El incremento para los valores de las coordenadas en la direccin de u es 3, y el incremento en la direccin de v e s 12. Cada posicin en coordenadas se especifica con tres valores, siendo la coordenada y de cada grupo de cuatro posiciones constante.
y
GLfloat CtrlPCS
14] [ 4 ] [ 3 ]
r
{ {-1-5, - 1 . 5 , 4.0} {-0.5, - l . S , . - 1 . 0 } , { M - * , - 0 . 5 , 1.P}, { 0.5, -0.5, 0 . 0 } , 4,0}, { ( - 1 - 5 , 0.5, { 0.5, 0.5, 3.0}, 2 .0}, 1 .5, { {"I-*, { 0.5 1.5, 0 . 0 ) ,
r
-1 .5, 2 . 0 } , -1-5, 2.0} -0..5, 3.0}, -0.5, -1.0} O.5., 0 . 0 } , 0.5, 4.0} h 1.5, - 2 . 0 } , 1.5, - 1 . 0 } }
glMap3f
0.0, 4,
1.0,
3,
12,
fcctrlPts
glEnable
(GL_MAP2_VERTEX_3);
GLint
k,
glColor^f for (k =
glBegin
(GL_LINE_STRIP);
glEvalCoord2f glEnd ( );
(GLfloat
glBegin for (j
glEvalCoord2f glEnd ( );
(GLfloat
glEvalCoord2,
u2,
nv, nu2,
vi, nvl,
v2) ; nv2;
(mode,
nul,
GL_P0INT, G L _ L I N E
El cdigo de sufijo para g l M a p G r i d 2 es de nuevo f o d , y al parmetro mode se le puede asignar el valor o G L _ F I L L . Se produce una cuadricula bidimensional de puntos, con n u intervalos igualmente espaciados entre ul y u 2 , y con nv intervalos igualmente espaciados entre vi y v 2 . El rango entero correspondiente al parmelro u vara desde n u l a n u 2 , y el rango entero correspondiente al parmetro v varia desde n v l a n v 2 . Para una superficie que hay que visualizar como una cuadricula de polilineas, la salida de g l M a p G r i d 2 y g l E v a l M e s h 2 es la misma que la del siguiente fragmento de programa, excepto en las condiciones que evitan los errores de redondeo en los valores inicial y final de las variables del bucle. En el comienzo de los bucles, el argumento de g l E v a l C o o r d l se establece en ( u l , v i ) . Y al final del bucle, el argumento de
g l E v a l C o o r d l s e establece e n ( u 2 , v 2 ) .
glEvalCoord2f
k * + j
(u2 *
{v2
ul) -
for
(j
nvl;
<-
ov2;
glBegin
(GL_LINES);
f o r (k n u l ; k < - n u 2 ; k* + )
480
CAPTULO 8
glEvalCoord2f
<ul
+ vi
* + j
(u2 *
(v2
ul) -
/ vi)
nu, / nv) ;
glEnd
);
0
De forma similar, para una superficie visualizada como un conjunto de caras poligonales rellenas (mode la salida de g l M a p G r i d 2 y g l E v a l M e s h 2 es la misma que la del siguiente fragmento de programa, excepto en las condiciones que evitan los errores de redondeo en los valores inicial y final de las variables del bucle.
= GL_FILL),
f o r (k = n u l ; k < n u 2 ; k-f + ) { glBegin for (GLJ3UADJ3TRIP) ; (j = nvl; j <=* nv2; + k vi glEvalCoord2f (ul + + (k + j * j + * tu2 * 1) (v2 * (v2 ul / vi) nu. / ul) / nv); / nu
f
glEvalCoord2
(ul
(u2
- Vi)
nv) ;
Podemos utilizar la funcin g l M a p 2 para especificar los valores de otras clases de datos, del mismo modo que lucimos con g l M a p i . Para este propsito hay disponibles constantes simblicas similares, tales como GL_MAP2_COLOR_4 y G L _ M A P 2 _ N O R M A L . Y podemos activar mltiples funciones g l M a p 2 para generar varias combinaciones de datos.
GLUnurbsObj
*curveName;
curveName
);
gluBeginCurve
gluNurbsCurve
nknota,
*knotVector,
stride,
ctrlPts,
GL_MAP1_VERTEX_3 ;
En la primera lnea, asignamos un nombre a la curva, a continuacin invocamos las subrutinas de sombreado de GLU para splines B para esta curva utilizando el comando g l u N e w N u r b s R e n d e r e r . Se asigna un
8.18
481
valor O a curveName cuando no hay memoria disponible suficiente para crear una curva con splines B. Dentro de un par g l u B e g i n C u r v e / g l u E n d C u r v e , establecemos a continuacin los atributos de la curva utilizando la funcin gluNurbsCurve. Esto nos permite configurar mltiples secciones de curva, y cada seccin se referencia con un nombre de curva distinto. El parmetro k n o t V e c t o r hace referencia al conjunto de valores de los nudos en punto flotante, y el parmetro entero n k n o t s especifica el nmero de elementos del vector de nudos. El grado del polinomio es degParam I. Enumeramos los valores de las coordenadas de los puntos de control tridimensionales en el argumento c t r l P t s , que es un vector y contiene nknots - degParam elementos. Y el desplazamiento entero inicial entre el comienzo de las sucesivas posiciones en coordenadas en el vector c t r l P t s se especifica con el parmetro entero s t r i d e . Si las posiciones de los puntos de control son contiguas (no entrelazadas con otros tipos de datos), el valor de s t r i d e se establece en 3. Eliminamos
un spline B definido con:
gluDeleteNurbsRenderer (curveName);
A modo de ejemplo de utilizacin de las subrutinas de GLU para visualizacin de una curva con splines, el cdigo siguiente genera un polinomio cbico de Bzier. Para obtener esta curva cbica, establecemos el parmetro de grado en el valor 4. Utilizamos cuatro puntos de control y seleccionamos una secuencia de nudos de ocho elementos abierta uniforme con cuatro valores repetidos en cada extremo.
GLfloat GLfloat
knotVector ctrlPts
[8]
= *
{0.0, {
0.0,
1.0);
[ 4 ] [3]
(-4.0, (2.0,
);
GLUnurbsObj * c u b i c B e z C u r w e ,-
cubicBezCurve gluBeginCurve
) ;
gluNurbsCurve
knotVector,
3,
ctrlPts
[0][0],
GL_MAP1_VERTEX_3);
gluEndCurve(cubicBezCurve);
Para crear una curva con splines B racionales, sustituimos la constante simblica G L _ M A P I _ V E R T E X _ 3 G L _ M A P I _ V E R T E X _ 4 . A continuacin, se utilizan las coordenadas homogneas de cuatro dimensiones (x y,,i z h) para especificar los puntos de control y la divisin homognea resultante produce el polinomio racional deseado. Tambin podemos utilizar la funcin gluNurbsCurve para especificar las listas de los valores de color, vectores normales, o propiedades de la textura de la superficie, del mismo modo que hicimos con las funciones g l M a p l y g l M a p 2 . C u a l q u i e r a de las c o n s t a n t e s s i m b l i c a s , tales c o m o G L M A P 1 C O L O R 4 o GL_MAPl NORMAL, se pueden utilizar como ltimo argumento en la funcin gluNurbsCurve. Cada llamada se enumera a continuacin dentro del par g l u B e g i n C u r v e / g l u E n d C u r v e , con dos restricciones: no podemos enumerar ms de una funcin para cada tipo de dato y debemos incluir exactamente una funcin para generar la curva con splines B. Un curva con splines B se divide automticamente en un nmero de secciones y se visualiza como una polilnea con las subrutinas de GLU. Pero tambin se puede seleccionar una gran variedad de opciones de sombreado de splines B con llamadas repetidas a la siguiente funcin. por
h
gluNurbsProperty
(splineName,
property,
valu);
Al parmetro s p l i n e N a m e se le asigna el nombre del spline B, al parmetro p r o p e r t y se le asigna una constante simblica de GLU que identifica la propiedad de sombreado que queremos cambiar y al parmetro v a l u se le asigna un valor numrico en punto flotante o una constante simblica de GLU que establece el
482
valor de la propiedad seleccionada. Se pueden especificar varias funciones g l u N u r b s P r o p e r t y despus de la linea con g l u N e w N u r b s R e n d e r e r . Muchas de las propiedades que se pueden cambiar usando la funcin g l u N u r b s P r o p e r t y son parmetros de la superficie, como se describe en la seccin siguiente.
nes t.
:
GLUnurbsObj surfName * surfame ( ) valuel), value2) ; value3); = gluNewNurbsRenderer (surfName, (surfName, {surfName, gluNurbsProperty gluNurbsProperty gluNurbsProperty propertyl, property2, property3,
gluBeginSurface
(surfName); (surfName, nuKnots, uKnotvector, vStride, nvKnots, fcctrlPts [0] [0] [0] ,
gluNurbsSurface
uStride, vDegParam,
GL_MAP2_VERTEX_3);
Por lo general, el cdigo y los parmetros de GLU para definir una superficie con splines t es similar al de una curva con splines t. Despus de invocar las subrutinas de sombreado de splines B con gluNewNurbsRenderer. podramos especificar valores opcionales de las propiedades de la superficie. Los atributos de la superficie se establecen a continuacin con una llamada a gluNurbsSurf a c e . )e este modo se pueden definir mltiples superficies, cada una con un nombre distinto. El sistema devuelve un valor 0 en la variable surfName cuando no hay suficiente memoria disponible para almacenar un objeto de tipo spline t. Los parmetros u K n o t V e c t o r y vKnotVector hacen referencia a las matrices con los valores de los nudos en punto llotante en las direcciones de los parmetros // y v. Podemos especificar el nmero de elementos tic cada vector de nudos con los parmetros n u K n o t s y n v K n o t s . El grado del polinomio en el parmetro // lo proporciona el valor de uDegParam I, y el grado del polinomio en el parmetro v es el valor de vDegParam 1. Enumeramos los valores en punto flotante de las coordenadas tridimensionales de los puntos de control del parmetro c t r l P t s , que es un vector y que contiene ( n u K n o t s uDegParam) X (nvKnots - vDegParam) elementos. El desplazamiento entero inicial entre el comienzo de los sucesh 08 puntos de control en la direccin paramtrica // se especifica con el parmetro entero uStride, y el desplazamiento en la direccin paramtrica i se especifica con el parmetro entero v S t r i d e . Borramos una superficie con sp/ines para liberar su memoria reservada con la misma funcin gluDeleteNurbsRenderer que usamos para una curva con splines t. De forma predeterminada, una superficie con splines t se visualiza automticamente como un conjunto de reas de relleno poligonales mediante las subrutinas GLU, pero podemos elegir otras opciones y parmetros de visualizacin. Se pueden establecer nueve propiedades, con dos o ms posibles valores en cada propiedad, en una superficie con sp/ines t. Como ejemplo de definicin de propiedades, el siguiente fragmento de cdigo especifica una visualizaein de una superficie en su modelo almbrico teselada con tringulos.
g1uNurbsProperty (surfame, GLU_NURBS MODE, GLU NURBS TES3ELLATOR);
483
GLU_OUTLINE_POLYGON);
Las subrutinas de teselaein de GLU dividen la superficie en un conjunto de tringulos y muestran cada tringulo como el contorno de un polgono. Adems, estas primitivas para tringulos se pueden recuperar utilizando la funcin g l u N u r b s C a l l b a c k . O t r o s v a l o r e s de la p r o p i e d a d G L U _ D I S P L A Y _ M O D E son GLU _OUTLiNE_ PATCH y G L U _ F I L L (el valor predeterminado). Mediante el valor G L U \ _ O U T L I N E \ _ P A T C H , tambin obtenemos una visualizacin en modelo almbrico, pero la superficie no se divide en secciones triangulares. En su lugar, se dibuja el contomo de la superficie original, junto con cualquier curva de recorte que se haya especificado. El nico valor restante de la propiedad GLU_NURBS_MODE que se puede modificar es GLU_NURBS _RENDERER, que sombrea los objetos sin dejar disponibles los datos teselados para su devolucin. Establecemos el nmero de puntos de muestreo por unidad de longitud con las propiedades G L U U S T E P y G L U _ V _ S T E P . El valor predeterminado para cada una de ellas es 100. Para establecer los valores de muestreo de u o v, tambin debemos establecer la propiedad G L U _ S A M P L I N G _ M E T H O D con el valor G L U _ D O M A I N _ D I S T A N C E . Se pueden utilizar otros valores con la propiedad GLU_SAMPLiNG_METHOD para especificar cmo se lleva a cabo la teselaein de la superficie. Las propiedades G L U S A M P L I N G T O L E R A N C E y G L U P A R A M E T R I C T O L E R A N C E se utilizan para establecer las longitudes mximas de muestreo. Modificando la propiedad G L U _ C U L L I N G con el valor G L T R U E , podemos mejorar las prestaciones del sombreado no teselando objetos que se encuentran fuera del volumen de visualizacin. El valor predeterminado de la seleccin (culling) de (iLU es G L _ F A L S E . Y la propiedad G L U _ A U T O _ L O A D _ M A T R I X permite que se descarguen del servidor de OpenGL las matrices de visualizacin y proyeccin cuando su valor es G L _ T R U E (el valor predeterminado). De lo contrario, si cambiamos el valor a G L _ F A L S E , una aplicacin debe proporcionar estas matrices empleando la funcin g l u L o a d S a m p l i n g M a t r i c e s . Para determinar el valor actual de una propiedad de un spline li, utilizamos la siguiente funcin de consulta.
gluGetNurbsProperty (splineName, property, valu);
Para nombre de spline s p l i n e N a m e y una propiedad p r o p e r t y especificadas el valor correspondiente se oblicu en el parmetro v a l u . Cuando la propiedad G L U _ A U T O _ L O A D _ M A T R I X se establece en el valor G L F A L S E , invocamos,
gluLoadSamplingMatrices (splineName, modelviewMat, projMat,
viewport);
Esta funcin especifica la matriz de vista del modelo, la matriz de proyeccin y el visor que hay que utilizar en las subrutinas de muestreo y de seleccin para un objeto de tipo spline. Las matrices de vista de modelo y de proyeccin actuales se pueden obtener mediante llamadas a la funcin g l G e t F l o a t v , y la vista actual se puede obtener con una llamada a g l G e t l n t e g e r v . Varios eventos asociados a los objetos de tipo spline se procesan empleando.
gluNurbsCallback (splineName, event, fen);
Al parmetro e v e n t se le asigna una constante simblica de GLU, y el parmetro ten especifica una funcin que hay que invocar cuando el evento correspondiente a la constante de (iLU se produce. Por ejemplo, si establecemos el parmetro e v e n t en GLU_NURBS_ERROR, entonces se llama a f e n cuando se produce un error. Las subrutinas p&rd splines de GLU utilizan otros eventos para devolver los polgonos de OpenGL generados por el proceso de teselaein. La constante simblica GL_NURBS_BEGIN indica el comienzo de primitivas tales como segmentos de linea, tringulos o cuadrilteros, y GL_NURBS_END indica el final de la primitiva. El argumento de la funcin de comienzo de una primitiva es una constante simblica tal como G L _ L I N E _ STRIP, GL_TRIANGLES o GL _QUAD_STRIP. La constante simblica indica que aquellos dalos con las coordenadas tridimensionales se deben suministrar y se invoca una funcin de los vrtices. Hay disponibles constantes adicionales para indicar otros datos tales como los valores de color. Los valores de los datos de la funcin g l u N u r c s C a l l b a c k se proporcionan mediante:
484
Al parmetro s p l i n e N a m e se le asigna el nombre de objeto de tipo spline que hay que teselar, y al parmetro d a t a V a l u e s se le asigna una lista con los valores de los datos.
gluBeginTrim gluPwlCurve
gluEndTrim
(surgName);
F.l parmetro surfName es el nombre de la superficie con splines B que hay que recortar. En el parmetro c u r v e P t s , que es un vector ya que contiene n P t s posiciones de coordenadas, se especifica un conjunto de coordenadas en punto flotante para la curva de recorte. En el parmetro s t r i d e se especifica un desplazamiento inicial entero entre las sucesivas posiciones de coordenadas. Las coordenadas especificadas de la curva se utilizan para generar una funcin de recorte lineal por tramos para la superficie con splines B. En otras palabras, la curva de recorte generada es una polilnea. Si los puntos de la curva se deben proporcionar en el espacio tridimensional y homogno del parmetro (w, v, /7), entonces el argumento final de g l u P w l C u r v e se establece en la constante simblica de GLU G L U _ M A P I _ T R I M _ 3 . Tambin podemos utilizar una o ms funciones g l u N u r b s C u r v e como en el caso del recorte de curvas. Y podemos construir curvas de recorte que sean combinaciones de funciones g l u P w l C u r v e y g l u N u r b s C u r v e . Cualquier curva de recorte de GLU que se especifique no se debe intersectar y debe ser una curva cerrada. El siguiente cdigo ilustra las funciones de recorte de GLU para una superficie cbica de Bzier. En primer lugar establecemos las coordenadas de los puntos de la curva de recorte ms exterior. Estas posiciones
FIGURA 8.54. Una curva exterior de recorte alrededor del permetro del cuadrado unidad se especifica en direccin contraria al movimiento de las agujas del reloj, y las secciones de la curva interior de recorte se definen en el sentido del movimiento de las agujas del reloj.
0,2 -r
02
H h
0.4
H
0.6
( .
485
se especifican en sentido contrario al movimiento de las agujas del reloj alrededor del cuadrado unidad. A continuacin, establecemos las coordenadas de los puntos de la curva de recorte ms interna en dos secciones, y estas posiciones se especifican en el sentido de las agujas del reloj. Y los vectores de nudos tanto para la superficie como para la primera seccin de la curva de recorte interior se configuran para producir curvas cbicas de B/ier. En la Figura 8.54 se muestra un dibujo de las curvas de recorte interior y exterior sobre el cuadrado unidad.
GLUnurbaObj OLfloat
*bezSurface; [5] [2] m { {0.0, O.of, {l.O, 1.0}, 0.0}, {0.0, {1.0, 0.0) }; 1.0),
outerTrimPts
0.5},
{0.5, };
0.75},
{0.75, GLfloat innerTrimPts2 [4] [ 2 ] { {0.75, {0.25, GLfloat GLfloat surfKnots [8] = (0.0, [8] = 0.0, {0.0, ( O.O, 0.0, );
0.5) 0.25),
0.5},
{0.75,
0.0, 0.0,
1.0, 0.0,
trimCurveKnota =
bezSurfac
gluBeginSurface
8,
surfKnots, 4,
8, 4,
surfKnots,
4 * 3 ,
3,
GL_MAP2J/ERTEX_3) ;
agujas
gluPwlCurve
bezSurface,
GLU__MAP1_TRIM_2) ; gluEndTrim gluBeginTrim /* /* bezSurface); bezSurface); de la curva las de recorte del interior*/ reloj.*/ 10] [01 , 2,
Secciones en el
sentido de
agujas 3,
gluPwlCurve
bezSurface,
&innerTrimPtsl
GLU_MAP1_TRIM_2) :
486
CAPTULO 8
Viul Poi4 P
Uje de rotacin
P.
vi
(a)
Pin)
4P.
P(M.
v)
<b) tu) <b)
F I G U R A 8 . 5 5 . Construccin de un slido con un barrido de traslacin. La traslacin de los puntos de control de una curva con sp/int's peridicos de (a) genera el slido mostrado en (b), cuya F I G U R A 8 . 5 6 . ( onslruccin de un slido con un barrido de rotacin. La rotacin de los puntos de control de una curva con
spJines
peridicos (a)
superficie
se puede
alrededor del eje de rotacin dado genera el slido mostrado en (b), cuya superficie se puede describir con la funcin de punto P i n , v).
un conjunto de primitivas bidimensionales, tales como crculos o rectngulos, para representaciones de barrido como opciones de men. Entre otros mtodos para obtener figuras bidimensionales se pueden incluir las construcciones con curvas con splines y las secciones rectas de objetos slidos. La Figura 8.55 ilustra un barrido de traslacin. La curva con splines peridicos de la Figura 8.55(a) define la seccin recta del objeto. Despus realizamos un barrido de traslacin para una distancia especfica moviendo los puntos de control p a p, a lo largo de una trayectoria de una lnea recta perpendicular al plano de la seccin recta. A intervalos a lo largo de esta trayectoria, repetimos la forma de la seccin recta y dibujamos un conjunto de lneas de conexin en la direccin del recorrido para obtener la representacin almbrica mostrada en la Figura 8.55(b).
0
En la Figura 8.56 se propociona un ejemplo de un diseo de un objeto utilizando un barrido de rotacin. Esta vez, la seccin recta con spline peridico se rota alrededor de un eje especfico en el plano de la seccin recia, para producir la representacin almbrica mostrada en la Figura 8.56(b). Se puede elegir cualquier eje para el barrido de rotacin. Si utilizamos un eje de rotacin perpendicular al plano de la seccin recta con splines de la Figura 8.56(a), generamos una forma bidimensional. Pero si la seccin recta mostrada en esta figura tiene profundidad, entonces utilizamos un objeto tridimensional para generar otro. Por lo general, podemos especificar construcciones de barrido utilizando cualquier trayectoria. En barridos de rotacin, podemos realizar el movimiento a lo largo de una trayectoria circular de cualquier distancia angular desde 0 a 360. En trayectorias no circulares, podemos especificar la funcin de curva que describe la trayectoria y la distancia recorrida a lo largo de la trayectoria. Adems, podemos variar la forma o el tamao de la seccin recta a lo largo de la trayectoria de barrido. O podramos variar la orientacin de la seccin recta, con respecto a la trayectoria de barrido a medida que movemos la forma a travs de una regin del espacio.
487
(a)
h)
Ic)
FIGURA 8.57. La combinacin de los dos objetos mostrados en (a) utilizando un operacin de unin produce el nuevo objeto slido compuesto de (b).
FIGURA 8.58. Dos objetos que se superponen (a) se pueden combinar para producir el objeto con forma de cua de (h>. utilizando la operacin de interseccin, o el bloque modificado mostrado en (c), utilizando la operacin diferencia.
FIGURA 8.59. Un ejemplo de representacin de rbol CSG de un objeto. Las Figuras 8.57 y 8.58 muestran ejemplos de formacin de formas nuevas utilizando las operaciones de los conjuntos. En la Figura 8.57(a), un bloque y una pirmide se colocan adyacentes una a otra. Mediante la operacin de unin, obtenemos el objeto combinado de la Figura 8.57(b). La Figura 8.58(a) muestra un bloque y un cilindro que se superponen en volumen. Utilizando la operacin de interseccin, obtenemos el slido de la Figura 8.58(b). Mediante la operacin diferencia, podemos visualizar el slido mostrado en la Figura 8.58(c). Una aplicacin de CSG comienza con un conjunto inicial de objetos tridimensionales, llamados primitivas CSG, tales como un bloque, una pirmide, un cilindro, un cono, una esfera y tal vez algunos slidos con superficies con splines. Las primitivas se pueden proporcionar en el paquete CSG como un men de seleccin, o las primitivas se podran formar utilizando mtodos de barrido, construcciones con splines, u otros procedimientos de modelado. En un paquete interactivo de CSG, podemos seleccionar una operacin (unin, interseccin o diferencia) y arrastrar dos primitivas a una posicin dentro de alguna regin del espacio para formar un nuevo objeto. Este nuevo objeto se podra entonces combinar con una de las formas existentes para formar otro objeto nuevo. Podemos continuar este proceso hasta que tengamos la forma final del objeto que estamos diseando. Un objeto construido con este procedimiento se representa con un rbol binario, como en la Figura 8.59.
488
CAPTULO 8
Plano de disparo
(a*
FIGURA 8.61. Determinacin de los lmites de la superficie a lo largo de un rayo de pixel. Los mtodos de trazado de rayos (ray casting) se utilizan habitualmente para implementar operaciones de geometra constructiva de slidos cuando los objetos se describen mediante representaciones por contorno. Aplicamos el trazado de rayos determinando los objetos que son intersectados por un conjunto de lneas paralelas que emanan del plano xy segn la direccin del eje z. Este plano se denomina plano de disparo (/ring plae) y cada rayo tiene su origen en un pxel, como se muestra en la Figura 8.60. Entonces calculamos las intersecciones con la superficie a lo largo de la trayectoria de cada rayo, y ordenamos los puntos de interseccin segn la distancia al plano de disparo. Los lmites de la superficie del objeto compuesto se determinan a continuacin mediante la operacin de conjunto especificada. En la Figura 8.61 se proporciona un ejemplo de determinacin mediante trazado de rayos de los lmites de la superficie de un objeto CSCi, que muestra las secciones rectas yz de dos objetos (un bloque y una esfera) y la trayectoria de un rayo perpendicular de pxel al plano de disparo. Kn la operacin de unin, el volumen nuevo es el interior combinado ocupado por los dos objetos. En la operacin de interseccin, el volumen nuevo es la regin interior comn a ambos objetos. Y una operacin de diferencia sustrae el interior de un objeto del otro donde los dos objetos se superponen. Cada primitiva de CSG se define habitualmente en su propias coordenadas locales (de modelado). La posicin correspondiente en coodenadas universales se determina mediante las matrices de transformacin de modelado utilizadas para crear una posicin de solapamiento con otro objeto. La inversa de las matrices de modelado del objeto se pueden utilizar entonces para transformar los rayos de pxel a coordenadas de modelado, donde los clculos de las intersecciones con la superficie se realizan en las primitivas individuales. Entonces las intersecciones con la superficie de los dos objetos superpuestos se ordenan segn la distancia a lo largo de la trayectoria del rayo y se usan para determinar los lmites del objeto compuesto, segn la operacin de conjuntos especificada. Este procedimiento se repite para cada par de objetos que hay que combinar en el rbol CSG de un objeto concreto. Una vez que se ha diseado un objeto CSCi, el trazado de rayos se utiliza para determinar propiedades fsicas, tales como el volumen y la masa. Para determinar el volumen del objeto, aproximamos el rea de cada pxel del plano de disparo mediante un pequeo cuadrado (Figura 8.62). Podemos entonces aproximar el volumen Wi de una seccin transversal del objeto de rea A en la direccin de la trayectoria de un rayo de pxel de la posicin (i,j) de este modo:
H
(8.101)
Plano de
FIGURA 8.62. Determinacin del volumen de un objeto en la direccin de la trayectoria de un rayo de un rea de pxel A del plano de disparo.
tl
donde AZy es la profundidad del objeto en la direccin del rayo desde la posicin (/,/). Si el objeto tiene agujeros internos, Az,, es la suma de las distancias entre pares de puntos de interseccin en la direccin del rayo. Aproximamos el volumen total del objeto CSG mediante la suma de los volmenes individuales segn las trayectorias de los rayos:
Dada la funcin de densidad, p (v, v, z), del objeto, podemos aproximar la masa en la direccin del rayo desde la posicin (/, /) con esta integral:
donde la integral simple se puede aproximar a menudo sin realizar la integral, dependiendo de la forma de la funcin de densidad. La masa total del objeto CSG se aproxima entonces mediante la suma: w = m
(
(H.I04)
y
Otras propiedades fsicas, tales como el centro de masas y el momento de inercia, se pueden obtener con clculos similares. Podemos mejorar la precisin de los clculos de los valores de las propiedades fsicas mediante rayos adicionales generados desde posiciones de subpxeles en el plano de disparo. Si las formas de los objetos se representan mediante rboles octales, podemos implementar el conjunto de operaciones de los procedimientos CSG rastreando la estructura del rbol que describe los contenidos de los ociantes del espacio. Este procedimiento, descrito en la seccin siguiente, busca en los octantes y los suboclanles de un cubo unidad para localizar las regiones ocupadas por los dos objetos que hay que combinar.
490
Cuadrante 0
Cudrame 1
Cudrame 3
Cudrame 2
FIGURA 8.63. Una regin cuadrada del plano xy dividida en cuadrantes numerados y el nodo asociado del rbol cuaternario con cuatro elementos de datos.
1
()
FIGURA 8.64. Una regin cuadrada del plano xy con divisiones en cuadrantes de dos niveles y la representacin asociada mediante rbol cuaternario. todos los puntos del cuadrante 2 de la Figura 8.63 son de color rojo, el cdigo de color para el rojo se coloca entonces en el elemento de datos nmero 2 del nodo. De lo contrario el cuadrante es heterogneo, y se divide en subcuadrantes, como se muestra en la Figura 8.64. En el elemento de datos correspondiente del nodo del cuadrante 2 ahora se modifica un indicador para marcar el cuadrante como heterogneo y se almacena un puntero al nodo siguiente del rbol cuaternario. Un algoritmo de generacin de un rbol cuaternario comprueba los valores de color asignados a los objetos dentro de una regin bidimensional seleccionada y configura los nodos del rbol cuaternario consecuentemente. Si cada cuadrante de espacio original tiene un nico color, el rbol cuaternario tiene un nico nodo. En el caso de una regin heterognea del plano, las sucesivas subdivisiones en cuadrantes continan hasta que todas las partes de la regin subdividida son homogneas. La Figura 8.65 muestra la representacin mediante un rbol cuaternario de una regin que contiene un rea con un color liso que es diferente del color uniforme del resto de reas dentro de dicha regin. Las codificaciones mediante rboles cuaternarios propocionan ahorros considerables de almacenamiento cuando existen amplias zonas de un nico color en una regin del espacio, ya que un nico nodo puede representar una gran parte del espacio. Y esta tcnica de representacin se puede utilizar para almacenar los valores del color de los pxeles. Para un rea que contiene 2n por 2n pxeles, una representacin mediante un rbol cuaternario contiene como mximo n niveles. Y cada nodo del rbol cuaternario tiene como mximo cuatro descendientes inmediatos.
491
2 i ^0
FIGURA 8.65. Una representacin mediante rbol cuaternario de una regin cuadrada del plano xy que condene una nica rea de color de primer plano sobre un fondo de color liso.
t)
I I [2|}|4
Regin de un espacio tridimensional FIGURA 8.66. Un cubo dividido en octantcs numerados y el nodo asociado del rbol octal de ocho elementos de datos. Una tcnica de codificacin mediante un rbol octal divide una regin del espacio tridimensional (habitualmente un cubo) en octantes y almacena ocho elementos de datos por nodo del rbol, como se muestra en la Figura 8.66. Las subregiones individuales del espacio tridimensional subdividicto se denominan elementos de volumen, o vxeles, por analoga con los pxeles de un rea de visualizacin rectangular. Un elemento de vxel de una representacin mediante un rbol octal almacena los valores de la propiedad de una subregin homognea del espacio. Entre las propiedades de los objetos dentro de una regin tridimensional del espacio se puede incluir el color, el tipo de material, la densidad y otras caractersticas fsicas. Por ejemplo, entre los objetos de una regin seleccionada del espacio podran estar incluidas piedras y rboles o pauelos de papel, huesos y rganos humanos. Las regiones vacas del espacio se representan mediante el tipo de vxel vacio (void). Como en el caso de la representacin mediante un rbol cuaternario, un ociante heterogneo de una regin se subdivide hasta que las subdivisiones son homogneas. En un rbol octal, cada nodo puede tener desde cero a ocho descendientes inmediatos. Los algoritmos de generacin de rboles octales se pueden estructurar para aceptar definiciones de objetos de cualquier forma, tales como una malla poligonal, parches de superficie curvada, o construcciones de geometra slida. En el caso de un nico objeto, el rbol octal se puede construir a partir de la caja que lo contiene (paralelipdica) determinada mediante las extensiones de coordenadas del objeto. Una vez que se ha establecido una representacin mediante un rbol octal de un objeto slido, se pueden aplicar al objeto varias subrutinas de manipulacin. Se puede aplicar un algoritmo para realizar operaciones de conjuntos a dos representaciones mediante rboles octales de la misma regin del espacio. En una operacin de unin, se construye un nuevo rbol octal utilizando los nodos del rbol octal de cada uno de los rbo-
492
les de partida. Para establecer una representacin de interseccin de dos rboles octales, construimos el nuevo rbol utilizando los ociantes donde los dos objetos se superponen. De forma similar, en una operacin de diferencia, buscamos las regiones ocupadas por un objeto y no por el otro. Se ha desarrollado un gran nmero de otros algoritmos de procesamiento de rboles octales. Las rotaciones tridimensionales, por ejemplo, se realizan aplicando las transformaciones a las regiones espaciales representadas por los ociantes ocupados. Para localizar los objetos visibles de una escena, podemos determinar en primer lugar si cualquiera de los ociantes frontales estn ocupados. Si no, proseguimos con los ociantes situados detrs de los ociantes frontales. Este proceso contina hasta que los ociantes ocupados son localizados en la direccin del punto de vista. El primer objeto detectado en la direccin de cualquier trayectoria de punto de vista a travs de los ociantes espaciales, desde la parte frontal hasta la parte trasera, es visible, y la informacin de dicho objeto se puede transferir a una representacin mediante un rbol cuaternario para su visualizacin.
493
Primer plano
FIGURA 8.67. Apariencia escarpada del contorno de una montaa con diferentes niveles de ampliacin. Si ampliamos una forma continua eucldea, no importa cmo sea de complicada, podemos finalmente obtener la vista ampliada para verla con contornos ms suaves. Pero si ampliamos un objeto fractal, continuamos viendo cada vez ms detalles en las ampliaciones sin obtener finalmente una apariencia del objeto con contornos suaves. El contorno de una montaa frente al cielo contina teniendo el mismo aspecto escarpado a medida que la vemos desde una posicin cada vez ms cercana (Figura 8.67). A medida que nos acercamos a la montaa, el detalle ms pequeo de los salientes y de las rocas se hace visible. Acercndonos an ms, vemos los contornos de las rocas, despus las piedras y a continuacin los granos de arena. En cada paso, el contomo revela ms curvas y vueltas. Si tomamos los granos de arena y los analizamos con un microscopio, veramos de nuevo el mismo detalle repetido a nivel molecular. Formas similares describen las costas y los bordes de plantas y nubes. Para obtener una vista ampliada de un fractal, podemos seleccionar una parte del fractal para su visualizacin dentro de un rea de visualizacin del mismo tamao. Entonces llevamos a cabo las operaciones de construccin del fractal en aquella parte del objeto y visualizamos el mayor detalle de aquel nivel de ampliacin. A medida que repetimos este proceso, continuamos visualizando cada vez ms detalles del objeto. Como consecuencia del detalle infinito inherente a los procedimientos de construccin, un objeto fractal no tiene un tamao definido. Cuando aadimos ms detalle a la descripcin de un objeto, las dimensiones crecen sin limite, pero las amplitudes de las coordenadas del objeto pennanecen confinadas dentro de una regin finita del espacio. Podemos caracterizar la cantidad de variacin del detalle de un objeto mediante un nmero ilamado//W'wsion fractal. A diferencia de la dimensin eucldea, este nmero no es necesariamente un entero. La dimensin fractal de un objeto se denomina a veces dimensin fraccionad que es la base del nombre fractal. Los mtodos fractales han resultado ser tiles para modelar una gran variedad de fenmenos naturales. En aplicaciones grficas, las representaciones fractales se utilizan para modelar el terreno, las nubes, el agua, los rboles y otra llora, las plumas, el pelo y variadas texturas superficiales, y a veces slo para elaborar patrones atractivos. En otras disciplinas, los patrones fractales se han encontrado en la distribucin de estrellas, islas de ros y crteres de la Luna; en la lluvia; en las variaciones de la bolsa; en msica; en el trfico; en la utilizacin de la propiedad urbana; y en los lmites de las regiones de convergencia en tcnicas de anlisis numrico.
p, = m$>
= FIA
h =
ws)
Por lo general, la funcin de transformacin se puede aplicar a un conjunto de puntos especifico o a un conjunto inicial de primitivas, tales como lneas rectas, curvas, reas de color o superficies. Tambin, pode-
494
CAPTULO 8
mos utilizar procedimientos deterministas o aleatorios. La funcin de transformacin se podra definir utilizando transformaciones geomtricas (cambio de escala, traslacin, rotacin), o mediante transformaciones no lineales de coordenadas y parmetros de decisin estadsticos. Aunque los objetos fractales, por definicin, contienen detalles infinitos aplicamos la funcin de transformacin un nmero finito de veces, y, por supuesto, los objetos que visualizamos tienen dimensiones finitas. Una representacin procedimental aproxima un fractal real a medida que el nmero de transformaciones se incrementa para producir cada vez ms detalle. La cantidad de detalle incluido en la visualizacin grfica final de un objeto depende del nmero de iteraciones realizadas y la resolucin del sistema de visualizacin. No podemos visualizar variaciones de detalle que sean menores que el tamao de un pxel. Pero podemos ampliar de forma repetida porciones seleccionadas de un objeto para ver ms de sus detalles.
Clasificacin de fractales
Los fractales autosimilares poseen partes que son versiones reducidas en tamao del objeto entero. Comenzando por una forma inicial, construimos las subpartes del objeto aplicando un parmetro de escala s a toda la forma. Podemos utilizar el mismo factor de escala S para todas las subpartes, o podemos utilizar factores de escala diferentes en partes del objeto diferentes de escala reducida. Si tambin aplicamos variaciones aleatorias a las supartes de escala reducida, se dice que el fractal es estadsticamente autosimilar. Las partes entonces tienen las mismas propiedades estadsticas. Los fractales estadsticamentes similares se utilizan habitualmente para modelar rboles, arbustos y otras plantas. Los fractales autoafines poseen partes que se forman mediante parmetros de escala diferentes, ,v,, s y segn direcciones de coordenadas diferentes. Y podemos tambin incluir variaciones aleatorias para obtener fractales autoafines estadsticamente. El terreno, el agua y las nubes se modelan habitualmente mediante mtodos de construccin de fractales autoafines estadsticamente. Los conjuntos invariantes de fractales se forman mediante transformaciones no lineales. En esta clase de fractales se incluyen los fractales autocuadrticos, tales como el conjunto de Mandelbrot (formado con funciones cuadrticas en el espacio complejo), y los fractales autoinversos, construidos mediante procedimientos de inversin.
vt
Dimensin fractal
La cantidad de variacin de la estructura de un objeto fractal se puede describir mediante un nmero D llamado dimensin fractal, que es una medida de la aspereza, o de la fragmentacin, del objeto. Los objetos con mayor aspecto dentado presentan mayores dimensiones fractales. Un mtodo para generar un objeto fractal consiste en establecer un procedimiento iterativo que utiliza un valor seleccionado de D. Otra tcnica es determinar la dimensin fractal a partir de las propiedades deseadas de un objeto, aunque, por lo general, puede ser difcil calcular la dimensin fractal. Los mtodos para calcular D se basan en conceptos desarrollados en ramas de las matemticas, particularmente de topologa.
t
Mediante analoga con la subdivisin de un objeto eucldeo se obtiene una expresin de la dimensin fractal de un fractal autosmilar construido con un nico factor de escala .y. La Figura 8.68 muestra las relaciones entre el factor de escala y el nmero de subpartes n de divisin de un segmento unidad de lnea recta, un cuadrado unidad y un cubo unidad. Para s == 7, el segmento de lnea unidad (Figura 8.68(a)) se divide en dos subpartes de igual longitud. Con el mismo factor de escala, el cuadrado de la Figura 8.68(b) se divide en cuatro subpartes de igual rea, y el cubo (Figura 8.68(c)) se divide en ocho subpartes de igual volumen. En cada uno de estos objetos, la relacin entre el nmero de subpartes y el factor de escala es n s = I. En analoga con los objetos eucldeos, la dimensin fractal D de objetos aulosimilares se puede obtener a partir de;
nE
(8.106)
8 .23
Mtodos de geometra
fractal
495
= i
A' =
b - 2,
E
L .
D, = 3. n.v = 1 (c)
3
w *"
FIGURA 8.68. Subdivisin de una lnea unidad (a), un cuadrado unidad (b), y un cubo unidad (c). La dimensin ecucldea se representa como D, y el factor de escala de cada objeto es s = ~.
D=
l n f l
(8J07)
\n(\/s)
En un fractal autosimilar construido con diferentes factores de escala en las diferentes subpartes del objeto, la dimensin de similitud fractal se obtiene a partir de la relacin implcita:
Y.VS1 (8.108)
donde S es el factor de escala de la subparte fe. En la Figura 8.68, consideramos la subdivisin de formas simples (lnea recta, rectngulo y caja). Si tenemos formas ms complejas, incluidas las lneas curvas y los objetos con superficies no planas, la determinacin de la estructura y las propiedades de las subpartes es ms difcil. Para formas de objetos generales, podemos utilizar mtodos de cobertura topolgica que aproximan las subpartes del objeto mediante formas simples. Una curva gubdividida, por ejemplo, se podra aproximar mediante secciones de lnea recta, y una superficie con splines subdividida se podra aproximar mediante pequeos cuadrados o rectngulos. Otras formas de cobertura, tales como crculos, esferas y cilindros, tambin se pueden utilizar para aproximar las caractersticas de un objeto dividido en partes ms pequeas. Los mtodos de cobertura se utilizan habilualmente en matemticas para determinar propiedades geomtricas tales como la longitud, el rea, o el volumen de un
496
FIGURA 8.69. (aja do cobertura de un objeto de forma irregular. objeto complejo mediante la suma de las propiedades de un conjunto de objetos de cobertura ms pequeos. Tambin podemos utilizar los mtodos de cobertura para determinar la dimensin fractal D de algunos objetos. Los conceptos de cobertura topolgica se utilizaron originariamente para ampliar el significado de las propiedades geomtricas a formas no estndar. Una ampliacin de los mtodos de cobertura que utiliza circuios o esferas condujo a la idea de dimensin de llausdorff-Besicovilch, o dimensin fracciona!. La dimensin de Hausdorlf-Besicovitch se puede utilizar como la dimensin fractal de algunos objetos, pero por lo general, es ms difcil su evaluacin. De forma ms habitual, la dimensin fractal de un objeto se estima mediante mtodos de i-oher/ura con cujas que utilizan retngulos o paraleleppedos. La Figura 8.6 ) ilustra la idea de caja de cobertura. Aqu, el rea dentro de los lmites irregulares se puede aproximar mediante la suma de las reas de los pequeos rectngulos de cobertura.
1
Los mtodos de cobertura mediante cajas se aplican determinando en primer lugar las amplitudes de las coordenadas de un objeto, despus subdividiendo el objeto en un nmero de pequeas cajas utilizando los factores de escala proporcionados. El nmero de cajas n que es necesario para cubrir un objeto se denomina dimensin de caja, y n est relacionada con la dimensin fractal D. F.n objetos aulosimilares estadsticamente con un nico factor de escala A , podemos cubrir el objeto con cuadrados o cubos. A continuacin contamos el nmero /; de cajas de cobertura y utilizamos la Ecuacin 8.107 para estimar la dimensin fractal. Para objetos autoafines, cubrimos el objeto con cajas rectangulares, ya que las direcciones diferentes se cambian de escala de forma diferente. Fn este caso, estimamos la dimensin Iractal utilizando tanto el nmero de cajas n como los parmetros de transformacin afn. La dimensin fractal de un objeto es siempre mayor que la dimensin eucldea correspondiente (o dimensin topolgica), que es simplemente el menor nmero de parmetros necesarios para especificar el objeto. Una curva eucldea tiene una sola dimensin ya que podemos determinar sus puntos con LU parmetro, u. Una superficie eucldea es bidimensional, con parmetros de superficie u y v. Y un slido eucldeo, que requiere ucs parmetros en cada especificacin de coordenadas, es tridimensional. En una curva fractal que se encuentra completamente dentro de un plano bidimensional, la dimensin fractal D es mayor que 1 (la dimensin eucldea de una curva). Cuanto ms cercano es D a 1, ms suave es la Curva fractal. Si D - 2, tenemos una curva de Peana ; es decir, la curva rellena completamente una regin finita del espacio bidimensional. Para 2 < D < 3, la curva se intersecta a s misma y el rea se podra cubrir con un nmero infinito de veces. Las curvas fractales se pueden utilizar para modelar los lmites de objetos naturales, tales como las costas. Las curvas fracutles espaciales (aquellas que no se encuentran completamente dentro de un nico plano) tambin tienen dimensin fractal D mayor que I. pero I) puede ser mayor que 2 sin interseccin consigo misma. Una curva que rellena un volumen del espacio tiene dimensin I) = 3, y una curva en el espacio que se intersecta a s misma tiene una dimensin fractal D > 3. Las superficies fractales tienen habitualmentc una dimensin dentro del rango 2 < D < 3. Si D = 3, la superficie rellena un volumen del espacio. Y si D> 3, hay una cobertura de superposicin del volumen, hl terreno, las nubes y el agua se modelan habitualmenle con superficies fractales. La dimensin de un fractal slido se encuentra habitualmentc en el rango 3 < D < 4. De nuevo, si D > 4, tenemos un objeto que se autosuperpone. Los slidos fractales se pueden utilizar, por ejemplo, para modelar las propiedades de las nubes como densidad de vapor de agua o la temperatura dentro de una regin del espacio.
497
498
CAPTULO 8
Longitud = I
FIGURA 8 7 2 .
Longitud = y
Longitud = ~
La longitud de cada lado de la curva de Koch se incrementa en un Tactor de | en cada paso, mientras que
FIGURA 8.75.
una cuna de Peano de relleno con copos de nieve (tambin llamada espacio de Peano).
Tambin podemos utilizar generadores con mltiples componentes disjuntos. En la Figura 8.74 se muestran algunos ejemplos de generadores compuestos. Podramos combinar estos patrones con variaciones aleatorias para modelar varios objetos naturales que presentan mltiples partes desconectadas, tales como distribuciones de islas a lo largo de la costa. El generador de la Figura 8.75 contiene segmentos de lnea de longitud variable y se utilizan mltiples factores de escala para la construccin de la curva fraclal. Por tanto, la dimensin ("racial de la curva generada se determina a partir de la Ecuacin 8.108. Las visuali/aciones de rboles y otras plantas se pueden construir mediante mtodos de construccin geomtrica autosimilar. Cada rama del contorno del helcho mostrada en la Figura 8.76(a) es una versin cambiada de escala de la forma del helcho total. En la parte (b) de esta figura, el helcho se sombrea totalmente con un giro aplicado a cada rama. Como ejemplo de la construccin de un fractal autosimilar de las superficies de un objeto tridimensional, cambiamos de escala el tetraedro regular mostrado en la Figura 8.77 con un factor 1/2, despus colocamos el
499
FIGURA 8.77. Cambio de escala del tetraedro (a) en un tactor de 1/2 y posiconando la versin con el cambio de escala aplicado en una cara del tetraedro original produce la superficie fractal mostrada en (b). objeto que hemos cambiado de escala en cada una de las cuatro superficies originales del tetraedro. Cada cara del tetraedro original se convierte en seis caras ms pequeas y el rea de la cara original se incrementa en un factor 3/2. La dimensin fractal de esta superficie es: D = = 2.584% In2 que indica que es una superficie bastante fragmentada. Otro modo de crear objetos fractales autosimilares consiste en perforar agujeros en un iniciador dado, en lugar de aadir ms rea. La Figura 8.78 muestra algunos ejemplos de objetos fractales creados de este modo.
500
CAPTULO 8
FIGURA 8.78. Pradales autosimilares iridimensionalcs formados con generadores que sustraen subpartes de un iniciador. (Cortesia de John , Hart. Department of Computer Science, Universidad de Illinois en Urbana-Champai^n.)
FIGURA 8.79. Un patrn modificado de copo de nieve que utiliza un desplazamiento aleatorio del pumo medio. rias. Por ejemplo, en la Figura 8.79 utilizamos una funcin de distribucin de probabilidad para calcular desplazamientos variables del punto medio en cada paso de la creacin de un patrn aleatorio de copo de nieve. En la Figura 8.80 se muestra otro ejemplo de este mtodo. En esta visualizacin se hace un cambio de escala aleatorio de parmetros y ramificacin aleatoria de direcciones para modelar los patrones de la venas de una hoja. Una vez que se ha creado un objeto fractal, podemos modelar una escena utilizando varias instancias transformadas del objeto. La Figura 8.81 muestra la instanciacin de un rbol fractal con rotaciones aleatorias. En la Figura 8.82, se muestra un bosque fractal empleando varias transformaciones aleatorias. Para modelar las formas nudosas y retorcidas de algunos rboles, podemos aplicar funciones de giro as como de cambio de escala para crear las ramas aleatorias y autosimilares. Esta tcnica se ilustra en la Figura 8.83. Comenzando por el cilindro con tapas de la parle izquierda de esta figura, podemos aplicar transformaciones para producir (secuencialmente de izquierda a derecha) una espiral, una hlice y un patrn con giro aleatorio. En la Figura 8.84, se muestra un rbol modelado mediante giros aleatorios. La corteza de rbol de esta visualizacin se modela utilizando mapas de abultamiento {httmp mapping) y variaciones (raciales brownianas de los patrones de abultamiento. Los mtodos de generacin de curvas (raciales brownianas se estudian en la siguiente seccin, y los mtodos de mapas de abultamiento se exploran en la Seccin 10.17,
FIGURA 8.80. Construccin aleatoria y autosimilar de ramificacin de venas de una hoja en otoo. {Cortesa de f'cter Oppenheimer. Computer Graphics Lab, New York Instlate of Technology)
FIGURA 8.81. Modelado de una escena que emplea instanciacin mltiple de objetos. Las hojas fractales se aaden a un rbol en posiciones transformadas de forma aleatoria, y varias instancias rotadas y con cambio de escala del rbol se utilizan para formar una arboleda. Ll csped se modela mediante instancias mltiples de conos verdes. (Cortesa Je John C
Han, Department <>f ('ompuer Science, Universidad de Illinois en Vrban'Chatnpaig.)
FIGURA 8.82. Un bosque fractal creado con instancias mltiples de hojas, agujas de pino, csped y corle/a de rbol. (Cortesa de John ('. iart, Dcpartnivnt of Computer Seience, Universidad de llliimis en Urbcma-Champaign.)
502
FIGURA 8.83. Modelado de ramas de rboles mediante giros en espiral, helicoidales y aleatorios. (Cortesa de Peter Oppenheimer, Computer Graphics Lab, New York Institute of Technology.)
FIGURA 8,84. Ramas de rbol modeladas con serpenteos aleatorios. (Cortesa de Peter Oppenheimer, Computer Graphics Lab. New York Institute of Technology.)
FIGURA 8.86. Un planeta con movimiento browniano observado desde la superficie de un planeta con movimiento browniano, con crteres aadidos, en primer plano. (Cortesa de R. V. Vass and B. B. Mandelbrot, adaptado a partir de The Fractal Geometry of Nature de Benoit B. Mandelbrot (W. H. Freeman and Co., Nueva York, 1983).)
El movimiento browniano fraccional se obtiene al aadir un parmetro adicional a la distribucin estadstica que describe el movimiento browniano. Este parmetro adicional modifica la dimensin fractal de la trayectoria del movimiento. Una nica trayectoria browniana fraccional se puede utilizar para modelar una curva fractal. Y con una matriz bidimensional de alturas brownianas fraccinales aleatorias sobre una cuadrcula de un plano de tierra, podemos modelar la superficie de una montaa uniendo las alturas para formar un conjunto de parches de polgonos. Si las alturas aleatorias se generan sobre la superficie de una esfera, podemos modelar las monta-
503
us, los valles, y los ocanos de un planeta. En la Figura 8.86 el movimiento browniano se utili/ para crear las variaciones de altura sobre la superficie del planeta. Las alturas se codificaron en color de manera que las alturas ms bajas se pintaron en a/u! (los ocanos) y las alturas ms elevadas en blacon (nieve sobre las montaas). El movimiento browniano fracciona! se utiliz para crear las caractersticas del terreno en primer plano. Los crteres se crearon con dimetros aleatorios y en posiciones aleatorias, utilizando procedimientos con fraclales afines que describen fielmente la distribucin de los crteres observados, de las islas de los ros, de los patrones de lluvia y de otros sistemas similares de objetos. Al ajustar la dimensin fractal en los clculos del movimiento browniano fraccional, podemos variar el escarpado de las caractersticas del terreno. Los valores de la dimensin fractal prximos a D = 2.15 producen caractersticas realistas en las montaas, mientras que valores prximos a 3.0 se pueden utilizar para crear paisajes extraterrestres de apariencia inusual. Tambin podemos cambiar de escala las alturas calculadas para hacer ms profundos los valles e incrementar la altura de los picos de las montaas. En la Figura 8.87 se muestran algunos ejemplos de caractersticas del terreno que se pueden modelar mediante procedimientos fractales. En la Figura 8.88 se muestra una escena modelada con nubes fractales sobre una montaa fractal.
FIGURA 8.87.
Variaciones de las caractersticas del terreno modeladas mediante movimiento browniano fraccional.
{Cortesa Je (a) R. K Voss and R. 8. Mandelbrot, adaptado a partir de The Fractal Geometry of Nature de Benoit fi Mandelbrot (W. IL Freeman and Co., New York, 1983); y (b) y (c) Ken Mus grave y Benoit B. Mandelbrot, Mathematics and Computer Science. Universidad de Yale)
u^h
FIGURA 8.89. Desplazamiento aleatorio del punto medio de un segmento de lnea recia.
(8109)
Para aproximar el movimiento browniano fraccional, seleccionamos un valor para / de la distribucin gaussiana de media 0 y una varian/a proporcional a \(b - a)\ \ donde // = 2 - D y D > I es la dimensin fractal. Otro mtodo para obtener un desplazamiento aletorio consiste en tomar r = srjb - A | , donde el para?t
505
metro A es un factor seleccionado de rugosidad) de la superficie y r , es un valor aleatorio gaussiano de media y varianza 1. Se pueden utilizar tablas de bsqueda para obtener los valores gaussianos. LI proceso despus se repite calculando un valor desplazado de la ordenada y para la posicin media de cada mitad de la linea subdividida. Y continuamos la subdivisin para obtener un cierto nmero de segmentos o hasta que las longitudes de las secciones de la lnea subdividida son menores que una longitud seleccionada. F.n cada paso, el valor de la variable aleatoria r disminuye, ya que es proporcional al ancho \b o\ de la seccin de la lnea que hay que subdividir. La Figura 8.90 muestra una curva fractal obtenida con este mtodo. Las caractersticas del terreno se generan mediante la aplicacin de los procedimientos de desplazamiento aleatorio del punto medio a un plano rectangular de tierra (Figura 8.91 ). Comenzamos asignando un valor de altura z a cada una de las cuatro esquinas (a, b, c. d de la Figura 8.91 ) del plano de tierra. A continuacin, dividimos el plano de tierra por el punto medio de cada arista para obtener los nuevos cinco puntos de la cuadrcula: e, f, g, h y ni. Las alturas en los puntos medios e, f, g y h de las aristas del plano de tierra se pueden calcular como la media de la altura de los dos vrtices ms cercanos ms un desplazamiento aleatorio. Por ejemplo, la altura z . en el punto e se calcula utilizando los vrtices a y b, mientras que la altura en el punto medio f se calcula utilizando los vrtices b y c:
y t
| = ( z + z )!2
d
+ /v,
z, n ( z + z,)/2 + ig
h
Los valores aleatorios t\. y r, se pueden obtener a partir de una distribucin gaussiana de media 0 y varianza proporcional a la separacin de la cuadrcula elevada a la potencia 2/7, donde // = 3 - Dy D>2. Valores ms elevados de D, dimensin fractal de la superficie, producen un terreno con ms dientes de sierra, mientras que valores ms bajos generan un terreno ms suave. Tambin podramos calcular los desplazamientos alealorios como el producto de un factor de rugosidad por la separacin de la cuadrcula por un valor de la tabla de bsqueda de un valor gaussiano de media 0 y varianza 1. La altura z, de la posicin media del plano de tierra m se puede calcular utilizando los puntos e y g, o los puntos f y h. De forma alternativa, podramos calcular z utilizando las alturas asignadas a las cuatro esquinas del plano de tierra y un desplazamiento aleatorio del siguiente modo:
m
z - k + m + s& + * )/4
m
+ r
FIGURA 8.90. Una trayectoria de un pascti aleatorio generada a partir de un segmento de linea recta con cuatro iteraciones del procedimiento de desplazamiento aleatorio del punto medio.
Plano de t i e r r a
FIGURA 8.91. Un plano rectangular de tierra (ai se subdivide en una cuadrcula de cuatro secciones iguales (b) en el primer paso de un procedimiento de desplazamiento aleatorio del punto medio para calcular las alturas del terreno.
506
CAPTULO 8
FIGURA 8.92. < >cho parches de superficie formados sobre un plano de tierra en el primer paso de un procedimiento de desplazamiento aleatorio del punto medio para la generacin de caractersticas del terreno. Este proceso se repite para cada una de las nuevas cuatro parles de la cuadrcula en cada paso, hasta que la separacin de la cuadrcula llega a ser ms pequea que un valor seleccionado. Los parches triangulares de superficie para la superficie del terreno se pueden formar a medida que las alturas se generan. La Figura 8.92 muestra ocho parches de superficie que se podran construir en el primer paso de la subdivisin. En cada nivel de recursin, los tringulos se dividen sucesivamente en parches planos ms pequeos. Cuando el proceso de subdivisin se ha completado, los parches se sombrean ullizando las posiciones seleccionadas de las fuentes de luz, los valores de otros parmetros de iluminacin, y los colores y texturas seleccionados de la superficie del terreno. El mtodo del desplazamiento aleatorio del punto medi se puede aplicar para generar otros componentes de una escena ademas del terreno. Por ejemplo, podramos utilizar los mismos mtodos para obtener caractersticas superficiales de ondas en el agua o patrones de nubes sobre un plano de tierra.
donde ZL\. es la altura de control del punto e del plano de tierra y 0 < s < I es el factor de escala. Los valores pequeos de .v, tales como .v < 0.1, producen una concordancia ms ajustada a la envolvente del terreno, y valores ms grandes de s permiten mayores lluctuaeiones de la altura del terreno. Para determinar los valores de las alturas de control sobre una superficie de control del plano, en primer lugar, determinamos los valores de los parlmetros del plano A /i, Cy D. En cualquier punto del plano de tierra (\\y), la altura en el plano que contiene aquel polgono de control se calcula entoces del siguiente modo:
%
FIGURA 8.94. Proyeccin de una superficie triangular de control sobre una cuadrcula del plano de tierra.
m m ~ M / 0 ,
= zc - AxiB/Ch
tJ
(cU!0)
donde Ax y Av son los incrementos de la cuadrcula en las direcciones de los ejes .v e y. Este procedimiento es particularmente rpido cuando se aplican mtodos de vectores paralelos para procesar los puntos de la cuadrcula del plano de control. La figura 8.5 muestra una escena construida utilizando planos de control para estructurar las superficies del terreno, del agua y las nubes sobre un plano de tierra. A continuacin, se aplican algoritmos de sombreado de superficies para suavizar las aristas de los polgonos y proporcionar los colores apropiados a la superficie.
Fractales autocuadrticos
Otro mtodo para generar objetos fractales consiste en aplicar repetidamente una funcin de transformacin a los puntos del plano complejo. En dos dimensiones, un nmero complejo se puede representar como r = x + iy donde x e y son nmeros reales e r = I. En el espacio tridimensional y de cuatro dimensiones, los
508
FIGURA 8.95. Una escena compuesta modelada medante un mtodo de desplazamiento aleatorio del punto medio y superficies planas de control sobre un plano de tierra. Las caractersticas de la superficie del terreno, del agua y las nubes se modelaron y sombrearon de forma separada, despus se combinaron para formar la imagen compuesta. {Cortesa de Eng-Kiat Koh, Encenfuate, Inc.. Cupertino, California.) puntos se representan mediante cuaternios. Una funcin cuadrtica c o m p l e j a / ( z ) es aquella que implica el clculo de z . Podemos utilizar algunas funciones autocuadrticas para generar formas fractales. Dependiendo del punto inicial seleccionado para iterar, la aplicacin repetida de una funcin autocuadrtiea producir uno de los tres resultados posibles;
1
EJ punto transformado puede diverger hacia infinito. El punto transformado puede converger hacia un punto limite finito, llamado punto de atraccin (atracEl punto transformado permanece en el limite de alguna regin.
2
Como ejemplo, la operacin cuadrtica no fractal /(z) = z en el plano complejo transforma los puntos segn su relacin con el crculo unidad (Figura 8.97). Cualquier punto z cuyo mdulo \z\ sea mayor que I se transforma mediante una secuencia de puntos que tienden hacia infinito. Un punto con | r |<1 se transforma hacia el origen de coordenadas. Los puntos que estn originariamente en el crculo, | z \= I, permanecen en el mismo. Aunque la transformacin r no produce un fractal, algunas operaciones cuadrticas complejas generan una curva fractal que es la zona lmite entre aquellos puntos que se mueven hacia el infinito y aquellos que tienden hacia un lmite finito. Un lmite cerrado fractal generado mediante una operacin cuadrtica se denomina conjunto de Julia.
FIGURA 8.96. Posibles resultados de la aplicacin repetida de una transformacin aulocuadrtica f(z) al plano complejo, dependiendo de la posicin del punto inicial seleccionado.
509
z>
FIGURA 8.97. Un crculo unidad en el plano complejo. La funcin compleja cuadrtica no fractal./(?) = r mueve los puntos que se encuentran en el interior del crculo hacia el origen, mientras que los puntos situados fuera del crculo se mueven ms lejos del crculo. Cualquier punto inicial del crculo permanece en el crculo.
FIGURA 8.98. Localizacin de la curva frontera fractal utilizando la funcin autocuadrtica inversa z = /*~'(z'). Por lo general, podemos localizar el lmite fractal de una funcin cuadrtica comprobando el comportamiento de los puntos seleccionados. Si un punto se transforma de modo que diverge hacia infinito o converge hacia un punto de atraccin, podemos probar con otro punto prximo. Repelimos este proceso hasta que finalmente localizamos un punto del lmite fractal. A continuacin, la iteracin de la transformacin cuadrtica genera la forma del fractal. En transformaciones simples del plano complejo, un mtodo ms rpido para localizar los puntos de la curva fractal consiste en utilizar la inversa de la 'uncin de transformacin. Entonces un punto inicial seleccionado dentro o fuera de la curva converger a un punto de la curva fractal (Figura 8.98). Una funcin rica en fractales es la transformacin cuadrtica: i =f(z) = z() -z) (8111)
donde A es una constante compleja. En esta funcin, podemos utilizar el mtodo de la inversa para localizar la curva fractal. En primer lugar reorganizamos los trminos para obtener la ecuacin cuadrtica: ^ - z + z'/A-O La transformacin inversa es entonces la frmula cuadrtica: (8JJ2)
r (z')
2k
= M\^-(4z')i.)
(8,113)
Utilizando operaciones aritmticas complejas, resolvemos esta ecuacin en las partes real e imaginaria de z del siguiente modo: discr +Re(discr) (8.114)
2 v
donde el discriminante de la frmula cuadrtica es discr = 1 - Az'lX. Se puede calcular e ignorar unos pocos valores iniciales de x e y (por ejemplo, 10) antes de que empezemos a dibujar la curva fractal. Tambin, ya
510
CAPTULO 8
que esta funcin produce dos posibles puntos transformados (,v,_v), podemos elegir de forma aleatoria el signo ms o menos en cada paso de la iteracin siempre y cuando Im(discr) 0 > 0. Cada vez que Im(discr) < 0, los dos posibles puntos estn en el segundo y tercer cuadrante. En este caso, x cy deben tener signos opuestos. El programa siguiente proporciona una implementacin de esta funcin autocuadrtica. En la Figura 8.99 se dibujan dos curvas de ejemplo.
f -
fe, -\
C.
V I
(a)
5
v
fe FIGURA 8.99. Dos curvas fractales generadas con la inversa de la funcin/(z) Xz(\ - z) mediante el procedimiento s e l f S q T r a n s f , utilizando (a) X - 3 y (b) X = 2 + i. Cada curva se ha dibujado con 10000 puntos.
Su**
ttinclude <GIi/glut.h> ttinclude ttinclude <stdlib.h> <math.h>
/*
Establece
el
tamao = 600,
inicial
de =
la ventana 600;
de
visualizaoin.
*/
GLsizei
winWidth
winHeight
/*
Establece
los
lmites
de
las
coordenadas = =
plano
complejo.
*/
-0.25, -0.75,
xComplexMax yComplexMax
!
I
GLfloat
x,
y:
void
init
(void)
/*
Establece
el (1.0,
color de 1.0,
la
ventana 0.0);
de
visualizacin
en blanco.
*/
glClearColor
1.0,
void
plotPoint
{complexNum
z)
{
glBegin (GL_P0INTS); (z.x, z.y); glVertex2f glEnd ( );
void
solveQuadraticEq
(complexNum
lambda,
complexNum
z)
I
OLfloat lambdaMagSq, diecr; fourOverLambda firstPoint { el = nmero lambda.x = 4.0 -4.0= complejo: * * * 4.0 -I/ / dividido lambda.y por * lambda. lambda.y; */ m = { 0.0, 0.0 } discrMag; complexOum static static if
complexOum GLboolean
true;
(firstPoint) /* Calcula
lambdaMagSq
lambda.x
lambda.x lambda.y
lambdaMagSq; lambdaMagSq;
false;
)
discr.x discr.y discrMag /* = = 1.0 {->x sqrt z, */ + discr.x < 0) * (z->x * fourOverLambda.x + + z->y * z->y * fourOverLambda.y); fourOverLambda.y (discr.x * discr.x fourOverLamcda.x; * discr.y); cuadrada de un nmero
discr.y la
Actualiza negativo.
comprobando para
evitar
raz
if
(discrMag z->X 0;
(discrMag z-y = 0;
/* * */ if
Para
la
mitad el
de
los en
puntos, el
utiliza 3.
la
raz
negativa,
situando
punto
cuadrante
(rand
Z->X
(
=
<
RAND_MAX
/ 2 )
-Z->X;
/* *
Cuando deberla
la parte estar
imaginaria
del 2
discriminante o 4, para
ee
negativa, el
el
punto de x.
en el
cuadrante
invertir
signo
if
discr.y z->x +
<
0)
/-*
Completa = 0 . 5
z->x
}
void selfSqTransf (complexNum lambda, complexNum z , GLint numPoints)
GLint /* for
k; los 0; k primeros < 10; puntos. k++) (lambda, &z; puntos de { transformacin. */ +/
Salta (k -
void
displayFcn
(void)
{
GLint numPoints = = { 10000;// = { 1.5, 3.0, 0.4 Establece 0.0 }; }; // el // nmero de el */ ventana de v i s u a l i z a c i n . el color de los puntos en azul. puntos el v a l o r punto que hay que dibujar. larabda. complexNum lambda complexNum z O Establece Establece complejo. glClear glColor3f (GL_COLOR_BUFFER_BIT); (0.0, 0.0, 1.0); zO, // // numPoints); Borra la complejo de incial
del plano
Establece
selfSqTransf glFlush ( );
(lambda,
}
void { /* * Mantiene el ancho una de r e l a c i n de aspecto de la ventana compleja 1.0, altura asumiendo que de la ventana compleja. winReshapeFcn (GLint newWidth, GLint newHeight)
glViewport
(0,
0,
newHeight,
newHeight);
glMatrixMode glLoadldentity
(GL_PROJECTION); { );
gluOrcho2D glClear
(xComplexMin,
xComplexMax,
yComplexMin,
yComplexMax);
(GL_C0LOR_BUFFER_BIT);
v o i d main
(int
arge,
criar**
argv)
{
glutlnit (&argc, argv); (GLT_SINGLE (50, 50); winHeighc); Fractaltt); | GLUT_RGB); glutlnitDisplayMode
(winWdCh,
("Self-Squaaing
i n i t ( );
glutDisplayGunc glucReshapeFunc glucMainLoop ( (displayFcn); (winReshapeFcn); );
En la Figura 8. 100 so proporciona un grfico tridimensional de las variables ,v, y y A correspondiente a la funcin autocuadrtica / (z) = Ar ( I - r), donde |A| = I . Cada seccin recta de este grfico es una curva fractal en el plano complejo. Otra operacin cuadrtica que produce una gran variedad de formas fractales es una transformacin z ligeramente modificada. En este caso, el fractal es el lmite de la regin alrededor del conjunto de valores complejos z que no divergen frente a la transformacin cuadrtica:
2
Por tanto, en primer lugar seleccionamos un punto z del plano complejo, despus calculamos el punto transformado z + z. En el paso siguiente, calculamos el cuadrado de este punto transformado y se lo aadimos al valor original de z. Repetimos este procedimiento hasta que podamos determinar si la transformacin es divergente o no. Los matemticos han sido conscientes de las caractersticas inusuales de tales funciones cuadrticas durante algn tiempo, pero estas funciones eran difciles de analizar sin computadoras. Despus del desarrollo de la computadora digital, el lmite de convergencia de la transformacin 8.115 se dibuj con una impresora de lneas. A medida que las capacidades de las computadoras digitales se incrementaron, fue posible una investigacin grfica ms profunda. Posteriormente, utlizando tcnicas de grficos por computadora ms sofisticadas, lienoit Mandelbrol estudi ampliamente esta funcin, y el conjunto de puntos que no divergen frente a la transformacin 8.115 se conoce como el conjunto de Mandelbrot. Para implementar la transformacin 8.115, en primer lugar seleccionamos un rea rectangular del plano complejo. Los puntos de este rea se mapean a continuacin a pxeles codificados en color dentro de una ventana de visualizacin de un monitor de video (Figura 8.101). Los colores de los pxeles se eligen segn la velocidad de divergencia del punto correspondiente del plano complejo frente a la transformacin 8.115. Si el mdulo del nmero complejo es mayor que 2, entonces divergir rpidamente cuando se calcula repetidamente su cuadrado. Por tanto, podemos establecer un bucle para repetir las operaciones de clculo del cuadrado
2
514
FIGURA 8.100. I a funcin/(z) = z{\ - z) dibujada en tres dimensiones, con valores normalizados de X que varan segn el eje vertical. (Cortesa ele Alan Norton, IfM Research. )
Ventana de visuali/nein
Plano complejo
Pamall.i do video
FIGURA 8.101. Mapeo de puntos desde un rea rectangular del plano complejo a pixeles codificados con color dentro de una ventana de visualizaein. hasta que el modulo del nmero complejo sea mayor que 2 o hayamos alcanzado un nmero prescleccionado de iteraciones. El nmero mximo de iteraciones depende de la cantidad de detalle que queramos para visualizar y del nmero de puntos que haya que dibujar, liste valor se establece a menudo en algn valor entre 100 y I0OO, aunque se pueden utilizar valores ms bajos para acelerar los clculos. Con valores ms bajos del lmite de iteracin, sin embargo, tendemos a perder cierto detalle a lo largo de los lmites (conjunto de Julia) de la regin tic convergencia. Al final del bucle, seleccionamos un valor de color segn el nmero de iteraciones ejecutadas en el bucle. Por ejemplo, podemos colorear de negro el pxel si el nmero de iteraciones alcanza el valor mximo (un punto no divergente), podemos colorear el pxel de rojo si el nmero de iteraciones es prximo a 0. Se pueden seleccionar otros valores de color segn el valor del nmero de iteraciones dentro del intervalo que vara desde al valor mximo. Eligiendo diferentes mapeos de color y diferentes partes del plano complejo, podemos generar una gran variedad de \ isualiz.aciones dramticas de los puntos de la vecin-
dad de la frontera fractal que encierra los puntos no divergentes. En la Figura 8.102(a) se muestra una eleccin para codificar con color los pxeles de la regin alrededor del conjunto de Mandelbrot. I n el programa siguienle se proporciona una implcmcnlacin de la transformacin 8.115 para visualizar el conjunto de puntos de convergencia y sus fronteras. La parte principal del conjunto de convergencia est contenido dentro de la siguiente regin del plano complejo. - 2 . 0 0 < R e ( r ) < 0.50 - 1 . 2 0 < l m ( r ) 5 1.20 Podemos explorar los detalles a lo largo de la frontera del conjunto de Mandelbrot seleccionando regiones rectangulares del plano complejo sucesivamente ms pequeas de modo que podamos ampliar reas i \e nadas de la visualizacin. La Figura 8.102 muestra una visualizacin codificada en color (aunque la figura se muestra en blanco y negro) de la regin alrededor del conjunto de convergencia y una serie de ampliaciones que ilustran algunas caractersticas notables de esta transformacin cuadrtica.
FIGURA 8.102. Ampliacin de las Ironieras frac tales de !a transformacin 8.115. tomen/anuo por una visualizacin del conjunto de Mandelbrot, ki regin negra de (a) y sus reas circundantes, ampliamos regiones seleccionadas de la frontera desde bi hasta (f). Fl contorno blanco de la caja muestra el rea rectangular seleccionada en cada ampliacin sucesiva. En cada paso se eligen diferentes combinaciones de color para mejorar los patrones visualizados. (Cortesa Je trian
EvanS, Vamlerhilt University).
516
#include /*
GLsizei /*
Establece
lmites *~ =
GLfloat GLfloat
xComplexMin yComplexMin
-2.00, -1.25,
xComplexMax yComplexMax
complexWidth complexHeight {
= F
xComplexMax yComplexMax
xComplexMin; yComplexMin;
complexNum
public: GLfloat x, y;
struct void { /*
color
GLfloat
r,
g,
b;
};
init
(void)
Establece el
color de 1.0,
*/
glClearColor
(1.0,
1.0,
I
woid plotPoint (complexNum z)
i
glBegin (GL_P0INTS); (z.x, z.y); glVertex2f glEnd ( ) ;
)
/* Calcula el cuadrado de u n nmero complejo. z) */
complexNum c o m p l e x S q u a r e
(complexNum
i
complexNum zSquare;
= =
z.x 2 *
z.x z.x *
z.y z.y;
z.^.f -
zSquare;
}
GLint { complexNum z GLint /* count = = zO; 0; * + z > 4 */ z . y <= 4 . 0 ) && (count < maxlter)) { mandelSqTransf (complexNum zO, GLint maxlter)
while
z.y *
8.23
Mtodos de geometra
fractal
517
complexSquare
(z) ;
retum
count;
void mandelbrot
(GLint
nx,
GLint ny,
GLint
maxlter)
z,
zlncr;
ptColor; iterCount; = = complexWidth complexHeight xComplexMin; / / GLfloat GLfloat < (nx) ; (ny); z.x += zlncr.x) zlncr.y) {
z.x
xComplexMax;
( z . y = yComplexMin; iterCount if =
z . y +=
(iterCount
/*
elBe
Establece e l c o l o r de l o s p u n t o s e n n e g r o .
= ptColor.g > = ptColor.b { 0.0; if (iterCount /* (maxlter / 8 ) ) el 1.0; 0.5; 0.0; color de
*/
ptColor.r
Establece =
*/
> = =
{ l o s puntos en rojo. */
Establece
0.0;
}
else if (iterCount /* > (maxlter /20)) { los puntos en azul Establece el oscuro. ptColor.r */ ptColor.g = 0.0; color de
p t C o l o r . b = 0 . 5 ;
}
else if (iterCount /* > (maxlter el */ ptColor.g 0.0; 1.0; / 40)) { puntos en Establece amarillo. ptColor.r ptColor.b color de los
else
if
(iterCount
>
(maxlter /
100))
518
/* *
Establece verde
el
color de */ =
los puntos en
oscuro. = -
ptColor.r ptColor.g
ptColor.b 0.3;
0.0;
else
en c a n . 0.0; ptColor.b
ptColor.r ptColor.g
1.0;
)
/* Dibuja el punto coloreado. ptColor.g, */ ptColor.b); glColor3f plotPoint (ptColor.r, (2);
)
void displayFcn (void)
I
/* Establece mximas. GLint nx el */ 1000, ny 1000, maxlter // m 1000; la pantalla de visualizacin. nmero de subdivisiones en los ejes x e y y las iteraciones
glClear
Borra
mandelbrot glFlush {
void
winReshapeFcn
(GLint
newWidth,
GLint
newHeight)
i
/* * Mantiene la r e l a c i n de = aspecto en 1.0, asumiendo que complexWidth (0, 0, complexHeight. newHeight); */ glViewport
newHeight,
(xComplexMin,
(GL_COLORBUFFER_BIT) ,-
v o i d main
{
(int
arge,
char** argv);
argv;
glutlnit
t&argc,
519
glutlnitDisplayMode
GLUT_RGB);
(wnWidth, ("Mandelbrot
winHeight); Set");
init
); (displayFcn); (winReshapeFcn); );
Las transformaciones con funciones complejas, tales como la Ecuacin 8.111,se pueden ampliar para producir superficies fractales y slidos fractales. Los mtodos para generar estos objetos utili/an representaciones con cuaternios (Apndice A) para transformar puntos del espacio tridimensional y de cuatro dimensiones. Un cuaternio posee cuatro componentes, un nmero real y tres nmeros imaginarios. Podemos representar un euaternio de la siguiente forma, c o n t ampliacin del concepto de nmero del plano complejo. q = s + ta +jb + kc (8.116)
donde r =/ = le = - I. El nmero real .v se denomina tambin parle escalar del cuaternio, y los nmeros imaginarios se llaman parte vectorial del cuaternio v = (/, b, c). Utilizando las reglas de la multiplicacin y suma de cuaternios estudiadas en el Apndice A, podemos aplicar las funciones aulocuadrticas y otros mtodos de iteracin para generar superficies de objetos fractales. Un procedimiento bsico consiste en comprobar puntos del plano complejo hasta que podamos identificar la frontera entre los puntos divergentes y los no divergentes. Por ejemplo, si localizamos en primer lugar un punto (interior) no divergente, entonces comprobamos los puntos vecinos respecto de dicho punto hasta que se identifique un punto (exterior) divergente. El punto interior anterior se guarda como un punto de la superficie frontera. A continuacin se comprueban los vecinos de este punto de la superficie para determinar si estn dentro (convergen) o si estn fuera (divergen). Cualquier punto interior conectado con un punto exterior es un punto de la superficie. De este modo, el procedimiento se autodirige a lo largo de la frontera fraclal sin desviar su rumbo lejos de la superficie. Cuando se generan fractales de cuatro dimensiones, los cortes tridimensionales se proyectan sobre la superficie bidimensional del monitor de vdeo. Los procedimientos para generar fractales autocuadrticos en el espacio de cuatro dimensiones requieren un tiempo considerable de clculo, para evaluar la funcin de iteracin y comprobar la convergencia o divergencia de los puntos. Cada punto sobre una superficie se puede representar como un cubo pequeo, que proporciona los limites interno y externo de la superficie. La salida de tales programas para proyecciones tridimensionales contienen ms de un milln de vrtices en los cubos de la superficie. Visualizamos el objeto fractal mediante la aplicacin de modelos de iluminacin para determinar el color de cada cubo de la superficie. Tambin se aplican mtodos de deteccin de la superficie visible de modo que slo se muestren las superficies visibles del objeto. Las Figuras 8.103 y 8.104 muestran ejemplos de fractales autocuadrticos de cuatro dimensiones mediante proyecciones en tres dimensiones.
Fractales autoinversos
Se pueden utilizar varias transformaciones geomtricas de inversin para crear formas fractales. De nuevo, comenzamos por un conjunto inicial de puntos, y aplicamos repetidamente operaciones no lineales de inversin para transformar los puntos iniciales en un fractal.
520
CAPTULO 8
(a)
(b)
Figura 8.103. Proyecciones iridimcnsionales de frac-tales de cuatro dimensiones generados mediante la funcin autoeuadrtica representada con cuaternios f(q) = Xq{\ - q), que utilizan (a) A = 1.475 + 0.9061/ y (b) A = -0.57 + (Cortesia de Alan Norton. IBM Research.)
FIGURA 8.104. Una proyeccin sobre una superficie tridimensional de un objeto de cuatro dimensiones generado mediante una funcin autocuadrtica representada con cuaternios^) = q~ - I. (Cortesa de Atan Norton, IBM Research.)
FIGURA 8.105. Inversin del punto P al punto P' situado dentro de un circulo de radio r.
Como ejemplo, consideremos una transformacin bidimensional de inversin con respecto a un crculo de radio r y su centro P . = (x y ). Un punto P situado fuera del crculo se invierte en un punto P' situado dentro del crculo (Figura 8.105) mediante la transformacin:
( ci c
(rVP)(P^P ) = r
>
(8.117,
t
donde ambos puntos P y P' se encuentran situados en una lnea recta que pasa por el centro del circulo P . Podemos usar tambin la Ecuacin 8.117 para transformar los puntos que se encuentran dentro del crculo. Algunos puntos situados dentro se transforman en puntos situados fuera, mientras que otros puntos situados dentro se transforman en puntos situados dentro. Si las coordenadas de los dos puntos se representan como P = (x,y) y P' = (x\y'), podemos escribir la Ecuacin 8.117 del siguiente modo:
[(.x
+ CV -
*..)-
CV'
J0
8.24
Gramticas
de formas y
otros
mtodos procedimentales
521
Tambin, ya que los dos puntos estn situados en una lnea que pasa a travs del centro del crculo, tenemos que 0' ~ v,)/ (x x ) (y' y,)/(x' - x ). Por tanto, los valores de las coordenadas transformadas del punto P ' son:
r c
(x-x y+(y- y
r yi
(x-x ) +(y-y )
v r
Por tanto, los puntos situados fuera del crculo se mapean a puntos situados dentro de la circunferencia del crculo; los puntos distantes () se transforman en el centro del crculo. A la inversa, los puntos cercanos al centro del crculo se mapean a punios distantes situados fuera del circulo. A medida que nos alejamos del centro del crculo, los puntos se mapean a puntos ms cercanos a la circunferencia del crculo, situados lucra del mismo. Y los puntos situados dentro cerca de la circunferencia se transforman en puntos situados dentro cerca del centro del crculo. Por ejemplo, los valores de la coordenada x de fuera, dentro del rango que vara desde r a + o o , se mapean a valores x' dentro del rango que vara desde / 7 2 a 0, para un crculo centrado en el origen, y los valores de x de dentro desde r / 2 hasta r se transforman en valores dentro del rango que vara desde / hasta r/2. Se obtienen resultados similares para los valores negativos de x. Podemos aplicar esta transformacin a varios objetos, tales como lneas rectas, crculos o elipses. Una lnea recta que pasa por el centro del crculo es invariante frente a esta transformacin de inversin; se niapea en s misma. Pero una lnea recta que no pasa por el centro del crculo se invierte en un crculo cuya circunferencia contiene el centro P,.. Y cualquier crculo que pase por el centro del crculo de referencia se invierte en una linea recta que no pasa por el centro del circulo. Si el crculo no pasa por el centro del crculo de referencia, se invierte en otro crculo, como en la figura 8.106. Otro invariante frente a la inversin es la transformacin de un crculo que es ortogonal al crculo de referencia. Es decir, las tangentes de los dos crculos son perpendiculares en los puntos de interseccin. Podemos crear varias formas fractales mediante esta transformacin de inversin comenzando por un conjunto de crculos y aplicando la transformacin utilizando diferentes crculos de referencia. De forma similar, podemos aplicar la inversin con circuios a un conjunto de lneas rectas. Se pueden desarrollar mtodos de inversin similares para otras formas bidimensionales. Y, podemos generalizar el procedimiento a esferas, planos u otros objetos tridimensionales.
Crculo original
FIGURA 8.106. Inversin de un crculo que no pasa por el origen del crculo de referencia.
522
Regla 1
Regla 2
Regla 3
Regla 4
Figura 8.107. Cuatro reglas geomtricas de sustitucin para subdividir y alterar la forma de un tringulo equiltero. Dado un conjunto de reglas de produccin, un diseador de formas puede experimentar aplicando reglas diferentes en cada paso de la transformacin a partir de un objeto inicial dado hasta la estructura final. La Figura 8.107 muestra cuatro reglas geomtricas de sustitucin para alterar formas de tringulos. Las transformaciones de la geometra de estas reglas se pueden expresar algortmicamente en el sistema, basndose en una imagen de entrada dibujada con un editor de reglas de produccin. Es decir, cada regla se puede describir grficamente mostrando las formas inicial y final. Se pueden establecer implementaciones con Mathematica o algunos lenguajes de programacin con capacidades grficas. En la Figura 8.108 se propociona una aplicacin de las sustituciones geomtricas de la Figura 8.107, en donde la Figura 8.108(d) se obtiene mediante la aplicacin de las cuatro reglas sucesivamente, comenzando por el tringulo inicial de la Figura 8.l()8(a). La Figura 8.109 muestra otras formas creadas mediante reglas de sustitucin de tringulos. Las formas tridimensionales y las caractersticas de la superficie se transforman con operaciones similares. La Figura 8.110 muestra los resultados de sustituciones geomtricas aplicadas a poliedros. La forma inicial de los objetos mostrados en la Figura 8.111 es un icosaedro (un poliedro de 20 caras). Las sustituciones geomtricas se aplicaron a la caras planas del icosaedro, y los vrtices del polgono que resultan se proyectaron sobre la superficie de una esfera circunscrita.
c)
(d)
FIGURA 8.108. Un tringulo equiltero (a) se convierte en la forma mostrada en (b) utilizando las reglas de sustitucin l y 2 de la Figura 8.107. La regla 3 se utiliza a continuacin para convenir (b) en la forma (c), la que a su vez se transforma en (d) utilizando la regla 4. {Cortesa de Andrew Glassner. Xerox PARC (Palo Alto Research Cen/er). 1992.)
523
FIGURA 8.109. Un diseo creado mediante reglas geomtricas de sustitucin para alterar formas de tringulos. [Cortesa de ndrew Glassner. Xerox PARC (Palo Alto Resa
FIGURA 8.110. Un diseo creado mediante reglas geomtricas de sustitucin para, alterar formas prismticas. La forma inicial de este diseo es una representacin de la Serpiente de Rubik. [Cortesa de Artdrew Glassner, Xerox PARC (Palo Alio Research Center). Q 1992.]
FIGURA 8.111. Diseos creados sobre ta superficie de una esfera utilizando reglas de sustitucin de tringulos apli a las caras planas de un icosaedro, seguidas de proyecciones sobre la superficie de la esfera. [Cortesa de Andrew G, Xerox PARC (Pal
524
Otro conjunto de reglas de produccin para describir la forma de ios objetos se llaman gramticas L, o graftales. Estas reglas se utilizan habitualmente para generar visualizaeines de plantas. Por ejemplo, la topologa de un rbol se puede describir como un tronco, al que se unen algunas ramas y hojas. Un rbol se puede entonces modelar mediante reglas para proporcionar una conexin concreta de las ramas y de las hojas en las ramas individuales. La descripcin geomtrica se proporciona a continuacin colocando las estructuras del objeto en puntos concretos. La Figura 8.112 muestra una escena que contiene varias plantas y rboles, contruidos con un paquete comercial generador de plantas. Los procedimientos del software aplican leyes botnicas para generar las formas de las plantas y de los rboles.
FIGURA 8.112. Escenario realista generado con el paquete de software TDI-AMAP, que puede generar cerca de cien variedades de plantas y rboles utilizando procedimientos basados en leyes de la Botnica. (Cortesa de Thomson Digital lmage.)
525
FIGURA 8.113. Modelado de- fuegos artificiales como un sistema de partculas que viajan radalmene hacia fuera desde el centro de una esfera.
FIGURA 8.114. Modelado de hierba mediante el lanzamiento de partculas hacia arriba desde dentro de un cilindro con lapas. Las trayectorias de las partculas son parbolas debido a la fuer/a hacia abajo de la gravedad. En una aplicacin tpica, un sistema de partculas se define dentro de alguna regin del espacio y a continuacin se aplican procesos aleatorios para variar en el tiempo los parmetros del sistema. Entre estos parmetros se incluye la trayectoria del movimiento de las partculas individuales, su color y su forma. En algn momento aleatorio, cada partcula se borra. Las formas de las partculas se podran describir mediante pequeas esferas, elipsoides o cajas, que pueden variar de forma aleatoria en el tiempo. Tambin, se elige aleatoriamente la transparencia de las partculas, el color y el movimiento. Las trayectorias del movimiento de las partculas se podran describir cinemticamente o definir mediante fuerzas tales como un campo gravilalorio. A medida que cada partcula se mueve, se dibuja su trayectoria y se visualiza con un color particular. Por ejemplo, un patrn de fuegos artificiales se puede visualizar mediante la generacin aleatoria de partculas dentro de una regin esfrica del espacio y permitiendo que stas se muevan radialmenle hacia fuera, como en la Figura 8.113. Las trayectorias de las partculas se podran codificar con color desde el rojo hasta el amarillo, por ejemplo, para simular la temperatura de las partculas que explotan. De forma similar, las visualizaciones realistas de la hierba se han modelado mediante partculas de trayectoria (Figura 8.114) que surgen del suelo y que vuelven a la tierra bajo la accin de la gravedad. En este caso, las trayectorias de las partculas se pueden originar dentro de un cilindro con tapas y se podran codificar en color desde el verde hasta el amarillo. La Figura 8.115 ilustra una simulacin de un sistema de partculas de una cascada de agua. Las partculas de agua caen dede una altura fija, se desvan mediante un obstculo y entonces rebotan en el suelo. Los diferentes colores se utilizan para distinguir las trayectorias de las partculas en cada etapa. En la Figura 8.1 l se muestra un ejemplo de una animacin que simula la desintegracin de un objeto. El objeto de la izquierda se desintegra en la distribucin de partculas de la derecha. En la Figura 8.117 se proporciona una escena compuesta formada por una variedad de representaciones. La escena se model utilizando hierba con sistema de partculas y montaas fractales, adems de mapeado de texturas y otros procedimientos de sombreado de superficies.
FIGURA 8.115. Simulacin del comporiamicnu de una cascada que golpea una piedra (crculo). Las panculas de agua se desvian medianlc la roca y a continuacin rebotan en el suelo. (Cortesa Je M. lrooks and T. /.. ./. Howard, Department of Computer Science, Universidad de Manchester. )
527
FIGURA 8.117. Una escena. Ululada Camino a Paint Reyes, que muestra hierba con sistema de partculas, montaas fractales y superficies con texturas mapeadas. (Cortesa de Pixar. O 983 Pixar.)
'''3
FIGURA 8.118. Una red bidimensional de muelles, construida con constantes de elasticidad k idnticas.
FIGURA 8.119. Una fuerza externa F tira de un extremo de un muelle, con una unin rgida en el otro extremo.
(
El desplazamiento horizontal x de la posicin de un nodo bajo la influencia de una fuerza F se ilustra en la Figura 8.1 1 9. Si no se estira demasiado el muelle, podemos aproximar fielmente la cantidad de desplazamiento x desde la posicin de equilibrio mediante el empleo de la ley de Hooke:
x
F = - F = -kx
s r
(8.1/9)
donde F es la fuerza de restablecimiento igual y opuesta del muelle sobre el nodo estirado. Esta relacin tambin se mantiene en la compresin horizontal de un muelle por una cantidad .v, y tenemos relaciones similares para los desplazamientos y fuerzas en las direcciones y y z. Si los objetos son completamente flexibles, vuelven a su configuracin original cuando las fuerzas cuernas desaparecen. Pero si queremos modelar masilla, o algn otro material deformable, necesitamos modificar las caractersticas de los muelles de manera que estos no vuelvan a su forma original cuando desaparecen las fuerzas externas. Otro conjunto de fuerzas aplicadas podra deformar a continuacin el objeto de alguna otra manera.
528
FIGURA 8.120. Modelado del coinportamiento flexible de la piel de un pltano mediante una red de muellcs. (Cortesia de David Laidlaw, John Snyder, Adam Woodbnry, and Alan Barr, Computer Graphics Lab, California Institute of Technology. > 1992.)
FIGURA 8.121. Modelado del comportamiento ilexible de tela sobre muebles utilizando minimizacin de la funcin de energa. (Cortesa de Gene Greger and David E. Breen. Design Research Center. Rensselaer Polytechnic Institute. 1992 .)
(a)
(b)
(c)
FIGURA 8.122. Modelado de las caractersticas del (a) algodn, (b) la lana, y (c) una mezcla de polister y algodn mediante la utilizacin de ta minimizacin de la funcin de energa. (Cortesia de Drnid E. Breen and Donald H. House, Design Research Center, Rensselaer Polytechnic Institute, ( 1992.) En lugar de utilizar muelles, tambin podemos modelar las uniones entre los nodos con materiales elsticos y minimizar las funciones de energa de tensin para determinar la forma del objeto bajo la influencia de fuerzas externas. Este mtodo proporciona un modelo mejor para la tela, y se han ideado varias funciones de energa para describir el comportamiento de tipos diferentes de materiales textiles. Para modelar un objeto no rgido, en primer lugar establecemos las fuerzas extemas que actan sobre el objeto. Depus consideramos la propagacin de las fuerzas a travs de la red que representa al objeto. Esto conduce a un sistema de ecuaciones que debemos resolver para determinar el desplazamiento de los nodos de la red. La Figura 8.120 muestra la piel de un pltano modelada mediante una red de muelles y la escena de la Figura 8.121 muestra ejemplos de modelado de telas mediante la utilizacin de funciones de energa, con un patrn de mapeo de una textura sobre una tela. Al ajustar los parmetros de una red empleando clculos mediante funciones de energa, se pueden modelar diferentes clases de tela. La Figura 8.122 ilustra modelos de materiales como el algodn, la lana y una mezcla de polister y algodn colocados sobre una mesa.
529
Los mtodos de modelado basados en las caractersticas fsicas tambin se aplican en animaciones, para proporcionar descripciones ms precisas de las trayectorias del movimiento. Antao, las animaciones se especificaban a menudo empleando trayectorias con splines y cinemtica, donde los parmetros del movimiento se basan slo en la posicin y la velocidad. El modelado basado en las caractersticas fsicas describe el movimiento utilizando ecuaciones dinmicas, que involucran fuerzas y aceleraciones. Las descripciones de animaciones basadas en las ecuaciones de la dinmica producen movimientos ms realistas que aquellas basadas en las ecuaciones de la cinemtica.
empresarial.
Los conjuntos de datos se clasifican de acuerdo a su distribucin espacial y al tipo de datos. Los conjuntos de datos bidimensionales tienen valores distribuidos sobre una superficie, y los conjuntos de datos tridimensionales tienen valores distribuidos en el interior de un cubo, una esfera o alguna otra regin del espacio. Entre los tipos de datos se incluyen los valores escalares, los vectores, los tensores y los datos multivariates.
530
FIGURA 8.123. Un grllco de superficie financiero, que mueslra un crecimiento potencial de las acciones durante la cada de la bolsa de octubre de l*>87. El color rojo indica alta rentabilidad, y el grfico mueslra que las acciones de bajo crecimiento se comportaron mejor en la cada. (Cortesa ele Eng-Kiat Koh. Information Technology Institute. Repblica de S'mgapur y Encentuate, Inc., Cupertino, California.) que la figura se mueslra en escala de grises. La codificacin con color de un conjunto de dalos a veces requiere un trato especial, porque ciertas combinaciones de color pueden conducir a interpretaciones errneas de los datos. Los grficos de nivel se utilizan para visualizar curvas de nivel (lneas de valor constante) de un conjunto de datos escalares distribuido sobre una superficie. Las curvas de nivel se espacian en un intervalo conveniente para mostrar el rango y la variacin de los valores de los datos sobre la regin del espacio. Una aplicacin tpica es un grfico de nivel de las alturas sobre un plano de tierra. Ilabitualmente, los mtodos de nivel se aplican a un conjunto de valores de datos que estn distribuidos sobre una cuadrcula regular, como la de la Figura 8.124. Las cuadrculas regulares tienen las lineas equespaciadas, y los valores de los datos se conocen en las intersecciones de la cuadrcula. Las soluciones numricas de las simulaciones por computadora se establecen habitualmente para producir distribuciones de datos sobre cuadrculas regulares, mientras que los conjuntos de datos observados se espacian a menudo de forma irregular. Se han ideado mtodos de nivel para varias clases de cuadrctdas no regulares, pero las distribuciones no regulares de datos se convierten a menudo en cuadriculas regulares. Un algoritmo bidimensional de nivel traza las lineas de nivel desde una celda a Otra de la cuadrcula, mediante la comprobacin de las cuatro esquinas de las celdas de la cuadrcula para determinar qu aristas de la celda se cruzan con una lnea de nivel concreta. Las lneas de nivel se dibujan habitualmente como secciones de lnea recta a travs de cada celda, como se ilustra en la Figura 8.125. A veces las lneas de nivel se dibujan mediante curvas con splines, pero el ajuste de los splines puede conducir a inconsistencias y malas interpretaciones de un conjunto de datos. Por ejemplo, dos lneas de nivel con splines se podran cruzar, o las trayectorias de lneas de nivel curvadas podran no ser un verdadero indicador de las tendencias de los datos, ya que los valores de los datos slo se conocen en las esquinas de las celdas. Los paquetes de nivel pueden permitir el ajuste interactivo de las lneas de nivel al investigador para corregir cualquier inconsistencia. En la Figura 8.126 se proporciona un ejemplo con tres grficos de nivel sobre el plano xy que se superponen y que estn condificados con color y la Figura 8.127 muestra las lneas de nivel y la codificacin con color de un espacio de forma irregular.
FIGURA 8.124. Una cuadrcula regular y bidimensional con los valores de los datos en las intersecciones de las lincas de la cuadrcula. 1 .as lincas x de la cuadrcula tienen un espaciado constante Av y las lneas y de la cuadrcula tienen un espaciado constante A>\ en donde el espaciado segn los ejes x ey pueden no coincidir.
531
FIGURA 8.125. La trayectoria de una linea de nivel a travs de cinco celdas de la cuadrcula.
TIHE' 7200.
XI SU* OF 0*
l"
FIGURA 8.126. Grficos de nivel codificados con color de tres conjuntos de datos dentro de la misma regin del plano xv. {Cortesa de National Cenfer for Supercomputing Applications, Universidad de II finis en 11 bano-Champa ign.)
FIGURA 8.127. Grficos de nivel codificados con color sobre la superficie de una regin del espacio con forma de ncleo de manzana. (Cortesa de Greg Nielson. Department of Computer Science and Engineering, Universidad del Estado de Arizona.)
FIGURA 8.128. Secciones rectas de un conjunto de datos tridimensional. (Cortesa de Spvglass, Inc.)
532
FIGURA 8.129. Una superficie de nivel generada a partir de un conjunto de valores de contenido de agua obtenidos de un modelo numrico de una tormenta. {Cortesa de Bob Wilhelmson, Department of Atmospheric Sciences and he National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
FIGURA 8.130. Intersecciones de superficies de nivel con las celdas de la rejilla modeladas con parches de tringulos. En campos de datos escalares tridimensionales, podemos realizar secciones rectas y visualizar las distribuciones bidimensionales de dalos sobre las secciones. Podramos codificar con color los valores de los datos sobre la seccin o podramos visualizar curvas de nivel. Los paquetes de visualizacin proporcionan habitualmente una subrutina de corte que permite obtener secciones con cualquier ngulo. La Figura 8.128 muestra una visualizacin generada mediante un paquete comercial de obtencin de secciones. En lugar de observar secciones rectas bidimensionales, podemos dibujar una o ms superficies de nivel, que simplemente son grficos tridimensionales de nivel (Figura 8.129). Cuando se visualizan dos superficies de nivel que se superponen, la superficie exterior se hace transparente a fin de que podamos ver las formas de ambas superficies. La construccin de una superficie de nivel es similar a dibujar lneas de nivel, excepto que ahora disponemos de celdas tridimensionales en la cuadrcula y necesitamos comprobar los valores de los datos en los ocho vrtices de una celda, para localizar las secciones de una superficie de nivel. La Figura 8.130 muestra algunos ejemplos de intersecciones de superficies de nivel con las celdas de la cuadricula. Las superficies de nivel se modelan habitualmente mediante mallas de tringulos, despus se aplican algoritmos de sombreado de superficies para visualizar la forma final. El sombreado de volmenes, que es a menudo de alguna manera como a una imagen de rayos X, es otro mtodo para visualizar un conjunto de datos tridimensionales. La informacin del interior a cerca de un conjunto de datos se proyecta sobre una pantalla de visualizacin empleando los mtodos trazado de rayos presentados en la Seccin 8.20. Fn la direccin del rayo procedente de cada pxel de pantalla (Figura 8.131), los valores de los datos interiores se examinan y codifican para su visualizacin. A menudo, los valores de los datos en los puntos de la cuadricula se promedian de modo que se almacena un valor para cada vxel del espacio de datos. El modo en que los datos se codifican para su visualizacin depende de la aplicacin. Los datos ssmicos, por ejemplo, se examinan a menudo para buscar los valores mximo y mnimo en la direccin de cada rayo. Los valores se pueden entonces codificar con color para proporcionar informacin sobre el ancho del intervalo y el valor mnimo. En aplicaciones para medicina, los valores de los datos son factores de opa-
533
pxelcs
FIGURA 8.131. Visualizacin de volumen de una cuadricular regular y cartesiana de datos que emplea trazado de rayos para examinar los valores de los datos interiores.
FIGURA 8.132. Visualizacin de un conjunto de dalos del corazn de un perro, obtenida mediante el dibujo de la distancia codificada con color al valor mximo de vxel para cada pixel. (Cortesa de Patrick Moran y Clinton Potter, National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.) cidad en el rango que vara de 0 a I para capas de tejido y hueso. Las capas de hueso son completamente opacas, mientras que el tejido es de algn modo transparente (baja opacidad). En la direccin de cada rayo, los factores de opacidad se acumulan hasta que el total es mayor o igual que 1, o hasta que el rayo salga por la parte posterior de la cuadrcula tridimensional de datos. El valor de opacidad acumulada se codifica a continuacin y se visualiza como un pxel en color o en escala de grises. La Figura 8.132 muestra una visualizacin de un volumen de un conjunto de datos mdicos, que describen la estructura del corazn de un perro. En esta visualizacin de volumen, se mostr un grfico codificado con color de la distancia al valor mximo de vxel en la direccin de cada rayo pxel.
534
CAPTULO 8
Ms alio Ms baj
FIGURA 8.133. Representacin mediante Hechas de un campo vectorial sobre secciones rectas. (Cortesa del National Cerner for Snpercomputing Applications, Universidad de Illinois en Urhana-Champaign.)
nes rectas, como en la Figura 8.133, ya que puede ser complicado observar las tendencias de los datos en una regin tridimensional que est desordenada con flechas superpuestas. Las magnitudes de los valores vectoriales se pueden representar como variaciones en las longitudes de las flechas, o podramos visualizar todas las flechas del mismo tamao pero codificadas con color. Tambin podemos representar los valores vectoriales mediante el dibujo de lneas de campo, que tambin se denominan lineas de finjo. Las lneas de campo se utilizan habitualmente en campos elctricos, magnticos y gravitatorios. La magnitud de los valores vectoriales se indica mediante el espaciado de las lneas de campo, y la direccin del campo se representa mediante las tangentes (pendientes) a las lneas de campo, como se muestra en la Figura 8.134. En la Figura 8.135 se muestra un ejemplo de un grfico de lneas de flujo de un campo vectorial. Las lneas de flujo se pueden visualizar como flechas anchas, particularmente cuando hay presente un efecto remolino o vrtice. Un ejemplo de esto se proporciona en la Figura 8.136, que muestra patrones de flujo de aire con turbulencias dentro de una tormenta. En animaciones de flujo de fluidos, se puede visualizar el comportamiento del campo vectorial mediante el seguimiento de partculas en la direccin del flujo. En la Figura 8.137 se muestra un ejemplo de una visualizacin de un campo vectorial mediante el empleo tanto de lneas de flujo como de partculas.
FIGURA 8.135. Visualizacin del flujo de aire alrededor de un cilindro con una tapa semiesfrica, que se inclina ligeramente con respecto a la direccin del flujo de aire entrante. (Cortesa de M. Gerald-Yamasaki, J. Huiltquist y Sam Uselton, NASA Ames Research Center.)
asas
Vff^^SSsr
535
FIGURA 8.136. Patrones retorcidos de flujo de aire, visualizados mediante lneas de flujo anchas dentro de un grleo
(Cortesa de Bob Wihelmson, Department of Atmospheric Sciences and the National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
transparente de nivel de una tormenta.
FIGURA 8.137. Patrones de (lujo de aire, visualizados tanto con lneas de flujo como de movimiento de partculas dentro
un grfico de una superficie transparente de nivel de una tormenta. Las partculas esfricas que se elevan presentan color
(Cortesa de Bob Wihelmson, Department of Atmospheric Sciences y del National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
naranja y las que caen color azul.
A veces, slo se visualizan los mdulos de las cantidades vectoriales. Esto se hace a menudo cuando hay que mostrar mltiples cantidades en un nico punto, o cuando las direcciones no varan mucho en alguna regin del espacio, o cuando las direcciones de los vectores son menos interesantes.
(8.120)
cr.
536
Figura 8.138. Representacin de los tensores de tensin y presin mediante un disco elptico y una flecha sobre la superficie de un material en tensin. (Cortesa de Bob Haber, the National Center jor Supereomputing Appiicatiom, Universidad de Illinois en Urbana-Champaign.) Las magnitudes tensoriales se encuentran frecuentemente en materiales anisotrpicos, que presentan propiedades diferentes en distintas direcciones. Los elementos A\ xy y xz del tensor de conductividad, por ejemplo, describen las contribuciones de las componentes del campo elctrico en las direcciones de los ejes x y y z a la corriente en la direccin del eje x. Habitualmente, las magnitudes tensoriales fsicas son simtricas, de modo que el tensor slo tiene seis valores distintos. Por ejemplo, las componentes xy e yx del tensor de presin tienen el mismo valor.
y
Las tcnicas de visualizacin para representar las seis componentes de una magnitud lensorial simtrica de segundo orden se basan en idear las formas que tienen seis parmetros. Una representacin grfica de este tipo para un tensor se muestra en la Figura 8.138. Los tres elementos de la diagonal del tensor se utilizan para construir el mdulo y la direccin de la flecha, y los tres trminos situados fuera de la diagonal se utilizan para establecer la forma y el color del disco elptico. En lugar de intentar visualizar las seis componentes de una magnitud lensorial simtrica, podemos reducir el tensor a un vector o a un escalar. Empleando una representacin vectorial, podemos visualizar simplemente los valores de los elementos de la diagonal del tensor. Y aplicando operaciones de contraccin de tensores, podemos obtener una representacin escalar. Por ejemplo, los tensores de tensin y presin se pueden contraer, para generar una densidad escalar de energa de presin que se puede dibujar en puntos de un material sometido a fuerzas externas (Figura 8.139).
Resumen
537
FIGURA 8.139. Representacin de los tensores de tensin y presin mediante un grfico de la densidad de energa de presin, de una visualizacin de la propagacin de grietas en la superficie de un material en tensin. (Cortesa de liob Haber, rhe National Cenier for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
FIGURA 8.140. Un cuadro de una visualizacin animada de un campo dependiente del tiempo de datos multivariablcs mediante glifos. La parte con forma de cua del glifo, seala la direccin de una cantidad vectorial en cada punto. (Cortesa del National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
8.28 RESUMEN
Se han desarrollado muchas representaciones para modelar la amplia variedad de objetos y materiales, que podramos querer visualizar en una escena de grficos por computadora. En la mayora de ios casos, una representacin tridimensional de un objeto se sombrea mediante un paquete de software como un objeto grfico estndar, cuyas superficies se muestran como una malla poligonal. Las funciones para visualizar algunas superficies cudricas comunes, tales como las esferas y los elipsoides, se encuentran disponibles a menudo en los paquetes grficos. Las ampliaciones de las cudricas, llamadas supercudricas, proporcionan parmetros adicionales para crear una variedad ms amplia de formas de objetos. Para describir superficies curvadas flexibles y no rgidas podemos utilizar objetos sin forma para crear formas como combinaciones de abultamientos gaussianos. Los mtodos ms ampliamente utilizados en aplicaciones CAD son las representaciones con splines, que son funciones polinmicas continuas por tramos. Una curva o una superficie con splines se define mediante
538
CAPTULO 8
TABLA 8.1.
Funcin
glutWireTetrahedron glutSolidTetrahedron glu.tWireCu.be glutSolidCube glutWireOctahedron glutSolidOctahedron glutWireDodecahedron glutSolidTJodecahedron glutWirelcosahedron glutSolidlcosahedron
Descripcin Mueslra una pirmide (tetraedro) triangular con malla de alambre. Muestra un tetraedro con superficie sombreada. Mueslra un cubo con malla de alambre. Muestra un cubo con superficie sombreada. Muestra un octaedro con malla de alambre. Muestra un octaedro con superficie sombreada. Muestra un dodecaedro con malla de alambre. Muestra un dodecaedro con superficie sombreada. Muestra un icosaedro con malla de alambre. Muestra un icosaedro con superficie sombreada.
un conjunto de puntos de control y las condiciones en los lmites de las secciones del spt'me. Las lineas que conectan la secuencia de puntos de control forman el grafo de conlrol. y todos los puntos de control se encuentran dentro del armazn convexo de un objeto con splines. Las condiciones en los lmites se pueden especificar empleando derivadas paramtricas o geomtricas, y la mayor parte de las representaciones con splines utilizan condiciones paramtricas en los lmites. Los splines de interpolacin unen todos los puntos de control mientras que los splines de aproximacin no unen todos los puntos de control. Una superficie con splines se puede describir mediante el producto cartesiano de dos polinomios. Los polinomios cbicos se utilizan habitualmente para las representaciones de interpolacin, entre ios que se incluyen los splines de Hem i te. cardinales y de Kochanek-Barlels. Los splines de Bzier proporcionan un mtodo simple y potente de aproximacin para describir lneas y superficies curvadas; sin embargo, el grado del polinomio se determina mediante el nmero de puntos de conlrol y el control local sobre las formas de las curvas es difcil de lograr. Los splines B, entre los que se incluyen los splines de Bzier como un caso particular, son una representacin de aproximacin ms verstil, pero requieren la especificacin de un vector de nudos. Los splines beta son generalizaciones de los splines B que se especifican mediante condiciones geomtricas en los lmites. Los splines racionales se formulan como el cociente de dos representaciones con splines. Los splines racionales se pueden utilizar para describir cudricas y son invariantes frente a transformaciones de perspectiva de visualizacin. LJn spline B racional con un vector de nudos no uniforme se denomina habitualmente NURB. Para determinar los puntos a lo largo de una curva o superficie con splines, podemos utilizar clculos de diferencias hacia delante o mtodos de subdivisin. Entre otras tcnicas de diseo se incluyen las representaciones de barrido, los mtodos de la geometra constructiva de slidos, rboles ocales y rboles BSP. Una representacin de barrido se forma mediante una traslacin o una rotacin de una forma bidimensional a travs de una regin del espacio. Los mtodos de la geometra constructiva de slidos combinan dos o ms formas tridimensionales empleando las operaciones de conjuntos: unin, diferencia e interseccin. Los rboles ocales y los rboles BSP utilizan mtodos de subdivisin del espacio. Las representaciones de geometra fractal proporcionan mtodos altamente efectivos para describir fenmenos naturales. Podemos utilizar estos mtodos para modelar el t e n d i , los rboles, los arbustos, el agua y las nubes, y para generar patrones grficos inusuales. Un objeto fractal se puede describir mediante un procedimiento de construccin y una dimensin fractal. Entre los procedimientos de construccin de fractales se incluyen las construcciones geomtricas, los mtodos de desplazamiento del punto medio, las operaciones
Hc>uimn
539
autocuacirticas en el espacio complejo y las transformaciones de inversin. Otros mtodos de procesamiento para construir representaciones de objetos que utilizan reglas de transformacin son las gramticas de formas y los grdales. Los objetos que muestran fluidez, tales como las nubes, el humo, el luego, el agua y aquello que explota o implota, se pueden modelar mediante sistemas de partculas. Empleando esta tcnica de representacin, describimos un objeto mediante un conjunto de partculas y las reglas que gobiernan los movimientos de las partculas. Los mtodos de modelado basados en las caractersticas fsicas se pueden utilizar para describir las caractersticas de un objeto flexible, tal como una cuerda, una goma, o la tela. Esta tcnica representa un meterial mediante una cuadrcula de secciones semejantes a los resortes y calcula las deformaciones empleando las fuer/as que actan sobre el objeto.
RESUMEN DE FUNCIONES OpenGL PARA SUPERFICIES CUDRICAS Y SUPERFICIES CBICAS.
TABLA 8.2.
Funcin
glutWireSphere gtutSolidSphere giutWireCone glutSolidCone glutWireTorus
Descripcin
Muestra una esfera de GLUT almbrica. Muestra una esfera de G L L T con superficie sombreada. Muestra un cono de GLUT almbrico. Muestra un cono de GLUT con superficie sombreada. Muestra un loro de GLUT de seccin recta circular con malla de alambre.
glutSolidTorus
Muestra una telera de GLUT almbrica. Muestra una tetera de GLUT con superficie sombreada. Acva el sombreador de cudricas de GLU para un objeto cuyo nombre se haya definido mediante la declaracin: GLUquadricObj
nameOfObject;
gluuadricDrawStyle
Muestra una esfera de GLU. Muestra un cono, un cilindro o un cilindro con tapas de GLU. Muestra una corona circular plana o un disco de GLU. Muestra una seccin de una corona circular plana o un disco de GLU. Elimina un objeto de cudrica de GLU. Define las orientaciones de dentro y fuera de un objeto de cudrica de GLU.
gluQuadricNormals
o
Especifica cmo se deberan generar los vectores normales a la superficie de un objeto de cudrica de GLU. Especifica una funcin de atencin a errores de un objeto de cudrica de GLU.
gluQuadricCallback
540
TABLA 8.3.
Funcin
glMapl
Descripcin Especifica los parmetros de visualizacin de curvas de Bzier, los valores de los colores, etc., y activa eslas subrutinas empleando g l E n a b l e . 1 aleula un puni en coordenadas de una curva de Bzier. Especifica el nmero de subdivisiones equiespaciadas entre dos parmetros de una curva de Bzier. Especifica el modo de visualizacin y el rango entero de una visualizacin de una curva de Bzier. Especifica los parmetros de visualizacin de superficies de Bzier, los valores de los colores, etc., y activa estas subrulinas empleando g l E n a b l e . Calcula un punto en coordenadas de una superficie de Bzier. especifica una cuadrcula bidimensonal con subdivisiones equiespaciadas sobre una superficie de Bzier. Especifica el modo de visualizacin y el rango entero de una cuadricula bidimensional de una superficie de Bzier.
glEvalCoordl glMapGridl
glEvalMeshl
glMap2
glEvalCoord2 glMapGrid2
glEvalMesh2
Las tcnicas de visualizacin utilizan los mtodos de los grficos por computadora para analizar conjuntos de datos, entre los que se incluyen los valores escalares, vectoriales y tensoriales en combinaciones variadas. Las representaciones de datos se pueden realizar mediante codificacin con color o mediante la visualizacin de formas de objetos diferentes. Las caras de la superficie poligonal de un objeto grfico estndar se pueden especificar en OpenGL empleando las (unciones de primitivas de polgonos, tringulos y cuadrilteros. Tambin, las subnitinas de GLUT se encuentran disponibles para mostrar los cinco poliedros regulares. Se pueden visualizar con las funciones de G L U T y GLU esferas, conos y otros objetos con superficies cudricas, y se proporciona una subrutina de G L U T para la generacin de la tetera de Utah con superficies cbicas. La biblioteca del ncleo de OpenGL contiene funciones para producir splines de Bzier, y se proporcionan las funciones de GLU para especificar splines B y curvas de recorte de superficies con splines. Las Tablas 8.1 a 8.4 resumen las funciones para poliedros, cudricas, cbicas y splines estudiadas en este captulo.
REFERENCIAS
Barr (1981) contiene un estudio detallado de las supercudricas. Para obtener ms informacin sobre el modelado con objetos sin forma, consulte Blinn (1982). El modelo de metabolas se estudia en Nishimura (1985); el modelo de objetos suaves se estudia en Wyville, Wyville y McPheeters (1987). Entre las fuentes de informacin sobre represente iones con curvas y superficies paramtricas se incluyen Bzier (1972), Barsky y Beatty (1983), Barsky (1984), Kochanek y Bartels (1984). Huitric y Nahas (1985), Mortenson (1985), Farin (1988), Rogcrs y Adams (1990), y Piegl y Tiller (1997). Los algoritmos para aplicaciones con rboles octales y rboles cuaternarios se proporcionan en Doctor y Torberg (1981), Yamaguchi, Kunii, y Fujimura (1984), y Brunet y Navazo (1990). Gordon y Chen (1991) muestran los mtodos de los rboles BSP. Y Requicha y Rossignac (1992) estudian los mtodos de modelado de slidos.
Referencias
541
Descripcin
Activa l soiiibreador de G L U para splines B para un objeto cuyo nombre se ha definido mediante la declaracin GLUnurbsObj * b a p l ineName.
g l u B e g i nCu r v e
(. omien/a l ; i asignacin de valores de los psfmen"DS de mu GUTVa espeeillca de una o ms secciones con splines B.
gluEndCurve
con splines B.
g1uNurbsCurve Especifica los valores de los parmetros de una seccin de una curva con nombre con splines I). gluDeleteNurbsRenderer gluNurbsProperty gluGetNurbsProperty gluBeginSurface elimina un spline B especfico. Especifica las opciones de sombreado de un spline B. Determina el valor actual de una propiedad de un spline I t . Comienza la asignacin de valores de los parmetros de una superficie especfica de una o ms secciones con splines B. gJuEndSurface Seala el fin de las especificaciones de los parmetros de una superficie con splines B. g1uNurbaS ur f a c e Especifica los valores de los parmetros de una seccin de una superficie con nombre con splines B. gluLoadSamplingMatrices Especifica las matrices de visionado y de transformacin geomtrica que se deben utilizar en las subrutinas de muestreo y seleccin de un
spline B.
qluNurbsCallback gluNurbsCallbackData Especifica la funcin de atencin a un evento para un spline B. Especifica los valores de los datos que se deben pasar a la funcin de atencin a un evento. gluBeginTrim Comienza la asignacin de los valores de los parmetros de una curva de recorte de una superficie con splines B. gluEndTrim Seala el fin de las especificaciones de los parmetros de una curva de recorte. gluPwlCurve Especifica los valores de los parmetros de una curva de recorte de una superficie con splines B.
Para obtener ms informacin sobre representaciones fractales, consulle Mandelbrot (1977 y 1982), Fournier, Fussel, y Carpenter (1982), Norton (1982), Peitgen y Riehter (1986), Petgen y Saupe (1988), Hart, Sandin, y Kauffman (1989), Koh y Hearn (1992), y Barnslcy (1993). En Fournier y Reeves (1986) y en lovvler, Meinhardt y Prusinkiewiez (1992) se proporcionan mtodos de modelado de varios fenmenos naturales. Las gramticas de formas se muestran en Glassner (1992) y los sistemas de partculas se estudian en Reeves (1983). Los mtodos basados en las caractersticas fsicas se abordan en Barzel (1992). En Hearn y Baker (1991) se proporciona una introduccin general a los algoritmos de visualizacin. Se puede encontrar informacin adicional sobre tcnicas especficas de visualizacin en Sabin (1985), Lorensen
5 4 2
CAPTULO 8
y Cline (1987), Drebin, Carpenter y Hanrahan (1988), Sabe lia (1988), Upson y Keeler (1988), Frcnkel (1989), Nielson, Shriver y Rosenblum (1990), y Nielson (1993). En Tulle (1990, 1997, y 2001) se proporcionan lneas de actuacin para representaciones visuales de informacin. Se pueden encontrar tcnicas de programacin de varias representaciones en Glassner (1990), Arvo ( I 9 9 | ) , Kirk (1992), Heckbcrt (1994), y Paeth (1995). Se pueden encontrar ejemplos de programcin adicionales de spiines de Bzier, splines B y funciones para curvas de recorte con OpenGL en Woo, Neider. Davis y Shreincr (1999). Kilgard (1996) estudia las funciones de GLUT para visualizar poliedros, superficies cudricas y la telera de Utah. Y en Shreiner (2000) se muestra un listado completo de las funciones OpcnGL de la biblioteca del ncleo y de (LU.
EJERCICIOS
8.1 8.2 8.3 8.4 8.5 8.6 8 .7 8.8 Establezca un algoritmo para convertir una esfera en una representacin mediante una malla poligonal. Establezca un algoritmo para convertir un elipsoide en una representacin mediante una malla poligonal. Establezca un algoritmo para convertir un cilindro en una representacin mediante una malla poligonal. Establezca un algoritmo para convertir un superelipsoide en una representacin mediante una malla poligonal. Establezca un algoritmo para convertir una metabola en una representacin mediante una malla poligonal. Escriba una subrutina para visualizar una curva bidimeiisional con splines cardinales, que utilice un conjunto de puntos de control del plano xy como entrada. Escriba una subrutina para visualizar una curva bidimensional de Kochanek-Bartels, que utilice un conjunto de punios de control del plano xy como entrada. Cules son las funciones de combinacin de las curvas de Bzier en el caso de tener tres puntos de control especificados en el plano xy'? Dibuje cada funcin e identifique los valores mnimo y mximo de las funciones de combinacin. Cules son las funciones de combinacin de las curvas de Bzier en el caso de tener tres puntos de control especificados en el plano xy? Dibuje cada funcin e identifique los valores mnimo y mximo de las funciones de combinacin. Modifique el programa de ejemplo de la Seccin 8.10 para visualizar una curva cbica de Bzier, utilizando como entrada un conjunto de cuatro puntos de control del plano xy. Modifique el ejemplo de la Seccin X. 10 para visualizar un curva de Bzier de grado ;/ da un conjunto de /; puntos de control del plano xy. I, utilizando como entra-
8.')
8.10 8.M
8.12 Complete el ejemplo de programacin con OpenGL de la Seccin 8.18 para visualizar cualquier curva cbica de Bzier. utilizando como entrada un conjunto de cuatro puntos de control del plano xy. 8.13 Complete el ejemplo de programacin con OpenGL de la Seccin 8.18 para visualizar cualquier curva espacial cbica de Bzier, utilizando como entrada un conjunte de cuatro puntos de control del plano xy. Utilice una proyeccin ortogonal para visualizar la curva y los parmetros de visualizacin como entrada. 8.14 Escriba una subrutina que se pueda utilizar para disear formas de curvas bidimensionales de Bzier que posean continuidad por tramos de primer orden. El nmero y la posicin de los puntos de control de cada seccin de la curva se deben especificar como entrada. Escriba una subrutina que se pueda utilizar para disear formas de curvas bidimensionales de Bzier que posean continuidad por tramos de segundo orden. El nmero y la posicin de los puntos de control de cada seccin de la curva se deben especificar como entrada.
8.15
8.16 Modifique el programa de ejemplo de la Seccin 8.10 para visualizar cualquier curva cbica de Bzier, utilizando como entrada un conjunto de cuatro puntos de control del plano xy. Emplee el mtodo de la subdivisin para calcular los puntos de la curva.
Ejercicios
8.17
543
Modifique el programa de ejemplo de la Seccin S.I0 para visualizar cualquier curva cbica de Bzier, utilizando como entrada un conjunto de cuatro puntos de control del plano xy. Emplee diferencias hacia adelante para calcular los puntos de la curva.
Cules son las funciones de combinacin de una curva con </= 5? Cules son las funciones de combinacin de una curva con
splines
splines
d m 67
Modifique el programa de ejemplo de la Seccin X. 10 para visualizar una curva con hacia adelante para calcular los puntos de la curva.
spline
forme y peridica, utilizando como entrada un conjunto de puntos de control del plano xy. Emplee diferencias
8.21
8.22 8.23 8.24 8.25 8.26 8.27 8.28
Modifique el programa del ejemplo anterior para visualizar la curva con spline racional de Bzier.
splines
Escriba una subrutina para visualizar cualquier cnica en el plano .vv utilizando una representacin mediante un Escriba una subrutina para visualizar cualquier cnica en el plano .vv utilizando una representacin mediante un
spline B racional.
Desarrolle un algoritmo para calcular el vector normal a una supcrlice de Bzier en un punto P(u, v). Obtenga las expresiones para calcular las diferencias hacia delante para una curva cuadrtica. Obtenga las expresiones para calcular las diferencias hacia delante para una curva cbica. Establezca los procedimientos para generar la descripcin de un objeto tridimensional a partir de la entrada de los parmetros que definen el objeto en funcin de un barrido de traslacin de una forma bidimensional. Establezca los procedimientos para generar la descripcin de un objeto tridimensional a partir de la entrada de los parmetros que definen el objeto en funcin de un barrido de rotacin de una forma bidimensional. 8.29 8.3 8.31 8.32 8.33 8.34 8.35 8.36 8.37 8.38 idee un algoritmo para generar objetos slidos como combinaciones de formas primitivas tridimensionales, tules como un cubo y una esfera, empleando los mtodos de la geometra constructiva de slidos. Modifique el algoritmo del ejercicio anterior de manera que las formas primitivas se definan con estructuras con rboles ocales. Desarrolle un algoritmo para codificar una escena bidimensional como una representacin mediante un rbol cuaternario. Desarrolle un algoritmo para transformar una representacin mediante rboles cuaternarios en pxeles del bfer de imagen. Escriba una subrutina para convertir una descripcin mediante una malla poligonal de un objeto tridimensional en un rbol oetal. Empleando un mtodo aleatorio de desplazamiento del punto medio, escriba una subrutina para crear un contorno de una montaa, comenzando por una lnea horizontal del plano vv. Escriba una subrutina para calcular las alturas sobre un plano de tierra empleando el mtodo de desplazamiento aleatorio del punto medio, a partir de un conjunto de alturas en las esquinas del plano de tierra. Escriba un programa para visualizar un copo fractal de nieve (curva de Koeh) para un nmero de iteraciones dado. Escriba un programa para generar una curva fractal con un nmero de iteraciones concreto, empleando uno de los generadores de la Figura 8.73 o la Figura 8.74. Cul es la dimensin fractal de la curva? Escriba un programa para generar curvas fractales empleando la funcin autocuadrea/"(z) = r + X, donde la constante X se especifica como entrada. 8.39 8.40 Escriba un programa que genere curvas fractales usando la funcin autocuadrlica/U) = / ( r + 1). donde i = yf-i. Modifique el ejemplo de programacin de la Seccin 8.23 para utilizar niveles de color adicionales en la visualizacin de los lmites de las regiones alrededor del conjunto de Mandelbrot.
544 8.41 8.42 8.43 8.44 8.45 8.46 8.47 8.48 8.49 8.50 8.51
CAPTULO 8 Representaciones de objetos tridimensionales Modifique el programa del ejercicio anterior para permitir que los colores y el nmero de niveles de color se proporcionen como entradas. Modifique el programa del ejercicio anterior para seleccionar y visualizar cualquier regin frontera rectangular (el rea de ampliacin) alrededor del conjunto de Mandelbrot. F.scriba una subrutina para implementar la inversin de puntos, Ecuacin 8.118, para un crculo y un conjunto de puntos especficos. Idee un conjunto de reglas de sustitucin geomtricas para alterar la forma de un tringulo equiltero. Escriba un programa para el ejercicio anterior que muestre las etapas de la conversin del tringulo. Escriba un programa para modelar y visualizar una esfera del plano AT que explota, utilizando un sistema de partculas. Modifique el programa del ejercicio anterior para explotar un petardo (cilindro). Idee una subrutina para modelar un trozo pequeo rectangular de tela como una cuadrcula de muelles idnticos. Escriba una subrutina para visualizar un conjunto bidimensional de datos escalares empleando una representacin mediante pseudocolor. Escriba una subrutina para visualizar un conjunto bidimensional de datos empleando lineas de nivel. Escriba una subrutina para visualizar un conjunto bidimensional de datos vectoriales, empleando una representacin con Hechas para los valores vectoriales. Utilice una flecha de tamao fijo con diferentes codificaciones de color.
Clasificacin de los algoritmos de deteccin de superficies visibles Deteccin de caras posteriores Mtodo del bfer de profundidad Mtodo del bfer A Mtodo de la lnea de exploracin Mtodo de ordenacin de la profundidad Mtodo del rbol BSP Mtodo de la subdivisin de reas
Mtodos de rboles ocales Mtodo de proyeccin de rayos Comparacin de los mtodos de deleccin de visibilidad Superficies curvas
9 . 1 3 Mtodos de visibilidad para imgenes almbricas 9.14 9.15 Funciones OpenGL de deteccin de visibilidad Resumen
Uno de los problemas principales en la generacin de imgenes grficas realistas consiste en determinar qu cosas son visibles dentro de una escena desde una posicin de visualizacin seleccionada. Son diversas las tcnicas que podemos utilizar para llevar a cabo esta larca y se han desarrollado numerosos algoritmos para la eficiente identificacin y visualizacin de objetos visibles en distintos tipos de aplicaciones. Algunos mtodos requieren ms memoria, otros consumen un mayor tiempo de procesamiento y algunos slo pueden aplicarse a tipos especiales de objeto. Qu mtodo elijamos para una aplicacin concreta puede depender de tactores tales como la complejidad de la escena, el tipo de los objetos que haya que mostrar, el equipo grfico disponible y si se necesitan generar imgenes estticas o animadas. Estos diversos algoritmos se denominan mtodos de deteccin de superficies visibles. En ocasiones, tambin se llamaba mtodos de eliminacin de superficies ocultas, aunque puede que existan sutiles diferencias entre la identificacin de superficies visibles y la eliminacin de superficies ocultas. Con una imagen almbrica, por ejemplo, puede que no queramos eliminar las superficies ocultas, sino slo mostrarlas con contornos punteados o con algn otro tipo de identificacin, con el fin de retener la informacin acerca de la forma del objeto.
548
Aunque existen importantes diferentes en los enfoques bsicos adoptados por los diversos algoritmos de deteccin de superficies visibles, la mayora de ellos utilizan tcnicas de ordenacin y coherencia para mejorar la velocidad. La ordenacin se usa para facilitar las comparaciones de profundidad, ordenando las superficies individuales de una escena de acuerdo con su distancia con respecto al plano de visualizacin. Los mtodos de coherencia se emplean para aprovechar las regularidades de una escena. Cabe esperar que una lnea de barrido individual contenga intervalos (recorridos) con intensidades de pxel constantes, y los patrones de las lneas de barrido a menudo cambian muy poco de una lnea a la siguiente. Las imgenes de las secuencias de animacin slo contienen cambios en la vecindad de los objetos en movimiento. Asimismo, a menudo pueden establecerse relaciones constantes entre los objetos de una escena.
fly
O:
/;<0
< )
g /
donde A, B C y D son los parmetros del plano correspondiente al polgono. Cuando este punto se encuentre a lo largo de la lnea de visin que da a la superficie, tenemos que estar mirando a la parte posterior del polgono. Por tanto, podemos utilizar la posicin de visualizacin para detectar las caras posteriores. Podemos simplificar el test de caras posteriores considerando la direccin del vector normal N para una superficie poligonal. Si V es un vector en la direccin de visualizacin procedente de nuestra posicin de cmara, como se muestra en la Figura 9- I. un polgono ser una cara posterior si,
V I C W
V ,-N>O
V
Adems, si las descripciones de los objetos han sido convertidas a coordenadas de proyeccin y nuestra direccin de visualizacin es paralela al eje z , slo ser necesario tener en cuenta la componente z del vector normal N.
v
En un sistema de visualizacin que cumpla con la regla de la mano derecha y que tenga la direccin de visualizacin definida segn el eje z negativo (Figura 9.2), un polgono ser una cara posterior si la componente z, C de su vector normal N satisface la condicin C < 0. Asimismo, no podremos ver ninguna cara cuya normal tenga componente z de valor C ~ 0, ya que nuestra direccin de visualizacin ser tangente a dicho polgono. Asi, en general, podemos etiquetar cualquier polgono como una cara posterior si su vector normal tiene una componente z cuyo valor satisfaga la desigualdad:
v
C<()
(9.2)
Pueden utilizarse mtodos similares en los paquetes que empleen un sistema de visualizacin que cumpla con la regla de la mano izquierda. En estos paquetes, los parmetros del plano A, 5, C y D pueden calcularse a partir de las coordenadas de los vrtices del polgono especificados en sentido de las agujas del reloj (en lugar de en el sentido contrario a las agujas del reloj que se emplea en los sistemas que cumplen con la regla de la mano derecha). La desigualdad . I continuar entonces siendo vlida para los puntos situados detrs del
N=
<A ti. C)
549
FIGURA 9.2. Una superficie poligonal con parmetro del plano C < 0 en un sistema de coordenadas de visualizacin que cumpla con la regla de la mano derecha ser una cara posterior cuando la direccin de visualizacin est definida segn el eje z negativo.
v
FIGURA 9.3. Vista de un poliedro cncavo con una cara parcialmente oculta por otras caras del objeto. polgono. Asimismo, las caras posteriores tendrn vectores normales que se alejan de la posicin de visualizacin y que pueden identificarse mediante la desigualdad C > 0 cuando la direccin de visualizacin se define segn el eje z positivo. Examinando el parmetro Cpara las diferentes superficies planas que describen un objeto, podemos identificar inmediatamente todas las caras posteriores. Para un nico poliedro convexo, como la pirmide de la Figura 9.2, este test identifica todas las superficies ocultas de la escena, ya que cada superficie ser completamente visible 0 completamente oculta. Asimismo, si una escena slo contiene poliedros convexos no solapados, de nuevo todas las superficies ocultas podrn ser identificadas con el mtodo de la cara posterior. Para otros objetos, como el poliedro cncavo de la Figura 9.3, es necesario efectuar ms comprobaciones para determinar si hay caras adicionales que estn parcial o totalmente oscurecidas por otras caras. Una escena general cualquiera contendr objetos solapados a lo largo de la lnea de visin, por lo que necesitaremos determinar si los objetos tapados estn parcial o completamente ocultos por otros objetos. En general, la eliminacin de caras posteriores permite eliminar aproximadamente la mitad de las superficies poligonales de una escena, con lo que nos ahorramos tener que aplicar tests adicionales de visibilidad.
v
550
despus de haber completado el procesamiento de todas las superficies. La implementacin del algoritmo del bfer de profundidad se suele realizar en coordenadas normalizadas, de modo que los valores de profundidad van desde 0 en el plano de recorte prximo (el plano de visualizacin) a 1.0 en el plano de recorte lejano. ("orno el nombre de este mtodo indica, se requieren dos zonas de bfer. Se utiliza un bfer de profundidad Pira almacenar los valores de profundidad de cada posicin (.v, y) a medida que se procesan las superficies, y en el bfer de imagen se almacenan los valores de color de las superficies para cada posicin de pxel. Inicialmenle. todas las posiciones en el bfer de profundidad tienen asignado el valor 1.0 (profundidad mxima) y el bfer de imagen (bfer de refresco) se inicializa con el color de fondo. A continuacin se procesa cada una de las superficies enumeradas en las tablas de polgonos, de linea en linea, calculando el valor de profundidad en cada posicin de pxel (\\y). Esta profundidad calculada se compara con el valor previamente almacenado en el bfer de profundidad para dicha posicin de pxel. Si la profundidad calculada es menor que el valor almacenado en el bfer de profundidad, se almacena el nuevo valor de profundidad y el color de superficie para dicha posicin se calcula y se almacena en la correspondiente direccin de pxel dentro del bfer de imagen. Los pasos de procesamiento para el mtodo del bfer de profundidad se resumen en el siguiente algoritmo, suponiendo que los valores de profundidad estn normalizados en el rango que va de 0.0 a 1.0, con el plano de visualizacin a profundidad = 0. Tambin podemos aplicar este algoritmo para cualquier otro rango de profundidades, y algunos paquetes grficos permiten al usuario especificar el rango de profundidades sobre el que hay que aplicar el algoritmo del bfer de profundidad.
depthBuff (x, y)
Despus de que todas las superficies hayan sido procesadas, el bfer de profundidad contendr ios valores de profundidad de las superficies visibles y el bfer de imagen contendr los correspondientes valores de color de dicha superficie.
Dados los valores de profundidad para los vrtices de cualquier polgono en una escena, podemos calcular la profundidad en cualquier otro punto del plano que contiene al polgono, fin la posicin de superficie ( A , y), la profundidad se calcula a partir de la ecuacin del plano:
Para cualquier lnea de barrido (figura .5) las posiciones x horizontales adyacentes para lnea difieren en 1 y los valores verticales y en lneas de barrido adyacentes dilieren en 1 . Si la profundidad de la posicin (v, y) es z. entonces la profundidad z' de la siguiente posicin (.v * I. y) de la lnea de barrido se obtendr a partir de la Ecuacin .4 como:
551
FIGURA 9.4. les superficies que se solapan para la posicin de pxel ( A\ y) del plano de visualizacin. La superficie visible tiene el menor de los valores de profundidad.
,
=
-A(X + \)-BY-D
j 3
m >
(9.6) El coccnic -A/C es constante para cada superficie, por lo que los sucesivos valores de profundidad en una lnea de barrido se obtienen a partir de los valores anteriores mediante una nica suma. Procesando las posiciones de pxel de izquierda a derecha en cada lnea de barrido, comenzamos calculando la profundidad en una arista del polgono situada a la izquierda que intersecte dicha lnea de barrido (Figura 9.6). Para cada posicin sucesiva a lo largo de la lnea de barrido, calculamos entonces el valor de profundidad utilizando la Ecuacin 9.6. x' = x-
m
donde m es la pendiente de la arista (Figura 9.7). Los valores de profundidad a medida que se desciende por esta arista se pueden obtener recursivamente mediante.
x x + I.
Figura 9.5. A partir de la posicin (A, y) en una linca de barrido, la siguiente posicin de la lnea tiene las coordenadas (x + I, y) y la posicin situada inmediatamente debajo en la siguiente lnea de barrido tiene coordenadas (x, y - I).
552
CAPTULO 9 Mtodos de deteccin de superficies visibles lnea de barrido superior lnea de barrido y
lnea de barrido inferior FIGURA 9.6. Lneas de barrido que interscctan una cara poligonal.
FIGURA 9.7. Posiciones de interseccin en lincas de barrido sucesivas a lo largo de una arista izquierda de un polgono.
Alm + B
z
(9.7)
Si el procesamiento se efecta descendiendo por una arista vertical, la pendiente es infinita y los clculos recursivos se reducen a:
c
Una tcnica alternativa consiste en utilizar un mtodo del punto medio o un algoritmo de tipo Bresenham para determinar los valores x iniciales a lo largo de las aristas, para cada lnea de barrido. Asimismo, este mtodo puede aplicarse a superficies curvas determinando los valores de profundidad y de color en cada punto de proyeccin de la superficie. Para las superficies poligonales, el mtodo del bfcr de profundidad es muy fcil de implementar y no requiere ninguna ordenacin de las superficies de la escena, aunque lo que s hace falta es disponer de un segundo bfer, adems del bfer de refresco. Un sistema con una resolucin de 1280 por 1024, por ejemplo, requerira ms de 1.3 millones de posiciones en el bfer de profundidad, debiendo cada posicin contener los bits suficientes como para representar el nmero de incrementos de profundidad necesarios. Una forma de reducir los requisitos de almacenamiento consiste en procesar una seccin de la escena cada vez, utilizando un bfer de profundidad menor. Despus de procesada cada seccin de visualizacin, el bfer se reutiliza para la siguiente seccin. Adems, el algoritmo bsico del bfer de profundidad realiza a menudo clculos innecesarios. Los objetos se procesan en orden arbitrario, de modo que puede calcularse un color para un punto de la superficie que luego ser sustituido por el de otra superficie ms prxima. Para aliviar parcialmente este problema, algunos paquetes grficos proporcionan opciones que permiten al usuario ajustar el rango de profundidades para comprobacin de superficies. Esto permite, por ejemplo, excluir los objetos distantes de las comprobaciones de profundidad. Utilizando esta opcin, podramos incluso excluir objetos que se encuentren muy prximos al plano de proyeccin. Normalmente, los sistemas infogrficos sofisticados incluyen implementaciones hardware del algoritmo de bfer de profundidad.
553
Si el campo de profundidad es no negativo, el nmero almacenado en dicha posicin es la profundidad de una superficie que se solapa con la correspondiente rea de pxel. Entonces, el campo de datos de superficie almacena diversa informacin sobre la superficie, como el color existente en dicha posicin y el porcentaje de recubrimiento del pxel, como se ilustra en la Figura 9.9(a). Si el campo de profundidad para una posicin del bfer A es negativo, esto indica mltiples contribuciones de superficies al color del pxel. El campo de color almacena entonces un puntero a una lista enlazada de datos de superficie, como en la Figura 9.9(b). La informacin de superficie que se almacena en el bfer A incluye,
superficie opaca de fondo
FIGURA 9.8. La visualizacin de una superficie opaca a travs de una superficie transparente requiere mltiples entradas de color y la aplicacin de operaciones de mezcla de color.
profundidad ^ 0
(a)
profundidad < 0
info Superf l
info Superf2
FIGURA 9.9. Dos posibles organizaciones para la informacin de superficie en la representacin de una posicin de pxel en el bfer A. Cuando slo hay una nica superficie solapada en el pixel, la profundidad de la superficie, su color y otras informaciones se almacenan como en (a). Cuando hay ms de una superficie solapada, se almacena una lista enlazada de datos de superficie, como en (b).
554
CAPTULO 9 Mtodo* de deteccin de superficies visibles componenlcs de intensidad RGB parmetro de opacidad (porcentaje de transparencia) profundidad porcentaje de recubrimiento del rea identificador de la superficie otros parmetros de representacin de la superficie
El esquema de deteccin de visibilidad mediante bfer A puede implemcntarse utilizando mtodos similares a los del algoritmo del bfer de profundidad. Las lneas de barrido se procesan para determinar cunta parte de cada superficie cubre cada posicin de pxel en las lneas de barrido individuales. Las superficies se subdividen en mallas poligonales y se recortan de acuerdo con ios contornos del pxel. Utilizando los factores de opacidad y el porcentaje de recubrimiento de la superficie, los algoritmos de representacin calculan el color de cada pxel como una media de las contribuciones de todas las superficies solapadas.
555
Para las lneas de barrido 2 y 3 de la Figura 9.10, la lista de aristas activas contiene las aristas AD, EH, BC y FG. A lo largo de la lnea de barrido 2, entre las aristas AD y EH slo est activado el indicador de la superficie S pero entre las aristas EH y BC, estn activados los indicadores de ambas superficies. Por tanto, es necesario realizar un clculo de profundidad cuando nos encontremos la vista EH, utilizando los coeficientes de los respectivos planos de las dos superficies. Para este ejemplo, asumimos que la profundidad de la superficie & es menor que la de Sp por lo que se asignarn los valores de color de la superficie S a todos los pxelcs de la lnea de barrido hasta encontrar la arista BC. Entonces, el indicador de superficie de S, se desactiva, almacenndose los colores correspondientes a la superficie S hasta alcanzar la arista FG. Ya no hacen falta ms clculos de profundidad, porque asumimos que la superficie S permanece detrs de S una vez que hemos establecido la relacin de profundidades en la arista EH. Podemos aprovechar la coherencia entre lneas de barrido al pasar de una lnea de barrido a la siguiente. En la Figura 9.10, la lnea de barrido 3 tiene la misma lnea de listas activas que la lnea de barrido 2. Puesto que no se han producido cambios en las intersecciones de las lneas, vuelve a ser innecesario realizar clculos de profundidad entre las aristas EH y BC. Las dos superficies deben estar en la misma orientacin que se ha determinado en la lnea de barrido 2, por lo que pueden introducirse los colores de la superficie S sin necesidad de clculos adicionales de profundidad.
r 2 2 } }
Lnea de barrillo 1 . 4
s
>
J.
FIGURA 9.10. Lneas de barrido que cruzan la proyeccin de dos superficies 5, y S sobre el plano de visualizacin. Las lneas punteadas indican los contornos de secciones ocultas de una superficie.
2
Lnea subdivisora
Lnea subdivisora
Lnea subdivisora
FIGURA 9.11. Superficies solapadas que se inlersectan o que se superponen de forma cclica y que se ocultan alternativamente unas a otras.
556
CAPTULO 9
Con este mtodo de la lnea de barrido puede procesarse cualquier nmero de superficies poligonales solapadas. Los indicadores correspondientes a las superficies se activan on para indicar si una posicin est dentro o fuera y slo se realizan clculos de profundidad en las aristas de las superficies solapadas. Este procedimiento funciona correctamente slo si las superficies no se cortan y si no se solapan cclicamente de alguna forma (Figura 9 . 1 1 ) . Si en una escena se produce algn tipo de solapamiento cclico, podemos dividir la superficie para eliminar dichos solapamientos. Las lneas punteadas de la figura indican dnde podran subdividirse los planos para formar dos superficies diferentes, con el fin de eliminar los solapamientos cclicos.
9.6
Utilizando operaciones tanto en el espacio de imagen como en el espacio de objetos, el mtodo de ordenacin de la profundidad lleva a cabo las siguientes funciones bsicas: (1) (2) Se ordenan las superficies en orden decreciente de profundidades. Se digitalizan las superficies por orden, comenzando por la superficie de mayor profundidad.
Las operaciones de ordenacin se llevan a cabo tanto en el espacio de imagen como en el espacio de objetos, y la digitalizacin de las superficies de los polgonos se realiza en el espacio de imagen. Este mtodo de deteccin de visibilidad se denomina a menudo algoritmo del pintor. Al dibujar una acuarela o un leo, el artista pinta primero los colores de fondo. A continuacin, aade los objetos ms distantes y luego los ms prximos. En el paso final, se pinta el primer plano sobre el fondo y sobre los objetos ms distantes. Cada capa de color cubre la capa anterior. Utilizando una tcnica similar, primero ordenamos las superficies de acuerdo con su distancia respecto al plano de visualizacin. Los valores de color de la superficie ms lejana pueden entonces introducirse en el bfer de refresco. Si procesamos cada superficie sucesiva por turno (en orden de profundidad decreciente), estaremos pintando la superficie en el bfer de imagen sobre los colores de las superficies previamente procesadas. El almacenamiento de ios colores de las superficies de los polgonos en el bfer de imagen de acuerdo con la profundidad se lleva a cabo en varios pasos. Suponiendo que estemos visualizando la escena segn la direccin las superficies se ordenan en la primera pasada de acuerdo con el valor de z ms pequeo de cada superficie. La superficie .S' situada al final de la lista (es decir, la superficie con mayor profundidad) se compara entonces con las otras superficies de la lista para ver si hay solapamientos de profundidad. Si no es as, S e s la superficie ms distante y se procede a digitalizarla. La Figura 9 . 1 2 muestra dos superficies que se solapan en el plano xv, pero que no tienen solapamiento de profundidad. Este proceso se repite a continuacin para la siguiente superficie de la lista. Mientras que no haya solapamientos, se va procesando cada superficie por orden de profundidad hasta que se hayan digitalizado todas. Si se detecta un solapamiento de superficie en cualquier punto de la lista, ser necesario efectuar algunas comparaciones adicionales para determinar si hay que reordenar alguna de las superficies. Habr que realizar los siguientes tests para cada superficie que tenga un solapamiento de profundidad con 5. Si alguno de estos tests se cumple, no ser necesario reordenar S y la superficie que est siendo comprobada. Los tests se enumeran en orden de dificultad creciente: (1) (2) Los rectngulos de contorno (extensiones de coordenadas) en las direcciones xy de las dos superficies no se solapan. La superficie S est completamente detrs de la superficie solapada, en relacin con la posicin de visualizacin. La superficie solapada est completamente delante de S en relacin con la posicin de visualizacin. Las proyecciones de las aristas de contorno de las dos superficies sobre el plano de visualizacin no se solapan. Estos test se realizan en el orden indicado y se salla a la siguiente superficie solapada en cuanto se delecte que alguno de los tests es cierto. Si todas las superficies solapadas pasan al menos uno de estos tests, S ser
557
"lili
tnin -
m
x .
mm
max
Vi
FIGURA 9.13. Dos superficies con solapamiento de profundidad pero que no se solapan en la direccin x.
la superficie ms distante, no siendo necesario efectuar ninguna reordenacin y pudiendo por tanto digitali-
zar&
El test l se realiza en dos partes. Primero se comprueba el solapamiento en la direccin x y luego en la direccin y. Si no hay solapamiento de las superficies en ninguna de estas direcciones, los dos planos no pueden ocultarse el uno al otro. En la Figura 9.13 se muestra un ejemplo de dos superficies que se solapan en la direccin z pero no en la direccin x. Podemos realizar los tests 2 y 3 utilizando los tests de polgonos posterior-frontal. En otras palabras, podemos sustituir las coordenadas de todos los vrtices de S en la ecuacin del plano de la superficie solapada y verificar el signo del resultado. Si las ecuaciones del plano estn especificadas de modo que la parte frontal de la superficie apunte hacia la posicin de visualizacin, entonces S estar detrs de S' si todos los vrtices de .$' estn en la parle posterior de $' (Figura 9.14). De forma similar, .S" estar completamente delante de S si todos los vrtices de S' se encuentran delante de S. La Figura 9.15 muestra una superficie solapada .S" que est completamente delante de S, aunque la superficie 5 no est completamente detrs de S'(e\ test 2 no da un resultado verdadero). Si fallaran los tests 1 a 3, realizaremos el test 4 para determinar si se solapan las proyecciones de las dos superficies. Como se ilustra en la Figura 9.16, dos superficies pueden o no intersectarse an cuando sus extensiones de coordenadas se solapen. Si los cuatro tests fallan para una superficie solapada S\ intercambiaremos las superficies Sy S* en la lista ordenada. En la Figura 9.17 se proporciona un ejemplo de dos superficies que seran reordenadas segn este procedimiento. En este punto, todava no sabemos a ciencia cierta si hemos encontrado la superficie ms
558
m
FIGURA 9.15. La superficie solapada S' est completamente delante de la superficie S, pero sta no est completamente detrs de S'.
FIGURA 9.16. Dos superficies poligonales con rectngulos de contorno solapados en el plano xy.
FIGURA 9.17. La superficie S llega hasta una profundidad mayor, pero tapa completamente a la superficie
S'.
FIGURA 9.18. Tres superficies que han sido introducidas en la lista ordenada de superficies con el orden S, S\ S" y que deben reordenarsc como 5'. S'\ S.
alejada del plano de visualizaein. La Figura 9.18 ilustra una situacin en la que primero intercambiaramos Sy S". Pero como 5" oculta parle de .S", ser necesario intercambiar S" y S' para que las tres superficies queden en el orden correcto de profundidad. Por tanto, necesitamos repetir el proceso de comprobaciones para cada superficie que se reordene en la lista. Resulta perfectamente posible que el algoritmo que acabamos de esbozar entre en un bucle infinito si hay dos o ms superficies que se ocultan alternativamente la una a la otra, como en la Figura 9.11. En dicho caso, el algoritmo se dedicara a reordenar continuamente las superficies solapadas. Para evitar tales bucles, podemos marcar toda superficie que haya sido reordenada a una posicin de profundidad mayor, de modo que dicha superficie no pueda volver a ser desplazada. Si se hace un intento de reordenar la superficie una segunda vez, la dividiremos en dos parles para eliminar los solapamientos cclicos. La superficie original se sustituye entonces por las dos nuevas superficies y el procesamiento contina como antes.
559
FIGURA 9.19. Una regin del espacio (a) se particiona con dos planos P y P para formar la representacin en rbol BSP que se muestra en (b).
( 2
direccin de visualizacin. La Figura 9.19 ilustra el concepto bsico de este algoritmo. Con el plano P , , primero particionamos el espacio en dos conjuntos de objetos. Uno de los conjuntos de objetos se encuentra detrs del plano P en relacin con la direccin de visualizacin, mientras que el otro conjunto se encuentra delante de P . Puesto que hay un objeto intersectado por el plano P dividimos dicho objeto en dos objetos separados, etiquetados como A y B. Los objetos A y C estn delante de P , , mientras que los objetos B y D se encuentran detrs de P , . A continuacin, particionamos de nuevo el espacio en el plano P y construimos la representacin en rbol binario que se muestra en la Figura 9.19(b). En este rbol, los objetos se representan como nodos terminales, ocupando los objetos frontales las ramas izquierdas y los objetos posteriores las ramas derechas. Para los objetos descritos mediante caras poligonales, podemos hacer que los planos de particionamicnto coincidan con planos de las superficies poligonales. Entonces se utilizan las ecuaciones de los polgonos para identillcar los polgonos frontales y posteriores y el rbol se construye utilizando el plano de particionamicnto para cada cara poligonal. Todo polgono intersectado por un plano de particionamiento ser dividido en dos parles. Cuando el rbol BSP se complete, procesaremos el rbol seleccionando primero los nodos de la derecha y luego los nodos de la izquierda. As, las superficies se procesan para su visualizacin comenzando pollas frontales y siguiendo por las posteriores, por lo que los objetos de primer plano se pintan sobre los objetos de fondo. En algunos sistemas se utilizan implcmcntaciones rpidas en hardware para construir y procesar rboles BSP.
} { v 2
9.8
M T O D O DE LA SUBDIVISIN DE R E A S
Esta tcnica de eliminacin de caras ocultas es esencialmente un mtodo en el espacio de imagen, pero pueden utilizarse operaciones del espacio de objetos para realizar una ordenacin de las superficies segn su pro-
560
fundidad. El mtodo de la subdivisin de reas aprovecha la coherencia de las reas de una escena, localizando las reas de proyeccin que representan parte de una misma superficie. Aplicamos este mtodo dividiendo sucesivamente el rea total del plano de visualizacin en rectngulos de tamao ms pequeo, hasta que cada rea rectangular: (1 ) slo contenga la proyeccin de una parte de una nica superficie visible, (2) no contenga proyecciones de ninguna superficie o (3) el rea se haya reducido al tamao de un pixel. Para implementar este mtodo, tenemos que definir tests que permitan identificar rpidamente el rea como parte de una misma superficie o que nos digan que el rea es demasiado compleja como para analizarla fcilmente. Comenzando con el rea total, aplicamos los tests para determinar si debemos subdividir dicha rea en rectngulos ms pequeos. Si los tests indican que la vista es lo suficientemente compleja, la subdividimos. A continuacin, aplicamos los tests a cada una de las reas ms pequeas, subdividindolas si los tests indican que la condicin de visibilidad de una nica superficie sigue siendo incierta. Continuamos con este proceso hasta que se pueda analizar fcilmente las subdivisiones como pertenecientes a una nica superficie o hasta que hayamos alcanzado el lmite de resolucin. Una forma fcil de hacer esto consiste en dividir sucesivamente el rea en cuatro partes iguales en cada caso, como se muestra en la Figura 9.20. Esta tcnica es similar a la que se emplea para construir un rbol cudrico. Un rea de visualizacin con una resolucin en pxeles de 1024 por 1024 podra subdividirse diez veces de esta forma antes de que una subrea se redujera al tamao de un nico pixel. Hay cuatro posibles relaciones que una superficie puede tener con una de las reas del plano de visualizacin subdividido. Podemos describir estas posiciones relativas de la superficie utilizando las siguientes clasificaciones (Figura 9.21 ). Superfcie circundante: una superficie que encierra completamente el rea. Superfcie solapada: una superficie que est parcialmente dentro y parcialmente fuera del rea. Superficie interior: una superficie que est completamente dentro del rea. Superficie exterior: una superficie que est completamente fuera del rea. Las pruebas para determinar la visibilidad de superficies dentro de un rea rectangular pueden enunciarse en trminos de las cuatro clasificaciones de superficies ilustradas en la Figura 9.21. No ser necesaria realizar ninguna subdivisin adicional de un rea especificada si se cumple alguna de las siguientes condiciones. Condicin 1: Condicin 2: Condicin 3: un rea no tiene superficies interiores, solapadas o circundantes (todas las superficies estn fuera del rea). un rea slo tiene una superficie interior, solapada o circundante. un rea tiene una superficie circundante que oculta todas las dems superficies que caen dentro de los lmites del rea.
Inicialmente, podemos comparar las extensiones de coordenadas de cada superficie con el contorno del rea. Esto nos permitir identificar las superficies interiores y circundantes, pero las superficies solapadas y exteriores requieren usualmente tests de interseccin. Si un nico rectngulo de contorno intersecta el rea de alguna forma, se utilizan comprobaciones adicionales para determinar si la superficie es circundante, solapa-
FIGURA 9.20. Divisin de un rea cuadrada en cuadrantes del mismo lamao en cada paso.
561
exterior
FIGURA 9.21. Posibles relaciones entre las superficies poligonales y una seccin rectangular del plano de visuali/acin.
(Superficie circndame)
FIGURA 9.22. Dentro de un rea especificada, una superficie circundante con una profundidad mxima z oculta todas las dems superficies que tienen una profundidad mnima mayor que z .
nmx
da o exterior. Una vez identificada una nica superficie interior, solapada o circundante. Se almacenan los valores de color de la superficie en el bfer de imagen. Un mtodo para comprobar la condicin 3 consiste en ordenar las superficies de acuerdo con su profundidad mnima con respecto al plano de visuali/acin. Para cada superficie circundante, calculamos entonces la profundidad mxima dentro del rea que estamos considerando. Si la profundidad mxima de una de estas superficies circundantes est ms cerca del plano de visuali/acin que la profundidad mnima de todas las otras superficies dentro del rea, la condicin 3 se satisfar. La Figura 9.22 ilustra esta situacin. Otro mtodo para comprobar la condicin 3 que no requiere una ordenacin segn las profundidades consiste en utilizar las ecuaciones de los planos para calcular los valores de profundidad en los cuatro vrtices del rea para todas las superficies circundantes, solapadas c interiores. S los cuatro valores de profundidad para una de las superficies circundantes son menores que las profundidades calculadas para las otras superficies, se satisfar la condicin 3. Entonces, puede mostrarse ese rea con los colores correspondientes a dicha superficie circundante. En algunas situaciones, los dos mtodos anteriores de comprobacin pueden no identificar correctamente una superficie circundante que oculte a todas las otras superficies. Pueden llevarse a cabo comprobaciones adicionales para identificar esa nica superficie que cubre el rea, pero resulta ms rpido subdividir el rea que continuar realizando comprobaciones ms complejas. Una vez. identificada una superficie como exterior o circundante para un rea, seguir siendo exterior o circundante para todas las subdivisiones de dicha rea. Adems, podemos esperar que se eliminen algunas superficies interiores y solapadas a medida que contina el proceso de subdivisin, por lo que las reas sern ms fciles de analizar. En el caso lmite, cuando se produce una subdivisin del tamao de un pixcl, simplemente se calcula la profundidad de cada superficie relevante en dicho punto y se le asigna al pxel el color de la superficie ms prxima. t o m o variacin del proceso de subdivisin bsico, podramos subdividir las reas segn los contomos de la superficie, en lugar de dividirlas por la mitad. Si se han ordenado las superficies de acuerdo con su profundidad mnima, podemos utilizar la superficie con valor de profundidad ms pequeo para subdividir un rea determinada. La Figura 9.23 ilustra este mtodo de subdivisin de reas. Se utiliza la proyeccin del contorno de la superficie S para particionar el rea original en las subdivisiones A y A . Entonces, la superficie .S' ser una superficie circundante para A. y pueden comprobarse las condiciones de visibilidad 2 y 3 para deter{ 2
562
minar si es necesario efectuar subdivisiones adicionales. En general, se necesitan menos subdivisiones utilizando esta tcnica, pero hace falta una mayor cantidad de procesamiento para subdividir las reas y para analizar la relacin de las superficies con los contornos de subdivisin.
Octantes numerados FIGURA9.24. Los objetos de los octantes 0, I. 2 y 3 ocultan a los objetos de los ociantes posteriores (4, 5, 6. 7) cuando la direccin de visualizacin es como se muestra.
de una regin Direccin de visuali/acin
563
Ociantes en el espacio
FIGURA 9.25. Divisin en ociantes para una regin del espacio y el correspondiente plano de cuadrantes. Cuando se encuentra un valor de color en un nodo de rbol octal, dicho color se guarda en el rbol cudrico nicamente si no se ha almacenado previamente ningn valor para la misma rea. De esta forma, slo se almacenarn los colores frontales. Los nodos que tienen el valor "void" se ignoran. Cualquier nodo que est completamente oculto se eliminar de los ulteriores procesamientos, de modo que no se acceder a sus subrboles. La Figura 9.25 muestra los ociantes en una regin del espacio y los correspondientes cuadrantes en el plano de visuali/aein. Las contribuciones al cuadrante 0 vienen de los cuadrantes 0 y 4. Los valores de color del cuadrante I se obtienen a partir de las superficies de los ociantes I y 5 y los valores de cada uno de los oros dos cuadrantes se generan a partir de las parejas de octantes alineadas con dichos cuadrantes. Las comprobaciones de visibilidad mediante rbol octal se llevan a cabo mediante procesamiento recursivo de los nodos del rbol y mediante la creacin de una representacin en rbol cudrico para las superficies visibles. Para la mayora de los casos, es necesario tener en cuenta tanto el octante frontal como el posterior a la hora de determinar los valores de color correctos para un cuadrante. Pero si el octante frontal est homogneamente relleno con un cierto color, no es necesario procesar el octante posterior. Para regiones heterogneas, se invoca a un procedimiento recursivo, pasndole como nuevos argumentos el hijo del ociante heterogneo y un nuevo nodo del rbol cudrico recin creado. Si el frontal est vaco, slo ser necesario procesar el hijo del octante posterior. En caso contrario, se realizan dos llamadas recursivas, una para el ociante posterior y otra para el octante frontal. Puede obtenerse diferentes vistas de objetos representados como rboles ocales aplicando transformaciones a la representacin en rbol que hagan que se reoriente el objeto de acuerdo con la vista seleccionada. Los ociantes pueden entonces renumerarse de modo que la representacin en rbol octal est siempre organizada con los octantes 0, 1, 2 y 3 en la cara frontal.
1
564 CAPTULO 9 Mtodos de deteccin de superfi 1c tes visibles
pixel
FIGURA 9.26. Un rayo trazado a lo largo de la lnea de visin que atraviesa una escena partiendo de una posicin de px'el. les, podemos trazar los trayectos de los rayos luminosos hacia atrs a partir de los pxeles, atravesando la escena. La tcnica del proyeccin de rayos es un mtodo eficiente de deteccin de visibilidad para escenas que tengan superficies curvadas, particularmente esferas. Podemos pensar en la proyeccin de rayos como en una variante del mtodo del bfer de profundidad (Seccin 9.3). En el algoritmo del bfer de profundidad, procesamos las superficies de una en una y calculamos los valores de profundidad para todos los puntos de proyeccin de la superficie. Las profundidades de superficie calculadas se comparan entonces con las profundidades previamente almacenadas para determinar qu superficie es visible en cada pxel. En el trazado de rayos, procesamos los pxeles de uno en uno y calculamos las profundidades para todas las superficies a lo largo del trayecto de proyeccin que va hasta dicho pxel. La proyeccin de rayos es un caso especial de los algoritmos de trazado de rayos (Seccin 10.11) que trazan mltiples trayectos de rayos para recopilar las contribuciones de refraccin y reflexin globales debidas a mltiples objetos de la escena. Con la proyeccin de rayos, lo nico que hacemos es seguir un rayo desde cada pxel hasta el objeto ms cercano. Se han desarrollado tcnicas muy eficientes de clculo de intersecciones entre rayos y superficies para objetos comunes, particularmente esferas, y hablaremos en detalle de estos mtodos de clculo de intersecciones en la Seccin 10.11.
565
profundidad o el del rbol oclal. El mtodo del bfer de profundidad tiene un tiempo de procesamiento prcticamente constante e independiente del nmero de superficies de una escena. Esto se debe a que el tamao de las reas tic superficie decrece a medida que el nmero de superficies de la escena se incrementa. Por tanto, el mtodo del bfer de profundidad tiene un rendimiento relativamente bajo para escenas simples y relativamente alto para escenas complejas. Los rboles BSP son tiles cuando hay que generar mltiples vistas utilizando diferentes puntos de referencia de visuaiizaein. Si una escena contiene superficies curvas, podemos utilizar los mtodos del rbol octal o de proyeccin de rayos para identificar las parles visibles de la escena. Cuando se utilizan representaciones en rbol octal en un sistema, el proceso de deteccin de visibilidad es rpido y simple. Slo se utilizan sumas y restas enteras en el proceso y no hay necesidad de realizar ordenaciones ni clculos de intersecciones. Otra ventaja de los rboles ocales es que almacenan ms informacin que simplemente la geometra de la superficie. Tenemos disponible toda la regin slida de un objeto para la visuaiizaein, lo que hace que la representacin de un rbol octal sea til para obtener secciones transversales de objetos tridimensionales. Resulta posible combinar e implementar los diferentes mtodos de deteccin de superficies visibles en diversas formas. Adems, los algoritmos de deteccin de visibilidad se suelen implementar en hardware, utilizndose sistemas especiales con procesamiento paralelo para incrementar la eficiencia de estos mtodos. Los sistemas hardware especiales se utilizan cuando la velocidad de procesamiento es una consideracin de especial importancia, como en el caso de la generacin de imgenes animadas para simuladores de vuelo.
Muchos objetos de inters, como las esferas, elipsoides, cilindros y conos tienen representaciones mediante ecuaciones cuadrticas. Estas superficies se suelen utilizar comnmente para modelar estructuras moleculares, cojinetes, anillos y ejes. Los algoritmos de lnea de barrido y de proyeccin de rayos requieren a menudo tcnicas de aproximacin numrica para resolver la ecuacin de la superficie en el punto de interseccin con una lnea de barrido o con un rayo de un pxel. Se han desarrollado diversas tcnicas, incluyendo clculos en paralelo e implemenlaciones hardware de gran velocidad, para resolver las ecuaciones de interseccin con superficies curvas para los objetos ms comnmente utilizados.
566 CAPTULO 9
Entonces, podemos dibujar una curva en el plano xy para los valores de z que caigan dentro del rango seleccionado, utilizando un intervalo especificado Az. Comenzando con el valor mayor de z, dibujamos las curvas desde atrs hacia adelante y eliminarnos las secciones ocultas. Las secciones curvas se dibujan en pantalla mapeando un rango xy de la funcin sobre un rango de pxeles xy de la pantalla. Entonces, lomamos incrementos unitarios en x y determinamos el correspondiente valor y para cada valor de x aplicando la Ecuacin 9.8 para un valor dado de z. Una forma de identificar las secciones de curvas visibles de las superficies consiste en mantener una lista de valores_y y > ' previamente calculados para las coordenadas x de la pantalla. Al pasar de una posicin de pxel x a la siguiente, comparamos el valor y calculado con el rango almacenado_y y ,v para el siguiente pxel. Si y <y 5 y , dicho punto de la superficie no es visible y no lo dibujaremos. Pero si el valor y calculado cae fuera de los lmites de y almacenados para dicho pxel, el punto ser visible. Entonces, dibujamos el punto y asignamos los nuevos lmites para dicho pxel. Pueden utilizarse procedimientos similares para proyectar la grfica de contorno sobre el plano xz o yz. La Figura 9.27 muestra un ejemplo de diagrama de contorno de superficie, con lneas de contorno para las que se ha empleado una codificacin de colores. Podemos aplicar los mismos mtodos a un conjunto discreto de puntos de datos determinando las lneas isosuperficiales. Por ejemplo, si tenemos un conjunto discreto de valores z para una cuadrcula n por n de valores xy, podemos determinar el trayecto correspondiente a una lnea de z constante sobre la superficie utilizando los mtodos de contorno explicados en la Seccin 8.27. Cada lnea de contomo seleccionada puede entonces proyectarse sobre un plano de visualizacin y mostrarse mediante segmentos lineales. De nuevo, las lneas pueden dibujarse sobre la pantalla en orden de profundidad delante-detrs, y eliminaremos las secciones de contorno que pasen por detrs de otras lincas de contorno previamente dibujadas (visibles).
mn m a x min lliax mm m a x x y
FIGURA 9,27. Una grfica de contorno de superficie con codificacin de colores. {Cortesa ele Los Alamos National Laboratoty.)
568
CAPTULO 9
donde el es la distancia de un punto con respecto a la posicin de visualizacin. Los valores de profundidad mnima y mxima, / y / , pueden especificarse con los valores que sean convenientes para cada especificacin concreta. O bien, las profundidades mnima y mxima pueden ajustarse al rango de profundidad normalizado: / = 0.0 y / = LO. A medida que se procesa cada posicin de pxel, su color se multiplica por &t^' As, ios puntos ms prximos se mostrarn con intensidades mayores y los puntos de profundidad mxima tendrn una intensidad igual a cero.
min n m min
m a x
La funcin de variacin de la intensidad puede implementarse con varias opciones. En algunas bibliotecas grficas, hay disponible una funcin general de atmsfera (Seccin 10.3) que puede combinar la variacin de intensidad con otros efectos atmosfricos con el fin de simular humo o niebla, por ejemplo. As, el color de un objeto podra verse modificado por la funcin de variacin de intensidad con la distancia y luego combinarse con el color atmosfrico.
569
donde al parmetro mode se le asigna el valor G L _ B A C K . De hecho, podemos utilizar esta funcin para eliminar en su lugar las caras frontales, o podramos incluso eliminar tanto las caras frontales como las posteriores. Por ejemplo, si nuestra posicin de visualizacin se encuentra dentro de un edificio, entonces lo que queremos es ver las caras posteriores (el interior de las habitaciones). En este caso, podramos asignar al parmetro mode el valor G L _ F R O N T o podramos cambiar la definicin de qu cara de los polgonos es la frontal utilizando la funcin g l F r o n t F a c e que se explica en la Seccin 4.14. Entonces, si la posicin de visualizacin se desplaza al exterior del edificio, podemos eliminar las caras posteriores de la imagen. Asimismo, en algunas aplicaciones, puede que slo queramos ver otras primitivas dentro de la escena, como los conjuntos de puntos y los segmentos de lneas individuales. En este caso, para eliminar todas las superficies poligonales de una escena, asignaramos al parmetro mode la constante simblica OpenGL G L _ F R O N T _ A N D _ B A C K . De manera predeterminada, el parmetro mode en la funcin g l C u l l F a c e tiene el valor G L B A C K . Por tanto, si activamos la eliminacin de caras posteriores mediante la funcin g l E n a b l e sin invocar explcitamente la funcin g l C u l l F a c e , se eliminarn las caras posteriores de la escena. La rutina de eliminacin se desactiva mediante,
glDisable
<GL_crjL,LJ?ACB)
;
Los valores del bfer de profundidad pueden entonces inicial izarse mediante, giciear
<GL_DEPTH_BUFFER_BIT)
;
Normalmente, el bfer de profundidad se inicializa con la misma instruccin que inicializa el bfer de refresco al color de fondo. Pero es necesario borrar el bfer de profundidad cada vez que queramos mostrar una nueva imagen. En OpenGL, los valores de profundidad estn normalizados en el rango que va de 0 a 1.0. por lo que la inicializacin indicada asignara a todos los valores del bfer de profundidad el valor mximo LO de manera predeterminada. Las rutinas OpenGL de deteccin de visibilidad basada en bfer de profundidad se activan mediante la siguiente funcin:
glEnable
(GL_DEPTH_TEST);
y se desactivan mediante,
glDisable
(GL_DEPTH_TEST);
Tambin podemos aplicar las comprobaciones de visibilidad basadas en bfer de profundidad utilizando algn otro valor inicial para la profundidad mxima, y este valor inicial se selecciona mediante la funcin OpenGL,
glClearDepth (maxDepth);
570
AI parmetro maxDepth se le puede asignar cualquier valor entre 0 y 1.0. Para cargar este valor de inicializacin en el bfer de profundidad, debemos a continuacin invocar la funcin g l c i e a r ( G L _ D E P T H _ B U F F E R B I T ) . En caso contrario, el bfer de profundidad se inicial izar con el valor predeterminado (1.0). Puesto que los clculos de color de superficie y otros tipos de procesamiento no se llevan a cabo para los objetos que se encuentren ms all de la profundidad mxima especificada, esta funcin puede usarse para acelerar las rutinas de bfer de profundidad cuando una escena contenga muchos objetos distantes que estn por detrs de los objetos de primer plano. Las coordenadas de proyeccin en OpenGL estn normalizadas en el rango que va de - 1 . 0 a 1.0, y los valores de profundidad entre los planos de recorte prximo y lejano se normalizan al rango 0.0 a 1.0. El valor 0.0 se corresponde con el plano de recorte prximo (el plano de proyeccin), mientras que el valor 1.0 se corresponde con el plano de recorte lejano. Como opcin, podemos ajusfar estos valores de normalizacin con, glDepthRange {nearNormDepth, farNormTJepch) ;
De manera predeterminada nearNormDepth = 0 . 0 y farNormDepth = . o , pero con la funcin g l D e p t h R a n g e podemos asignar a estos dos parmetros los valores que deseemos dentro del rango que va de 0.0 a 1.0, incluyendo valores para los que nearNormDepth > farNormDepth. Utilizando la funcin g l D e p t h R a n g e , podemos restringir las comprobaciones de bfer en profundidad a cualquier regin del volumen de visuaiizaein, e incluso podemos invertir las posiciones de los planos prximo y lejano. Otra opcin disponible en OpenGL es la condicin de prueba que hay que utilizar para las rutinas del bfer de profundidad. Especificamos una condicin de prueba mediante la siguiente funcin: glDepthFunc (testCondition);
Podemos asignar al parmetro t e s t C o n d i t i o n cualquiera de las siguientes ocho constantes simblicas: GL_LESS, GLjSREATER, GL_EQUAL, GL_NOTEQUAL, GL_LEQUAL, GL_GEQUAL, G L _ N E V E R (no se procesa ningn punto), G L _ A L W A Y S (se procesan todos los puntos). Estas diferentes pruebas pueden ser tiles en diversas aplicaciones, para reducir los clculos en el procesamiento relacionado con el bfer de profundidad. El valor predeterminado para el parmetro t e s t C o n d i t i o n es G L _ L E S S , por lo que un valor de profundidad se procesar si tiene un valor que sea inferior al que est actualmente almacenado en el bfer de profundidad para dicha posicin de pixel. Tambin podemos establecer el estado del bfer de profundidad, configurndolo como de slo lectura o de lectura-escritura. Esto se realiza mediante la funcin: glDepchMask (writeStatus);
Cuando w r i t e S t a t u s = GL_TRUE (el valor predeterminado), podemos tanto leer como escribir en el bfer de profundidad. Con w r i t e S t a t u s = GL_FALSE, el modo de escritura en el bfer de profundidad estar desactivado y slo podremos extraer valores para compararlos durante los tests de profundidad. Esta caracterstica resulta til cuando queremos utilizar el mismo fondo complicado para mostrar imgenes de diferentes objetos de primer plano. Despus de almacenar el fondo en el bfer de profundidad, desactivamos el modo de escritura y procesamos los objetos de primer plano. Esto nos permite generar una serie de imgenes con diferentes objetos de primer plano o con un objeto en diferentes posiciones para una secuencia de animacin. As, slo se guardan los valores de profundidad correspondientes al fondo. Otra aplicacin de la funcin glDepthMask es para mostrar efectos de transparencia (Seccin 10.20). En este caso, slo queremos guardar las profundidades de los objetos opacos para las pruebas de visibilidad, y no las profundidades de las posiciones correspondientes a superficies transparentes. De modo que se desactivara la escritura para el bfer de profundidad cada vez que se procesara una superficie transparente. Hay disponibles comandos similares para configurar el estado de escritura para otros bferes (color, ndice y patrn de contorno).
9.15 Resumen
gXPolygonMode (GL_FRONT_AND_BACK, GL_LINE>;
571
pero eslo hara que se mostraran tanto las aristas visibles como las ocultas. Para eliminar las lneas ocultas en una imagen almbrica, podemos emplear el mtodo de desplazamiento de profundidad descrito en la Seccin 4.I4. Es decir, primero especificamos la versin almbrica del objeto utilizando el color de primer plano y luego especificamos una versin de relleno interior utilizando un desplazamiento de profundidad y el color de fondo para el relleno interior. El desplazamiento de profundidad garantiza que el relleno de color de fondo no interfiera con la visualizacin de las aristas visibles. Como ejemplo, el siguiente segmento de cdigo genera una imagen almbrica de un objeto utilizando un color blanco en primer plano y un color negro de fondo.
glEnable
glPolygonMode glColor3f \*
(1.0, la
Invocar
glPolygonMode glEnable
(GL_FRONT__AND_BACK,
0L_FIU.) ;
Invocar de nuevo
glDisable
(GL__P0LYGON_OFFSET_FILL) ;
{GL_FOG_MODE,
listo aplica la funcin de profundidad lineal de la Ecuacin 9.9 a los colores de los objetos utilizando ^min ~ ^ y 4na.\ ^ podemos establecer diferentes valores para / y d mediante las siguientes llamadas a funcin:
= e r o [nill
tnHX
glFogf glFogf
(GL_FOG_START, (GLFOGEND,
minDepth);
maxDepth);
En estas dos funciones, a los parmetros m i n D e p t h y maxDepth se les asignan valores en coma flotante, aunque tambin pueden emplearse valores enteros si cambiamos el sufijo de la funcin a i. Adems, podemos utilizar la funcin g l F o g para establecer un color atmosfrico que se combine con el color de un objeto despus de aplicar la funcin lineal de variacin de la intensidad con la profundidad. Tambin se pueden modelar otros efectos atmosfricos, y hablaremos de dichas funciones en la Seccin 10.20.
9.15 RESUMEN
El test ms simple de visibilidad es el algoritmo de deteccin de caras posteriores, que es rpido y efectivo como mecanismo inicial de filtro para eliminar muchos polgonos de los posteriores tests de visibilidad. Para un nico poliedro convexo, la deleccin de caras posteriores elimina todas las superficies ocultas, pero en general la deteccin de caras posteriores no puede identificar todas las superficies ocultas completamente.
572
CAPTULO 9
Un mtodo comnmente utilizado para identificar todas las superficies visibles de una escena es el algoritmo de bfer de profundidad. Cuando se aplica a objetos grficos estndar, este procedimiento es altamente eficiente, aunque requiere disponer del suficiente espacio de almacenamiento extra. Hacen falta dos bferes: uno para almacenar los colores de los pxcles y otro para almacenar los valores de profundidad correspondientes a las posiciones de los pxeles. Se utilizan mtodos de lnea de barrido rpidos y de carcter incremental para procesar cada polgono de una escena con el fin de calcular las profundidades de la superficie. A medida que se procesa cada superficie, se actualizan los dos bferes. Una extensin de la tcnica de bfer de profundidad es el mtodo de bfer A, que proporciona informacin adicional para mostrar superficies transparentes y a las que se les pueden aplicar tcnicas de antialiasing. Se han desarrollado varios otros mtodos de deteccin de visibilidad. El mtodo de lneas de barrido procesa todas las superficies de una vez para cada linca de barrido. Con el mtodo de ordenacin de profundidad (el algoritmo del pintor), los objetos se "pintan" en el bfer de refresco de acuerdo con sus distancias con respecto a la posicin de visualizacin. Entre los esquemas de subdivisin para la identificacin de las partes visibles de una escena podemos citar el mtodo del rbol BSP, la subdivisin de reas y las representaciones basadas en rboles octal es. Las superficies visibles tambin pueden delectarse utilizando mtodos de proyeccin de rayos, que producen lneas desde el plano de los pxeles hacia la escena para determinar las posiciones de interseccin con los objetos a lo largo de estas lineas proyectadas. Los mtodos de proyeccin de rayos son un caso particular de los algoritmos de trazado de rayos, que permiten mostrar los sistemas con elclos globales de iluminacin. Los mtodos de deleccin de visibilidad tambin se utilizan para mostrar diagramas lineales tridimensionales. Con las superficies curvas, podemos mostrar grficas de contorno. Para la visualizacin almbrica de poliedros, lo que hacemos es buscar las diversas secciones de aristas de las superficies de una escena que son visibles desde la posicin de visualizacin.
TABLA 9 .1. RESUMEN DE FUNCIONES OpenGL DE DETECCIN DE VISIBILIDAD.
Funcin
glCullFace
Descripcin Especifica los planos frontal o posterior de los polgonos para las operaciones de eliminacin de caras, cuando se activa este mecanismo mediante
glEnable (GL_CULL_FACE).
gluclnitDisplayMode
glClear
(GL_DEPTH_BUFFER_BIT)
Inicializa los valores del bfer de profundidad con el valor predeterminado (l .0) p con un valor especificado por la funcin g l C l e a r D e p t h . Especifica un valor inicial del bfer de profundidad. Activa las operaciones de comprobacin de profundidad. Especifica un rango para la normalizacin de los valores de profundidad. Especifica una condicin de comprobacin de profundidad. Establece el estado de escritura del bfer de profundidad. Especifica un desplazamiento para eliminar lincas ocultas en una imagen almbrica cuando se aplica un color de fondo de relleno. Especifica las operaciones lineales de variacin de la intensidad con la profundidad y los valores de profundidad mnima y mxima que hay que utilizar en dichos clculos.
glFog
Ejercicios
573
Podemos implemeniar cualquier esquema deseado de deteccin de visibilidad en un programa de aplicacin creando nuestras propias rutinas, pero las bibliotecas grficas suelen proporcionar (unciones nicamente para la eliminacin de caras posteriores y para la incrementacin del mtodo del bfer de profundidad. En los sistemas infogrficos de alta gama, las rutinas de bfer de profundidad estn implementadas en hardware. En la biblioteca bsica de OpenGL hay disponibles funciones para eliminacin de polgonos posteriores y para determinacin de visibilidad basada en bfer de profundidad. Con las rutinas de eliminacin de polgonos posteriores, podemos eliminar las caras posteriores de objetos grdeos estndar, sus caras frontales o ambas. Con las rutinas de bfer de profundidad, podemos establecer el rango para las comprobaciones de profundidad y el tipo de comprobacin de profundidad que haya que realizar. Las imgenes almbricas se obtienen utilizando las operaciones OpenGL de modo poligonal de desplazamiento de polgonos. Y tambin pueden generarse escenas OpenGL utilizando efectos de variacin de la intensidad de acuerdo con la profundidad. En la Tabla 9.1 se resumen las funciones OpenGL de comprobacin de visibilidad. La funcin de modo poligonal y otras operaciones relacionadas se resumen al final del Captulo 4.
REFERENCIAS
Entre las fuentes adicionales de informacin sobre algoritmos de visibilidad podemos citar Elber y Cohn (1990), Franklin y Kankanhalli (1990). Segal (1990) y Naylor, Amanatides y Thibaull (1990). Los mtodos de bfer A se presentan en Cook. Carpcnlcr y Catmull (1987), llaeberli y Akcley (1990) y Shilling y Strasser (1993). Puede encontrar un resumen de los mtodos de dibujo de contornos en Eanishaw (1985). Si quiere aprender ms sobre tcnicas de programacin para pruebas de visibilidad puede consultar Glassner (1990), Arvo (1991), Kirk (1992), Neckbert (1994) y Paeth (1995). Woo, Neider, Davis y Shreiner (1999) proporcionan explicaciones adicionales sobre las funciones OpenGL de deteccin de visibilidad y puede encontrar un listado completo de las funciones OpenGL disponibles en la biblioteca bsica y en GLU en Shreiner (2000).
EJERCICIOS
l
>. 1
Defina un procedimiento de deteccin de caras posteriores que permita idenlificar todas las earas visibles de eualquier poliedro convexo de entrada que tenga superficies con diferenles colores. El poliedro debe definirse en un sistema de visualizacin que cumpla la regla de la mano derecha y la direccin de visuali/acin es uno de los parmetros de entrada que debe especificar el usuario.
9.2
linplemente el procedimiento del ejercicio anterior utilizando una proyeccin paralela ortogrfica para ver las superficies visibles del poliedro convexo proporcionado como entrada. Suponga que todas las partes del objeto se encuentran delante del plano de visualizacin.
9.3
Implemente el procedimiento del Ejercicio 9. I utilizando una proyeccin de perspectiva para ver las earas visibles del poliedro convexo proporcionado como entrada. Suponga que lodas las partes del objeto se encuentran delante del plano de visualizacin
9.4
Escriba un programa para generar una animacin de un poliedro convexo. Hay que rotar increinentalmente el objeto alrededor de un eje que pase por el objeto y sea paralelo al plano de visualizacin. Suponga que el objeto cae completamente delante del plano de v isuahzaein. Utilice una proyeccin ortogrfica paralela para inapear las vistas sucesivamente sobre el plano de visualizacin.
9.5
Escriba una rutina para implememar el mtodo del bfer de profundidad para la visuali/acin de las earas visibles de cualquier poliedro que suministre como entrada. La matriz para el bfer de profundidad puede tener cualquier tamao que sea conveniente para su sistema, como por ejemplo 500 por 500. Cmo pueden determinarse los requisitos de almacenamiento para el bfer de profundidad a partir de las definiciones de los objetos que hay que mostrar?
574 9.6
CAPTULO 9 Mtodos de deteccin de superficies visibles Modifique el procedimiento del ejercicio anterior para mostrar las caras visibles de una escena que contenga cualquier nmero de poliedros. Defina mtodos eficientes para almacenar y procesar los diversos objetos de la escena, Modifique el procedimiento del ejercicio anterior para implementar el algoritmo del bfer A para la visualizacin de una escena que contenga tanto superficies opacas como transparentes. Ample el procedimiento desarrollado en el ejercicio anterior para incluir tcnicas de antialiasing. Desarrolle un programa para implementar el algoritmo de lnea de barrido para la visualizacin de las superficies visibles de un poliedro dado. Utilice las tablas de polgonos para almacenar la definicin del objeto y emplee tcnicas de coherencia para evaluar los puntos a lo largo de una lnea de barrido y entre unas lneas de barrido y otras. Escriba un programa para implementar el algoritmo de linea de barrido para una escena que contenga diversos poliedros. Utilice tablas de polgonos para almacenar la definicin de los objetos y emplee tcnicas de coherencia para evaluar los puntos a lo largo de una lnea de barrido y entre una lnea de barrido y la siguiente. Disee un programa para mostrar las superficies visibles de un poliedro convexo utilizando el algoritmo del pintor, es decir, ordene las superficies segn su profundidad y pntelas comenzando desde atrs. Escriba un programa que utilice el mtodo de ordenacin de profundidad para mostrar las superficies visibles de cualquier objeto dado definido mediante una serie de caras planas. Disee un programa de ordenacin de profundidad para mostrar las superficies visibles en una escena que contenga varios poliedros. Escriba un programa para mostrar las superficies visibles de un poliedro convexo utilizando el mtodo del rbol BSP. Proporcione ejemplos de situaciones en las que los dos mtodos expuestos para la condicin 3 del algoritmo de subdivisin de reas no permitan identificar correctamente una superficie circundante que oculte todas las dems superficies. Desarrolle un algoritmo que compruebe si una superficie plana dada es circundante, solapada, interior o exterior con respecto a una determinada rea rectangular. Disee un algoritmo para generar una representacin en rbol cudrico para las superficies visibles de un objeto, aplicando los tests de subdivisin de rea para determinar los valores de los elementos del rbol cudrico. Disee un algoritmo para almacenar una representacin en rbol cudrico de un objeto dentro de un bfer de imagen. Defina un procedimiento para mostrar las superficies visibles de un objeto descrito mediante una representacin en rbol octal. Disee un algoritmo para visualizar una nica esfera utilizando el mtodo de proyeccin de rayos. Explique cmo pueden incorporarse los mtodos de antialiasing en los diversos algoritmos de eliminacin de superficies ocultas. Escriba una rutina para generar un diagrama de contorno de una superficie, dada la funcin de superficie/f*,^). Desarrolle un algoritmo para delectar las secciones de lnea visible en una escena comparando cada linea de la escena con cada faceta poligonal de una superficie. Explique cmo pueden generarse imgenes almbricas con los diversos mtodos de deteccin de superficies visibles expuestos en este captulo. Disee un procedimiento para generar una imagen almbrica de un poliedro en la que se muestren las aristas ocultas del objeto como lineas punteadas. Escriba un programa para mostrar un poliedro en el que se eliminen determinadas caras seleccionadas, utilizando las funciones de eliminacin de polgonos de OpenGL. A cada cara del polgono hay que asignarle un color diferente y es el usuario quien puede seleccionar una cara para su eliminacin. Asimismo, el usuario debe proporcionar tambin como valores de entrada la posicin de visualizacn y los dems parmetros de visualizacin.
9.10
Ejercicios
575
9.27 9.28
9.29
Modifique el programa del ejercicio anterior para poder ver el poliedro desde cualquier posicin, utilizando rutinas de bfer de profundidad en lugar de rutinas de eliminacin de polgonos. Modifique el programa del ejercicio anterior para poder especificar tambin como entrada el rango de profundidades y la condicin de test de profundidad, Genere una imagen almbrica de un poliedro utilizando las funciones expuestas en la Seccin 9.14.
glPolygonMode y glPolygonOtfset
9.30
Modifique el programa del ejercicio anterior para mostrar el poliedro utilizando la funcin de la intensidad con la profundidad.
glFogi
de variacin
9.31
Modifique el programa del ejercicio anterior para mostrar varios poliedros que estn distribuidos a diversas profundidades. El rango de variacin de la intensidad con la profundidad debe configurarse segn los datos de entrada proporcionados por el usuario.
CAPTULO
10
Una escena de la pelcula de animacin por computadora Final Faniasy: The Spirits IVithin, donde se muestran los efectos de iluminacin utilizados para simular la explosin de un espritu. {Cortesa de Square Pietures, Inc & 2001 FFFP Todos ios derechos reservados.)
1II. 1 Fuentes luminosas 10.2 Efectos de iluminacin superficial 10.3 Modelos bsicos de iluminacin 10.4 Superficies transparentes 1 0 . 5 Efectos atmosfricos 1 0 . 6 Sombras 1 0 . 7 Parmetros de la cmara 1 0 . 8 Visuali/acin de la intensidad de la luz 1 0 . 9 Patrones de semitono y tcnicas de alealori/acin 1 0 . 1 0 Mtodos de representacin de polgonos 1 0 . 1 1 Mtodos de trazado de rayos
1 0 . 1 2 Modelo de iluminacin de radiosidad 1 0 . 1 3 Mapeado de entorno 1 0 . 1 4 Mapeado de fotones 1 0 . 1 5 Adicin de detalles a las superficies 1 0 . 1 6 Modelado de los detalles superficiales mediante polgonos 1 0 . 1 7 Mapeado de texturas 1 0 . 1 8 Mapeado de relieve 1 0 . 1 9 Mapeado del sistema de referencia 1 0 . 2 0 funciones OpenGL de iluminacin y representacin de superficies 1 0 . 2 1 Funciones de texturas OpenGL 10.22 Resumen
Pueden obtenerse imgenes realistas de una escena generando proyecciones en perspectiva de los objetos y aplicando electos de iluminacin naturales a las superficies visibles. Se utiliza un modelo de iluminacin, tambin denominado modelo de sombreado, para calcular el color de cada posicin iluminada en la superficie de un objeto. Un mtodo de representacin superficial utiliza los clculos de color del modelo de iluminacin para determinar los colores de los pxeles para todas las posiciones proyectadas de una escena. El modelo de iluminacin puede aplicarse a cada posicin de proyeccin, o bien puede llevarse a cabo la representacin de la superficie interpolando los colores de las superficies a partir de un pequeo conjunto de clculos relativos al modelo de iluminacin. Los algoritmos del espacio de imagen basados en las lneas de barrido utilizan normalmente esquemas de interpolacin, mientras que los algoritmos de trazado de rayos pueden invocar el modelo de iluminacin para cada posicin de pxel. Algunas veces, se denomina procedimientos de representacin de superficie a los mtodos de sombreado que calculan los colores de las superficies utilizando el modelo de sombreado, pero esto puede llevar a cierta confusin entre ambos trminos. Para evitar posibles malas interpretaciones debido al uso de tenninologa similar, denominaremos modelo de iluminacin al modelo utilizado para calcular la intensidad luminosa en cada punto de una superficie, y emplearemos el tnnino representacin superficial para referirnos a un procedimiento mediante el cual se aplica un modelo de iluminacin cot el fin de obtener los colores de pxel para todas las posiciones proyectadas de la superficie. Entre otras cosas, el fotorrealismo en los grficos por computadora requiere dos elementos: representaciones precisas de las propiedades de las superficies y una buena descripcin fsica de los efectos de iluminacin en la escena. Estos efectos de iluminacin de las superficies incluyen la reflexin de la luz, la transparencia, las texturas de las superficies y las sombras. En general, el modelado de los efectos de iluminacin que podemos observar sobre un objeto es un proceso muy complejo, en el que intervienen principios tanto de la fsica como de la psicologa. Fundamentalmente, los efectos de iluminacin se describen mediante modelos que tienen en cuenta la interaccin de la energa electromagntica con las superficies de los objetos de la escena. Una vez que los rayos luminosos alcanzan nuestros ojos, se ponen en marcha determinados procesos de percepcin que son los que dictan lo que realmente vemos. Los modelos fsicos de iluminacin tienen en cuenta una serie de factores, como las propiedades de los materiales, las posiciones de los objetos en relacin con las fuentes de ilumina-
578
ein y con otros objetos y las caractersticas de las fuentes luminosas. Los objetos pueden estar compuestos de materiales opacos, o bien pueden ser ms o menos transparentes. Adems, pueden tener superficies brillan!cs o mates, y exhibir diversos patrones de textura superficial. Pueden utilizarse fuentes luminosas, de formas, colores y posiciones variables para iluminar una escena. Dados los parmetros de las propiedades pticas de las superficies, dadas las posiciones relativas de las superficies dentro de una escena, dados el color y las posiciones de las fuentes luminosas, dadas las caractersticas de dichas fuentes y dadas la posicin y la orientacin del plano de visualizacin, se utilizan los modelos de iluminacin para calcular la intensidad de la luz proyectada desde una posicin concreta de la superficie en una direccin de visualizacin especificada. Los modelos de iluminacin en infografia son a menudo aproximaciones de la leyes fsicas que describen los efectos de iluminacin de una superficie. Para reducir los clculos, la mayora de los paquetes utilizan modelos empricos basados en clculos de fotometra simplificados. Otros modelos ms precisos, como el algoritmo de radiosidad, calculan las intensidades luminosas considerando la propagacin de la energa radiante entre las fuentes luminosas y las diversas superficies de una escena. En las siguientes secciones, vamos primero a echar un vistazo a los modelos de iluminacin bsicos que ms a menudo se utilizan en los sistemas infogrlicos, para pasar despus a analizar otros mtodos ms precisos, pero ms complejos, de determinacin de la apariencia de las superficies iluminadas. Exploraremos tambin los diversos algoritmos de representacin superficial que pueden utilizarse para aplicar los modelos de iluminacin, con el fin de obtener imgenes de calidad de escenas naturales.
579
FIGURA 10.1. Trayectorias divergentes de los rayos a partir de una fuente luminosa puntual. mos simular fuentes de mayor tamao mediante emisores puntuales si dichas fuentes no estn demasiado prximas a la escena. Utilizamos la posicin de una fuente puntual dentro de un modelo de imagen para determinar qu objetos de la escena se ven iluminados por dicha fuente y para calcular la direccin de los rayos luminosos cuando stos inciden sobre una posicin seleccionada de la superficie del objeto.
FIGURA 10.2. Los rayos luminosos procedentes de una fuente infinitamente distante iluminan a los objetos segn una serie de trayectos prcticamente paralelos.
580
CAPTULO 10
parmetros pticos se proyectan sobre posiciones que se solapen, seran indistinguibles la una de la otra. Como consecuencia, independientemente de sus distancias relativas con respecto a la fuente luminosa, las dos superficies pareceran ser una sola. En la prctica, sin embargo, utilizar un factor de atenuacin de \/d con una fuente puntual no siempre produce imgenes realistas. El factor \ld tiende a producir una variacin excesiva de la intensidad para objetos que se encuentren prximos a la fuente luminosa, y muy poca variacin cuando d es grande. Esto se debe a que las fuentes luminosas reales no son puntos infinitesimales, e iluminar una escena con emisores puntales es slo una aproximacin simple de los verdaderos efectos de iluminacin. Para generar imgenes ms realistas utilizando fuentes puntuales, podemos atenuar las intensidades luminosas con una funcin cuadrtica inversa de d que incluya un tmiino lineal:
'im* ) =
! ,
j2
(0.1)
Los valores numricos de los coelicienles a , &j y a pueden entonces ajustarse para producir unos efectos de atenuacin ptimos. Por ejemplo, podemos asignar un gran valor a a cuando A es muy pequea con el fin de prevenir q t i e / ^ ( / ) se haga demasiado grande. Como opcin adicional, a menudo disponible en muchos paquetes de grficos, puede asignarse un conjunto diferente de valores a los coeficientes de atenuacin de cada fuente luminosa puntual de la escena.
0 2 0 d;)I|cn /
No podemos aplicar la Ecuacin 10.1 de clculo de la atenuacin de la intensidad a una fuente puntual que est situada en el infinito, porque la distancia a la fuente luminosa es indeterminada. Asimismo, todos los puntos de la escena estn a una distancia prcticamente igual de las fuentes muy lejanas. Con el fin de tener en cuenta tanto las fuentes luminosas remotas como las locales, podemos expresar la funcin de atenuacin de la intensidad como: LO,
/),rail Hilen
!
si la fuente es local
a +a d,
i i
+a d
7
donde el ngulo a es la distancia angular del objeto con respecto al vector que indica la direccin de la fuente. Si restringimos la extensin angular de cualquier cono luminoso de modo que 0 < 0 < 90, entonces el objeto estar dentro del rango de iluminacin del foco si eos a > eos 0,, como se muestra en la Figura 10.4. Por el contrario, si V V, . < eos 0,, el objeto estar fuera del cono de luz.
o h j
581
Fuente luminosa FIGURA 10.4. Un objeto iluminado por una fuente luminosa puntual dircccional.
582
CAPTULO 10
FIGURA 10.5. Un objeto iluminado por una fuente luminosa de gran tamao situada muy cerca.
FIGURA 10.6. Efectos de iluminacin de estudio producidos con el modelo de Warn, utilizando cinco fuentes luminosas complejas con el fin de iluminar un Chevrolet Cmaro. (Cortesa de DavidR. Warn, General Motors Research Laboratories,)
donde ni exponente de atenuacin a se le asigna algn valor positivo y el ngulo < > se mide con respecto al eje del cono. A lo largo del eje del cono, 0 = 0 y _4 (0) 1.0. Cuanto mayor sea el valor del exponente de atenuacin a ms pequeo ser el valor de la funcin de atenuacin angular de la intensidad para un cierto valor del ngulo <p > 0. I lay varios casos especiales que es necesario considerar en la implcmentacin de la funcin angular de atenuacin. No existir atenuacin angular si la fuente luminosa no es direccional (es decir, si no es un foco). Asimismo, ningn objeto ser iluminado por la fuente luminosa si est situado fuera del cono del foco. Para determinar el factor de atenuacin angular a lo largo de una lnea que vaya desde la posicin de la fuente hasta una posicin de una superficie en una escena, podemos calcular el coseno del ngulo de direccin con respecto al eje del cono utilizando el producto escalar de la Ecuacin 10.3. Si llamamos V al vector unitario que indica la direccin de la fuente luminosa (a lo largo del eje del cono) y V' j al vector unitario correspondiente a la linea que une la fuente luminosa con la posicin de un objeto y si suponemos que 0" <ft < 90, podemos expresar la ecuacin general de la atenuacin angular como:
= ngimen Jt U g h ! ob
1.0, 0.0,
si la fuente no es un foco si V . . V = c o s < eos A (el objeto est fuera del cono del foco)
h m
CVay % P >
en caso contrario
583
tlrcula de emisores puntuales direccionales. Podemos definir la direccin de las fuentes puntuales de modo que los objetos situados detrs de la superficie emisora de luz no sean iluminados. Y tambin podemos incluir otros controles para restringir la direccin de la luz emitida en las proximidades de los bordes de la fuente. El modelo de Warn proporciona un mtodo para producir efectos de iluminacin de estudio utilizando conjuntos de emisores puntuales con diversos parmetros que pretenden simular las pantallas, controles de foco y dems aparatos utilizados por los fotgrafos profesionales. Los efectos de foco se consiguen mediante los conos de iluminacin que antes hemos presentado, mientras que las pantallas proporcionan controles direccionales adicionales. Por ejemplo, pueden especificarse dos pantallas para cada una de las direcciones A, y y z con el fin de restringir an ms el trayecto de los rayos luminosos emitidos. Esta simulacin de ftientes luminosas est implementada en algunos paquetes grficos, y la figura 10.6 ilustra los efectos de iluminacin que pueden conseguirse mediante el modelo de Warn.
\W/
FIGURA 10.7. Reflexiones difusas en una superficie.
FIGURA 10.8. Reflexin especular superpuesta sobre los vectores de reflexin difusa.
584
CAPTULO 10
FIGURA 10.9. Los decios de iluminacin superficial se producen mediante una combinacin de la iluminacin procedente de fuentes luminosas y de las reflexiones producidas en otras superficies. Otro factor que hay que considerar en los modelos de iluminacin es la luz de fondo o luz ambiental de la escena. Una superficie que no est directamente expuesta a una fuente luminosa puede seguir siendo visible debido a la luz reflejada en los objetos cercanos que s estn iluminados. As, la luz ambiente de una escena es el efecto de iluminacin producido por la luz reflejada en las diversas superficies de la escena. La Figura 10.9 ilustra este efecto de iluminacin de fondo. La luz total reflejada por una superficie es la suma de las contribuciones de las fuentes luminosas y de la luz rellejada por otros objetos iluminados.
Luz ambiente
En nuestro modelo bsico de iluminacin, podemos incorporar la luz de fondo definiendo un nivel de brillo general para la escena. Esto produce una iluminacin ambiente unifonne que es igual para todos los objetos y que aproxima las reflexiones difusas globales correspondientes a las diversas superficies iluminadas. Suponiendo que estemos describiendo nicamente efectos de iluminacin monocromticos, como por ejemplo escalas de grises, designaramos el nivel de la luz ambiente en una escena mediante un parmetro de intensidad I . Cada superficie de la escena se ver entonces iluminada por esta luz de fondo. Las reflexiones producidas por la iluminacin mediante la luz ambiente son slo una forma de reflexin difusa, y son independientes de la direccin de visualizacin y de la orientacin espacial de las superficies. Sin embargo, la cantidad de luz ambiente incidente que se refleje depender de las propiedades pticas de las superficies, que determinan qu parte de la energa incidente se refleja y qu parte se absorbe.
a
Reflexin difusa
Podemos modelar la^jilexknesjjifusas de una superficie asumierujo^uejajuz^ncMeie^e__di spej^_c^ igual intensidad en todas las direcciones, independientemente de la posicin de visualizacin. Tales superliJ
585
cies se denominan reflectores difusos ideales. Tambinse les denomina reflectores lambertianos, porque la energa luminosa radiante reflejada por cualquier punto de la superficie se calcula mediante la ley del coseno de LambertTEsta leyestbjece que la cantidad d^enrgia radiante procedente de cualquier pequea rea"3e s u p e r f i c i e ^ en una direccin </> relativa a la normal a la "superficie es proporcional a eos <>^ (Figura 10.10). La^inSnsjdd de ta luz en esta direccin puede calcularse dividiendo la magnitud de la energa radiante por unidad de tiempo entre la proyeccin de ese rea superficial en la direccin de radiacin:
Y
Intensidad -
e n e r
o r
dA cos0,
= constarne As, para la reflexin lambertiana, la intensidad de la luz es la misma en todas las direcciones de visualizaron. Suponiendo que haya que tratar a todas las superficies como un reflector difuso ideal_(lambertiano), podemos definir un parmetro Ampara cada superficie que determine la fraccin de la luz incidente que hay que dispersar en forma de reflexiones difusas. Este parmetro se denomina coeficiente de reflexin difusa o reflectividad difusa. La reflexin difusa en todas las direcciones se da entonces una constante cuyo valor es igual a la intensidad de la luz incidente multiplicada por el coeficiente de reflexin difusa. Para una fuente luminosa monocromtica, al parmetro k se le asigna un valor constante en el intervalo 0.0 a 1.0, de acuerdo con las propiedades de reflexin que queramos que la superficie tenga^ Para una superficie altamente reflectante, asignaremos a k un valor prximo a 1.0. Esto produce una superficie ms brillante, en la que la intensidad de la luz reflejada estar ms prxima a la de la luz incidente. Si queremos simular una superficie que absorba la mayor parte de la luz incidente, asignaremos a la reflectividad un valor prximo a 0.0.
d d
Para los efectos de iluminacin de fondo, podemos asumir que todas las superficies estn completamente iluminadas por la luz ambiente que hayamos asignado a la escena. Por tanto, la contribucin de la luz ambiente a la reflexin difusa en cualquier punto de una superficie es simplemente:
M
La luz ambiente sola, sin embargo, produce un sombreado plano y poco interesante de las supefflcies (Figura 10.23(b)), por lo que raramente se representan las escenas utilizando nicamente luz ambiente. Al menos se suele incluir una fuente luminosa en la escena, a menudo definida como fuente puntual situada en la posicin de visualizacin. Cuando se ilumina una superficie mediante una fuente luminosa de intensidad la cantidad de luz incidente depender de la orientacin de la superficie en relacin con la direccin de la fuente luminosa. Una superficie que est orientada en perpendicular a la direccin de iluminacin recibir ms luz de la fuente que otra superficie que forme un ngulo oblicuo con la direccin de la luz incidente. Este efecto de iluminacin puede observarse sobre una hoja de papel blanco que se coloque en paralelo a una ventana iluminada por el
FIGURA 10.10. La energa radiante de un elemenio de rea superficial dA en la direccin 0 relativa a la normal a la superficie es proporcional a eos
V
586
CAPTU LO
10
Modelos de iluminacin
FIGURA 10.11. Una superficie perpendicular a la direccin de la luz incidente (a) estar ms iluminada que una superficie de igual (amao que forme un ngulo oblicuo (b) con la direccin de la luz. Sol. Al girar lentamente la hoja de papel con respecto a la direccin de la ventana, el brillo de la superficie disminuye. La Figura I0.11 ilustra este efecto, mostrando un haz de rayos luminosos que inciden sobre dos superficies planas de igual rea que tienen diferente orientacin espacial en relacin con la direccin de iluminacin de una fuente distante (rayos entrantes paralelos). En la Figura 10.11 podemos ver que el nmero de rayos luminosos que intersectan un elemento de superficie es proporcional al rea de la proyeccin de la superficie en perpendicular a la direccin de la luz incidente. Si denominamos 9 al ngulo de incidencia entre los rayos luminosos y la normal de la superficie (Figura 10.12), entonces el rea proyectada de un elemento de superficie en perpendicular a la direccin de la luz ser proporcional a eos 9. Por tanto, podemos modelar la cantidad de luz incidente sobre una superficie para una fuente de intensidad l mediante la frmula:
Utilizando la Ecuacin 10.8, podemos modelar las reflexiones difusas para una fuente luminosa con intensidad // utilizando la frmula:,
'/,<iiff
=
Kl
'/.inciden!
= ^/,cos0
(10.9)
Cuando la luz que incide desde la fuente es perpendicular a la superficie en un punto concreto, 6 90 y '/ditr $ roed ida que se incrementa el ngulo de incidencia, decrece la iluminacin debida a esa fuente luminosa. Adems, una superficie se ver iluminada por una fuente puntual nicamente si el ngulo de incidencia est comprendido entre 0 y 90 (es decir, si eos 0 e s t en el intervalo que va de 0.0 a 1.0). Cuando eos 9 < 0.0, la fuente luminosa estar situada detrs de la superficie. En cualquier posicin de la superficie, podemos designar al vector unitario normal como N y al vector unitario en la direccin de una fuente puntual como L, como en la Figura 10.13. Entonces, eos 9 = N L y la ecuacin de reflexin difusa para iluminacin mediante una nica fuente puntual en una determinada posicin de la superficie puede expresarse en la forma:
= o
/^(N'L), 0,0,
siN-L>0 siNL<0
El vector unitario L en direccin a una fuente luminosa puntual cercana se calcula utilizando las coordenadas del punto de la superficie y de la fuente luminosa:
P L =
sourcc- surf
FIGURA 10.12. Un rea iluminada A proyectada en perpendicular al trayecto de los rayos de luz incidentes. Esta proyeccin perpendicular tiene un rea igual a A eos 6.
587
A la fuente luminosa
FIGURA 10.13. ngulo de incidencia 0 entre el vector unitario L en direccin de la fuente luminosa y el vector unitario N normal a la superficie en una determinada posicin. Sin embargo, una fuente iuminosa situada en el infinito no tiene posicin asignada, sino nicamente una direccin de propagacin. En dicho caso, utilizaremos como vector de direccin L el negado del vector que define la direccin de emisin de la fuente luminosa. La Figura 10.14 ilustra la aplicacin de la Ecuacin 10.10 a una serie de posiciones sobre la superficie de una esfera, utilizando valores seleccionados del parmetro k comprendidos entre 0 y 1. Para k = 0, no se refleja nada de luz y la superficie del objeto parece negra. Los valores crecientes de k incrementan la intensidad de las reflexiones difusas, produciendo todos de gris cada vez ms claros. A cada posicin de pxel proyectada de la superficie se le asigna un valor de intensidad que se calcula mediante la ecuacin de reflexin difusa. Las representaciones superficiales de esta figura ilustran la iluminacin mediante una nica fuente puntual, sin ningn efecto de iluminacin adicional. Esto es lo que cabra esperar ver si apuntramos con una linterna muy pequea hacia un objeto en una habitacin completamente oscura. En las escenas generales, sin embargo, existirn reflexiones superficiales debidas a luz ambiente, adems de los efectos de iluminacin producidos por la fuente luminosa. Podemos combinar los clculos de intensidad debidos a la luz ambiente y a las fuentes puntuales con el fin de obtener una expresin para la reflexin difusa total en cada posicin de una superficie. Adems, muchos paquetes grficos incluyen un coeficiente de reflexin ambiente k que puede asignarse a cada superficie para modificar la intensidad l de la luz ambiente. Esto simplemente nos proporciona un parmetro adicional para ajustar los efectos de iluminacin de nuestro modelo emprico. Utilizando el modelo k , podemos escribir la ecuacin total de reflexin difusa para una nica fuente puntual en la forma
d d a a a
donde k y k dependen de las propiedades de los materiales de la superficie y tienen valores comprendidos en el rango que va de 0 a 1.0 para efectos de iluminacin monocromticos. La Figura 10.15 muestra una
t (
kd,
con
ka
0.0
0.0
0.2
0.4
0.6
0.8
1.0
FIGURA 10.14. Reflexiones difusas en una superficie esfrica iluminada mediante una fuente luminosa puntual de color blanco, con valores del coeficiente de reflectividad difusa en el intervalo 0 < k < I.
d
588
CAPTULO 10
FIGURA 10.15. Reflexiones difusas en una superficie esfrica iluminada con una luz ambiente de color gris oscuro y una fuente puntual de color blanco, utilizando cinco valores para k y comprendidos entre 0.0 y LO.
(l
esfera con intensidades superficiales calculadas segn la Ecuacin 10.12, para valores de los parmetros k y k comprendidos cnlre 0 y 1.0.
Q
589
FIGURA 10.17. Modelado de las reflexiones especulares (rea sombreada) mediante el parmetro n .
grande (por ejemplo, 100 o ms), mientras que los valores ms pequeos (hasta como mnimo 1) se utilizan para las superficies ms males. Para un reflector perfecto, 'f $i es infinita. Para una superficie rugosa, a /? se le asigna un valor prximo a 1. Las Figuras LO. 17 y 10.18 muestran el efecto de n sobre el rango angular para el cual podemos esperar ver reflexiones especulares. La intensidad de la reflexin especular depende de las propiedades de los materiales de la superficie y del ngulo de incidencia, as como de otros factores tales como la polarizacin y el color de la luz incidente. Podemos modelar aproximadamente las variaciones de intensidad especular monocromtica utilizando un coeficiente de reflexin especular, W(0), para cada superficie. La Figura 10.19 muestra la variacin general de W(B) en el rango que va de 0 = 0 a 0 = 90 para unos cuantos materiales. En general, V(6) tiende a incrementarse a medida que aumenta el ngulo de incidencia. Para 6 = 90, toda la luz incidente se refleja (W(&) = I). La variacin de la intensidad especular con respecto al ngulo de incidencia se describe mediante las leyes de Fresnel de la reflexin. Utilizando la funcin de reflexin espectral W(6), podemos escribir el modelo de reflexin especular de Phong de la forma siguiente;
v s
^^Wp#f
{ / ( U 3 )
donde //-es la intensidad de la fuente luminosa y 0 es el ngulo de visualizacin relativo a la direccin de reflexin especular R. Como puede verse en la Figura 10.19, los materiales transparentes, como el cristal, exhiben reflexiones especulares apreciables nicamente cuando 6 se aproxima a 90". Para 0 = 0 , slo se refleja aproximadamente el 4 por ciento de la luz que incide sobre una superficie de cristal, y para casi todo el rango de valores de 0, la intensidad reflejada es inferior al 10 por ciento de la intensidad incidente. Pero para muchos materiales opacos, la reflexin especular es prcticamente constante para todos los ngulos de incidencia. En este caso, podemos modelar razonablemente los efectos especulares sustituyendo W(6) por un coeficiente constante de reflexin especular k . Entonces, simplemente asignamos a k algn valor en el rango de 0 a LO para cada superficie.
s s
Puesto que V y R son vectores unitarios en las direcciones de visualizacin y de reflexin especular, podemos calcular el valor de eos 0 mediante el producto escalar V R. Adems, no se generar ningn efecto especular para una superficie si V y L se encuentran en el mismo lado del vector normal N, o si la fuente luminosa est situada detrs de la superficie. As, asumiendo que el coeficiente de reflexin especular es constante para cada material, podemos detenninar la intensidad de la reflexin especular debida a una fuente de iluminacin puntual sobre una posicin de la superficie mediante la frmula:
590
FIGURA 10.18. Grficas de cos^v <p utilizando cinco valores diferentes para el expolente de reflexin especular n .
s
\kJ,(\R)'\ = 0.0,
siV-R>0 siVR<
y o
La direccin de R, el vector de refiexin, puede calcularse a partir de las direcciones de los vectores L y N. Como puede verse en la Figura 10.20, la proyeccin L sobre la direccin del vector normal tiene una magnitud igual al producto escalar N L que tambin es igual a la magnitud de la proyeccin del vector unitario R sobre la direccin de N.
(10.15)
La Figura 10.21 ilustra el fenmeno de la refiexin especular para diversos valores de k y en una esfera iluminada mediante una nica fuente puntual.
591
FIGURA 10.19. Variacin aproximada del coeficiente de reflexin especular para diferentes materiales, en funcin del ngulo de incidencia.
FIGURA 10.20. I a proyeccin de L o R sobre la direccin del vector normal N tiene una magnitud igual a N L.
30
0.30
0.10
lo
120
xpcriniiC
FIGURA 10.21. Reflexiones especulares en una superficie esfrica para diversos valores de los parmetros especulares, utilizando una nica fuente luminosa. Para calcular V, utilizamos la posicin de la superficie y la posicin de visualizacin, de la misma forma que obtenamos el vector unitario L (Ecuacin 10.11). Pero si se va a utilizar una direccin de visualizacin lija para todas las posiciones de una escena, podemos hacer V (0.0, 0.0, 1.0), que es un vector unitario en la direccin z positiva. Los clculos especulares requieren menos tiempo utilizando un valor de V constante, aunque las imgenes no son tan realistas. Puede obtenerse un modelo de Phong algo ms simple utilizando el vector medio H entre L y V para calcular el rango de reflexiones especulares. Si sustituimos V R en el modelo de Phong por el producto escalar N H, esto simplemente sustituye el clculo emprico eos < > por el clculo emprico eos a (Figura 10.22). El vector medio se obtiene como;
592
CAPTULO 10
FIGURA 10.22. Vcclor medio II segn la bisectriz del ngulo formado por L y V.
H =
ITV1
m m
Para superficies no planas, N H requiere menos clculos que V R, porque el clculo de R en cada punto de la superficie implica al vector variable N. Asimismo, si tanto el observador como la fuente luminosa estn lo suficientemente lejos de la superficie, los vectores V y L son constantes, por lo que tambin H ser constante para todos los puntos de la superficie. Si el ngulo H y N es superior a 90, N H ser negativo y asignaremos el valor 0.0 a la contribucin correspondiente a la reflexin especular. El vector H representa la direccin que producira una reflexin especular mxima de la superficie en la direccin de visualizacin, para una posicin dada de una fuente luminosa puntual. Por esta razn, H se denomina en ocasiones direccin de orientacin de la superficie para mximo resalte. Asimismo, si el vector V es coplanar con los vectores L y R (y por tanto con N), el ngulo a tiene el valor ^ 2 . Cuando V, L y N no son coplanares, a > 0/2, dependiendo de la relacin espacial de los tres vectores.
= ^/ +^/ (N.L)+
( /
V;(N-Hr
La superficie slo estar iluminada por la luz ambiente cuando la fuente luminosa est detrs de la superficie, y no habr efectos especulares si V y L se encuentran en el mismo lado del vector normal N. La Figura 10.23 ilustra los efectos de iluminacin superficial producidos por los diversos trminos de la Ecuacin 10.17.
(0.18)
(c) \
(d)
FIGURA 10.23. Una escena almbrica (a) se muestra en (b) utilizando nicamente luz ambiente, con un color distinto para cada objeto. Las reflexiones difusas resultantes de la iluminacin con luz ambiente y una nica fuente puntual se ilustran en (c). Para esta imagen, k = 0 para todas las superficies. En (d) se muestran reflexiones tanto difusas c o m o especulares para la iluminacin con una nica fuente puntual y con luz ambiente.
s
exteriores podra incluir farolas, anuncios luminosos y focos de coches. Podemos modelar empricamente las emisiones de luz superficial incluyendo simplemente un trmino de emisin ^ f j en el modelo de iluminacin, de la misma forma que simulbamos la luz de fondo utilizando un nivel de luz ambiente. Esta emisin superficial se suma entonces a las reflexiones superficiales resultantes de las fuentes luminosas y de la luz de fondo. Para iluminar otros objetos a partir de una superficie emisora de luz, podemos posicionar una fuente de luz direccional detrs de la superficie con el fin de producir un cono luminoso que atraviese la superficie. O bien podemos simular la emisin mediante un conjunto de fuentes luminosas puntuales distribuidas por toda la superficie. En general, sin embargo, las superficies de emisin no suelen utilizarse en el modelo bsico de iluminacin con el fin de iluminar otras superficies, debido al tiempo de clculo adicional requerido. En lugar de eso, las emisiones superficiales se utilizan como forma simple de aproximar la apariencia de la superficie de una fuente luminosa compleja. Esto produce un efecto de resplandor para dicha superficie. En la Seccin 10.12 hablaremos del modelo de radiosidad, que es un mtodo ms realista de modelar las emisiones de luz superficiales.
u r t m y s o n
594
La funcin radial de a t e n u a c i n , / se evala mediante la Ecuacin 10.2 y la funcin angular de atenuacin mediante la Ecuacin 10.5. Para cada fuente luminosa, calculamos la reflexin difusa en un punto de la superficie mediante la formula:
/radaUn
0,0,
<
2 U > =
A ,/,(N-L,),
(
Y el trmino de reflexin especular debido a la iluminacin mediante una fuente puntual se calcula con expresiones similares:
0 0
(10 21)
/ , m a x { 0 . 0 , ( N - H , )" },
en caso contrario
Para garantizar que la intensidad de cada pxel no exceda el valor mximo admisible, podemos aplicar algn tipo de procedimiento de normalizacin. Un enfoque simple consiste en definir una magnitud mxima para cada trmino de la ecuacin de intensidad. Si alguno de los trminos calculados excede del mximo, simplemente le asignamos el valor mximo. Otra forma de evitar los desbordamientos del valor de la intensidad consiste en normalizar los trminos individuales, dividiendo cada uno de ellos por la magnitud del tnnino ms grande. Un procedimiento ms complicado consiste en calcular todas las intensidades de pxel de la escena y luego cambiar la escala de este conjunto de intensidades al rango de intensidades que va de 0.0 a 1.0. Asimismo, los valores de los coeficientes de la funcin radial de atenuacin y los parmetros pticos de las superficies de una escena pueden ajustarse para evitar que las intensidades calculadas excedan del valor mximo admisible. Este es un mtodo muy efectivo para limitar los valores de intensidad cuando toda la escena est iluminada por una nica fuente luminosa. En general, sin embargo, a las intensidades calculadas nunca se les permite exceder del valor 1.0 y los valores de intensidad negativos se ajustan al valor 0.0.
595
Lo ms comn es que las superficies se iluminen con fuentes de color blanco, pero para efectos especiales o para iluminacin de interiores, podemos utilizar otros colores para las fuentes luminosas. A conlinuacin, definimos los coeficientes de reflexin para modelar cada color de superficie concreto. Por ejemplo, si queremos que un objeto tenga una superficie azul, seleccionaremos un valor distinto de cero en el rango de 0.0 a 1.0 para la componente de reflectividad azul, k , mientras que a las componentes de reflectividad roja y verde les asignaremos el valor cero (k = / r = 0.0). Todas las componentes rojas y verdes distintas de cero en la luz incidente sern absorbidas y slo se reflejar la componente azul. En su modelo de reflexin especular original, Phong asignaba el parmetro & a un valor constante, independiente del color de la superficie. Esto produce reflexiones especulares que tienen el mismo color que la luz incidente (usualmente blanco), lo que da a la superficie una apariencia plstica. Para que el material no tenga aspecto plstico, el color de la reflexin especular debe definirse en funcin de las propiedades de la superficie y puede ser diferente tanto del color de la luz incidente como del color de las reflexiones difusas. Podemos aproximar los efectos especulares en tales superficies haciendo que el coeficiente de reflexin especular dependa del color, como en la Ecuacin 10.23. La Figura 10.24 ilustra las reflexiones de color en una superficie mate, mientras que las Figuras 10.25 y 10.26 muestran las reflexiones de coloren superficies metlicas. En la Figura 10.27 se muestran reflexiones de luz en las superficies de los objetos debidas a mltiples mentes de luz coloreada. Otro mtodo para establecer el color de la superficie consiste en especificar las componentes de los vectores de color difuso y especular para cada superficie, pero conservando los coeficientes de reflexin como constantes de un nico valor. Para un modelo de color RGB, por ejemplo, las componentes de estos dos vectores de color de superficie podran designarse (S S , S ) y (S , S S ). La componente azul de la reflexin difusa (Ecuacin 10.22) se calculara entonces como;
tm (R c (Ry ijG ilB sR xCt slJ
IlUJf
(10.24)
Esta tcnica proporciona una flexibilidad algo mayor, ya que pueden configurarse independientemente los parmetros de color de la superficie y los valores de reflectividad. En algunos paquetes grficos, se incluyen parmetros de iluminacin adicionales que permiten asignar mltiples colores a una fuente luminosa, contribuyendo cada color a uno de los efectos de iluminacin superficial. Por ejemplo, puede utilizarse uno de los colores como contribucin a la iluminacin general de fondo de la escena. De forma similar, otro color de la fuente luminosa puede usarse como intensidad luminosa para
FIGURA 10.24. Reflexiones luminosas en la superficie de un cojn negro de nylon, modelado mediante patrones de tela tejida y representado utilizando mtodos de Monte-Carlo para trazado de rayos. {Cortesia de Stephen H. Westin, Program of Computer Graphics, Cornell University. )
FIGURA 10.25. Rellexiones luminosas en una tetera cuyos parmetros de reflexin se han especificado para simular superficies de aluminio bruido y que ha sido representada utilizando mtodos de Monte-Cario para trazado de rayos. (Cortesa de Stephen H. Westin. Program of Computer Graphics, Cornell University.)
596
CAPTULO 10
FIGURA 10.26. Reflexiones luminosas en trmpelas cuyos parmetros de reflexin se han definido para simular superficies brillantes de cobre. {Cortesa de SOFT/MAGE, Inc.)
FIGURA 10.27. Reflexiones luminosas debidas a mltiples fuentes de luz de varios colores. (Cortesa de Sun Microsystems.)
los clculos de reflexin difusa, mientras que un tercer color de la fuente podra emplearse en los clculos de la reflexin especular.
En el Captulo 12 se explican con mayor detalle las diversas representaciones del color que resultan tiles en aplicaciones de infografa.
Luminancia
Otra caracterstica del color es l a l u i m n a u c i a , que en ocasiones se denomina tambin energa luminosa. La luminancia proporciona informacin acerca del nivel de claridad u oscuridad de un color, y es una medila psicolgica de nuestra percepcin del brillo que, vara con la cantidad de iluminacin que observemps. Fsicamente, el color se describe en trminos del rango de frecuencias de la energa radiante visible (luz) y l^iuniinancja se calcula como una suma ponderada de las componentes de intensidad dentro de un entorno de iluminacin concreto. Puesto que cualquier tipo de iluminacin contiene un rango continuo de frecuencias, el valor de luminancia se calcula como:
r (10.26)
luminancia = /></>/(./W _ ... iLtibk/ , El parmetro / ( / ) de este clculo representa la intensidad de la componente luminosa de frecueucja/que_ est radiando en una direccin concreta. El parmetro p(f) es una funcin de proporcionalidad experimen-
597
talmente determinada que vara tanto con la frecuencia como con el nivel de iluminacin. La integral se rea''1z3~paTa~t63as las intensidades a lo largo del rango de frecuencias contenido en la luz. Para imgenes en escala de grises y monocromticas, nos basta con los valores de luminancia para describir la iluminacin de un objeto. Y de hecho, algunos paquetes grficos permiten expresar los parmetros de iluminacin en trminos de la luminancia. Las componentes de color verde de una fuente luminosa son las que ms contribuyen a la luminancia, mientras que las componentes de color azul son las que contribuyen menos. Por tanto, la luminancia de una fuente de color RGB se suele calcular mediante la frmula: luminancia M Q299R + 0.587G + 0.1 14B (10.27)
En ocasiones, pueden conseguirse mejores efectos de iluminacin incrementando la contribucin de la componente verde de cada color RGB. Una recomendacin emprica para este clculo es la frmula 0.2125/V -I- 0.7154G + 0.07215. El parmetro de luminancia suele representarse mediante el smbolo que se corresponde con la componente Y d e l modelo de color XYZ (Seccin 12.3).
Materiales translcidos
En la superficie de un objeto transparente puede producirse tanto transmisin difusa como especular. Los efectos difusos tienen gran importancia cuando haya que modelar materiales translcidos. La luz que pasa a travs de un material translcido se dispersa, de modo que los objetos situados en segundo plano se ven como imgenes borrosas. Podemos simular la transmisin difusa distribuyendo las contribuciones de intensidad de los objetos de segundo plano a lo largo de un rea finita, o bien utilizar mtodos de trazado de rayos para simular los objetos translcidos. Estas manipulaciones requieren mucho tiempo de procesamiento, por lo que los modelos bsicos de iluminacin slo suelen calcular los efectos de transparencia especular.
tm
FIGURA 10.28. La emisin de luz de una superficie transparente es, en general, una combinacin de luz reflejada y transmitida.
598
CAPTULO 10
FIGURA 10.29. Una vista de una escena obtenida mediante trazado de rayos, donde se muestra un vaso transparente. Se pueden apreciar tanto transmisiones de luz procedentes de los objetos situados detrs de! vaso como reflexiones luminosas producidas en la superficie del vaso. (Cortesa Je Eric llaines, Autodesk, Inc.)
Refraccin de la luz
Pueden obtenerse imgenes realistas de un material transparente modelando el trayecto de refraccin de un rayo de luz a travs del material. Cuando un haz luminoso incide sobre una superficie transparente, parte del mismo se refleja y parte se transmite a travs del material, en forma de luz refractada, como se muestra en la Figura 10.30. Puesto que la velocidad de la luz es diferente para los distintos materiales, el trayecto de la llt refractada ser distinto del de la luz incidente. La direccin de la luz refractada, especificada por el ngulo de refraccin con respecto al vector normal a la superficie, est en funcin del ndice de refraccin del material y de la direccin de la luz incidente. El ndice de refraccin se define como el cociente entre la velocidad de la luz en el vaco y la velocidad de la luz en el material. l ngulo de refraccin 0 se calcula aplicando la
r
ley de Sncll:
sin0, = ^ - s i n 0 , (10.28)
donde 6 es el ngulo de incidencia, t] es el ndice de refraccin del material a travs del que viajaba la luz y t] es el ndice de refraccin del material a travs del que la luz se refracta. De hecho, el ndice de refraccin tambin depende de otros factores, como la temperatura del material y la longitud de onda de la luz incidente. As, las diversas componentes de color de la luz incidente blanca, por ejemplo, se refractan con ngulos distintos que varan con la temperatura. Adems, dentro de los materiales anistropos como el cuarzo cristalino, la velocidad de la luz depende de la direccin, y algunos materiales transparentes exhiben una doble reflacci/u que hace que se generen dos rayos luminosos refractados. Para la mayora de las aplicaciones, sin embargo, podemos utilizar un nico ndice de refraccin promedio para cada material, tal como se numera en la Tabla 10.1. Utilizando el ndice de refraccin del aire (aproximadamente 1.0) que rodea a un panel de cristal (ndice de refraccin - 1.61) en la Ecuacin 10.28, con un ngulo de incidencia de 30, obtenemos un ngulo de refraccin de unos 18 para la luz que pasa a travs del cristal.
j r
599
L
ireeein de reflexin Direccin de refraccin
Luz iiickleni^A're
FIGURA 10.30. Direccin de reflexin R y direccin de refraccin (transmisin) T para un rayo de luz que incide sobre una superllcie con un ndice de refraccin n .
FIGURA 10.31. Refraccin de la luz a travs de un panel de cristal. El rayo refractado emergente describe una trayectoria que es paralela a la del rayo luminoso incidente (lnea punteada).
TABLA 1 0 . 1 . NDICE PROMEDIO DE R Material Vaco (aire u otro gas) Cristal comn Cristal pesado Cristal de slex comn Cristal de slex pesado Sal cristalina Cuarzo Agua Hielo
PARA ALGUNOS MATERIALES COMUNES. Indice de refraccin 1.00 I.52 I.6I l.l L92 I.55 1.54 1.33 1.31
La Figura 10.31 ilustra las modificaciones del trayecto debidas a la refraccin para un rayo de luz que atraviesa una lina lmina de cristal. El efecto global de la refraccin consiste en desplazar la luz incidente hasta una trayectoria paralela cuando el rayo emerge del material. Puesto que los clculos relacionados con las funciones trigonomtricas de la Ecuacin 10.28 requieren mucho esfuerzo de procesamiento, estos efectos de refraccin pueden aproximarse simplemente desplazando la trayectoria de la luz incidente segn una cantidad apropiada, que depender de cada material. A partir de la ley de Snell y del diagrama de la Figura 10.30, podemos obtener el vector unitario de transmisin T en la direccin de refraccin Q mediante la frmula:
T = | ^ c o s 0 , -cos0
1,
donde N es el vector unitario normal a la superficie y L es el vector unitario en la direccin que va desde el punto de la superficie hasta la fuente luminosa. El vector de transmisin T puede utilizarse para localizar las intersecciones del trayecto de refraccin con los objetos situados detrs de la superficie transparente. Incluir los objetos de refraccin en una escena puede producir imgenes muy realistas, pero la determinacin de los trayectos de refraccin y las intersecciones con los objetos requiere una cantidad de proceso considerable. La mayora de los mtodos del espacio de imagen basados en lneas de barrido modelan la transmisin de la luz mediante aproximaciones que reducen el tiempo de procesamiento. Los efectos de refraccin precisos slo se suelen mostrar utilizando algoritmos de trazado de rayos (Seccin 10.11).
600
CAPTULO 10
'=0
t
00.30)
El trmino (I - k ) es el factor de opacidad. Por ejemplo, si el factor de transparencia tiene un valor de 0.3, entonces el 30 por ciento de la luz de los objetos de segundo plano se combinar con un 70 por ciento de la luz reflejada por la superficie. Este procedimiento puede usarse para combinar los efectos de iluminacin de cualquier nmero de objetos transparentes y opacos, siempre y cuando procesemos las superficies segn su orden de profundidad (desde atrs hacia delante). Por ejemplo, mirando a travs del cristal de la Figura 10.29, podemos ver los objetos opacos que estn situados detrs de dos superficies transparentes. De forma similar, cuando miramos a travs del parabrisas de un automvil, podemos ver los objetos situados dentro del vehculo, as como cualquier objeto que est situado detrs del parabrisas trasero. Para objetos muy transparentes, asignaremos a k un valor prximo a 1.0. Los objetos casi opacos transmiten muy poca luz procedente de los objetos situados en segundo plano, as que podemos asignar a k un valor prximo a 0.0 para estos materiales. Tambin se puede hacer que k sea funcin de la posicin concreta de la superficie, de tal forma que las diferentes parles de un objeto transmitan ms o menos luz procedente de las superficies situadas en segundo plano. Podemos modificar los algoritmos de visibilidad basados en la ordenacin de la profundidad con el fin de tener en cuenta la transparencia, para lo cual ordenaremos primero las superficies segn su profundidad y luego determinaremos si cualquiera de las superficies visibles es transparente. Si lo es, la intensidad reflejada en la superficie se combinar con la intensidad superficial de los objetos situados detrs suyo, con el fin de obtener la intensidad de pixel en cada punto proyectado de la superficie. Los efectos de transparencia tambin pueden implementarse utilizando una tcnica de bfer de profundidad modificada. Podemos dividir las superficies de una escena en dos grupos, de modo que se procesen primero todas las superficies opacas. Terminado este proceso, el bfer de imagen contendr las intensidades de las superficies visibles y el bfer de profundidad contendr sus profundidades. A continuacin, se compara la profundidad de los objetos transparentes con los valores previamente almacenados en el bfer de profundidad. Si alguna de las superficies transparentes es visibles, su intensidad reflejada se calcular y combinar con la intensidad de la superficie opaca previamente almacenada en el bfer de imagen. Este mtodo puede modificarse para producir imgenes ms precisas, utilizando espacio de almacenamiento adicional para la profundidad y para otros parmetros de las superficies transparentes, listo permite comparar los valores de profundidad de las superficies transparentes entre s, adems de compararlos con la profundidad de las superficies opacas. Entonces, las superficies transparentes visibles se representarn combinando sus intensidades superficiales con aquellas de las superficies visibles y opacas que estn situadas detrs. Otra posible tcnica es el mtodo basado en bfer A. Para cada posicin de pixel del bfer A, los parches de superficie de todas las superficies solapadas se guardan y almacenan segn su orden de profundidad. Entonces, las intensidades de los parches de superficie transparentes y opacos que se solapan en profundidad se combinan en el orden de visibilidad adecuado con el fin de producir la intensidad final promedio para el pixel.
t t f
10.6 Sombras
601
:
Plano de proyeccin
FIGURA 10.32. La intensidad de un objeto situado en segundo plano en el punto P puede combinarse con la intensidad reflejada por la superficie de un objeto transparente a lo largo de una lnea de proyeccin perpendicular (punteada).
~#^
"
> J 2 )
El valor asignado a c/es la distancia hasta el objeto desde la posicin de visualizacin. El parmetro p en estas funciones exponenciales se utiliza para definir un valor de densidad positivo para la atmsfera. Los valores mayores de p producen una atmsfera ms densa y hacen que se atenen ms los colores de las superficies. Despus de calculado el color de la superficie de un objeto, multiplicaremos dicho color por una de las funciones atmosfricas con el fin de reducir su intensidad segn una cantidad que depender del valor de densidad que hayamos asignado a la atmsfera. En lugar de la funcin exponencial, podramos simplificar los clculos de la atenuacin atmosfrica utilizando la funcin lineal 9.9 de variacin de la intensidad segn la profundidad. Esto hace que se reduzca la intensidad de los colores de la superficie de los objetos distantes, aunque si hacemos esto no tendremos posibilidad de variar la densidad de la atmsfera. Algunas veces puede ser necesario tambin simular un color atmosfrico. Por ejemplo, el aire en una habitacin llena de humo podra modelarse con un cieno tono gris o, quizs, con un azul plido. Podra emplearse el siguiente clculo para combinar el color de la atmsfera con el color de un objeto:
donde ./
lnl0
10.6 SOMBRAS
Pueden utilizarse mtodos de deleccin de la visibilidad para localizar regiones que no estn iluminadas por las fuentes de luz. Con la posicin de visualizacin situada en la ubicacin de una fuente luminosa, podemos determinar qu secciones de las superficies de una escena no son visibles. Estas sern las reas de sombra. Una vez determinadas las reas de sombra para todas las fuentes luminosas, las sombras pueden tratarse como patrones superficiales y almacenarse en matrices de memoria de patrones. La Figura 10.33 ilustra una serie de regiones de sombra sobre la cara de un carcter animado. En esta imagen, las regiones de sombra son secciones de la superficie que no son visibles desde la posicin de la fuente luminosa que est situada encima de
602
C APTULO
10
Modelos
de
iluminacin
y mtodos
de
representacin
superficial
Patrones de sombra mapeados sobre la cara de Aki Ross, un carcter animado de la pelcula Final Fantasy: The Spirits Within. (Cortesa de Sanare Pictures. Inc. O 2001 FFFP Todos los derechos reservados.)
FIGURA 10.33.
la figura. As, la mano y el brazo levantados son iluminados, pero las secciones de la cara situadas detrs del brazo, segn la lnea de visin que proviene de la fuente luminosa, estarn en sombras. La escena de la Figura 10.29 muestra los efectos de las sombras producidas por mltiples fuentes luminosas. Los patrones de sombra generados mediante un mtodo de deteccin de superficies visibles son vlidos para cualquier posicin de visualizacin seleccionada, mientras no se varen las posiciones de las fuentes luminosas. Las superficies que sean visibles desde la posicin de visualizacin se sombrean de acuerdo con el modelo de iluminacin, que puede combinarse con patrones de texturas. Podemos mostrar las reas de sombras nicamente con la intensidad de la luz ambiente, o podemos combinar la luz ambiente con una serie de texturas de superficie especificadas.
10.8
6 0 3
permitidos en el sistema. Adems, el nmero de niveles de intensidad permitidos en el sistema puede distribuirse de modo que se correspondan con la forma en que nuestros ojos perciben las diferencias de intensidad. Cuando mostramos escenas en un sistema monocromo, podemos convertir las intensidades calculadas en patrones de semitono, como se explica en la Seccin 10.9.
= r
donde / representa la intensidad de una de las componentes de color de un haz luminoso. El nivel ms bajo que puede mostrarse se representa como / y el nivel ms alto como ! . Cualquier nivel de intensidad intermedio podr entonces expresarse en trminos de / como:
0 n 0
Podemos calcular el valor de /' a partir de los valores de I y n de un sistema concreto efectuando la sustitucin k = n en la expresin anterior. Puesto l = 1.0, tendremos:
{) n
(KU6)
tin-tUn
u - 'o
Como ejemplo, si / = | para un sistema con n = 3, tendremos r = 2y los cuatro valores de intensidad sern y y LO.
0
El valor de intensidad ms bajo / depende de las caractersticas del monitor y se encuentra normalmente en el rango comprendido entre 0.005 y aproximadamente 0.025. Esta intensidad residual en un monitor de vdeo se debe a la luz reflejada por los fsforos de la pantalla. Por tanto, una regin negra de la pantalla siempre tendr un cierto valor de intensidad por encima de 0.0. Para una imagen en escala de grises con 8 bits por pxel (n = 255) e / = 0.01, el cociente de intensidades sucesivas es aproximadamente r = 1.0182. Los valores aproximados de las 256 intensidades de este sistema sern 0.0100, 0.0102, 0.0104, 0.0106, 0.0107, 0.0109 0.9821 y 1.0000. Con las componentes de color RGB se utilizan mtodos similares. Por ejemplo, podemos expresar la intensidad de la componente azul de un color en el nivel k en trminos del menor valor de intensidad azul obtenible, mediante la frmula:
donde.
604
(10,39)
t=aV<
La variable / representa la intensidad mostrada y l parmetro I es la correspondiente tensin en el tubo de rayos catdicos. Los valores de los parmetros a y /dependen de las caractersticas del monitor utilizado dentro del sistema grfico. As. si queremos mostrar un valor de intensidad concreto /, el valor de tensin que permitir generar esta intensidad es:
7
(10.41)
Este clculo se denomina correccin gamma de la intensidad, y los valores de gamma estn normalmente en el rango comprendido entre 1.7 y 23. El estndar de seal de NTSC (National Television System Committee) es y 2.2. La figura 10.35 muestra un curva de correccin gamma utilizando el valor de gamma de NTSC. estando tanto la intensidad como la tensin normalizadas en el intervalo de 0 a 1.0. La Ecuacin 10.41 se utiliza para definir la tabla de consulta de vdeo que convierte los valores enteros de intensidad de un archivo de imagen a valores que controlen las tensiones del can de electrones. Podemos combinar la correccin gamma con el mapeado logartmico de intensidad para generar una tabla de sustitucin. SI / es un valor de intensidad de entrada producido por un modelo de iluminacin, primero localizamos la intensidad ms prxima I en una tabla de valores creada con la Ecuacin 10.34 o la Ecuacin 10.37. Alternativamente, podemos determinar el nmero del nivel correspondiente a este valor de intensidad aplicando la frmula:
k
k = round log,
(10.42)
y luego podemos calcular el valor de intensidad para este nivel utilizando la Ecuacin 10.37. Una vez dispongamos del valor de intensidad y podemos calcular la tensin del can de electrones mediante la ecuacin:
10.8
605
i.o
0.5 lnlensidad
FIGURA 10.34. Una curva tpica de respuesta de un monitor, mostrando la variacin en la intensidad (o brillo) visualizada en funcin de la tensin normalizada del can de electrones.
FIGURA 10.35. Una curva de consulta de v d e o para correccin de las intensidades que mapea un valor de intensidad normalizado a una tensin normalizada del can de electrones, utilizando una c o l e c c i n g a m m a con / = 2.2.
(1(143) Los valores V pueden entonces almacenarse en las tablas de sustitucin, almacenando los valores de k en las posiciones de pixel del bfer de imagen. Si un sistema concreto no dispone de tabla de sustitucin, pueden almacenarse directamente en el bfer de imagen los valores calculados de VL La transformacin combinada a una escala logartmica de intensidad, seguida del clculo de V utilizando la Ecuacin 10.43 se denomina tambin en ocasiones correccin gamma.
k k
Si los amplificadores de vdeo de un monitor estn diseados para convertir los valores de intensidad lineales en tensiones del can de electrones, podemos combinar los dos procesos de conversin de la intensidad. En este caso, la correccin gamma estar integrada en el hardware y los valores logartmicos deben precalcularse y almacenarse en el bfer de imagen (o en la tabla de colores).
k
606
CAPTULO 10
(d)
FIGURA 10.36. Lina fotografa de tono continuo (a) impresa con 2 niveles de intensidad (b>, cuatro niveles de intensidad (e) y 8 niveles de intensidad (d). Para 16 o ms niveles de intensidad, los efectos de contorneado disminuyen y las reproducciones son bastante similares al original. Las reproducciones de imgenes de plano continuo utilizando ms de 32 niveles de intensidad slo muestran diferencias muy sutiles con respecto al original.
607
FIGURA 10.37. Una seccin ampliada de una fotografa reproducida medanle un mtodo de impresin por semitonos, donde se muestra cmo se representan los tonos mediante puntos de tamao variable. una fotografa en blanco y negro, cada rea de intensidad constante se reproduce mediante un conjunto de pequeos crculos negros sobre fondo blanco. El dimetro de cada crculo es proporcional al nivel de oscuridad requerido para dicha regin de intensidad. Las regiones ms oscuras se imprimen con crculos de mayor tamao, mientras que las regiones ms claras se imprimen con crculos ms pequeos (ms espacio en blanco). La Figura 10.37 muestra una seccin ampliada de una reproduccin de semitono en escala de grises. Los semitonos en color se imprimen utilizando pequeos puntos circulares de diversos tamaos y colores, como se muestra en la Figura 10.38. Los semitonos en los libros y revistas se imprimen en papel de alta calidad utilizando aproximadamente entre 60 y 80 crculos de dimetro variable por centmetro. Los peridicos utilizan un papel de menor calidad y menor resolucin (entre 25 y 30 puntos por centmetro).
Aproximaciones de semitonos
En infogralm, las reproducciones de semitonos se simulan utilizando regiones de pixeles rectangulares que se denominan patrones de aproximacin de semitonos o simplemente patrones de pixeles. 1:1 nmero de niveles de intensidad que podemos mostrar con este mtodo depender de cuntos pixeles incluyamos en la cuadrcula rectangular y de cuntos niveles pueda visualizar el sistema. Con n por n pixeles por cada cuadrcula en un sistema monocromo, podemos representar n + 1 niveles de intensidad. La Figura 10.39 muestra una forma de definir los patrones de pxel para representar cinco niveles de intensidad que podran utilizarse en un sistema monocromo. En el patrn 0, todos los pixeles estn desactivados; en el patrn 1, hay un pxel activado; y en el patrn 4, los cuatro pixeles estn activados. Un valor de intensidad / en una escena se mapea a un patrn concreto de acuerdo con el rango enumerado bajo cada una de las cuadrculas mostradas en las figuras. El patrn 0 se utiliza para 0.0 < / < 0.2, el patrn 1 para 0.2 < / < 0.4 y el patrn 4 para 0.8 < / < 1.0.
2
Con cuadrculas de 3 por 3 pixeles en un sistema monocromo, podemos mostrar diez niveles de intensidad. En la Figura 10.40 se muestra una forma de definir los diez patrones de pxel para estos niveles. Las posiciones de pxel se seleccionan en cada nivel de modo que los patrones aproximen los tamaos crecientes de los crculos utilizados en las reproducciones de semitono. Es decir, las posiciones de los pixeles activados estn cerca del centro de la cuadrcula para los niveles de intensidad inferiores y se expanden hacia afuera a medida que se incrementa el nivel de intensidad. Para cualquier tamao de cuadricula de pixeles, podemos representar los patrones de pixeles para las diversas intensidades posibles mediante una mscara (matriz) de posiciones de pxel. Como ejemplo, podramos usar la siguiente mscara para generar tos nueve patrones de cuadrcula 3 por 3 para niveles de intensidad por encima de 0 que se muestran en la Figura 10.40.
608
(a)
(b) FIGURA 10.38. Patrones de puntos para semitonos en color. La (a) se muestra agrandada segn un factor 10 en (b) y segn un Massachuseffs.) 8 5 4 3 I 9
c) superior de la esfera de! reloj en el semitono en color 50 en (c). (Cortesa de IRIS Graphics. Inc., Bedford,
Para mostrar una intensidad concreta cuyo nmero de nivel sea A, activaremos todos los pxeles cuyo nmero de posicin sea igual o inferior a k. Aunque la utilizacin de patrones de pxeles n por n incrementa el nmero de intensidades que pueden representarse, la resolucin del rea de visualizacin se reduce segn el factor \In en las direcciones JC ej>. Utilizando patrones de cuadrcula de 2 por 2 en un rea de pantalla de 512 por 5 1 2 , por ejemplo, se reduce la resolucin a 256 por 256 posiciones de intensidad. Y con patrones 3 por 3, reducimos la resolucin del rea de tamao 512 por 5 1 2 a 128 por 128. Otro problema con las cuadrculas de pxeles es que, a medida que se incrementa el tamao de la cuadrcula, los patrones de subcuadrcula comienzan a hacerse perceptibles. El tamao de cuadrcula que podr utilizarse sin distorsionar las variaciones de intensidad depender del tamao de cada pxel visualizado. Por
10.9
609
0.6
3 | < 0.8
4 0.8 I <M.O
FIGURA 10.39. Un conjumo tic patrones de cuadrcula de 2 por 2 pxcles que puede utilizarse para mostrar cinco niveles de intensidad en un sistema monocromo, indicndose los pxeles activados como circuios rojos. Los valores de intensidiid asignados a cada uno de los palrones de cuadrcula se indican debajo de las matrices de pxeles.
ti
0 .OsKO.1 0.1 < l< 0.2 0.2 ss I < 0.3 3 0.3 S l< 0.4 0.4 < I < 0.5
m%m Jim
0.5 ^ I < O.fi 0.6
-5 I <
0.7
8 0.8 s l < 0 . 9
li
FIGURA 10.40. Un conjunto de patrones de cuadrcula de 3 por 3 pxeles que puede usarse para mostrar diez niveles de intensidad en un sistema monocromo, indicndose los pxeles activados como crculos rojos. Los valores de intensidad que se asignan a cada uno de los patrones de la cuadrcula se indican debajo de las matrices de pxeles. lauto, para los sistemas de menor resolucin (menos pxeles por centmetro), nos tendremos que dar por satislechos con un nmero menor de niveles de intensidad. Por otra parte, las imgenes de alta calidad requieren al menos 64 niveles de intensidad, lo que quiere decir que necesitamos cuadrculas de X por 8 pxeles. Y para conseguir una resolucin equivalente a la de los semitonos de los libros y las revistas, debemos mostrar 60 puntos por centmetro. Por tanto, ser necesario visualizar 60 X 8 = 480 puntos por centmetro. Algunos dispositivos, como por ejemplo las fumadoras de alta calidad, son capaces de obtener esta resolucin. Los patrones de cuadricula de pxeles para las aproximaciones de semitono deben tambin construirse de forma que se minimicen el contorneado y otros electos visuales no presentes en la escena original. Podemos minimizar el contorneado haciendo que cada patrn de cuadrcula sucesivo represente una evolucin con respecto al patrn anterior, es decir, formamos el patrn de nivel k aadiendo una posicin "activada" al patrn de cuadrcula utilizado para el nivel k - 1. As. si una posicin de pxei est activada para un determinado nivel de intensidad, tambin lo estar para todos los niveles superiores (Figuras 10.3 - y 10.40). Podemos minimizar la introduccin de otros efectos visuales evitando la existencia de patrones simtricos. Con una cuadrcula de 3 por 3 pxeles, por ejemplo, el tercer nivel de intensidad por encima de cero se representar mejor mediante el patrn de la Figura 10.41 (a) que mediante cualquiera de las disposiciones simtricas de la figura 10.4l(b). Los patrones simtricos de esta figura produciran trazos verticales, horizontales o diagonales en las reas de gran tamao que estuvieran sombreadas con el nivel de intensidad 3. En las tareas de impresin en dispositivos tales como fumadoras y algunas impresoras, los pxeles aislados no se reproducen de manera adecuada. Por tanto conviene evitar los patrones de cuadrcula con un nico pxel "activado" o con pxeles activados aislados, como en la Figura 10.42.
o
Los mtodos de aproximacin de semitonos tambin pueden aplicarse para incrementar el nmero de niveles de intensidad del sistema que sean capaces de mostrar ms de dos niveles de intensidad por pixel. Por ejemplo, en un sistema de escala de grises que pueda visualizar cuatro valores de intensidad por pixel, podemos utilizar cuadrculas de 2 por 2 pxeles para representar 13 diferentes niveles de intensidad. La Figura
610
FIGURA 10.41. Para una cuadrcula de 3 por 3 pxeles, el palrn de (a) es mejor que cualquiera de los patrones simtricos de (b) para representar el tercer nivel de intensidad por encima de .
u s
(b,
FIGURA 10.42. Patrones de cuadricula de semitono con pxeles aislados que no pueden reproducirse de manera adecuada en algunos dispositivos de impresin.
i #
# # #
0 o
o o
I
1
1
1
1 0
3
i
1 1
4
i\
V 2
5
3 3 3 3 3
12
m
i
ra
! im
2
2 J
2 2
i 10
II
FIGURA 10.43. Representaciones de las intensidades 0 a 12 obtenidas mediante patrones de aproximacin de semitonos utilizando cuadriculas de 2 por 2 pxeles en un sistema de cuatro niveles, con los niveles de intensidad de pxel etiquetados de 0 a 3.
FIGURA 10.44. Un patrn de cuadricula de 2 por 2 pxeles para la visuali/acin de colores RGB. 10.43 ilustra una forma de definir los 13 patrones de cuadricula de pxeles, pudiendo asignarse a cada pxel los niveles de intensidad 0, 1, 2 y 3. De forma similar, podemos utilizar patrones de cuadrcula de pxeles para incrementar el nmero de niveles de intensidad que pueden representarse en un sistema en color. Por ejemplo, un sistema RGB con tres bits por pxel utilizar un bit por pxel para cada can de color. As. cada pxel se visualiza mediante tres puntos de fsforo, de modo que puede asignarse al pxel uno cualquiera de ocho colores diferentes (incluidos el blanco y el negro). Pero con patrones de cuadrcula de 2 por 2 pxeles, son 12 los puntos de fsforo que podemos utilizar para representar un color, como se muestra en la Figura 10.44. El can de electrones rojo permite activar cualquier combinacin de los cuatro puntos rojos del patrn de cuadrcula y esto proporciona cinco posibles configuraciones para el color rojo del patrn. Lo mismo puede decirse de los caones verde y azul, lo que nos da un total de 125 combinaciones de color diferentes que pueden representarse con nuestros patrones de cuadrcula 2 por 2.
Tcnicas de aleatorizacin
El trmino aleatorizacin (dithering) se utiliza en varios contextos. Fundamentalmente, hace referencia a tcnicas empleadas para aproximar semitonos sin reducir la resolucin, a diferencia de lo que sucede con los
10.9 Patrones de semitono y tcnicas de aleatorizacin 611 patrones de cuadrculas de pxeles. Pero el trmino aleatorizacin se emplea tambin en ocasiones como sinnimo para cualquier esquema de aproximacin de semitonos, e incluso para referirse a las aproximaciones de semitonos en color. Los valores aleatorios sumados a las intensidades de los pxeles con el fin de descomponer los contornos Se suelen denominar r u i d o de a l e a t o r i z a c i n . Se han utilizado diversos algoritmos para generar las distribuciones aleatorias. El efecto de todos ellos consiste en aadir ruido a la imagen completa, lo que tiende a suavizar las fronteras entre los distintos niveles de intensidad. Un mtodo denominado a l e a t o r i z a c i n o r d e n a d a genera variaciones de intensidad mediante una aplicacin biyectiva de los puntos de una escena a las posiciones de pxel utilizando una m a t r i z de a l e a t o r i z a c i n D_ para seleccionar cada nivel de intensidad. La matriz D contiene n por n elementos a los que se asignan valores enteros positivos diferentes en el rango que va de 0 a rr 1 . Por ejemplo, podemos generar cuatro niveles de intensidad mediante:
/ ;
3 0
I 2 (10.45)
2 8
6 1 5 (10.46)
4 0
Los elementos de las matrices l > y D estn en el mismo orden que la mscara de pxeles utilizada para definir las cuadrculas de 2 por 2 y 3 por 3 pxeles, respectivamente. En un sistema monocromo, determinamos los valores de intensidad que hay que visualizar comparando las intensidades de entrada con los elementos de la matriz. Primero se cambia la escala de los niveles de intensidad de entrada al rango 0 < / < n->. Si hay que aplicar la intensidad / a la posicin de pantalla (.v, v), calculamos la posicin de referencia (fila y columna) en la matriz de aleatorizacin de la forma siguiente: j = (x mod n) + 1 , k = (y mod n) + 1 (10.47)
Si / > D (/', A), activaremos el pxel situado en la posicin (v, y). En caso contrario, el pixel permanecer desactivado. En las aplicaciones de color RGB, este procedimiento se implemenla para la intensidad de cada una de las componentes individuales de color (roja, verde y azul). Los elementos de la matriz de aleatorizacin se asignan segn las directrices que ya hemos comentado para las cuadriculas de pxeles, es decir, con el objetivo de minimizar los efectos visuales artificiales, como el contorneado. La aleatorizacin ordenada produce reas de intensidad constante idnticas a las que se generan mediante los patrones de cuadrculas de pxeles. cuando los valores de los elementos de la matriz se corresponden con los de la mscara de la cuadrcula de aproximacin de semitonos. Las variaciones con respecto a las imgenes obtenidas mediante cuadrculas de pxeles se producen en la frontera de dos reas de intensidad diferente. Normalmente, el nmero de niveles de intensidad utilizados ser un mltiplo de 2. Las matrices de aleatorizacin de orden superior, n > 4, se obtienen entonces a partir de las matrices de orden inferior utilizando la relacin recurrente:
4D,_ D (lJ)U
1 + :
/ ?
4D,
/ ? +
D (l,2)c/
2
n / 2 +
2
n / 2
4D
/f/1
n ; 2
+D (2,l)c/
2
/ 2
4D
(10.48)
D 0.2)U n
m
El parmetro U representa la matriz unidad (todos los elementos iguales a 1 ) . Como ejemplo, si se especfica D - , como en la Ecuacin 1 0 . 4 5 , la relacin recursiva 1 0 . 4 8 nos da:
612
CAPTULO 10
15
3
13 10 2
5 6 10 (10.49)
11
4 8
12 0
Otro mtodo para mapear una imagen con m por // puntos a un rea de visualizaein de /;/ por n pxeleses la difusin de error. Con este mtodo, el error entre un valor de intensidad de entrada y el nivel de intensidad seleccionado para una determinada posicin de pixel se dispersa, o difunde, a las posiciones de pixel situadas a la derecha y por debajo de la posicin de pixel actual. Comenzando con una matriz IVI de valores de intensidad obtenida cscaneando una fotografia, podemos tratar de construir una matriz I de valores de intensidad de pixel para un rea de la pantalla. En este caso, podemos hacerlo leyendo las lilas de M de izquierda a derecha, comenzando por la fila superior, y determinando el nivel de intensidad de pixel ms prximo disponible para cada elemento de M. Entonces, el error entre el valor almacenado en la matriz M y el nivel de intensidad mostrado en cada posicin de pixel se distribuye a los elementos vecinos utilizandoci siguiente algoritmo simplificado:
for
(j for \*
- 0; (k =
< m;
0; k < n ; k + + )
est ms este
Determinar
* jue
prximo al v a l o r de M
[ j ] [k]
* asignar
error = M I I I I [jl
[ j ] [k] * M
[j] [k+1] M
[j + H [ k - 1 ] , [kl
tj+l][k-l)
beta
i M -
[ j + l ] [k] M
Ij + U t k + X l
[j+l] tk+l]
Una vez asignados los niveles de intensidad a los elementos de la matriz I, mapcamos la matriz sobre algn rea de un dispositivo de salida, como por ejemplo una impresora o un monitor de vdeo. Por supuesto, no podemos dispersar el error ms all de la ltima columna de la matriz (k = n) o por debajo de la ltima illa de la matriz (j - m) y para un sistema monocromo los valores de intensidad del sistemas son simplemente 0 y I. Los parmetros para distribuir el error pueden elegirse de modo que se satisfaga la relacin:
a + f}+ y + S< 1
(10.50)
Una posible eleccin para los parmetros de difusin de errores que produce muy buenos resultados es {a, p, y, S) = ( - | , - | , f ^ ) . La Figura 10.45 ilustra la distribucin de errores utilizando estos valores de parmetros. La difusin de errores produce en ocasiones fantasmas en las imgenes al repetir ciertas partes de la imagen (ecos), particularmente con caractersticas faciales tales como la linea del pelo o el contorno de la nariz. Estos fantasmas pueden reducirse a menudo en dichos casos seleccionando valores de los parmetros de difusin de errores cuya suma d un valor inferior a 1 y cambiando la escala de los valores de la matriz despus de dispersar los errores. Una forma de cambiar la escala consiste en multiplicar todos los elementos de la matriz por 0.8 y luego sumar 0.1. Otro mtodo para mejorar la calidad de la imagen consiste en alternar la lectura de las filas de la matriz, leyendo una de derecha a izquierda y la siguiente de izquierda a derecha.
613
Columna k
7 16
Fila j
3 16
' I I
16
v
k_
1 16
Fila./ + I
FIGURA 10.45. Fraccin del error de intensidad que puede distribuirse B las posiciones de pixel adyacentes utilizando un esquema de difusin de errores. 34 42 so 38 28 20 i: 24 48 58 62 46 14 4 0 16 40 56 61 54 22 6 3 8 32 53 45 37 30 11 19 27 29 21 13 25 35 43 51 39 15 5 1 17 49 59 63 47 23 7 2 9 41 57 60 55 31 10 18 26 33 52 44 36
FIGURA 10.46. Un posible esquema de distribucin para dividir la matriz de intensidad en 64 clases de difusin de puntos, numeradas de 0 a 63. Una variacin del mtodo de difusin de errores es la difusin de puntos. Con este mtodo, la matriz m por n de valores de intensidad se divide en 64 clases, numeradas de 0 a 63, como se muestra en la Figura 10.46. El error entre un error de matriz y la intensidad visualizada se distribuye entonces nicamente a aquellos elementos vecinos de la matriz que tengan un nmero de clase mayor. La distribucin de los 64 nmeros de clase est realizada con el objetivo de minimizar el nmero de elementos que estn completamente rodeados por elementos con un nmero de clase inferior, ya que esto tendera a dirigir todos los errores de los elementos circundantes hacia esa posicin.
614
CAPITULO 10
Incluso si alguna de estas condiciones no es cierta, podemos seguir aproximando razonablemente bien los efectos de iluminacin de la superficie utilizando mecanismos de representacin superficial de intensidad constante si las caras poligonales del objeto son pequeas.
En cada vrtice del polgono, obtenemos un vector normal calculando el promedio entre los vectores normales de todos los polgonos de la malla de la superficie que comparten dicho vrtice, como se ilustra en la figura 10.47. As, para cualquier posicin de vrtice V, obtenemos el vector unitario normal del vrtice mediante la frmula: (10.51)
Una vez obtenido el vector normal en el vrtice, invocamos el modelo de iluminacin para calcular la intensidad superficial en dicho punto.
615
FIGURA 10.47. El vector normal en el vertice V se calcula como promedio de las normalcs de superficie para cada uno de l o s polgonos que comparten dicho vrtice.
FIGURA 10.48. Para representar la superlieie de Gouraud, la intensidad en el punto 4 se interpola lnealmente a partir de las intensidades en los vrtices I y 2. La intensidad en el punto 5 se interpola lnealmente a partir de las intensidades en los vrtices 2 y 3. En un punto interior p se asigna un valor de iniensidad que se interpole linealmente a partir de las intensidades en las posiciones 4 y 5.
Despus de haber calculado todas las intensidades de vrtice para una cara poligonal, podemos interpolar los valores de los vrtices para obtener las intensidades en las posiciones situadas a lo largo de las lneas de barrido que intersecten con el rea proyectada del polgono, como se ilustra en la Figura 10.48. Para cada lnea de barrido, la intensidad de la interseccin de la lnea de barrido con una arista del polgono se interpone linealmente a partir de las intensidades de los extremos de dicha arista. Para el ejemplo de la Figura 10.48, la arista del polgono cuyos extremos estn en las posiciones 1 y 2 es intersectada por la linea de barrido en el punto 4. Un mtodo rpido para obtener la intensidad en el punto 4 consiste en interpolar entre los valores correspondientes a los vrtices I y 2 utilizando nicamente el desplazamiento vertical de la lnea de barrido: / = ^ ^ / , + ^
4 : :
^ /
(10.52)
V|-y
V,-y.
En esta expresin, el smbolo / representa la intensidad de una de las componentes de color RGB. De forma similar, la intensidad en la interseccin derecha de esta lnea de barrido (punto 5) se interpola a partir de los valores de intensidad en los vrtices 2 y 3. Partiendo de estas dos intensidades de los extremos, podemos interpolar linealmente para obtener las intensidades de pxcl en las distintas posiciones que componen la linea de barrido. La intensidad de una de las componentes de color RGB en el punto p de la Figura 10.48, por ejemplo, se calcula a partir de las intensidades de los puntos 4 y 5 como: x. -x - v - x , =^-^-^^^1,
n
(10.53)
En la implementacin de los mecanismos de representacin de Gouraud, podemos realizar los clculos de intensidad representado por las licuaciones 10.52 y 10.53 de manera eficienle utilizando mtodos incremntales. Comenzando por una lnea de barrido que intersecte uno de los vrtices del polgono, podemos obtener incrementalmente los valores de intensidad para otras lneas de barrido que intersecten una arista conectada a dicho vrtice. Suponiendo que las caras poligonales sean convexas, cada lnea de barrido que cruce el polgono tendr dos intersecciones con las aristas, como por ejemplo los puntos 4 y 5 de la Figura 10.48. Una vez obtenidas las intensidades en las dos intersecciones de la lnea de barrido con las aristas, aplicamos los procedimientos incremntales para obtener las intensidades de pixel en la lnea de barrido.
616
CAPTULO 10
Como ejemplo del clculo incremental de las intensidades, vamos a considerar las lneas de barrido y - l de la Figura 10.49, que intersectan la arista izquierda de un polgono. Si la lnea de barrido^ es la lnea de barrido situada inmediatamente por debajo del vrtice de .y, con intensidad / , , es decir j> = y - 1, podemos calcular la intensidad / en la lnea de barrido .y a partir de la Ecuacin 10.52, de la manera siguiente:
}
(10.54)
Si continuamos bajando por la arista del polgono, la intensidad en la arista para la siguiente lnea de barri(10.55)
As, cada valor sucesivo de intensidad al descender por la arista se calcula simplemente sumando el trmino constante (/ - I )/(y - y ) al valor de intensidad anterior. Se utilizan clculos incremntales similares para obtener las intensidades en las sucesivas posiciones de pixel horizontales dentro de cada lnea de barrido. Los mecanismos de representacin superficial de Gouraud pueden combinarse con un algoritmo de deteccin de superficies ocultas con el fin de rellenar los polgonos visibles para cada lnea de barrido. En la Figura 10.50(c) se muestra un ejemplo de objeto tridimensional representado por el mtodo de Gouraud.
2 l l 2
lneas de barrido
x *+
FIGURA 10.49. Interpolacin incremental de los valores de intensidad a lo largo de una arista de un polgono para lneas de barrido sucesivas.
FIGURA 10.50. Una aproximacin de un objeto mediante malla poligonal (a) se muestra utilizando representacin superficial plana en (b) y representacin superficial de Gouraud en (c).
Este mtodo de interpolacin de la intensidad elimina las discontinuidades asociadas con los mecanismos de representacin plana, pero presenta algunas otras deficiencias. Los resaltes en la superficie se muestran en ocasiones con formas anmalas y la interpolacin lineal de la intensidad puede provocar la aparicin de trazos brillantes u oscuros, denominados b a n d a s de M a c h , sobre la superficie. Estos efectos pueden reducirse dividiendo la superficie en un nmero mayor de caras poligonales o utilizando clculos de intensidad ms precisos.
Los procedimientos de interpolacin para vectores normales en el mtodo de Phong son los mismos que para los valores de intensidad en el mtodo de Gouraud. El vector normal N de la Figura 1 0.5 1 se interpola verticalmente a partir de los vectores normales en los vrtices 1 y 2 mediante la frmula:
N =
JSMf, + A l 2 L N ,
INI >i-- 2
v
( 10.56)
Despus, aplicamos los mismos mtodos incremntales para obtener los vectores normales en las sucesivas lneas de barrido y en las sucesivas posiciones de pxel dentro de cada lnea de barrido. La diferencia entre las dos tcnicas de representacin superficial es que ahora deberemos aplicar el modelo de iluminacin para cada posicin de pxel proyectada dentro de las lneas de barrido, con el fin de obtener los valores de intensidad superficial.
de barrido v
FIGURA 10.51. Interpolacin de las normales a la superficie a lo largo de una arista de un polgono.
618
CAPITULO 10
Puesto que el mtodo de Phong interpola ios vectores normales a partir de las normales en los vrtices, podemos escribir la expresin para el clculo de la normal N a la superficie en la posicin (x,y) de un parche triangular como: N = Ax + Bv + C (10.57) donde los vectores A, B y C se determinan a partir de las tres ecuaciones de los vrtices: N = Ax + Ey + C,
A k k k k
k = 12, 3
(10.58)
donde (x ,y ) denota una posicin proyectada de un vrtice del tringulo sobre el plano de pxeles. Si omitimos los parmetros de rellectividad y atenuacin, podemos escribir los clculos para la reflexin difusa de la luz de una fuente luminosa en un punto de la superficie (x, y) como:
L||N|
=
L - ( A r + B;y + C ) | L | | A x + By + C|
^ ( L - A ) x + (L-B).y + L - C |L||Ar + B v + C | Esta expresin puede escribirse en la forma: ax + by + e [dx ' + exy + / y + gx+hy + /] donde se utilizan parmetros como a, />, c y d para representar los diversos productos escalares. Por ejemplo, fl = 1 7 T (10-61)
J 2
Finalmente, podemos expresar el denominador de la Ecuacin 10.60 como una expansin en serie de Taylor y retener los trminos de hasta segundo grado en x ey. Esto nos da: J x,y) = T x + T xy + T y +T x+T y-r T
[f s 4 3 2 { k 2 2 0
(10.62)
donde cada T es funcin de los diversos parmetros de la Ecuacin 10.60, como a, y e . Utilizando diferencias finitas, podemos evaluar la Ecuacin 10.62 con slo dos sumas para cada posicin de pixel ( J , V ) , una vez que hayamos evaluado los parmetros iniciales de diferencias finitas. Aunque las simplificaciones en el mtodo rpido de Phong reducen los clculos requeridos para la representacin superficial de Phong, sigue siendo necesario un tiempo aproximadamente igual a dos veces el correspondiente a la representacin superficial de Gouraud. Y el mtodo bsico de Phong, utilizando diferencias finitas, es de 6 a 7 veces ms lento que el algoritmo de representacin de Gouraud. Los mecanismos de representacin rpida de Phong para reflexin diisa pueden ampliarse para incluir reflexiones especulares utilizando aproximaciones similares para evaluar los trminos especulares tales como (N H)"*. Adems, podemos generalizar el algoritmo para incluir una posicin de visualizacin finita y otros polgonos distintos de los tringulos.
619
Mi
w
^ PuiiUi de
referencia de proyeccin
FIGURA 10.52. Trayectos mltiples de rellexin y transmisin para un rayo trazado desde el punto de referencia de proyeccin a travs de una posicin de pxel y a travs de una escena que contiene diversos objetos.
FIGURA 10.53. Una escena generada mediante trazado de rayos, donde se muestran los efectos globales de reflexin y transparencia. (Cortesa de Evarts <& Satheriatul) toria de un rayo trazado desde una posicin de pxel. Tambin hemos hablado de los mtodos de proyeccin de rayos en la Seccin 9.1() como medio para identificar las superficies visibles en una escena. El trazado de rayos es la generalizacin del procedimiento bsico de proyeccin de rayos. En lugar de limitamos a localizar la superficie visible desde cada posicin de pxel, lo que hacemos es continuar rebotando el rayo correspondiente al pxel a travs de la escena, como se ilustra en la Eigura 10.52, con el fin de recopilar las diversas contribuciones de intensidad. Esto proporciona una tcnica simple y potente de representacin para obtener efectos globales de rellexin y transmisin. Adems, el algoritmo bsico de trazado de rayos detecta las superIkies visibles, identifica las reas en sombra, permite representar efectos de transparencia, genera vistas de proyeccin en perspectiva y admite efectos de iluminacin con mltiples fuentes luminosas. Se han desarrollado numerosas extensiones del algoritmo bsico para la generacin de imgenes fotorrealistas. Las imgenes de escenas generadas mediante trazado de rayos pueden ser enormemente realistas, particularmente cuando la escena contiene objetos brillantes, pero los algoritmos de trazado de rayos requieren un tiempo de elculo considerable. En la Eigura 10.53 se muestra un ejemplo de los efectos globales de rellexin y transmisin que pueden conseguirse mediante las tcnicas de trazado de rayos.
620
CAPTULO 10
621
FIGURA 10.55. Los Irayeclos de reflexin y refraccin para un rayo de pxel que viaja a travs de una escena se muestran en (a) y el correspondiente rbol binario de trazado de rayos se indica en (b).
FIGURA 10.56. Vectores unitarios en la superticie de un objeto interseclado por un rayo que incide segn la direccin u.
En cada interseccin con una superficie, invocamos el modelo bsico de iluminacin para determinar la contribucin de dicha superficie a la intensidad. Este valor de intensidad se almacena en la posicin correspondiente al nodo de la superficie dentro del rbol del pxel. A un rayo que inlersecte una fuente luminosa no reflectante se le puede asignar la intensidad de la fuente, aunque las fuentes luminosas en el algoritmo bsico de trazado de rayos son usualmente fuentes puntuales situadas en posiciones que caen ms all de los lmites de coordenadas de la escena. La figura 1 0 . 5 6 muestra una superficie inlerseclada por un rayo y los vectores unitarios utilizados para los clculos de la intensidad luminosa reflejada. El vector unitario u define la direccin de la trayectoria del rayo, N es el vector unitario normal a la superficie, R es el vector unitario de reflexin, L es el vector unitario que indica la direccin de una fuente luminosa puntual y H es el vector unitario medio entre L y V. Para los clculos de trazado de rayos, la direccin de visualizacin es V = u. El trayecto definido segn la direccin de L se denomina rayo de s o m b r a . Si algn objeto intersecta el rayo de sombra entre la superficie y la fuente luminosa puntual, dicha posicin de la superficie estar en sombra con respecto a la fuente. La luz ambiente en la superficie se calcula como kj la reflexin difusa debido a la fuente es proporcional a k (N L) y la componente de reflexin especular es proporcional a A (H N ) " A . Como se explica en la Seccin 1 0 . 3 , la direccin reflexin de especular para el trayecto del rayo secundario R depende de la normal a la superficie y de la direccin del rayo incidente:
a> (
R = u - (2u N ) N
110.63)
FIGURA 10.57. Trayecto de transmisin del rayo refractado T a travs de un material transparente.
inciderne
Para una superficie transparente, necesitamos tambin obtener las contribuciones de intensidad de la lu/ transmitida (refractada) a travs del material. Podemos localizar la fuente de esta contribucin trazando un rayo secundario segn la direccin de transmisin T, como se muestra en la Figura 10.57. El vector unitario de transmisin T puede obtenerse a partir de los vectores u y N de la forma siguiente:
(10.64)
COSO, - ^ - c o s ,
Los parmetros r y t] son los ndices de refraccin en el material incidente y en el material refractante, respectivamente. El ngulo de refraccin 6 puede calcularse a partir de la ley de Snell:
i r
<l-cos 0 )
(
Despus de haber completado el rbol binario para un pxel, se acumulan las contribuciones de intensidad, comenzando por la parle inferior (nodos terminales) del rbol. La intensidad superficial correspondiente a cada nodo del rbol se atena segn la distancia con respecto a la superficie padre (el siguiente nodo subiendo por el rbol) y se suma a la intensidad existente en dicha superficie padre. La intensidad asignada al pixel es la suma de las intensidades atenuadas en el nodo raz del rbol de rayos. Si el rayo principal de un pxel no intersecta ningn objeto de la escena, el rbol de trazado de rayos estar vaco y se asignar al pxel la intensidad de fondo.
P = P,
0
su
p i x
(I0M)
Inicialmente, el vector P puede definirse en la posicin P del pxel del plano de proyeccin, o puede seleccionarse como posicin inicial el punto de referencia de proyeccin. El vector unitario u se obtiene inicialmente a partir de la posicin del pxel a travs de la cual pasa un rayo y del punto de referencia de proyeccin:
(10.67)
pi* prp
p - P Aunque no es necesario que u sea un vector unitario, si lo es, se simplificarn algunos de los clculos.
FIGURA 10.58. Descripcin de un rayo con un vector de posicin inicial P y un vector de direccin unitario u.
()
Para localizar el punto de interseccin del rayo con una superficie, utilizamos la ecuacin de la superficie para hallar la posicin P. como se representa en la Ecuacin 10.66. Esto nos da un valor para el parmetro v, que es la distancia desde P hasta el punto de interseccin con la superficie a lo largo de la trayectoria del rayo. En cada superficie intersectada, los vectores P y u se actualizan para los rayos secundarios en el punto de interseccin entre el rayo y la superficie. Para los rayos secundarios, la direccin de reflexin para u es R y la direccin de transmisin es T. Cuando se detecta una interseccin entre un rayo secundario y una superficie, se resuelve un sistema formado por la ecuacin del rayo y la ecuacin de la superficie para obtener las coordenadas de interseccin, despus de lo cual se actualiza el rbol binario y se genera el siguiente conjunto de rayos de reflexin y refraccin. Se han desarrollado algoritmos eficientes de clculos de intersecciones entre rayos y superficies para las formas que ms comnmente aparecen en las escenas, incluyendo diversas superficies de tipo splitw. El procedimiento general consiste en combinar la ecuacin del rayo con las ecuaciones que describen la superficie y resolver el sistema para obtener el valor del parmetro $, En muchos casos, se utilizan mtodos numricos de localizacin de races y clculos incremntales para localizar los puntos de interseccin con una superficie. Para objetos complejos, a menudo resulta conveniente transformar la ecuacin del rayo al sistema (Je coordenadas local en el que el objeto est definido. Asimismo, los clculos de interseccin para un objeto complejo pueden simplificarse en muchos casos transformado el objeto a una forma ms adecuada. Como ejemplo, podemos efectuar los clculos de trazado de rayos para una elipsoide transformando las ecuaciones del rayo y de la superficie a un problema de interseccin con esferas. La Figura 10.59 muestra una escena con trazado de rayos que contiene mltiples objetos y patrones de textura.
t) 0
|P - P J - r = 0
f
(JQJ8)
FIGURA 10.59. Una escena de un trazado de rayos que muestra los efectos de reflexin global de los patrones de textura de las superficies. {Cortesia de Sun Microsystems. )
624
Sustituyendo la Ecuacin del rayo 10.66 para P en la ecuacin anterior, tenemos: |P - su - P,| - r = 0
0 2 2
(10.69)
P como AP y expandimos el producto escalar, obtenemos la ecuacin cuadrtica: .v- - 2(u AP) s + (|AP| - r ) = 0
2 2
(10.70)
Si el discriminante es negativo, o bien el rayo no intersecUi la es lera 0 la eslea se encuentra detrs de P , fin cualquiera de los dos casos, podemos eliminar la esfera de los clculos posteriores, ya que asumimos que la escena se encuentra delante del plano de proyeccin. Cuando el discriminante no es negativo, se obtienen las coordenadas de interseccin con la superficie a partir de la ecuacin del rayo 10.66 utilizando el ms pequeo de los dos valores de la Ecuacin 10.71. La figura 10.61 muestra una escena de trazado de rayos que contiene un copo de nieve formado por esferas brillantes y donde se ilustran los efectos de reflexin global en las superficies que se pueden obtener mediante trazado de rayos.
a
FIGURA 10.61. Un copo de nieve representado mediante trazado de rayos y donde se utilizan 73S l esferas y 3 (beata luminosas. {Cortesa Je Eric Haines, AutoJesk, Inc.)
625
Resulta posible realizar algunas optimizaciones en los clculos de interseccin entre el rayo y la esfera con el fin de reducir el tiempo de procesamiento. Adems, la Ecuacin 10.71 est sujeta a errores de redondeo cuando se procesa una esfera de pequeo tamao que est muy alejada de la posicin inicial del rayo. Es decir, si: |AP| podramos perder el trmino r debido a los errores de precisin de |AP| . Podemos evitar esto en la mayora de los casos reordenando los clculos correspondientes a la distancia s de la forma siguiente:
2 2
AP-(u
AP)u
i (172)
donde N es la normal a la superficie del polgono. Para cada cara del poliedro que satisfaga la condicin 10.73, resolvemos la ecuacin del plano: N P = -D (10.74)
para calcular la posicin P que tambin satisfaga la ecuacin del rayo 10.66. Aqu, N = (A, #, C) y D es el cuarto parmetro del plano. La posicin P estar tanto en el plano como en el trayecto del rayo si se cumple que: N-(^+.vu)=-D y la distancia desde la posicin inicial del rayo hasta el plano es: P + N-P
N11
(0.75)
(0.76)
Esto nos da una posicin sobre el plano infinito que contiene la cara poligonal, pero esta posicin puede no estar dentro de las fronteras del polgono (Figura 10.63). Por tanto, necesitamos realizar una comprobacin de si el punto est dentro del polgono (Seccin 3.15) para determinar si el rayo intersecta esta cara del poliedro. Realizaremos este test para cada cara que satisfaga la desigualdad 10.73. La distancia s ms pequea hasta un polgono intersectado identifica la posicin de interseccin sobre la superficie del poliedro. Si ninguno de
626
FIGURA 10.63. Interseccin de un rayo en el plano de un polgono. los puntos de interseccin de la Ecuacin 10.76 son puntos interiores a los polgonos, el rayo no intersecta el poliedro.
FIGURA 10.65. Interseccin de un rayo con un cubo que encierra a todos los objetos de una escena.
FIGURA 10.66. Recorrido del rayo a travs de una suforegin (celda) de un cubo que encierra a una escena.
cenarse en un rbol octal o en un rbol de particin binaria. Adems, podemos realizar una subdivisin uniforme dividiendo cada cubo en ocho ociantes de igual tamao en cada caso, o podemos realizar una subdivisin adaptad va subdividiendo nicamente aquellas regiones del tubo que contengan objetos. A continuacin, trazamos los rayos a travs de las celdas individuales del cubo, realizando comprobaciones de interseccin slo dentro de aquellas celdas que contengan superficies. La primera superficie intersectada ser la superficie visible para ese rayo. Existe un compromiso, sin embargo, entre el tamao de celda y el nmero de superficies por celda. A medida que reducimos el nmero mximo de superficies permitidas por celda, se reduce la cantidad de procesamiento necesaria para las pruebas de interseccin con las superficies, pero esto reduce tambin el tamao de las celdas, por lo que son necesarios ms clculos para determinar la trayectoria del rayo a travs de las celdas. La Figura 10.65 ilustra la interseccin del rayo de un pxel con la cara frontal de un cubo que rodea a una escena. La posicin de interseccin en la cara frontal del cubo identifica la celda inicial que tiene que atravesar este rayo. Despus, procesamos el rayo a travs de las celdas del cubo determinando las coordenadas de las posiciones de entrada y de salida (Figura 10.66). En cada celda no vaca, comprobamos las intersecciones con las superficies y este procesamiento contina hasta que el rayo intersecta una superficie de un objeto o sale del cubo delimitador. Dado un vector unitario de direccin del rayo u y una posicin de entrada del rayo P para una celda, identificamos las caras potenciales de salida de una celda como aquellas que satisfacen la desigualdad:
in
u-N >0
A
{10.77)
donde N representa el vector unitario normal a la superficie para la cara k de la celda. Si los vectores unitarios normales a las caras de la celda de la Figura 10.66 estn alineados con los ejes de coordenadas cartesianas, entonces, (1,0,0) N. (0,11,0) (0,0,l) y podemos determinar los tres planos candidatos de salida simplemente comprobando el signo de cada componente de u. La posicin de salida en cada plano candidato se obtiene a partir de la ecuacin del rayo: 00.78)
feHLrfui
donde s es la distancia segn el rayo desde P a P plano para cada cara de la celda, tenemos: .
k in N P u U
<
/ft79
>
ilO.SO)
628
CAPTULO 10
El valor ms pequeo calculado para s identifica la cara de salida para la celda. Si las caras de las celdas estn alineadas en paralelo con los planos de coordenadas cartesianas, los vectores normales N son los vectores unitarios I0.7S segn los ejes y podemos simplificar los clculos de la Ecuacin I0.8I. Por ejemplo, si un plano candidato de salida tiene el vector normal ( 1 , 0 , 0), entonces para ese plano tendremos:
k A
(10.82) donde u = (w , Uy ft # = ~ D es la posicin de coordenadas del plano candidalo de salida y # es la posicin de coordenadas de la cara de entrada de la celda. Pueden realizarse diversas modificaciones a los procedimientos de recorrido de las celdas para acelerar el procesamiento. Una posibilidad consiste en elegir un plano de salida candidato k que sea perpendicular a la direccin de la componente de u de mayor tamao, liste plano de salida candidato se divide entonces en sectores, como se muestra en el ejemplo de la Figura 10.67. El sector del plano candidato que contenga P determinar el verdadero plano de salida. Por ejemplo, si el punto de interseccin P est en el sector 0 para el plano de ejemplo de la Figura 10.67, el plano que habamos elegido es el verdadero plano de salida y habramos terminado. Si el punto de interseccin est en el sector 1, el verdadero plano de salida ser el plano superior y necesitaremos simplemente calcular el punto de salida en la frontera superior de la celda. De la misma forma, el sector 3 identifica el plano inferior como verdadero plano de salida y los sectores 4 y 2 identifican como verdadero plano de salida los planos izquierdo o derecho de la celda, respectivamente. Cuando el punto de salida en el plano candidato cae en los sectores 5, 6 , 7 u 8, debemos llevar a cabo dos clculos de interseccin adicionales para identificar el verdadero plano de salida. La implemenlacin de estos mtodos en mquinas vectoriales de procesamiento en paralelo permite obtener incrementos an mayores en la velocidad. La escena de la Figura 10.68 se obtuvo mediante trazado de rayos empleando mtodos de subdivisin espacial. Sin la subdivisin espacial, los clculos de trazado de rayos tardaban 10 veces ms. La eliminacin de los polgonos tambin permita en este ejemplo acelerar el procesamiento. Para una escena que contenga 20.48 esfera y ningn polgono, el mismo algoritmo se ejecutaba 46 veces ms rpido que el algoritmo bsico de trazado de rayos. La Figura 10.6 ilustra otro esquema obtenido mediante trazado de rayos utilizando subdivisin espacial y mtodos de procesamiento en paralelo. Esta imagen de la escultura de Rodin /:'/ Pensador se obtuvo mediante trazado de rayos en 24 segundos utilizando ms de 1.5 millones de rayos. Para obtener la escena de la Figura 10.70 se empleo una tcnica de hi'tfcr luminoso, que es un tipo de particionamiento espacial. Aqu, hay un cubo centrado en cada fuente luminosa puntual y cada cara del cubo se particiona utilizando una cuadrcula de elementos cuadrados. Entonces, el paquete de trazado de rayos mantiene una lista ordenada de los objetos que son visibles para los haces luminosos a travs de cada cuadrado.
v k 0 o u U o u |k
FIGURA 10.67. Un plano candidato de salida de ejemplo, junto con sus seelores numerados.
FIGURA 10.68. Una escena obtenida mediante trazado de rayos en paralelo que contiene 37 esferas y 720 superficies poligonales. El algoritmo de trazado de rayos utiliza 9 rayos por pixel y una profundidad de rbol de 5. Los mtodos de subdivisin espacial permitan procesar la escena 10 veces ms rpido que el algoritmo bsico de trazado de rayos en un Alliant KX/8. [Cortesa de Lee-Htan Quek. Oracle Corporation. Redwood Shores, California )
FIGURA 10.69. lista escena obtenida mediante trazado de rayos tardaba 24 segundos en representarse en una computadora paralela Kendall Square Research KSR1 con 32 procesadores. La escultura de Rodin El Pensador fue modelada con 3.036 primitivas. Se usaron dos fuentes luminosas y un rayo principal por pxel para obtener los efectos globales de iluminacin a partir de los 1.675.776 rayos procesados. {Cortesa de M. J Keates y R. J llubbold. Departamento de Computer Science, Universidad de Manchester, Reino Unido.) con el fin de acelerar el procesamiento de los rayos de sombra. Como medio para determinar ios efectos de iluminacin superficial, se calcula un cuadrado para cada rayo de sombra y luego se procesa el rayo de sombra de acuerdo con la lista de objetos correspondientes a dicho cuadrado. Las comprobaciones de interseccin en los programas de trazado de rayos tambin pueden reducirse mediante procedimientos de subdivisin direccional, considerando sectores que contengan un haz de rayos. Dentro de cada sector, podemos ordenar las superficies segn su profundidad, como en la Figura 10.71, Cada rayo necesita entonces comprobar nicamente los objetos correspondientes al sector que contiene a dicho rayo.
630
FIGURA 10.70. Escena de una habitacin iluminada con S renles luminosas y representada (a) utilizando la tcnica de trazado de rayos basada en bufet luminoso para procesar los rayos de sombra. Un primer plano (b) de parte de la habitacin mostrada en (a) iluslra los electos globales de iluminacin. La habitacin est modelada por 12.98 polgonos, 4 esferas, 76 cilindros y cudricas. l tiempo de representacin fue de 246 minutos en un VAX 11/780. comparado con 602 minutos sin la utilizacin de bferes luminosos. (Cortesa de Eric llaines y Donald P. Greenherg, Program of Computer (irapliics. Cornell University )
a un l i a / de rayos
FIGURA 10.71. Subdivisin direccional del espacio. Los rayos de los pxeles en el sector indicado realizan comprobaciones de interseccin en orden de profundidad nicamente para las superficies contenidas dentro de ese sector.
631
lije de la lente
Plano focal
Figura 10.72. Visla latera! de un objetivo. Los rayos paralelos son enfocados por la lente sobre una posicin situada en el plano focal, que est a la distancia / del centro de la lente.
FIGURA 10.73. Parmetros de un objetivo. Un objeto a una distancia /del objetivo estar enfocado sobre el plano de imagen a una distancia / de la lente.
(/0.83) Por tanto, podemos utilizar el radio r o el nmero-f junto con la distancia focal f, para especificar los parmetros de la cmara. Para conseguir un modelo de enfoque ms preciso, podramos utilizar el tamao de la pelcula (anchura y altura) y la distancia focal para simular los efectos de la cmara. Los algoritmos de trazado de rayos determinan normalmente los efectos de enfoque utilizando la ecuacin de una lente fina de la ptica geomtrica:
U-L-I
d d, f
(10.84)
632
CAPTULO 10
El parmetro /es la distancia desde el centro de la lenie hasta la posicin de un objeto y J es la distancia desde el centro de la lente al plano de imagen, donde ese objeto estar enfocado. El punto del objeto y el de su imagen se encuentran en lados opuestos de la lente, a lo largo de una linea que pasa por el centro de la lente y d > / ( F i g u r a 10.73). Por tanto, para enfocar un objeto concreto situado a una distancia dc la lente, situamos el plano de pxclcs a una distancia d- por detrs del objetivo. Para una posicin de la escena situada a una cierta distancia cf # Y, el punto proyectado estar desenfocado en el plano de imagen, si d' > d, el punto estar enfocado en una posicin situada delante del plano de imagen, mientras que si d' < d, el punto estar enfocado en una posicin situada detrs del plano de imagen. La proyeccin de un punto situado en la posicin d' sobre el plano de imagen es aproximadamente un pequeo crculo, denominado crculo de confusin, y el dimetro de este crculo puede calcularse como:
j s
\d'-d\f nd
Podemos elegir los parmetros de la cmara con el fin de minimizar el tamao del crculo de confusin para un cierto rango de distancias, denominado profundidad de c a m p o de la cmara. Adems, se trazan mltiples rayos para cada pixel con el lin de muestrear distintas posiciones sobre el rea del objetivo; hablaremos de estos mtodos de trazado de rayos distribuidos en una seccin posterior.
FIGURA 10.74. Supermuestreo con cuatro rayos por pixel, uno en cada esquina del pixel.
Punto de referencia
de proyeccin
j . . I
FIGURA 1075. Subdivisin de un pixel en 9 subpxeles con un rayo en cada esquina de cada subpxel
FIGURA 10.76. lina escena generada mediante trazado de rayos por subdivisin adaptativa. {Cortesia de Jeny 'ann ) pxeles que rodeen a un pequeo objeto o que no tengan rayos de intensidad aproximadamente igual, liste proceso de subdivisin puede continuarse hasta que lodos los rayos de subpxel tengan aproximadamente las mismas intensidades o hasta que se alcance un limite superior, por ejemplo 256, que indicar el nmero mximo de rayos por pixel. La Figura 10.76 es un ejemplo de escena representada mediante trazado de rayos con subdivisin adaptativa. Se utiliza tina fuente luminosa compleja para proporcionar sombras suaves y realistas. Se generaron casi 26 millones de rayos principales, con 33.5 millones de rayos de sombra y 67.3 de rayos de reflexin. Para desarrollar las figuras del juego de ajedrez se emplearon tcnicas de figuras articuladas (Seccin 13.8). Los patrones de superficie de madera veteada y mrmol se generaron mediante mtodos de texturas slidas (Seccin 10.16) con una funcin de ruido. Fn lugar de pasar los rayos a travs de las esquinas de los pxeles, podemos generar los rayos a travs de los centros de los subpxeles, como en la Figura 10.77. Con este enfoque, podemos ponderar los rayos de acuerdo con alguno de los esquemas de muestren analizados en la Seccin 4.17. Otro mtodo para el antialiasing de las escenas generadas consiste en tratar cada rayo de pxel como si fuera un cono, como se muestra en la Figura 10.78. Slo se genera un rayo por pxel, pero ahora el rayo tiene una seccin transversal finita. Para determinar el porcentaje de recubrimiento del rea del pxel por parte de los objetos, calculamos la interseccin del cono del pxel en la superficie del objeto, Para una esfera, esto requiere hallar la interseccin de dos crculos. Para un poliedro, tenemos que hallar la interseccin de un circulo con un polgono.
634
635
FIGURA 10.79. Muesireo de un pxel utilizando 16 reas de subpxel y una posicin lluctuantc de rayo con respecto a las coordenadas del centro de cada subrea.
Posicin de subpxel FIGURA 10.80. Distribucin de los rayos de subpxel sobre el objetivo de una cmara con distancia focal /.
Plano de imagen
tro de zona y se proyecta un rayo hacia la escena desde esta posicin de zona ajustada, a travs del punto focal de la lente. Ubicamos el punto focal del rayo a una d i s t a n c i a / d e la lente, segn la lnea que sale del centro del subpxel y pasa por el centro de la lente, como se muestra en la Figura 10.80. Con el plano de pxeles a una distancia d de la lente (Figura 10.73), las posiciones situadas a lo largo del rayo cerca del plano del objeto (el plano de enfoque) a una distancia d delante de la lente, estarn enfocadas. Otras posiciones a lo largo del rayo estarn desenfocadas. Para mejorar la visualizacin de los objetos desenfocados, puede incrementarse el nmero de rayos de subpxel.
l
Los trayectos de reflexin y transmisin tambin se distribuyen por una cierta regin espacial. Para simular los brillos de las superficies, los rayos reflejados desde una posicin de la superficie se distribuyen alrededor de la direccin de reflexin especular R de acuerdo con los cdigos de rayo asignados (Figura 10.81). La dispersin mxima en torno a R se divide en 16 zonas angulares y cada rayo se refleja segn una direccin que se ajusta mediante fluctuacin a partir del centro de la :zona correspondiente a su cdigo entero. Podemos utilizar el modelo de Phong, eos"* < > , para determinar la distribucin mxima para los ngulos de reflexin. Si el material es transparente, los rayos refractados pueden distribuirse en torno a la direccin de transmisin T de forma similar, con el fin de modelar el carcter translcido de los objetos (Seccin 10.4). Las fuentes de luz no puntuales se pueden tratar distribuyendo una serie de rayos de sombra por lodo el rea de la fuente de luz, como se ilustra en la Figura 10.82. La fuente luminosa se divide en zonas y a los rayos de sombras se les asignan direcciones fluctuantes segn las diversas zonas. Adems, las zonas pueden ponderarse de acuerdo con la intensidad de la fuente luminosa dentro de dicha zona y de acuerdo tambin con el tamao del rea proyectada de la zona sobre la superficie del objeto. Entonces, se envan ms rayos de sombra a las zonas que tengan un mayor peso. Si algunos rayos de sombra interseclan objetos opacos situados entre la superficie y la fuente luminosa, se genera una penumbra (regin parcialmente iluminada) en dicho punto de la supercie. Pero si todos los rayos de sombra quedan bloqueados, el punto de la superficie estar dentro de una regin de sombra (completamente oscuro) con respecto a dicha fuente luminosa. La Figura 10.83 ilustra las regiones de sombra y de penumbra sobre una superficie parcialmente oculta con respecto a una fuente luminosa.
636
CAPITULO
10
FIGURA 10.81. Modelado de objetos brillantes y translcidos distribuyendo los rayos de subpxcl en torno a la direccin de reflexin R y a la direccin de transmisin T.
FIGURA 10.83. Regiones de sombra y de penumbra creadas por un eclipse solar sobre la superficie de la Tierra.
FIGURA 10.84. Una escena, titulada 984, representada utilizando trazado de rayos distribuido. Los efectos de iluminacin incluyen el desenfoque del movimiento, penumbras y reflexiones superficiales para mltiples fuentes luminosas de tamao finito. {Cortesa de Pixar.Q 984 Pixar. Todos los derechos reservados.) Podemos crear el efecto de desenfoque de movimiento distribuyendo los rayos a lo largo del tiempo. Se determina un tiempo total y de la imagen y una serie de subdivisiones de este tiempo de imagen de acuerdo con la dinmica de los movimientos requeridos en la escena. Los intervalos temporales se etiquetan con cdi-
gos enteros y a cada rayo se le asigna un tiempo fluctuante dentro del intervalo correspondiente al cdigo del rayo. Entonces, los objetos se mueven a sus posiciones correspondientes a dicho punto y se Ira/a el rayo a travs de la escena. Para los objetos con mucho desenfoque se utilizan rayos adicionales. Para reducir los clculos podemos utilizar recuadros o esferas de contorno para las comprobaciones iniciales de interseccin de los rayos, es decir, movemos el objeto de contorno de acuerdo con los requisitos de movimiento y comprobamos si se produce una interseccin. Si el rayo no intersecta el objeto de contorno, no ser necesario procesar las superficies individuales dentro del volumen de contorno. La Figura 10.S4 muestra una escena con desenfoque de movimiento. Esta imagen fue representada utilizando trazado de rayos distribuido con 4096 por 3550 pxeles y 16 rayos por pxel. Adems de las reflexiones con desenfoque de movimiento, las sombras se muestran con reas de penumbra que son consecuencia de las fuentes luminosas finitas que iluminan la mesa de billar. En las Figuras 10.85 y 10.86 se proporcionan ejemplos adicionales de objetos representados con mtodos de trazado de rayos distribuido. La Figura 10.87 ilustra los efectos de enfoque, refraccin y antialiasing que pueden obtenerse con el trazado de rayos distribuido.
FIGURA 10.85. I la rueda de aluminio bruido que muestra los efectos de reflexin y de sombras generados con tcnicas de trazado de rayos distribuido.
FIGURA 10.86. I Ina escena de una habitacin representada mediante mtodos de trazado de rayos distribuido, i ( 'nesia de John Snyder. Jed Lengyel. Devendr Kalra y Al Barr. Computer Graphics Lab. California Institute of Technology < 1988 Caltech.)
638
CAPTULO 10
FIGURA 10.87. Una escena que muestra los efectos de enfoque, de antialiasing y de iluminacin que pueden obtenerse con una combinacin de mtodos de trazado de radios y de radiosidad. Se utilizaron modelos fsicos realistas de iluminacin para generar los efectos de refraccin, incluyendo las custicas en ta sombra de la copa. (Cortesa de Pe/er Shirley, nner Science Department. University ofUtah.)
donde la frecuencia/ medida en hercios (ciclos por segundo), caracteriza el color de la luz. Una luz azul tiene una alta frecuencia dentro de la banda visible del espectro electromagntico, mientras que una luz roja tiene una baja frecuencia. La frecuencia tambin nos da la lasa de oscilacin para la amplitud de las componentes elctrica y magntica de la radiacin. El parmetro h es la constante de Planck* que tiene el valor 6.6262 X 10 julios see, independientemente de la frecuencia de la luz. La energa total para la radiacin luminosa monocromtica es:
34
1
todo* los lolone.s
(I(W)
La energa radiante para una frecuencia luminosa concreta se denomina tambin radiancia espectral. Sin embargo, cualquier radiacin luminosa real, incluso la correspondiente a una fuente monocromtica con-
10. i 2
639
tiene un rango de frecuencias. Por tanto, la energa radiante total es la suma para todos los fotones de todas las frecuencias: =I
f
I
lntlns Iny (utom-s
(10.88)
La cantidad de energa radiante transmilida por unidad de tiempo se denomina flujo radiante <l>:
dt
El flujo radiante tambin se llama frecuencia radiante y se mide en vatios (julios por segundo). Para obtener los efectos de iluminacin para las superficies de una escena, calculamos el llujo radiante por unidad de rea que abandona cada superficie. Esta cantidad se denomina radiosidad B o exitancia radiante.
d<P
b=
2
dA
{OM)
que se mide en unidades de vatios por metro . Y la intensidad / se toma a menudo como medida del flujo radiante en una direccin concreta por unidad de ngulo slido por unidad de rea proyectada, con unidades de vatios/(metro tereorradianes). Sin embargo, en ocasiones la intensidad se define simplemente como el (lujo radiante en una direccin concreta.
2
Dependiendo de la interpretacin del trmino intensidad, la radiancia puede definirse como la intensidad por unidad de rea proyectada. Alternativamente, podemos obtener la radiancia a partir del llujo radiante o de la radiosidad por unidad de ngulo slido.
FIGURA 10.88. Energa radiante visible emilida desde un punto de una superficie en la direccin (0 0) dentro del ngulo slido d(0.
y
FIGURA 10.89. Para un elemento unitario de superllcie, el rea proyectada perpendicular a la direccin de transferencia de energa es igual a eos 0.
640
CAPTULO 10
La intensidad / para la radiacin difusa en la direccin (ft 0) puede describirse como la energa radianie por unidad de tiempo por unidad de rea proyectada por unidad de ngulo slido, o: . dB l =(10,91) d( eos <p Suponiendo que la superficie sea un reflector difuso ideal (Seccin 10.3), podemos definir la intensidad/ como constante para todas las direcciones de visualizacin. Por tanto, dB/dcocs proporcional al rea de superficie proyectada (Figura 10.89). Para obtener la tasa total de radiacin de energa desde un punto de una superficie, necesitamos sumar la radiacin para todas las direcciones. Es decir, queremos la energa total que emana desde un hemisferio centrado en dicho punto de la superficie, como en la Figura 10.90, lo que nos da: dB (10.92)
Para un reflector difuso perfecto, / es constante, por lo que podemos expresar el flujo radianie B como; B=/i cos<> do) (10.93)
J henil
Asimismo, el elemento diferencial de ngulo slido dio puede expresarse como (Apndice A): d(0 = - v = sin $ dtp dB t de modo que, B = I\
Jo Jo
= 171
Podemos formar un modelo para las reflexiones luminosas de las distintas superficies estableciendo un cierre de las superficies (Figura 10.91). Cada superficie dentro del cierre es o un reflector, o un emisor
FIGURA 10.90. La energa radiante lolal para un puni de la superficie es la suma de las contribuciones en todas las direcciones de un hemisferio centrado en dicho punto de la superficie. FIGURA 10.91. I in cierre de superficies para el mfte lo de radiosidad.
641
(fuente luminosa) o una combinacin reflector-emisor. Designamos el parmetro de radiosidad B como la tasa total de energa radiante que abandona la superficie k por unidad de rea. El parmetro de la energa incidente H es la suma de las contribuciones de energa radiante de todas las superficies del cierre que llegan a la superficie k por unidad de tiempo, por unidad de rea. En otras palabras.
k k
(10.95) donde el parmetro F- se denominad/evo/- de forma para las superficies j y k. El factor de forma F- es la fraccin de la energa radiante de la superficie j que alcanza a la superficie k. Para una escena con n superficies dentro del cierre, la energa radiante de la superfcie k se describe mediante la ecuacin de radiosidad:
k k
B =E +p H
k k k
(10.96)
j>i
Si la superficie k no es una fuente luminosa, entonces E = 0. En caso contrario, E ser la tasa de energa emitida desde la superficie k por unidad de rea (vatios/m ). El parmetro p es el factor de rellectividad para la superficie k (porcentaje de la luz incidente que es reflejado en todas direcciones). Este factor de rellectividad est relacionado con el coeficiente de reflexin difusa usado en los modelos empricos de iluminacin. Las superficies planas y convexas no pueden verse a s mismas, por lo que no hay ninguna auto-incidencia y el factor de forma F para estas superficies es . Para obtener los efectos de iluminacin sobre las diversas superficies contenidas dentro del cierre, necesitamos resolver el sistema de ecuaciones de radiosidad para las n superficies, dada la matriz de valores para E , p y Fj . En otras palabras, debemos resolver:
k k 2 k kk k k k
O - f t ^ - P . I V V ^
*=U.3
(10.97)
|-p,''n -p F
2 2l
-pA \-p F
2
-PA,
n
t,
fi,
~P2 1
A.
k kfi k( ki
(I0M)
'-pf"J
k
Despus, convertimos los valores de intensidad I dividiendo los valores de radiosidad B por n. Para imgenes en color, podemos calcular los componentes RGB individuales de la radiosidad (B , B , B ) utilizando las componentes de color para p y E . Antes de poder resolver la Ecuacin 10.97, debemos determinar los valores de los factores de forma F- . Hacemos esto considerando la transferencia de energa desde la superficie j a la superficie k (Figura 10.92). La tasa de energa radiante que incide sobre un pequeo elemento superficial dA procedente del elemento de rea dA- es: dB dAj = (/ j eos dco) dA (10 99)
k k k k f
Pero el ngulo slido doy puede escribirse en trminos de la proyeccin del elemento de rea dA en perpendicular a la direccin dB- de la forma siguiente:
k 9
(10.100)
642
CAPTULO 10
Superficie k
FIGURA 10.92. Transferencia de una cantidad dilerencial de encrgia radiante dB- desde un clmente- de superficie con area dA- hacia el elemento de supertic ie dA .
k
Superficie j
<jdAt=
-p
"
(iQJOl)
El factor de forma entre las dos superficies es el porcentaje de la energa qtie emana del rea dA e incide
en:
energa incidente en dA
(f 0.102)
j
f 0.103)
Ttr
y la fraccin de la energa emitida desde el rea dA - y que incide en la superficie completa k es:
1'
w
~2
suri, Kr
ClA
donde Af. es el rea de la superficie k. Podemos enlonces definir el factor de forma entre las dos superfcies corno el promedio de la expresin anterior para lodo el rea, que sera: i r
A
f
c o s e cos ri,
nr
(10.105)
JM, Jsuif,
Las dos integrales de la Ecuacin 10.105 se evalan utilizando tcnicas de integracin numrica y estipulando las siguientes condiciones: iXi %
} }k =
P
k ti
,drd
i0(
^ *
(conservacin de la energa)
AF = A F
643
Para aplicar el modelo de radiosidad, suhdividimos cada superficie de una escena en muchos pequeos polgonos. La apariencia realista de la escena mostrada se mejora al reducir el tamao de las subdivisiones poligonales, pero entonces hace falta ms tiempo para representar la escena. Podemos acelerar el clculo de los factores de forma utilizando un hemicubo para aproximar el hemisferio. Esto sustituye la superficie esfrica por un conjunto de superficies (planas) lineales. Despus de evaluados los factores de forma, podemos resolver el conjunto de ecuaciones lineales 10.97 utilizando una tcnica numrica tal como la eliminacin gaussiana o la descomposicin LA (Apndice A). Alternativamente, podramos comenzar con valores aproximados para las B y resolver el sistema de ecuaciones lineales iterativamente utilizando el mtodo de GaussSeidel. En cada iteracin, calculamos una estimacin de la radiosidad para el parche superficial utilizando los valores de radiosidad previamente obtenidos en la ecuacin de radiosidad:
Entonces podemos mostrar la escena en cada paso para observar la mejora en la representacin de las superficies. Este proceso se repite hasta que los cambios en los valores de radiosidad calculados sean pequeos.
(10.106)
(H). 107)
debido a
B = pB F - ,
k j ii jk
para todo j
(10,108)
Esta relacin es la base para la tcnica de refinamiento progresivo de los clculos de radiosidad. Utilizando un nico parche superficial , podemos calcular todos los factores de forma F y considerar la transferencia de luz desde dicho parche a todas las dems superficies del entorno. Con este procedimiento, slo necesitamos calcular y almacenar los valores de los parmetros para un nico hemicubo y los factores de forma asociados. En la siguiente iteracin, sustituimos estos valores de parmetros por valores correspondientes a otro parche seleccionado. Y podemos mostrar las mejoras sucesivas en la representacin de las superficies a medida que pasamos de un parche seleccionado a otro. Inicialmente, hacemos B = Zapara todos los parches superficiales. Despus, seleccionamos el parche con el mayor valor de radiosidad, que ser el emisor de luz ms brillante y calculamos la siguiente aproximacin a la radiosidad para todos los dems parches. Este proceso se repite en cada paso, de modo que las fuentes luminosas se seleccionan primero, empezando por la de mayor energa radiante, y despus se seleccionan los dems parches basndose en la cantidad de luz recibida de las fuentes luminosas. Los pasos en una tcnica simple de refinamiento progresivo son los que se esbozan en el siguiente algoritmo:
jk k
644
for
ea.ch p a t c h \*
[k]
[j][k]
[j]
/ A
[k] ,
+ dRad; + dRad;
)
dB Ik] =
0;
Ln cada paso, se selecciona el parche superficial con el mayor valor de A B A , dado que la radiosidad es una medida de la energa radiante por unidad de rea. Asimismo, seleccionarnos los valores iniciales como & B = B = E para todos los parches superficiales. Este algoritmo de refinamiento progresivo aproxima la propagacin real de la luz a travs de una escena en funcin del tiempo. La visuali/acin de las superficies representadas en cada paso produce una secuencia de vistas que pasa de una escena oscura a otra completamente iluminada. Despus del primer paso, las nicas superficies iluminadas son las fuentes luminosas y los parches no emisores que son visibles para el emisor seleccionado. Para producir vistas iniciales ms tiles de la escena, podemos fijar un nivel de luz ambiente de modo que todos los parches tengan algo de iluminacin. En cada etapa de la iteracin, reducimos entonces la luz ambiente de acuerdo con el nivel de transferencia de energa radiante que haya en la escena. La Figura 10.93 muestra una escena representada mediante el modelo de radiosidad con refinamiento progresivo. En las Figuras 10.94, 10.95 y 10.96 se ilustran diversas condiciones de iluminacin en representaciones de escenas obtenidas con el mtodo de radiosidad. A menudo suelen combinarse los mtodos de trazado de rayos con l modelo de radiosidad con el fin de producir sombreados superficiales especulares y difusos altamente realistas, como en la figura 10.87.
k k k k k
FIGURA 10.93. Nave de la catedral de Chartres representada mediante un modelo de radiosidad con refinamiento progresivo. La representacin obtenida por John Wallace y John Lin. utilizando el paquete de trazado de rayos y radiosidad Starbase de I Icwlcu-Packard. Los factores de forma de radiosidad se calcularon medante mtodo de trazado de rayos. (Cortesa de Eric llames, Autodesk, Inc, ' 1989 //ew/ettd'ackard Co.)
645
FIGURA 10.94. Imagen do un museo consiruciivista representada mediante un metodi) de radiosidad de rclnamiento progressivo. {Cortesia de Shenchang Eric Chen, Stuart /. Feldman y Julie Dorsey. Program of Computer Graphics. Cornell University. 988 Cornell University Program of Computer Graphics. )
FIGURA 10.95. Simulacin de la escalera de la lone en el Engineering Theory Center Building de la Universidad de Cornell, representado mediante un mtodo de radiosidad de refinamiento progresivo. (Cortesia de Keith Howie y Ben Trumbore, Program of Computer Graphics, Cornell University, i') /990 Cornell University Program of Computer Graphics.)
(a)
ib)
FIGURA 10.96. Simulacin de dos esquemas de iluminacin para un decorado utilizado en la representacin de Let Bohemia en el Teatro Metropolitano de la Opera. En (al se incluye una \isia diurna completamente iluminada, mientras que en t b) podemos ver una vista nocturna. ( Cortesa de Julie Dorsey y Mark Shepard, Prognati of i 'omputer Graphics. Cornell University. G 1991 Cornell University Program of Computer Graphics.)
646
CAPTULO 10
10.13
MAPEADO DE ENTORNO
Un procedimiento alternativo para modelar reflexiones globales consiste en definir una matriz de valores de intensidad que describa el entorno situado alrededor de un objeto o de un grupo de objetos. En lugar de utilizar trazado de rayos entre los objetos o clculos de radiosidad para determinar los efectos globales de iluminacin difusa y especular, simplemente mapeamos la matriz Je entorno sobre un objeto en relacin con la direccin de visualizacin. Este procedimiento se denomina mapeado de entorno o en ocasiones milpeado de reflexin (aunque tambin podran modelarse electos de transparencia con el mapa de entorno). Se trata de una aproximacin simple y rpida a las tcnicas ms precisas de representacin basada en trazado de rayos que hemos expuesto en las Secciones 10.11 y 10.12. El mapa de enlomo se define sobre las superficies de un universo circundante. La informacin del mapa de entorno incluye los valores de intensidad para las fuentes luminosas, el cielo y otros objetos de fondo. La Figura 10.97 muestra el universo circundante como una esfera, pero a menudo se utiliza un cubo o un cilindro para definir las superficies de entorno que rodean a los objetos de una escena. Para obtener la imagen de la superficie de un objeto, proyectamos reas de pxel sobre la superficie del objeto y luego reflejamos cada una de esas reas proyectadas sobre el mapa de entorno con el fin de obtener los valores de intensidad superficial para el pxel. Si el objeto es transparente, tambin podemos refractar el rea de pxel proyectada hacia el mapa de enlomo. El proceso de mapeado de enlomo para la reflexin de un rea de pxel proyectada se ilustra en la Figura 10.98. La intensidad del pxel se determina promediando los valores de intensidad dentro de la regin intersectada del mapa de entorno.
FIGURA 10.97. Universo esfrico con el mapa de entor no sobre la superficie de la esfera.
FIGURA 10.98. Proyeccin de un rea de pxel sobre una superficie y reflexin del rea sobre el mapa de enlomo.
647
informacin de iluminacin correspondiente a las intersecciones entre los rayos y los objetos se almacena en un mapa de fotones. Entonces, se aplican mtodos de trazado de rayos distribuido utilizando algoritmos incremntales similares a los que se emplean en las representaciones mediante radiosidad. Las fuentes luminosas pueden ser puntuales, focos direccionales o de cualquier otro tipo. La intensidad asignada a una fuente luminosa se divide entre sus rayos (fotones) y las direcciones de los rayos se distribuyen aleatoriamente. Una fuente luminosa puntual se modela generando trayectorias de rayos uniformemente en todas direcciones, a menos que la fuente sea direccional (Seccin 10.1). Para otras fuentes luminosas, se seleccionan posiciones aleatorias en la fuente y se generan rayos en direcciones aleatorias. Para las luces brillantes se generan ms rayos que para las fuentes luminosas de baja potencia. Adems, pueden construirse para las fuentes luminosas mapas de proyeccin que almacenen informacin binaria sobre si hay o no objetos en cualquier regin del espacio. Tambin pueden utilizarse esferas de contorno dentro del algoritmo para proporcionar informacin acerca de los objetos contenidos en grandes regiones del espacio. Para una escena puede generarse cualquier nmero de rayos y la precisin de ios efectos de iluminacin se incrementa a medida que se generan ms trayectorias de rayos.
FIGURA 10.99- Etapas de modelado y representacin en el desarrollo del personaje animado Dr. Aki Ross para la pelcula Final Fantasy: The Spirits Within: (a) modelo almbrico de Aki, (b) estructura superficial de la piel y la ropa y (e) figura final representada, incluyendo el pelo y los detalles relativos a la ropa y a las caractersticas de la piel. {Cortesa de Square Pc/nres, Ine 2001 FFFP Todos los derechos reservados.)
648
CAPTULO 10
en cuenta durante los procedimientos de representacin. La superficie de una vasija podra mostrar un diseo pintado, un vaso de agua puede tener grabado el escudo de la familia, una pista de tenis contiene marcas que indican las distintas zonas en que se divide el campo y una autopista de cuatro carriles tiene una serie de lneas divisorias y otras marcas, como huellas de frenazo o manchas de aceite. La Figura 10.99 ilustra las capas bsicas en el modelado y representacin de un objeto al que hay que aadir detalles superficiales. Primero puede utilizarse una imagen almbrica del objeto para ajustar el diseo global. A continuacin, se encajan las capas superficiales sobre el contomo del objeto para producir una vista de la estructura con una superficie suave. Despus, se aaden los detalles de la superficie a las capas exteriores. Para el ejemplo de la Figura 10.99, los detalles de la superficie incluyen los patrones de la chaqueta (como los pliegues y la textura de la lela) y las caractersticas de la piel, como poros o pecas. En la Figura 10.100 se muestran imgenes ampliadas de las caractersticas de la piel de este personaje, que han sido generadas por computadora, mientras que la Figura 10.101 muestra las caractersticas simuladas de la piel para una persona mayor. En la Figura 10.102 se proporcionan ejemplos adicionales de escenas representadas con detalles superficiales. Podemos aadir detalles a las superficies utilizando diversos mtodos, incluyendo: Pegar pequeos objetos, como flores o espinas sobre una superficie mayor. Modelar patrones superficiales mediante pequeas reas de polgonos. Mapear matrices de texturas o procedimientos de modificacin de la intensidad sobre una superficie. Modificar el vector normal a la superficie para crear relieves localizados. Modificar tanto el vector normal a la superficie como el vector tangente a la superficie para mostrar patrones direccionales sobre madera y otros materiales.
649
Final Fantasy: The Spirits Within. (Cortesa ce Sanare Pictures, Inc. 200! FFFP Todos tos derechos reservados.)
l a pelcula
FIGURA 10.102. Escenas que ilustran la generacin infogrilea de detalles superficiales para diversos objetos: (a) plantas (cortesa de Deborah R. Fowler, Przemystaw Prusinkiemcz y Johannes fat/jes. University of Calgary. 992.), (b) conchas marinas con diversos patrones y superficies en relieve {cortesa de Deborah R. Fowler, Hans Me i nh ard y Przemyslaw Prusinkiemcz, University ofCalgary. C- 1992.), (c) una tabla de frutas {cortesa de SOFTIMAGE, Inc.) y (d) patrones superficiales para piezas de ajedrez y para un tablero de ajedrez, generados con mtodos de mapeado de texturas (cortesa de SOFTMAGE. Inc.),
de cactus a las que se les han aadido espinas y llores
650
CAPITULO 10
651
tres elementos), el valor* = I.O designa las ltimas tres componentes de color de RGB y el valor .y = 0.5 referencia los tres elementos intermedios de color RGB de la matriz. Por ejemplo, si el nombre de la matriz de textura es c o l o r A r r a y , entonces el valor .y = 0.0 hace referencia a los tres valores de la matriz c o l o r A r r a y [0], c o l o r A r r a y [1] y c o l o r A r r a y [ 2 ] . Para mapear un patrn de textura lineal sobre una escena, asignamos un valor de la coordenada $ a una posicin espacial y otro valor de la coordenada a una segunda posicin espacial. La seccin de la matriz de colores correspondiente al rayo especificado de coordenadas s se utiliza entonces para generar una lnea multicolor entre las dos posiciones espaciales. Un procedimiento de mapeado de texturas utiliza normalmente una funcin lineal para calcular las posiciones de la matriz que hay que asignar a los pxeles a lo largo de un segmento lineal. Cuando el nmero de colores de textura especificados para la lnea es pequeo, puede asignarse cada color a un gran conjunto de pxeles, dependiendo de la longitud de la lnea. Por ejemplo, si el rango especificado de la coordenada abarca un nico color RGB (tres elementos de color RGB) dentro de la matriz de texturas, todos los pxeles de la lnea se mostrarn con dicho color. Pero si hay que mapear mltiples colores a las distintas posiciones a lo largo de la lnea, entonces se asignarn menos pxeles a cada color. Asimismo, puesto que algunos pxeles podran apearse a posiciones de la matriz que estuvieran situadas entre sucesivos colores RGB, se pueden usar diversos esquemas para determinar el color que hay que asignar a cada pxel. Un mtodo simple de mapeado de colores consiste en asignar a cada pxel el color de la matriz ms prximo. Alternativamente, si un pxel se mapea a una posicin que est comprendida entre los elementos iniciales de la matriz correspondientes a dos colores sucesivos, el color del pxel puede calcularse como una combinacin lineal de los dos elementos de color ms prximos dentro de la matriz. Algunos procedimientos de mapeado de texturas permiten utilizar valores para las coordenadas de texturas que estn fuera del rango de 0 a 1.0. Estas situaciones pueden surgir cuando queramos mapear mltiples copias de una textura sobre un mismo objeto o cuando los valores de s calculados puedan estar lucra del intervalo unitario. Si queremos pennitir valores de las coordenadas de texturas que caigan fuera del rango que va
de 0 E0, podemos simplemente ignorar la parte entera de cualquier valor s determinado. En este caso, el
valor - 3 . 6 , por ejemplo, hara referencia a la misma posicin dentro del espacio de texturas del valor 0.6 o el valor 12.6. Pero si no queremos permitir valores fuera del rango que va de 0 a 1.0, entonces podemos limitarnos a fijar los valores dentro de este intervalo unitario: cualquier valor calculado que sea inferior a 0 adoptar el valor 0 y a todos los valores calculados que sean superiores a 1.0 se les asignar el valor 1.0.
652
CAPTULO 10
FIGURA 10.103. Coordenadas bidimensionales del espacio de texturas que hacen referencia a posiciones dentro de una matriz de valores de color que contienen m filas y /; columnas. Cada posicin de la matriz hace referencia a mltiples componentes de color.
(1.0)
FIGURA 10.104. Sistemas de coordenadas para el espacio de texturas bidimensional. el espacio de objetos y el espacio de imagen. ras correspondientes a las cuatro esquinas de patrn de texturas (Figura 10.103) a cuatro posiciones en el espacio dentro de la escena, utilizndose una transformacin lineal para asignar los valores de color a las posiciones de pxel proyectadas para el rea espacial designada. Tambin es posible realizar otros tipos de mapeados. Por ejemplo, podramos asignar tres coordenadas del espacio de texturas a los vrtices de un tringulo. Las posiciones en la superficie de un objeto, como por ejemplo un parche de sp/ine cbica o una seccin de esfera, pueden describirse mediante coordenadas uv en el espacio de objetos, y las posiciones de pxel proyectadas se referencian en coordenadas cartesianas xy. El mapeado de la textura superficial puede llevarse a cabo en una de estas dos formas: o bien mapeamos el patrn de textura sobre la superficie de un objeto y luego sobre el plano de proyeccin, o podemos mapear cada rea de pxel sobre la superficie del objeto y luego manear este rea superficial sobre el espacio de texturas. El mapeado de un patrn de texturas sobre las coordenadas de pxel se denomina en ocasiones escaneo de textura, mientras que el mapeado de las coordenadas de pxel sobre el espacio de texturas se denomina escaneo en orden de pxel, escaneo inverso o escaneo en orden de imagen. La Figura 10,104 ilustra las dos posibles secuencias de translmiacin entre los tres espacios. Las transformaciones lineales paramtricas proporcionan un mtodo simple para mapear las posiciones del espacio de texturas sobre el espacio de objetos: u = u(sj) = a s + bj+c
ii ii
{10.109) v = \isj) = a s + bj + c
v v
La transformacin desde el espacio de objetos hasta el espacio de imagen se lleva a cabo concatenando las transformaciones de visualizacin de proyeccin. Una desventaja del mapeado desde el espacio de texturas al espacio de pxeles es que un parche de textura seleccionado no suele corresponderse con las fronteras del pxel, lo que requiere efectuar una serie de clculos para determinar el porcentaje de recubrimiento del pxel. Por tanto, el mtodo de mapeado de texturas ms comnmente utilizado es el mapeado del espacio de pxeles al espacio de texturas (Figura 10.105). Esto evita los clculos de subdivisin de pxel y permite aplicar fcilmente procedimientos de antialiasing (filtrado). Un procedimiento de antialiasing efectivo consiste en
653
rea de pixel
de pixel
FIGURA 10.105. Mapeado de texturas mediante proyeccin de reas de pixel sobre el espacio de texturas.
rea de pixel ampliada
FIGURA 10.106. rea ampliada para un pixel, que incluye las posiciones centrales de los pxeles adyacentes. proyectar un rea de pxel ligeramente mayor que incluya los centros de los pxeles vecinos, como se muestra en la Figura 10.106, y aplicar una funcin piramidal para ponderar los valores de intensidad del patrn de texturas. Pero el mapeado del espacio de imagen al espacio de texturas requiere calcular la inversa de la transformacin de visualizacin-proyeccin y la inversa de la transformacin del mapa de texturas M~' . En el siguiente ejemplo, vamos a lustrar este tcnica mapeando un patrn definido sobre una superficie cilindrica.
Ejemplo 10.1 M a p e a d o d e u n a t e x t u r a s u p e r f i c i a l Para ilustrar los pasos del mapeado de textura superficial, vamos a considerar la transferencia del patrn mostrado en la Figura 10.107(a) a una superficie cilindrica. Los parmetros de superficie son las coordenadas cilindricas: 14=0,
V =
o<z<, i
y = r sin W,
Z = V
Podemos mapear el patrn matricial sobre la superficie utilizando la siguiente transformacin lineal, que transforma las coordenadas del espacio de textura (s\ i) = (0, 0) en la esquina inferior izquierda de! elemento de superficie (x, y, z) = (r, 0, 0).
654
t
LO
\ \ \
\ \
\ \
0.75
0.25
0.25
0.5
(a)
0.75
I.O
FIGURA 10.107. Mapeado de un patrn de texturas dctlnido dentro de un cuadrado unitario (a) sobre una superficie cilindrica (b).
U = .V7ZZ2,
V = /
A continuacin, seleccionamos una posicin de visualizaein y aplicamos la transformacin de visualizaein inversa desde las coordenadas de pixel hasta el sistema de referencia cartesiano de la superficie cilindrica. Despus, las coordenadas de la superficie cartesiana se transfieren a los parmetros de superficie uv mediante los clculos u = tan"'(v/v), v =z
y las posiciones de pxel proyectada se mapean sobre el espacio de texturas mediante la transformacin inversa i = ttHfi / = v
Entonces se promedian los valores de color en la matriz del patrn cubierta por cada rea de pxel proyectada con el Un de obtener el color del pxel.
655
FIGURA 10.108. Una escena en la que se han modelado las caractersticas de los objetos utilizando mtodos de texturas slidas. (Cortesa Je Peter Shirley, Computer Science Department, University ofUtah.) objetos de madera unos mismos patrones de textura en toda su extensin espacial. La Figura 10.108 muestra una escena visualizada mediante texturas slidas para obtener patrones de madera veteada y otros tipos de texturas.
656
CAPTULO 10
FIGURA 10.109. Una escena representada con VG Shaders y modelada con RenderMan utilizando caras poligonales para las facetas de las gemas, superficies cudrieas y parches biebicos. Adems de matrices de texturas, se utilizaron mtodos procedimentales para crear la atmsfera vaporosa de la jungla y la cubierta vegetal, que muestra un caracterstico efecto de iluminacin. (Cortesa de he VALIS Group. Reimpreso de Graphics Genis III. editado por David Kirk. 1992 Academic Press, Inc.) armnicas (curvas sinusoidales) definidos en una regin del espacio tridimensional. Entonces, se superponen perturbaciones aleatorias a las variaciones armnicas con el fin de descomponer los patrones simtricos. La escena de la Figura 10.109 fue representada utilizando descripciones procedimentales para patrones que son tpicos de las superficies de las piedras, del oro pulido y de las hojas de pltano.
UO.UQ)
donde P y P son las derivadas parciales de P con respecto a los parmetros u y v. Para aplicar variaciones a la normal a la superficie, podemos modificar el vector de posicin de la superficie sumndole una pequea funcin de perturbacin, denominada funcin de relieve: P'(u,v) = P(u,v) + b(u,v)n (MI")
Esto aade relieves a la superficie en la direccin del vector unitario normal a la superficie n - N N. Entonces, la normal a la superficie perturbada se obtiene de la manera siguiente:
657
N'=P;XP;
uo.112)
P ' = | - ( P + n)
u
d u
= P+>n K
+
(10.113)
Suponiendo que la magnitud de la funcin de relieve b sea pequea, podemos ignorar el ltimo trmino de la expresin anterior, de modo que:
P>P >
u +
(10.114)
De forma similar,
P,>P,+>n
Y la normal a la superficie perturbada ser:
(10.115)
(a)
(b>
FIGURA 10.110. Representacin del aspecto caracterstico de las superficies rugosas mediante mapeado de relieve. {Cortesia de (a) Peter Shirley, Computer Science Department, Universdd de Utah y (b) SOFTf MAGE, Jnc\)
658
CAPTULO 10
Modelos,
FIGURA 10.111. Rl caballero de cristal de la pelcula Eljoven Sherlock Holmes. Se utiliz una combinacin de mapeado de relieve, mapeado de entorno y mapeado de texturas para representar la superficie de la armadura. (Cortesa de Industrial Light & Magic 1985 Paramount Pictiwes/Amhlin.) N' = P x P + b, (P x n) + b (n x P) + b b (n x n)
a y
Pero n X n = 0, de modo,
El paso final consiste en normalizar N' para utilizarla en los clculos del modelo de iluminacin. Hay muchas formas en las que podemos especificar la funcin de relieve v). Podemos definir una expresin analtica, pero los clculos se reducen si simplemente obtenemos los valores de relieve mediante tablas de sustitucin. Con una tabla de relieve, los valores de b pueden determinarse rpidamente utilizando interpolacin lineal y clculos incremntales. Entonces, las derivadas parciales b y b se aproximan mediante diferencias finitas. La tabla de relieve puede construirse con patrones aleatorios, con patrones de cuadrcula regulares o con formas de caracteres. Los controles aleatorios resultan tiles para modelar una superficie regular, como la de una pasa, mientras que un patrn repetitivo puede utilizarse para modelar la superficie de una naranja, por ejemplo. Para aplicar mecanismos de aniialiasing, suprimimos las reas de pxel y promediamos las intensidades calculadas de los subpxeles.
H v
La Figura 10.110 muestra ejemplos de superficies representadas con mapeado de relieve. En la Figura 10.111 se proporciona un ejemplo de mtodos combinados de representacin superficial. La armadura del caballero de cristal de la pelcula El joven Sherlock Hoimes fue representado mediante una combinacin de mapeado de relieve, mapeado de entorno y mapeado de texturas. Un mapa de entorno de la escena circundante fue combinado con un mapa de relieve para producir las reflexiones de iluminacin de fondo y la apariencia rugosa de la superficie. Despus, se aadieron colores adicionales, iluminacin superficial, relieves, manchas de suciedad y pliegues para obtener el efecto global mostrado en esta figura.
S u p i
'
r l , c i e
relieve en la direccin N. De esta forma, podemos modelar patrones de veta de madera, patrones de cruce de las hebras en los tejidos y vetas en el mrmol u otros materiales similares. Tanto las perturbaciones de relieve como las direccin al es pueden generarse utilizando tablas de sustitucin.
Se aade un cdigo sufijo igual a i o f al nombre de la funcin, dependiendo del tipo de dato al que pertenezca el valor de la propiedad. Para datos vectoriales, tambin se aade el cdigo de sufijo v y entonces el parmetro p r o p e r t y V a l u e ser un puntero a una matriz. Puede hacerse referencia a cada fuente luminosa mediante un identificador, y al parmetro l i g h t N a m e se le asigna uno de los identilcadores simblicos OpenGL G L _ L I G H T O G L _ L I G H T I , G L > _ L i G H T 2 . . . , G L _ L I G H T 7 , aunque algunas implementaciones de OpenGL pueden permitir ms de ocho fuentes luminosas. De forma similar, al parmetro l i g h t P r o p e r t y hay que asignarle una de las diez constantes simblicas de propiedad que admite OpenGL. Despus de haber asignado todas las propiedades a una fuente luminosa, podemos activarla mediante el comando:
t
glEnable
(1ighcName);
Sin embargo, tambin necesitamos activar las rutinas de iluminacin OpenGL, lo que hacemos mediante la funcin:
glEnable (GL__LIGHTING) ;
Entonces las superficies de los objetos se representan utilizando clculos de iluminacin que incluirn las contribuciones de cada una de las fuentes luminosas que hayan sido activadas.
La constante simblica de propiedad OpenGL para designar la posicin de una fuente luminosa es GL _POSl En realidad, esta constante simblica se utiliza para definir dos propiedades de las fuentes luminosas
660
CAPTULO 10
al mismo tiempo: la posicin de la fuente luminosa y el tipo de la fuente luminosa. May disponibles en OpenGL dos clasificaciones generales de las fuentes luminosas utilizadas para iluminar una escena. Una fuente luminosa puntual puede clasificarse como prxima a los objetos que hay que iluminar (una fuente local) o puede tratarse como si estuviera infinitamente alejada de una escena. Esta clasificacin es independiente de la posicin que asignemos a la fuente luminosa. Para una fuente luminosa prxima, la luz emitida radia en todas direcciones y la posicin de la fuente luminosa se incluye en los clculos de iluminacin. Pero la luz emitida por una fuente distante slo puede emanar en una direccin y esta direccin se aplica a todas las superficies de la escena, independientemente de la posicin que hayamos asignado a la fuente luminosa. La direccin de los rayos emitidos desde una fuente clasificada como distante se calcula como la direccin desde la posicin asignada de la linca que une la posicin asignada a la fuente luminosa con el origen de coordenadas. Se utiliza un vector de coma flotante de cuatro elementos para designar tanto el tipo de la fuente luminosa como los valores de coordenadas que definen su posicin. Los primeros tres elementos de este vector proporcionan la posicin en coordenadas universales, mientras que el cuarto elemento se utiliza para designar el tipo de la fuente luminosa. Si asignamos el valor 0.0 al cuarto elemento del vector de posicin, la luz .se considera como una fuente muy distante (lo que se denomina en OpenGL una luz direccional) y la posicin ele la fuente luminosa se utilizar entonces nicamente para determinar la direccin de los rayos de luz. En caso contrario, se asume que la fuente luminosa es una fuente puntual local (lo que se denomina en OpenGL una luz posicionat y la posicin de la luz es utilizada por las rutinas de iluminacin con el fin de determinar la direccin de los rayos luminosos que inciden sobre cada objeto de la escena. En el siguiente ejemplo de cdigo, la fuente luminosa l est definida como una fuente local en la ubicacin (2.0, 0.0, 3.0), mientras que la fuente luminosa 2 es una fuente distante que emite los rayos luminosos en la direccin y negativa:
GLfloat U g h t l P o s T y p e [ ] GLloat light2PosType [ ] glLightCv glEnable glLightfv glEnable (GL_LIGHT1, (GL_LIGHT1); (GL_LIGHT2, (GL_LIGHT2 >; GL_POSITION, light2PosType); = (2.0, = (0.0, 0.0, 3.0, 1.0, O., 1.0); 0.0};
GL_POSITION,
UghtlPosType);
Si no especificamos una posicin y un tipo para una fuente luminosa, los valores predeterminados son (0.0, 0.0, 1.0, 0.0), lo que indica una fuente distante cuyos rayos luminosos viajan en la direccin z negativa. La posicin de una fuente luminosa est incluida en la descripcin de la escena y se transforma a coordenadas de visualizacin junto con las posiciones de los objetos; esta transformacin se lleva a cabo mediante las matrices de transformacin geomtrica y transformacin de visualizacin de OpenGL. Por tanto, si queremos conservar una fuente luminosa en una posicin fija relativa a los objetos de una escena, debemos definir su posicin despus de especificar las transformaciones geomtricas y de visualizacin del programa. Pero si queremos que la fuente luminosa se mueva a medida que se mueve el punto de vista, definiremos su posicin antes de especificar la transformacin de visualizacin y podemos aplicar una traslacin o rotacin a una fuente luminosa con el fin de moverla alrededor de una escena estacionaria.
10.20 Funciones OpenGL de iluminacin y representacin de superficies 661 iluminacin difusa y el tercer color se emplea para calcular los efectos de iluminacin especular para las superficies. En realidad, las fuentes luminosas tienen slo un color, pero podemos utilizar los tres colores de fuente luminosa en OpenGL para crear distintos efectos de iluminacin. En el siguiente ejemplo de cdigo, asignamos el color negro como color ambiente para una fuente luminosa local, denominada G L _ L I G H T 3 , y asignamos el color blanco a los colores difuso y especular.
GLfloat blackColor [ ] GLfloat whiteColor [ ] glLightfv glLightfv glLightfv (GL_LIGHT3, (GL_L.IGHT3, (GL_LIGHT3, = {u.O, = {l.O, 0.0, 1.0, 0.0, 1.0}; 1.0, 1.0};
Los colores predeterminados para la fuente luminosa 0 son negro para el color ambiente y blanco para los colores difuso y especular. Todas las dems fuentes luminosas tienen como color predeterminado el negro para las propiedades de color ambiente, difuso y especular.
Especificacin de coeficientes de atenuacin radial de la intensidad para una fuente luminosa OpenGL
Podemos aplicar una atenuacin radial de la intensidad a la luz emitida desde una fuente luminosa local OpenGL, y las rutinas de iluminacin OpenGL calcularn esta atenuacin utilizando la Ecuacin 10.2, siendo d la distancia desde la posicin de la fuente luminosa hasta la posicin de un objeto. Las tres constantes de propiedad OpenGL para la atenuacin radial de la intensidad son G L _ C O N S T A N T _ A T T E N U A T I O N , G L _ L i N E A R _ A T T E N U A T I O N y G L _ Q U A D R A T I C _ A T T E N U A T I O N , que se corresponden con los coeficientes 7 , a, y a de la Ecuacin 10.2. Puede utilizarse un valor entero positivo o un valor positivo de coma flotante para definir cada uno de los coeficientes de atenuacin. Por ejemplo, podramos asignar los valores de los coeficientes de atenuacin radial de la forma siguiente:
f
0
1.5);
0.75); 0.4) ;
GL_QUADRATIC_ATTENUATION,
Una vez especificados los valores de los coeficientes de atenuacin, la funcin de atenuacin radial se aplica a los tres colores (ambiente, difuso y especular) de la fuente luminosa. Los valores predeterminados de los coeficientes de atenuacin son ct = LO, a = 0.0 y a = 0.0. As, la opcin predeterminada es que no haya atenuacin radial:/, = 1.0. Aunque la atenuacin radial puede producir imgenes ms realistas, los clculos consumen mucho tiempo.
Q ] 2 r a d l U e n
6 6 2
CAPTULO 1 0
Fuente luminosa
FIGURA 10.113. Un cono circular de luz emitido por una fuente luminosa OpenL. La extensin angular del cono de luz, medido desde el eje del cono, es 6, y el ngulo desde el eje al vector de direccin de un objeto se designa mediante O.
GL_SPOT_CUTOFF
Hay tres constantes de propiedad OpenGL para los efectos direccionales: G L _ S P O T _ D I R E C T I O N , y G L _ S P O T _ _ E X P O N E N T . Especificamos la direccin de la luz como un vector en coordenadas universales enteras o de coma dotante. El ngulo del cono 8 se especifica como un valor entero o de coma lotante en grados, y este ngulo puede ser 180 o cualquier valor en el rango que va de 0 a 90. Cuando el ngulo del cono se hace igual a 180, la fuente luminosa emite rayos en todas direcciones (360"). Podemos definir el valor del exponente de la atenuacin de intensidad como un nmero entero o en coma flotante en el mugo comprendido entre 0 y 128. Las siguientes inscripciones especifican los efectos direccionales para la fuente luminosa nmero 3 de modo que el eje del cono se encuentra en la direccin .v, el ngulo del cono 6 es 30 y el exponente de atenuacin es 2.5.
t
(1.0,
0.0,
0.0};
#
dirVector);
30.0); 2.5);
Si no especificamos una direccin para la fuente luminosa, la direccin predeterminada ser paralela al eje z negativo, es decir, (0.0, 0.0, 1.0). Asimismo, el ngulo predeterminado del cono ser 180 y el exponente de atenuacin predeterminado ser 0. As, la opcin predeterminada es una fuente luminosa puntual que irradia en todas direcciones, sin ninguna atenuacin angular.
Agregamos un cdigo de sufijo igual a i o f, dependiendo del tipo de dato del valor del parmetro. Y para los dalos vectoriales, tambin agregamos el cdigo de sufijo v. Al parmetro paramName se le asigna una constante simblica OpenGL que identifica la propiedad global que hay que configurar, mientras que al parmetro paramValue se le asigna un nico valor o un conjunto de valores. Utilizando la funcin g l L i g h t M o d e l , podemos definir un nivel global de luz ambiente, podemos especificar cmo hay que caieu-
10.20
fruiciones
663
lar los resaltes especulares y podemos decidir si debe aplicarse el modelo de iluminacin a las caras posteriores de las superficies poligonales. Adems de un color ambiente para las fuentes de luz individuales, podemos especificar un valor independiente para la iluminacin de fondo de O p e n G L e n forma de parmetro global. Esto proporciona una opcin adicional para los clculos empricos de iluminacin. Para establecer esta opcin, utilizamos una constante simblica GL_LIGHT_MODEL_AMBIENT . La siguiente instruccin, por ejemplo, establece la iluminacin de fondo general para una escena, asignndola un color azul de baja intensidad (oscuro), con un valor de alpha igual a 1.0:
globalAmbienC glLightModelfv [ ] = (0.0, 0.0, 0.3, 1 . 0 ) ; globalAmbient);
(GL_LIGHT_MODEL_AMBIENT,
Si no especificamos un nivel global de luz ambiente, la opcin predeterminada es un color blanco de baja intensidad (gris oscuro), que equivale al valor (0.2, 0.2, 0.2, 1.0). Los clculos de las reflexiones especulares requieren determinar diversos vectores, incluyendo el vector V que une una posicin de una superficie con una posicin de visualizacin. Para acelerar los clculos de rellexin especular, las rutinas de iluminacin de OpenGL pueden utilizar una direccin constante para el vector V, independientemente de la posicin de la superficie en relacin con el punto de visualizacin. Este vector unitario eonsUmte est en la direccin r positiva, (0.0, 0.0, 1.0), y es el valor predeterminado para V, pero si querernos desactivar este valor predeterminado y calcular V utilizando la posicin de visualizacin real, que es el origen del sistemas de coordenadas de visualizacin, podemos utilizar el siguiente comando:
glLightModeli {GL_LIGHT _MODEL_LOCAL _VI EWER, GL_TRUE);
Aunque los clculos de reflexin especular requieren ms tiempo cuando utilizamos la posicin real de visualizacin para calcular V, lo cierto es que se obtienen imgenes ms realistas. Podemos desactivar los clculos superficiales para el vector V utilizando el valor predeterminado G L F A L S E (O 0, o 0.0) para el parmetro del observador local. Cuando se aaden texturas superficiales a los clculos de iluminacin OpenGL, los resalles de las superficies pueden atenuarse y los patrones de textura pueden verse distorsionados por los trminos especulares. Por tanto, como opcin, los patrones de textura pueden aplicarse nicamente a lo trminos no especulares que contribuyen al color de una superficie. Estos trminos no especulares incluyen los efectos de la luz ambiente, las emisiones superficiales y las reflexiones difusas. Utilizando esta opcin, las rutinas de iluminacin OpenGL generan dos colores para cada clculo de iluminacin superficial: un color especular y las contribuciones de color no especulares. Los patrones de textura se combinan nicamente con el color no especular, despus de lo cual se combinan los dos colores. Para seleccionar esta opcin de dos colores se utiliza la instruccin:
glLightModeli {GL_LIGHT_MODEL _COLOR_CONTROL, GL_ SE PARATE_S PECULAR_COt,OR) ;
No es necesario separar los trminos de color si no estamos usando patrones de texturas, y los clculos de iluminacin se realizan de manera ms eficiente si no se activa esta opcin. El valor predeterminado para esta propiedad es G L _ S I N G L E _ C O L O R , que no separa el color especular de las otras componentes de color de la superficie. En algunas aplicaciones, puede que convenga mostrar las superficies posteriores de un objeto. Un ejemplo sera la vista interior en corle transversal de un slido, en la cual habr que mostrar algunas superficies posteriores, adems de las superficies frontales. Sin embargo, de manera predeterminada, los clculos de iluminacin utilizan las propiedades asignadas de los materiales nicamente para las caras frontales. Para aplicar los clculos de iluminacin tanto a las caras frontales como a las posteriores, utilizando las correspondientes propiedades de los materiales de las caras frontal y posterior, utilizamos el comando:
glLightModeli GL_LIGHT_MODEI _TWO_SIDE, GL_TRUE) ;
J
664
CAPTULO 10
Los vectores normales a la superficie de las caras posteriores sern entonces invertidos y se aplicarn los clculos de iluminacin utilizando las propiedades de los materiales que se hayan asignado a las caras posteriores. Para desactivar los clculos de iluminacin en los dos lados, utilizamos el valor G L _ F A L S E (O 0, oO.) en la flmcin g l L i g h t M o d e l , valor que es el que se usa de manera predeterminada.
A la funcin se le aade un cdigo de sufijo i o f, dependiendo del tipo de dalo del valor de la propiedad, y tambin se agrega el cdigo v cuando se suministran propiedades que toman como valor un vector. Al parmetro s u r f F a c e se le asigna una de las constantes simblicas G L _ F R O N T , GL_BACK O GL_FRONT_AND_BACK; el parmetro s u r f P r o p e r t y es una constante simblica que identifica un parmetro de la superficie tal como / JL k k o h y el parmetro p r o p e r t y v a l u e hay que configurarlo con el correspondiente valor. Todas las propiedades, exceptuando el componente de reflexin especular , se especifican como valores vectoriales. Para establecer todas las propiedades de iluminacin de un objeto utilizamos una secuencia de inciones g l M a t e r i a l , antes de ejecutar los comandos que describen la geometra del objeto. El valor RGIJA para el color de emisin de la superficie, / se selecciona utilizando la constante simblica OpenGL de propiedad de la superficie G L _ E M I S S I O N . Como ejemplo, la siguiente instruccin establece el color de emisin para las superficies frontales asignndole un color gris claro:
surfS (ft 9 surfS
SurfEmissionColor glMaterialfv
=>
{0.8,
0.8,
0.8,
1.0};
(GL_FRONT,
GL_EMISSION,
SurfEmissionColor);
El color predeterminado de emisin de una superficie es el negro, (0.0. 0.0, 0.0, 1.0). Aunque puede asignarse un color de emisin a una superficie, esta emisin no ilumina a otros objetos de la escena. Para hacer eso, debemos definir la superficie como una fuente luminosa utilizando los mtodos explicados en la Seccin 10.3. Se utilizan los nombres simblicos de propiedad OpenGL GL_AMBIENT , GLJDIFFUSE y GL_SPECULAR para asignar valores a los coeficientes de reflexin de la superficie. En el mundo real, los coeficientes ambiente y difuso deberan tener asignado el mismo valor vectorial, y podemos hacer eso utilizando la constante simblica G L _ A M B i E N T _ A N D _ D i F F S E . Los valores predeterminados para el coeficiente de ambiente son (0.2, 0.2, 0.2, 1.0), los valores predeterminados para el coeficiente difuso son (0.8, 0.8, 0.8, 1.0) y los valores predetemiinados para el coeficiente especular son (1.0, 1.0, 1.0, 1.0). Para definir el exponente de reflexin especular, utilizamos la constante G L _ S H I N I N E S S . Podemos asignar a esta propiedad cualquier valor en el rango comprendido entre 0 y 128 y el valor predeterminado es 0. Como ejemplo, las siguientes instrucciones establecen los valores de los tres coeficientes de reflexin y para el exponente especular. Los coeficientes difuso y de ambiente se configuran de modo que la superficie se muestre con un color azul claro al ser iluminada con luz blanca; la reflexin especular es del color de la luz incidente y el exponente especular tiene asignado un valor de 25.0.
diffuseCoeff specularCoeff glMaterialfv diffuseCoeff); glMaterialfv (GL_FRONT_AND_BACK, (GL_FRQNT_AND_BACK, GL_SPECULAR, GL_SHININESS, specularCoeff); 25.0); [ [ ] ] = = (0.2, {1.0, 0.4, 1.0, 0.9, 1.0, 1.0}; 1.0} ;
(GL_FRONT_AND_BACK,
GL_AMBIENT_AND_DIFFUSE,
glMaterialf
Las componentes de los coeficientes de reflexin tambin pueden definirse utilizando valores de una tabla de color, para lo cual se proporciona la constante simblica OpenGL GL_COLOR_INDEXES. LOS ndices de la
665
tabla de color se asignan como una matriz de tres elementos enteros o de coma flotante, y el valor predeterminado es (0, 1,1).
(atmoParameter,
Se aade un cdigo de sufijo igual a i o f para indicar el tipo del valor de datos, y con los datos vectoriales se utiliza el cdigo de sufijo v. Para definir un color de atmsfera, asignamos la constante simblica OpenGL GL_FOG_COLOR al parmetro atmoParameter. Por ejemplo, podemos hacer que la atmsfera tenga un color gris azulado mediante la instruccin:
GLEloat atmoColor glFogfv [4] = {0.8, 0.8, 1.0, l.O);
{GL_FOG_COLOR,
atmoColor);
El valor predeterminado para el color de la atmsfera es el negro, (0.0. 0.0, 0.0, 0.0). A continuacin, podemos elegir la funcin de atenuacin atmosfrica que haya que utilizar para combinar los colores de los objetos con el color de la atmsfera. Esto se lleva a cabo utilizando la constante simblica GL_FOG_MODE:
glFogi GL_FOG_MODE, atmoAttenFunc);
Si asignamos al parmetro atmoAttenFunc el valor GL_EXP, se usar la Ecuacin 10.312 como funcin de atenuacin atmosfrica. Con el valor GL_EXP2, se selecciona la Ecuacin 10.32 como funcin de atenuacin de atmsfera. Para cualquiera de ambas funciones exponenciales, podemos seleccionar un valor de densidad de la atmsfera mediante:
glFog (GL_FOG_DENSITY, atmoDensity);
Una tercera opcin para atenuaciones atmosfricas es la funcin lineal 9.13 de variacin de la intensidad con la profundidad. En este caso, asignamos al parmetro atmoAttenFunc el valor GL_LINEAR. El valor predeterminado para el parmetro atmoAttenFunc es GL_EXP. Una vez seleccionada una funcin de atenuacin atmosfrica, esta funcin se utiliza para calcular la mezcla del color de la atmsfera y del color de la superficie del objeto. OpenGL utiliza la Ecuacin 10.33 en sus rutinas atmosfricas para calcular este color de mezcla.
entonces, asignaremos al parmetro alpha el valor A = k A una superficie completamente transparente se le asignara el valor alpha A = 1.0 y a una superficie opaca, el valor alpha A = 0.0. Una vez asignados los valores de transparencia, activamos las caractersticas de mezcla de color de OpenGL y procesamos las superficies, comenzando con los objetos ms distantes y siguiendo por orden hasta los objetos ms cercanos a la posicin de visualizacin. Con la mezcla de color activada, cada color superficial se combina con los de las superficies solapadas que ya se encuentran en el bfer de imagen, utilizando los valores alpha asignados a la superficie. Configuramos los ictores de mezcla de color de modo que todas las componente de color de la superficie actual (el objeto fuente) se multiplican por (1 - A) = (I k ), mientras que todas las componentes de color de las posiciones correspondientes del bfer de imagen (el destino) se multiplican por el factor A = k :
f f
glEnable
(GL_BLEND);
Los dos colores se mezclan entonces utilizando la Ecuacin 10.30, teniendo el parmetro alpha el valor k siendo los colores del bfer de imagen los correspondientes a una superficie que est detrs del objeto transparente que se est procesando. Por ejemplo, si A = 0.3, entonces el nuevo color del bfer de imagen ser la suma del 30 por ciento del color actual del bfer de imagen y el 70 por ciento del color de reflexin del objeto, para cada posicin de la superficie. (Alternativamente, podramos utilizar el parmetro de color alpha como factor de opacidad, en lugar de como factor de transparencia. Sin embargo, si asignamos a A un valor de opacidad, deberemos intercambiar tambin los dos argumentos en la funcin glBlendFunc.) Las comprobaciones de visibilidad pueden llevarse a cabo utilizando las funciones de bfer de profundidad de OpenGL de la Seccin 9 . 1 4 . A medida que se procesa cada superficie visible opaca, se almacenan tanto los colores de la superficie como la profundidad de la misma. Pero cuando procesamos una superficie visible transparente, lo nico que guardamos son sus colores, ya que la superficie no oculta a las superficies de fondo. Por tanto, cuando procesamos una superficie transparente, ponemos el bfer de profundidad en estado de slo lectura utilizando la funcin g l D e p t h M a s k .
p
667
Si procesamos todos los objetos en orden de profundidad, el modo de escritura del bfer de profundidad se desactiva y activa a medida que procesamos cada superficie transparente. Alternativamente, podramos separar las dos clases de objeto, como en el siguiente fragmento de cdigo:
glEnable \* GL_DEPTH_TEST); todas las superficies opacas. *\
Procesar
glEnable
glDepthMask glDisable
(GL_TRUE) ; GLBLEND); { );
glutSwapBuffers
Si no se procesan los objetos transparentes en orden estricto de profundidad, comenzando por los ms alejados, esta tcnica no acumular los colores superficiales con precisin en lodos los casos. Pero para las escenas simples se trata de un mtodo rpido y efectivo para generar una representacin aproximada de los efectos de transparencia.
La representacin de superficies con intensidad constante se desclecciona asignando el valor simblico GL_FLAT al parmetro s u r f RenderingMethod. Para el sombreado de Gouraud (la opcin predeterminada), utilizamos la constante simblica GLSMOOTH. Cuando se aplica la funcin glShadeModel a una superficie curva teselada, como por ejemplo una esfera que est aproximada mediante una malla poligonal, las rutinas de representacin OpenGL utilizan los vectores normales a la superficie en los vrtices del polgono para calcular el color del polgono. Las componentes cartesianas de un vector normal a la superficie en OpenGL se especifica mediante el comando:
glNormal3* (Nx, Ny, NzJ;
Los cdigos de un sufijo para esta funcin son b (bytc), s (short), i (integer), i (fioal) y d (double). Adems, aadimos el cdigo de sufijo v cuando se proporcionen las componentes del vector mediante una matriz. Los valores de tipo bytes, shorl e integer se convierten a valores de tipo coma flotante comprendidos entre - 1.0 y 1.0. La funcin glNormal define las componentes del vector normal a la superficie como valores de estado que se aplican a todos los comandos g l V e r t e x subsiguientes. Kl vector normal predeterminado est en la direccin z positiva: (0.0, 0.0, 1.0). Para representacin superficial plana, slo necesitamos una normal a la superficie para cada polgono. El siguiente fragmento de cdigo muestra cmo podemos definir la normal a cada polgono:
glNormal3fv glBegin (normalVector); (vertexl); (vertex2J; {vertex3); (GLTR1ANGLES);
668
CAPTULO 10
Si queremos aplicar el procedimiento de representacin superficial de Gouraud al tringulo anterior, necesitaremos especificar un vector normal para cada vrtice;
glBegin (GLTRIANGLES ; (normalVectorl; (vertexl); (normalVector2); (vertex2); (normalVector3); (vertex3); glNormal3fv glVertex3fv glNormal3fv glVertex3fv qlNormal3fv glVertex3fv glEnd { );
Aunque los vectores normales no necesitan especificarse como vectores unitarios, los clculos se reducirn si definimos como vectores unitarios todas las normales a las superficies. Cualquier normal a la superficie no unitaria ser automticamente convertida a un vector unitario si antes ejecutamos el comando:
glEnable (GL_NORMALIZE);
Este comando tambin renormali/a los vectores de las superficies cuando stos se han visto modificados por transformaciones geomtricas tales como un cambio de escala o una inclinacin. Otra opcin disponible es la especificacin de una lista de vectores normales que haya que combinar o asociar con una matriz de vrtices (Seccin 3.I7 y Seccin 4.3). Las instrucciones para crear una matriz de vectores normales son:
glEnableClientState glNormalPointer lGL_NORMAL_ARRAY); offset, normalArray);
(dataType,
Al parmetro d a t a T y p e se le asigna el valor constante G L _ B Y T E , GL_SHORT, G L _ I N T , GL_FLOAT (el valor predeterminado) o GL_DOUBLE . El nmero de bytes entre vectores normales sucesivos en la matriz n o r m a l A r r a y est dado por el parmetro o f f s e t , que tiene un valor predeterminado de 0,
10.21
OpenGL dispone de un amplio conjunto de funciones de texturas. Podemos especificar un patrn para una lnea, para una superficie, para un volumen interior o una regin espacial, o como un subpatrn que haya que insertar dentro de otro patrn de texturas. Tambin podemos aplicar y manipular los patrones de texturas de diversas formas. Adems, los patrones de texturas pueden utilizarse para simular el mapeado de enlomo. Las rutinas de texturas OpenGL slo pueden utilizarse en el modo de color RGB (RGBA). aunque algunos parmetros pueden configurarse utilizando un ndice a una tabla de colores.
10.21
Funciones de texturas
en
OpenGL
669
dataType,
lineTexArray);
Hemos asignado al primer argumento de la funcin g l T e x I m a g e l D la constante simblica OpenGL GL_TEXTURE _1D, para indicar que estamos definiendo una matriz de texturas para un objeto unidimensional: una lnea. Si no estamos seguros de que el sistema vaya a soportar el patrn de texturas con los parmetros especificados, deberemos utilizar la constante simblica G L _ P R O X Y _ T E X T U R E _ I D como principal argumento de g l T e x I m a g e l D . Esto nos permite consultar primero el sistema antes de definir los elementos de la matriz de texturas; hablaremos de los procedimientos de consulta en una seccin posterior. Para el segundo y el quinto argumentos de esta funcin de ejemplo, utilizamos el valor 0. El primer valor 0 (segundo argumento) significa que esta matriz no es una reduccin de otra matriz de texturas mayor. Para el quinto argumento, el valor 0 significa que no queremos que haya un borde alrededor de la textura. Si asignramos a este quinto argumento el valor 1 (la nica otra posibilidad), el patrn de texturas se mostrara con un borde de un pxel a su alrededor, que se utiliza para mezclar el patrn con los patrones de textura adyacentes. Para el tercer argumento, el valor GL_RGBA significa que cada color del patrn de texturas est especificado con cuatro valores RGBA. Podramos habernos limitado a utilizar los tres valores de color RGB, pero los valores RGBA se procesan en ocasiones de manera ms eficiente, ya que se alinean con las fronteras de la memoria del procesador. Es posible utilizar muchas otras especificaciones de color, incluyendo un nico valor de intensidad o de luminancia. El parmetro n T e x C o l o r s , en cuanto a argumento, debe tener un valor entero positivo que indique el nmero de colores del patrn lineal de texturas. Puesto que hemos proporcionado un valor 0 para el quinto argumento (el parmetro de borde), el nmero de colores del patrn de textura debe ser una potencia de 2. Si hubiramos asignado al quinto argumento el valor 1, entonces el nmero de colores del patrn de texturas tendra que ser 2 ms una potencia de 2. Los dos bordes de color se utilizan para permitir la mezcla de color con los patrones adyacentes. Podemos especificar el patrn de texturas unidimensional con hasta 64 + 2 colores y algunas implementaciones OpenGL permiten patrones de textura mayores. Los parmetros que describen los colores de la textura y los colores de borde se almacenan en l i n e T e x A r r a y . En este ejemplo, no tenemos ningn borde y cada grupo sucesivo de cuatro elementos de la matriz representa una componente de color del patrn de texturas. Por tanto, el nmero de elementos de l i n e T e x A r r a y es 4 X n T e x C o l o r s . Como ejemplo especfico, si quisiramos definir un patrn de texturas Con 8 colores, la malriz de texturas deberan contener 4 X 8 = 32 elementos. Los parmetros d a t a F o r m a t y d a t a T y p e son similares a los argumentos de las funciones g l D r a w P i x e l s y g l R e a d P i x e l s (Seccin 3.19). Asignamos una constante simblica OpenGL a d a t a F o r m a t para indicar cmo se especifican los valores de color en la matriz de texturas. Por ejemplo, podramos usar la constante simblica GL__BGRA para indicar que las componentes de color estn especificadas en el orden azul, verde, rojo, alpha. Para indicar el tipo de datos BGRA o RGBA, podemos asignar la constante OpenGL G L _ U N S I G N E D _ B Y T E al parmetro d a t a T y p e . Otros posibles valores que podran asignarse al parmetro d a t a T y p e , dependiendo del formato de los datos que elijamos, son G L _ I N T y GL_FLOAT , entre otros. Podemos mapear mltiples copias de una textura, o de cualquier subconjunlo contiguo de los colores de textura, a un objeto de la escena. Cuando se mapea un grupo de elementos de textura sobre una o ms reas de pxel, las fronteras de los elementos de textura no suelen alinearse con las posiciones de las fronteras de los pxeles. Un rea de pxel determinada podra estar contenida dentro de las fronteras de un nico elemento de texlura RGB (o RGBA), o podra solaparse con varios elementos de textura. Para simplificar los clculos del ma-peado de texturas, utilizamos las siguientes funciones para proporcionar a cada pxel el color del elemento de textura ms prximo:
670
CAPTULO 10
glTexParameteri glTexParameteri
GI.NEAREST} ; GL_NEAREST);
La primera funcin es utilizada por las rutinas de lexturado cuando una seccin del patrn de texturas deba agrandarse para encajar en un rango de Coordenadas especfico dentro de la escena, mientras que la segunda funcin se utiliza cuando el patrn de texturas tenga que ser reducido (estas dos operaciones de lexturado en OpenGL se denominan magnificacin, MAG y minilicacin. MI N). Aunque la operacin de asignar el color de textura ms prximo a un pxel puede llevarse a cabo rpidamente, tambin puede hacer que aparezcan electos de aliasing. Para calcular el color del pixel como combinacin lineal de los colores de textura solapados, sustituimos la constante simblica GL NEAREST por GL LINEAR. I lay muchos otros valores de parmetro que pueden especificarse con la funcin g l T e x P a r a m e t e r , y examinaremos dichas opciones en una seecin posterior. La especificacin de patrones de textura OpenGL para una escena es en cierto modo similar a la especificacin de vectores normales a la superficie, colores RGB u otros atributos. Necesitamos asociar un patrn con un determinado objeto, pero ahora, en lugar de un nico valor de color, tenemos una coleccin de valores de color Para una especie de texturas unidimensional, los valores de color se referencia! mediante una nica coordenada .v que vara entre 0.0 y 1.0 a lo largo del espacio de texturas (Seccin 1 *. 16). As, el patrn de textura se aplica a los objetos de una escena asignando valores de coordenadas de textura a las posiciones de los objetos. Podemos seleccionar un valor concreto de las coordenadas s en un espacio de texturas unidimensional mediante la siguiente instruccin:
glTexCoordl* ( s C o o r d ) ,
Los cdigos de sufijo disponibles para esta funcin son b (byte), s (short). i (integer), t (lloat) y d (douhlc). dependiendo del tipo de dato del parmetro s C o o r d que especifica la coordenada de textura. Tambin podemos usar el sufijo v si el valor de la coordenada s se proporciona mediante una matriz. Al igual que sucede con los parmetros de color y otros similares, la coordenada s es un parmetro de estado, que se aplica a todas las posiciones en coordenadas universales que se definan de forma subsiguiente. III valor predeterminado para la coordenada .s es 0.0. Para mapear un patrn lineal de textura sobre una serie de posiciones dentro de una escena definida en coordenadas universales, asignamos las coordenadas s a los puntos extremos de un segmento lineal. Entonces, los colores de textura pueden aplicarse al objeto de diversas formas, y el mtodo predeterminado que OpenGL utiliza consiste en multiplicar cada valor de color de pxel del objeto por el correspondiente valor de color del patrn de textura, Si el color de la linea es blanco (1.0, 1.0, 1.0, 1 .01 que es el color predeierminado para los objetos de una escena, la lnea slo se mostrar con los colores de la textura. En el siguiente ejemplo, creamos un patrn de textura lineal de cuatro elementos con colores verde y rojo alternantes. Todo el patrn de textura, de 0.0 a 1.0, se asigna entonces a un segmento de linca recta. Puesto que la lnea es blanca, de manera predeterminada, se mostrar dentro de la escena con los colores de la textura.
GLint
elementos textura
para
Cada c o l o r d e
e s p e c i f i c a en
cuatro
/
for (k = 0; k <= 2; [4*k] = k 0; 2)
{
texLine
671
B = =
255; 0; 255;
D e f i n i r dos
elementos
r o j o s para
el
patrn de
textura.
*/
f o r (k m 1 ; k < = 3 ; k + = 2 )
{
texLine texLine texLine texLine } glTexParameteri glTexParameteri glTexImagelD glEnable /* (GL_TEXTURE_1D, (GL_TEXTURE_1D, 0, GL_TEXTURE_MAG_FILTER, GL_TEXTRE_MIN_FILTER, GL_RGBA, 4, 0, GL_RGBA, GL_NEAREST) ; GL_NEAREST); GL_UNSIGNED_BYTE, texLine); [4*k] = 255; = = = 0; 0; 255; [4*k+l] [4*k-*-2] [4*k+3]
GL_TEXTURE_1D,
<GL_TEXTURE_1D); el rango completo de (0.0); (endPtl); (1.0) ; (endPt2); c o l o r e a de textura a un segmento de lnea. */
Asignar
glBegin
(GL_LINES);
glDisable
(GL_TEXTURE_1D);
El segmento de lnea se muestra con secciones verdes y rojas alternativas. Podemos asignar cualquier valor que queramos a las coordenadas si Podemos, por ejemplo, mapear sobre la lnea los colores rojo y verde intermedios del patrn de textura con las siguientes instrucciones:
glBegin (GL_LINES) ; {0.25); (wcPtl); (0.75); (wcPt2);
As, la primera parte de la lnea ser roja y la segunda mitad verde. Tambin podramos utilizar valores de s fuera del rango comprendido entre 0 . 0 y 1.0. Por ejemplo, si asignramos a el valor - 2 . 0 para un extremo de la linea y el valor 2 . 0 en el otro extremo, el patrn de texturas se mapeara sobre la lnea cuatro veces. La lnea aparecera entonces con 1 6 secciones verdes y 16 secciones rojas. Para los valores de coordenada s situados lucra del intervalo unitario, las partes enteras se ignoran, a no ser que especifiquemos que los valores s deben fijarse a 0 o a 1 . 0 cuando se produzca desbordamientos. La Figura 1 0 . 1 1 4 muestra algunos posibles patrones de lnea que pueden visualizarse con la matriz que contiene los valores RGB de dos colores verdes y dos colores rojos.
672
CAPITULO 10
FIGURA 10.114. Ejemplos de mapeado de un patrn de texturas OpenGL de un nico subndice sobre un segmento de lnea blaneo. En los patrones de textura OpenGL hay disponible un amplio rango de parmetros y opciones, pero antes de profundizar en estas caractersticas de las rutinas de texturas de OpenGL, vamos a ver primero las funciones bsicas necesarias para generar patrones de textura bidimensionales y tridimensionales.
dataFormat,
(GL _TEXTURE_2 D } ;
La nica diferencia aqu es que debemos especificar tanto una anchura (nmero de columnas) como una altura (nmero de filas), para la matriz de texturas de tres subndices. Tanto la anchura como la altura deben ser una potencia de 2, sin un borde, o 2 ms una potencia de 2 en caso de utilizarse un borde. De nuevo, utilizamos componentes de color RGBA, y especificamos en el ejemplo que el patrn no tiene ningn borde y no es una reduccin de un patrn de texturas mayor. Por tanto, el tamao de la matriz almacenada en s u r f T e x A r r a y es 4 x t e x W i d t h X t e x H e i g h t . Para patrones de textura bidimensionales, asignamos a los elementos de la matriz de textura los valores de color de abajo a arriba. Comenzando en la esquina inferior izquierda del patrn de color, especificamos los elementos de la primera fila de la matriz, asignndoles los valores RGBA correspondientes a la fila inferior del espacio de texturas, y especificamos los elementos de la ltima Illa de la matriz asignndoles los valores RGBA correspondientes a la parte superior del espacio de texturas rectangular (Eigura 10.103). Al igual que con el patrn de texturas lineal, a los pxeles de superficie de una escena puede asignrseles el color de textura ms prximo a un color de textura interpolado. Seleccionamos cualquiera de estas opciones con las mismas dos funciones g i T e x P a r a m e t e r que ya empleamos para las texturas unidimensionales. Una funcin especifica la opcin que hay que usar cuando se agranda un patrn de texturas para que encaje en un rango de coordenadas y la otra funcin especifica la opcin que hay que emplear con las reducciones de los patrones. Adems, un patrn de textura bidimensional puede estirarse en una direccin y comprimirse en la otra. Por ejemplo, las siguientes instrucciones especifican que las rutinas de iexturado deben mostrar las posiciones de superficie proyectadas utilizando el color de textura ms prximo:
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GLINEAREST) ;
10.21
funciones
de
texturas en
QpenGL
673
Para asignar un color de textura interpolado a los pxeles de las superficies, utilizamos la constante simblica G L _ L I N E A R en lugar de GLJSIEAREST. Una posicin de coordenadas en el espacio de texturas bidimensionales se selecciona mediante:
glTexCoord2* {sCoord, tCoord);
El espacio de texturas est normalizado, de modo que el patrn se referencia mediante valores de coordenadas comprendidos en el rango de 0.0 a 1.0. Sin embargo, podemos utilizar cualquier valor de coordenada de texturas para replicar un patrn a lo largo de una superficie. Las coordenadas de texturas pueden especificarse en varios formatos, indicndose el formato de los datos mediante un cdigo de sufijo igual a b, s, i, f o d. Tambin agregaremos el sufijo v si las coordenadas de textura se especifican mediante una matriz. Para ilustrar las funciones OpenGL aplicables a un espacio de textura bidimensional, el siguiente segmento de cdigo especifica un patrn 32 por 32 y lo mapea sobre una superficie cuadriltera. Cada color de textura se especifica mediante cuatro componentes RGBA y el patrn carece de borde.
GLubyte /* /*
texArray
[32] [32] [4] ; asignar las componentes del color de */ GL_NEAREST); GL_NEAREST) ; textura a texArray. */
Siguiente: Seleccionar
l a o p c i n d e c o l o r ms p r x i m o . (GL_TEXTURE_2D, (GL_TEXTURE_2D,
(GL_TEXTRE_2D,
0 , GL_RGBA,
texArray);
Asignar el
rango completo de c o l o r e s de
textura
a un
cuadriltero.
*/
glBegin
(GL_QUADS); (0.0, (1.0, (1.0, (0.0, 0.0); 0.0}; 1.0); 1.0); glVertex3fv glVertex3cv glVertex3fv glVertex3fv (vertexl); (vertex2); (vertex3); (verteX4);
glDisable
(GL_TEXTURB_2D);
dataFormat,
dataType,
glEnable
(GL_TEXTURE_3D);
Los colores de textura RGBA se almacenan en v o l T e x A r r a y , que contienen 4 X texWidth X texHeight X t e x D e p t h elementos. La anchura, altura y profundidad de la matriz debe ser una potencia de 2 o una potencia de 2 ms 2.
674
Con las siguientes instrucciones, podremos mostrar los pxeles utilizando el color de textura ms prximo:
glTexParameteri GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); g l T e x P a r a m e t e r i (GL_TEXTURE_ 3 D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
Para colores de textura lincalmenle interpolados, sustituimos el valor GL NEAREST por GL_LINEAR. Las coordenadas de textura tridimensionales se seleccionan mediante
glTexCoord3* sCoord, tCoord, rCoord);
Cada posicin seleccionada en el espacio de textura se asocia entonces con una posicin de coordenadas espaciales dentro de una escena definida en coordenadas universales.
Si se asigna al parmetro applicationMethod el valor GL_REPLACE, entonces el color, la luminancia, la intensidad o el valor alpha de textura sustituirn los correspondientes valores que tenga el objeto. Por ejemplo, un patrn de textura de valores alpha sustituir los valores alpha del objeto. Se utilizan operaciones similares de sustitucin con los patrones de textura especificados con un nico valor de luminancia o intensidad. Un patrn de valores de intensidad verde sustituir las componentes verdes del color del objeto. Si se asignad valor GLMODULATE al parmetro applicationMethod, loque se obtendr es una modulacin de los valores de color del objeto. Es decir, los valores actuales del objeto se multiplican por los valores de la textura. Los resultados especficos dependern del formato de los elementos del patrn de textura,
675
de modo que, por ejemplo, los valores alpha modularn los valores alpha y los valores de intensidad modularn los valores de intensidad. El mtodo de aplicacin predeterminado para un patrn de texturas es GL_MODULATE . Si el color de un objeto es blanco (el color predeterminado de los objetos), la operacin de modulacin producir el mismo resultado que una operacin de sustitucin, dependiendo de cmo se hayan especificado los elementos del patrn de texturas. Tambin podemos usar la constante simblica GL_DECAL para las operaciones de mapeado de texturas, lo que har que se utilicen los valores alpha ROBA como coeficientes de transparencia. En este caso, el objeto se trata como si fuera transparente con el color de textura en segundo plano. Si el patrn de textura slo contiene valores RGB, sin ninguna componente alpha, el color de textura sustituir al color del objeto. Asimismo, en algunos casos, como por ejemplo cuando el patrn de textura slo contiene valores alpha, este modo de aplicacin del mapeado de texturas no est definido. Cuando asignamos la constante GL_BLEND al parmetro a p p l i c a t i o n - M e t h o d , las rutinas de lexturado realizan una mezcla de colores utilizando un color especificado con la funcin:
gTexEnv* (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,
blendingColor);
Agregaremos el sufijo i o f de acuerdo con el tipo de dalo del color de mezcla. Asimismo, se aadir el sufijo v si el color de mezcla se especifica mediante una matriz.
Los patrones se replican utilizando nicamente la parte fraccionaria del valor de la coordenada dentro del espacio de texturas. Al parmetro t e x S p a c e se le asigna uno de los valores simblicos G L _ T E X T U R E _ 1 D , G L _ T E X T U R E _ 2 D o G L _ T E X T U R E _ 3 D y el parmetro t e x W r a p - C o o r d designa una coordenada dentro del espacio de texturas utilizando GLJTEXTURE_WRAP_S, GL_TEXTRE_WRAP_T o GL_TEXTURE_WRAP_R. Para hacer que la coordenada de texturas quede lijada en el lmite del intervalo unitario cuando se produce un desbordamiento, utilizamos la constante simblica GL_CLAMP en lugar de GL_REPEAT. Si una coordenada de textura tiene un valor superior a 1.0, con esta opcin se le asignar el valor 1.0. De forma similar, si una coordenada tiene un valor inferior a 0.0, con esta opcin se le asignara el valor 0.0. Podemos especificar cualquier combinacin de repeticin o fijacin para las coordenadas de un espacio de texturas concreto. La opcin predeterminada para todas las coordenadas es GL_REPEAT.
Los dos valores 0 en la lista de argumentos indican de nuevo que este patrn no es una reduccin y que no tiene un borde. La posicin (xO, yO) del bfer de imagen, relativa a la esquina inferior izquierda del bfer, hace referencia a la esquina inferior izquierda de un bloque de colores de pxel de tamao t e x W i d t h por texHeight. Hay disponible otra funcin similar para obtener un bloque de colores de pxel como subpatrn de texturas:
676
yTexElement,
texSubWidth,
Este bloque de valores de pixel se almacena en el patrn actual en la posicin correspondiente al elemento d e textura especificado ( x T e x E l e m e n t , y T e x E l e m e n t ) . Los parmetros t e x S u b W i d t h y t e x S u b H e i g h t proporcionan el tamao del bloque de pxeles, cuya esquina inferior izquierda estar en la posicin (x0, yO) del bfer de imagen.
(nCoords,
El parmetro n C o o r d s deber tener el valor I, 2. 3 o 4, especificando la dimensionalidad del patrn de texturas. El valor predeterminado de 4 se utiliza para referenciar el espacio de texturas segn un sistema de coordenadas homogneas, por lo que la posicin en el espacio de texturas se calcular dividiendo los primeros tres valores de coordenadas por el cuatro. Esta forma resulta til, por ejemplo, cuando el patrn de textura e s una fotografa en perspectiva. Al parmetro d a t a T y p e se le asigna el valor constante GL_SHORT, G L _ I N T , GL_FLOAT (el valor predeterminado) o G L D O U B L E . El desplazamiento en bytes entre las posiciones sucesivas de coordenadas dentro de la matriz t e x C o o r d A r r a y s e especifica mediante el parmetro offset, que tiene un valor predeterminado igual a 0.
La primera instruccin g l B i n d T e x t u r e asigna un nombre al patrn, mientras que la segunda llamada a designa el patrn como estado de textura actual. Si hemos creado mltiples patrones de textura, podramos llamar de nuevo a g l B i n d T e x t u r e con otro nombre de patrn para activar dicha textura con el fin de aplicarla a algn objeto de la escena. Para un patrn bidimensional o tridimensional, cambiareglBindTexture
invoca por primera vez el nombre de una textura, se crea un patrn de textura utilizando los valores predeterminados para los parmetros del patrn. Podemos borrar uno o ms patrones de textura existentes mediante el comando:
glDeleteTextures (nTextures, texNamesArray);
677
El parmetro n T e x t u r e s especifica el nmero de nombres de patrones enumerados en la matriz texNamesArray. Tambin podemos dejar que sea OpenGL quien seleccione un nombre para el patrn, con el fin de no tener que controlar los nombres que ya han sido utilizados. Por ejemplo,
static GLuint texName; {1* texName); texName);
glGenTextures glBindTexture
(GL_TEXTURE_2D,
Como ejemplo, el siguiente cdigo obtiene una lista de seis nombres de textura no utilizados y emplea uno de ellos para crear un patrn:
s t a t i c GLuint glGenTextures glBindTexture texNamesArray (1, [6]; [3]); [3]);
texNamesArray
(GL_TEXTURE_2D,
texNamesArray
En OpenGL hay disponible un comando de consulta para averiguar si un cierto nombre de textura ya est siendo utilizado en algn patrn existente:
glIsTexture (texName);
Esta funcin devuelve el valor GL_TRUE si texName es el nombre de un patrn existente, y en caso contrario devuelve el valor G L _ F A L S E . Tambin se devuelve un valor G L _ F A L S E si texName = o o si se produce un error
O,
GL_RGBA,
dataType,
Los parmetros x T e x E l e m e n t y y T e x E l e m e n t se utilizan para seleccionar una posicin de coordenadas entera de un elemento de textura dentro del patrn original, referenciando la posicin (0, 0) al elemento de texturas situado en la esquina inferior izquierda del patrn. El subpatrn se pega sobre el patrn original, con su esquina inferior izquierda en la posicin ( x T e x E l e m e n t , y T e x E l e m e n t ) . Los parmetros TexSubWidth y T e x S u b H e i g h t proporcionan el tamao del subpatrn. El nmero de elementos de color en la matriz subSurf T e x A r r a y para un patrn de textura RGBA es 4 X t e x S u b W i d t h X t e x S u b H e i g h t . Los restantes parmetros son iguales que en la funcin g l T e x l m a g e , y pueden definirse subpatrones similares para texturas unidimensionales y tridimensionales.
678
CAPTULO 10
se referencia mediante el nivel de reduccin 0. Un patrn de reduccin que tenga la mitad de tamao que el patrn original tendr asignado el nmero de nivel I, el segn patrn de reduccin a la mitad de tamao se designar como nmero de nivel 2, y as sucesivamente para las restantes reducciones. La funcin c o p y T e x i m a g e tambin genera un patrn de reduccin cuando especificamos el nmero de nivel l o superior. Alternativamente, podemos dejar que OpenGL genere los patrones de reduccin automticamente. Por ejemplo, podramos utilizar la siguiente funcin GLU para obtener los patrones de reduccin RGBA para una textura de superficial de 16 por 16:
g l u B u i l d 2 D M i p m a p a {Gli _TEXTURE_ 2 D , GL_ R G B A , 1 6 , 1 6 , GL_RGBA, GWJNSIGNED BYTE, surfTexArray) ;
Esta funcin generar un conjunto completo de cuatro patrones, con los tamaos reducidos de 8 por 8,4 por 4. 2 por 2 y 1 por I. Tambin podemos especificar una reduccin seleccionada utilizando la funcin:
gluBuild2DMipmapLevels GL_RGBA, (GL_TEXTURE_2D, G L R G B A , GL_UNSIGNED_BYTE, 0, 16, 16, maxLevel,
minLevel,
surfTexArray);
Esta funcin genera patrones de reduccin para un rango de nmeros de nivel especificados mediante los parmetros m i n L e v e l y m a x L e v e l . En cada caso, los mipmaps se construyen para el patrn de texturas actual, especifico en el nivel nmero . Podemos seleccionar un mtodo para determinar los colores de los pxcles a partir de los patrones de reduccin utilizando la funcin g l T e x P a r a m e t e r y la constante simblica GL_TEXTURE_MIN_FILTER. Como ejemplo, la siguiente funcin designa el procedimiento de mapeado para un patrn de texturas bidimens ion al:
g l T e x P a r a m e t e r ( GL_TEXTURE_ 2 D, GI._TEXTURE _MIN _FILTER GL_NEAREST_MIPMAP_NEAREST);
/
Esta funcin especifica que las rutinas de textura deben utilizar el patrn de reduccin que se ajuste de forma ms precisa al tamao de pixel ( M I P M A P N E A R E S T ) . Entonces, a los pixeles se les asignar el color del elemento de textura ms prximo ( GL__NEAREST ) en dicho patrn de reduccin. Con la constante simblica G L _ L I N E A R _ M I P M A P _ N E A R E S T , especificamos una combinacin lineal de los colores de textura contenidos en el patrn de reduccin ms prximo. Con G L _ N E A R E S T _ M I P M A P _ L I N E A R (el valor predeterminado), especificamos un color promedio que se calcular a partir de los elementos de textura ms prximos en cada uno de los patrones de reduccin que se ajusten mejor al tamao de pixel. Por su parte. GL_LINEAR_ MIPMAP_LINEAR calcula el color del pixel utilizando una combinacin lineal de los colores de textura del conjunto de patrones de reduccin que mejor se ajusten en tamao.
10.21
Funciones de
texturas en
OpenGL
6 7 9
donde al parmetro b o r d e r C o l o r se le asigna un conjunto de cuatro componentes de color RGBA. 1:1 color de borde predeterminado es el negro, (0.0, 0.0, 0.0, 0.0).
GL_TEXTURE HEIGHT,
Si el sistema no puede admitir la altura de patrn solicitada (16. en este caso) se devolver un valor 0 en el parmetro t e x H e i g h t . En caso contrario, el valor devuelto coincidir con el valor solicitado. Otros parmetros de los patrones pueden consultarse de forma similar utilizando constantes simblicas tales como GL_TEXTURE_WIDTH, GL_TEXTURE__DEPTH, GL_TEXTURE_BORDER y GL_TEXTURE_BLUE_SIZE. En cada caso, si se devuelve un valor 0 querr decir que el valor solicitado para el parmetro en la funcin glTexlmage no puede admitirse. Para valores de datos en coma flotante, tendremos que sustituir el cdigo de sufijo i por el cdigo f. Aunque obtengamos una respuesta afirmativa para una textura propuesta, puede que no sea posible almacenar el patrn en memoria. Esto puede suceder cuando haya otro patrn ocupando la memoria disponible.
El parmetro quadSurfObj en esta funcin es el nombre del objeto cudrico. Si queremos desactivar el texturadt) de la superficie cudrica. tendremos que cambiar la constante simblica GL_TRUE por GL_FALSE.
Las coordenadas de textura se transforman utilizando una matriz 4 por 4 de la misma manera que se transforman las coordenadas de la escena: cada coordenada se divide por el parmetro homogneo (Seccin 5 . 2 ) .
680 CAPTULO 10 Modelos de ilumimn :in y mtodos de representacin superficial As, los valores de las coordenadas de textura s t y / en la funcin anterior se dividen por el parmetro homogneo / / para generar la posicin real dentro del espacio de texturas. Las coordenadas homogneas en el espacio de texturas son tiles cuando se combinan mltiples efectos de perspectiva en una misma imagen. Por ejemplo, una vista en perspectiva de un objeto puede incluir un patrn de texturas producido con una transformacin diferente de proyeccin en perspectiva. El patrn de textura puede entonces modificarse utilizando coordenadas homogneas de textura para ajustar la perspectiva de la misma. Pueden conseguirse muchos otros efectos utilizando coordenadas de texturas homogneas para manipular el mapeado de texturas.
% [ex
10.22
RESUMEN
En general, los objetos son iluminados con energa radiante procedente de las emisiones de luz y de las superficies reflectantes de una escena. Las fuentes luminosas pueden modelarse como objetos puntuales o pueden tener un tamao finito. Adems, las fuentes luminosas pueden ser direccionales, y pueden tratarse como fuentes infinitamente distantes o como fuentes luminosas locales. Normalmente, se suele aplicar una atenuacin radial a la luz transmitida, utilizando una funcin cuadrtica inversa de la distancia, y las luces de foco tambin pueden atenuarse de forma angular. Las superficies reflectantes de una escena son opacas, completamente transparentes o parcialmente transparentes. Los efectos de iluminacin se describen en trminos de componentes difusa y especular tanto para las reflexiones como para las refracciones. La intensidad de la luz en una posicin de la superficie se calcula utilizando un modelo de iluminacin, y el modelo bsico de iluminacin en la mayora de los paquetes grficos utiliza aproximaciones simplificadas de las leyes tsicas, estos clculos de iluminacin proporcionan un valor de intensidad luminosa para eada componente RGB de la luz reflejada en una posicin de la superficie y para la luz transmitida a travs de un objeto transparente. El modelo bsico de iluminacin admite normalmente mltiples fuentes luminosas como emisores puntuales, pero pueden ser fuentes distantes, fuentes locales o luces de foco. La luz ambiente para una escena se describe mediante una intensidad lija para cada componente de color RGB. intensidad que es la misma para todas las superficies. Las reflexiones difusas de una superficie se consideran proporcionales al coseno de la distancia angular con respecto a la direccin de la normal a la superficie. Las reflexiones especulares se calculan utilizando el modelo de Phong. Por su parte, los efectos de transparencia suelen aproximarse utilizando un coeficiente simple de transparencia para un material, aunque pueden modelarse efectos de refraccin ms precisos utilizando la ley de Snell. Los efectos de sombra correspondientes a las fuentes luminosas individuales pueden aadirse identificando las regiones de una escena que no son visibles desde la fuente luminosa. Asimismo, los clculos necesarios para obtener las reflexiones de la luz y los efectos de transmisin para los materiales translcidos no suelen incluirse en el modelo bsico de iluminacin, aunque podemos modelarlos utilizando mtodos que dispersen las componentes de luz difusa. Los valores de intensidad calculados con un modelo de iluminacin se mapean sobre los niveles de intensidad disponibles en el sistema de visualizacin que se est utilizando. Los distintos sistemas proporcin;)!) una escala de intensidad logartmica con el fin de suministrar un conjunto de niveles de intensidad que se
10.22 Resumen
681
incrementen con diferenciales de brillo percibido de la misma magnitud. Se aplica una correccin gamma a los valores de intensidad para corregir la no linealidad de los dispositivos de visualizacin. Con los monitores monocromo, podemos utilizar patrones de semitonos y tcnicas de aleatorizacin para simular un rango de valores de intensidad. Las aproximaciones de semitonos pueden utilizarse tambin para incrementar el nmero de niveles de intensidad en aquellos sistemas que sean capaces de mostrar ms de dos intensidades por pxel. Los mtodos de aleatorizacin ordenada, de difusin de errores y de difusin de puntos se utilizan para simular un rango de intensidades cuando el nmero de puntos que hay que mostrar en la escena es igual al nmero de pxeles del dispositivo de visualizacin. La representacin de superficies en los paquetes grficos se lleva a cabo aplicando los clculos del modelo bsico de iluminacin a procedimientos de linea de exploracin que extrapole los valores de intensidad a partir de unos cuantos puntos de la superficie, con el fin de calcular todas las posiciones de pxel proyectadas de la superficie. Con la representacin superficial de intensidad constante, tambin denominada representacin plana, se utiliza un color calculado para mostrar todos los puntos de una superficie. La representacin superficial plana resulta suficientemente precisa para los poliedros o para las mallas poligonales de aproximacin a superficies curvas cuando las posiciones de visualizacin y de las fuentes luminosas estn alejadas de los objetos de una escena. La representacin superficial de Gouraud aproxima las reflexiones luminosas producidas en superficies curvas teseladas calculando los valores de intensidad en los vrtices de los polgonos e interpolando linealmente dichos valores de intensidad en las caras del polgono. Un procedimiento ms preciso, aunque ms lento, de representacin superficial es el mtodo de Phong. que interpola los vectores normales promediados de los vrtices de los polgonos a lo largo de las caras poligonales. Entonces, se utiliza el modelo bsico de iluminacin para calcular las intensidades superficiales en cada posicin de la superficie proyectada, utilizando los valores interpolados para los vectores normales a la superficie. Las tcnicas rpidas de representacin superficial de Phong utilizan aproximaciones en serie de Taylor para reducir el tiempo de procesamiento dedicado a los clculos de intensidad. El trazado de rayos es un mtodo para obtener efectos globales de reflexin especular y de transmisin, trazando rayos luminosos a travs de una escena hasta las posiciones de pxel. Los rayos de los pxeles se trazan a travs de una escena, rebotando de objeto en objeto a medida que se acumulan las contribuciones de intensidad. Para cada pxel se construye un rbol de trazado de rayos y los valores de intensidad se combinan empezando por los nodos terminales del rbol y subiendo hasta las raz. Los clculos de interseccin entre los objetos y los rayos en el mtodo de trazado de rayos pueden reducirse mediante mtodos de subdivisin espacial que comprueban las intersecciones entre los rayos y los objetos nicamente dentro de detenninadas subregiones del espacio total. La tcnica de trazado de rayos distribuido emplea mltiples rayos por pxel, asignando aleatoriamente diversos parmetros a los rayos, como la direccin y el tiempo, listo proporciona un mtodo preciso para modelar el brillo y la translucidez de las superficies, las aperturas finitas de cmara, las fuentes luminosas de tamao finito, los efectos de sombra y el desenfoque de movimiento. Los mtodos de radiosidad proporcionan un modelado preciso de los efectos de reflexin difusa, calculando la transferencia de energa radiante entre los diversos parches superficiales de una escena. S utiliza una tcnica de refinamiento progresivo para acelerar los clculos de radiosidad, tomando en consideracin la transferencia de energa de un parche superficial en cada pasada. Pueden generarse escenas folorrealislas utilizando una combinacin de mtodos de trazado de rayos y de radiosidad. Un mtodo rpido para aproximar los efectos globales de iluminacin es el mapeado de entorno. Con esta tcnica, se utiliza una matriz de entorno para almacenar informacin sobre la intensidad de fondo de una escena. Esta matriz se mapea posteriormente sobre los objetos de una escena basndose en la direccin de visualizacin especificada. El mapeado de fotones proporciona un modelo preciso y eficiente para los efectos de iluminacin global en escenas complejas. Con esta tcnica, se generan rayos aleatorios desde las fuentes luminosas y los efectos de iluminacin de cada rayo se almacenan en un mapa de fotones, que separa la informacin de iluminacin de la geometra de la escena. La precisin de los efectos de iluminacin se incrementa a medida que aumentamos el nmero de rayos generados.
682
CAPTULO 10
Pueden aadirse detalles a las superficies de los objetos utilizando caras poligonales, mapeado de texturas, mapeado de relieve o mapeado del sistema de referencia. Pueden superponerse pequeas caras poligonales sobre superficies de mayor tamao con el fin de generar diversos tipos de diseos. Alternativamente, pueden definirse patrones de textura en espacios unidimensionales, bidimensionales y tridimensionales, pudiendo emplearse dichos patrones para aadir una textura a una lnea, a una superficie o a un volumen. El mapeado de texturas procedimental utiliza funciones para calcular las variaciones en los efectos de iluminacin de los objetos. El mapeado de relieve es un mecanismo para modelar irregularidades de las superficies aplicando una funcin de relieve que perturba los vectores normales a la superficie. El mapeado del sistema de referencia es una extensin del mapeado de relieve que puede utilizarse para modelar las caractersticas de los materiales anistropos, permitiendo aplicar variaciones horizontales a la superficie, adems de las variaciones verticales tpicas del mapeado de relieve. La biblioteca bsica de OpenGL contiene un amplio conjunto de funciones para especificar fuentes luminosas puntuales, los diversos parmetros del modelo bsico de iluminacin, el mtodo de representacin superficial que hay que utilizar, las rutinas de aproximacin de semitonos que deben emplearse y los patrones matriciales de texturas que hay que aplicar a los objetos. Las Tablas 10.2 y 10.3 proporcionan un resumen de estas funciones OpenGL de iluminacin, representacin superficial y mapeado de texturas. TABLA 10.2. RESUMEN DE FUNCIONES OpenGL PARA ILUMINACIN Y REPRESENTACIN DE SUPERFICIES. Funcin
glLighc glEnabl (lightNme)
Descripcin
Especifica un valor de propiedad de una fuente luminosa. Activa una fuente luminosa. Especifica valores para los parmetros de iluminacin globales. Especifica un valor para un parmetro ptico de una superficie. Especifica un valor para un parmetro atmosfrico; los efectos atmosfricos se activan con la funcin g l E n a b l e .
glLightModel glMaterial
glColr4E
(R,
G,
B,
A)
Especifica un valor alpha para una superficie con el fin de simular la transparencia. En ia funcin g l B l e n d F u n c , hay que asignar el valor GL_ S R C _ A L P H A al factor origen de la mezcla y el valor G L _ O N E _ M I N U S _ S R C _ A L P H A al factor de destino de la mezcla.
glShadeModel
Especifica un vector normal a la superficie. Especifica que las normales a la superficie deben convertirse a vectores unitarios.
g l E n a b l e C H e n t S t a t e (GL J N R M A L _ A R R A Y )
Activa las rutinas de procesamiento para una matriz de vectores normales a la superficie.
Cra una lista de vectores normales a la superficie que hay que asoeiar con una m a u z de vrtiees. glEnable (GL DTTHER! Activa las operaciones para aplicar las tcnicas de representacin superficial mediante patrones de aproximacin de semitonos.
Referencias
683
Funcin
glTexImagelD
Descripcin Especifica los parmetros para definir un espacio de texturas unidimensional (el textura se activa con glEnable). Especifica los parmetros para definir un espacio de texturas bidimensional. Especifica los parmetros para definir un espacio de texturas tridimensional. Especifica los parmetros para las rutinas de mapeado de texturas. Especifica el valor para una coordenada de textura en un espacio de texturas unidimensional, bidimensional, tridimensional o tetradimensional. Especifica los parmetros de entorno de las texturas, como el color del mezcla para el mapeado de texturas. Copia un bloque de colores de pixel del bfer de imagen para utilizarlo como patrn de textura. Copia un bloque de colores de pxel del bfer de imagen para utilizarlo como subpalrn de textura. Especifica las coordenadas de textura en una lista asociada con una lista de vrtices. Asigna un nombre al patrn de texturas y se utiliza tambin para activar un patrn nominado. Elimina una lista de texturas nominadas. Genera automticamente nombres para las texturas. Comando de consulta para determinar si ya existe una textura nominada. Crea un subpalrn de textura. Generacin automtica de patrones de reduccin de texturas para espacios de texturas unidimensionales, tridimensionales o tridimensionales. Generacin automtica de patrones de reduccin de texturas para un nivel especificado en un espacio de texturas unidimensionales, bidimensionales o tridimensionales. Consulta el sistema para determinar si puede admitirse un determinado valor de un parmetro de textura. Activa o desactiva el texturado para superficies cudricas.
glTexEnv
giCopyTexlmage
gl CopyTexSublmage
glTexCoordPointer
glBindTexture
gluBuild*MipmapLevela
glGetTexLevel Parame t er
gluQuadricTexture
REFERENCIAS
Los modelos bsicos de iluminacin y las tcnicas de representacin superficial se explican en ouraud (I97I) y Phong (1975), Freeman (1980), Bishop y Wiemer (1986), Birn (2000), Akenine-Mller y Haines (2002) y Olano, Hart, Heidrich y McCool (2002). Los algoritmos de implementacin para los modelos de ilu-
684
minacin y los mtodos de representacin se presentan en Glassner < 1990), Arvo (199I), Kirk (1992). I ieckberl (1994), Paeth ( 1 995) y Sakaguchi, Kent y Cox (2001). Los mtodos de aproximacin por semitonos se traan en Velho y Gomes (199I). Para obtener ms informacin sobre los mecanismos de aleatorizacin ordenada, difusin de errores y difusin de puntos, consulte Knulh (1987). Los procedimientos de trazado de rayos se tratan en Whitted ( 1 980), Amanalides (1984), Cook, Porter y Carpenter (1984), Kay y Kajiya (1986), Arvo y Kirk (1987), Quek y Hearn (1988), Glassner (1989), Shirley (1990 y 2000) y Koh y Hearn (1992). Los algoritmos relativos a los mtodos de radiosidad pueden consultarse en Goral, Torrance, Greenberg y Battaile (1984), Cohn y Greenberg (1985), Cohn. Chen, Wallace y Greenberg (1988), Wallace, Elmquisl y Haines (1989), Chen, Rushmeier, Miller y Turner (1991), Dorsey, Sillion y Greenberg (1991), Sillion, Arvo,Westin y Greenberg (1991), He, Heynen, Phillips, Torrance, Salesin y Greenberg (1992), Cohn y Wallace (1993), Lischinski, Tampieri y Greenberg (1993). Schoeneman, Dorsey, Smits, Arvo y Greenberg (1993) y Sillicon y Puech (1994). Los algoritmos de mapeado de fotones se explican en Jensen (2001). Los mtodos y aplicaciones de mapeado de texiuras se analizan en Williams (1983), Segal, Korobkin, van Widenfelt, Foran y Haeberli (1992) y Demers (2002). En Glassner (1995) podr encontrar una explicacin general sobre los temas de propagacin de la energa, ecuaciones de transferencia, procesos de representacin y percepcin humana de la luz y del color. En Woo, Neider, Davis y Shreiner (1999) se presentan ejemplos adicionales de programacin utilizando las funciones de iluminacin y representacin de OpenGL. Tambin hay disponibles ejemplos de programacin para las funciones de iluminacin, representacin y texturado de OpenGL en el sitio web lulorial de Nate Robins: hlip://www.csArtcdiedu/~narobins/apeng/.htmi, Por ltimo, en Shreiner (2000) puede encontrar un listado completo de las funciones de iluminacin y representacin de OpenGL.
EJERCICIOS
10.1 Escribir una rutina para implementar la Ecuacin 10.12 para reflexin difusa utilizando una nica fuente de i l u minacin puntual y un mtodo de representacin constante para las caras de un tetraedro. La descripcin del objeto se har mediante tablas de polgonos, incluyendo los vectores normales a la superficie para cada una de las caras poligonales. Otros parmeiros adicionales de entrada incluyen la intensidad de luz. ambiente, la intensidad de la fuente luminosa y los coeficientes de reflexin superficial. Toda la infonriacin de coordenadas puede especificarse directamente en el sistema de referencia de visualizacin. 10.2 10.3 Modifique la rulina del Ejercicio 10.1 para representar las caras poligonales de una superficie esfrica teselada. Modifique la rutina del Ejercicio 10.2 para mostrar la superficie esfrica utilizando un mtodo de representacin superficial de (ouraud. 10.4 Modifique la rulina del Ejercicio 10.3 para mostrar la superficie esfrica utilizando un mtodo de representacin superficial de Phong. 10.5 Escribir una rulina para implementar la Ecuacin 10.17 para las reflexiones difusa y especular utilizando una nica fuente de iluminacin puntual y mecanismo de representacin superficial de Gouraud para las caras poligonales de una superficie esfrica teselada. La descripcin del objeto se har mediante tablas de polgonos, incluyendo l o s vectores normales a la superficie para cada una de las caras poligonales. Los valores adicionales que se suministrarn c o m o entrada incluyen la intensidad de luz ambiente, la intensidad de la fuente luminosa, los coeficientes de reflexin superficial y el parmetro de reflexin especular. Toda la informacin de coordenadas puede especificarse directamente en el sistema de referencia de visualizacin. 10.6 Modifique la rutina del ejercicio anterior para mostrar las caras poligonales utilizando un mtodo de representacin superficial de Phong.. 10.7 10.8 Modifique la rutina del ejercicio anterior para incluir una funcin de atenuacin lineal de la intensidad. Modillque la rutina del ejercicio anterior para incluir en la escena dos fuentes luminosas.
Ejercicios 10.9
685
Modifique la rutina del ejercicio anterior de modo que la superficie esfrica se visualice a travs de un panel de cristal.
10.10 Explique las diferencias que cabria esperar ver en la apariencia de las rellexiones especulares modeladas con (N H)"\ comparadas con las rellexiones especulares modeladas con (V * R)"-*. 10.11 Verifique que 2a = 0 en la Figura 10.22 cuando todos los vectores son coplanares, pero que, en general, 2a * 0. 10.12 Explique cmo pueden combinarse los diferentes mtodos de deteccin de superficies visibles con un modelo de intensidad para la visualizacin de un conjunto de poliedros con superficies opacas. 10.13 Explique cmo pueden modificarse los diversos mtodos de deteccin de superficies visibles para procesar objetos transparentes. Hay algn mtodo de deteccin de superficies visibles que no pueda manejar las superficies transparentes? 10.14 Especifique un algoritmo, basndose en uno de los mtodos de deteccin de superficies visibles, que permita identificar las reas de sombra sobre una escena iluminada por una fuente puntual distante. 10.15 Cuntos niveles de intensidad pueden mostrarse mediante aproximaciones de semitono utilizando cuadrculas de pxeles de tamao n por n, si cada pxel puede visualizarse con m intensidades diferentes? 10.16 Cuntas combinaciones de color distintas pueden generarse mediante aproximaciones de semitonos en un sistema RGB de dos niveles con una cuadrcula de 3 por 3 pxeles? 10.17 Escriba una rutina para mostrar un conjunto dado de variaciones de intensidad superficial, utilizando aproximaciones de semitono con cuadriculas de 3 por 3 pxeles y dos niveles de intensidad (o y I) por pxel. 10.18 Escriba una rutina para generar matrices de aleatorizacin ordenada utilizando la relacin de recurrencia de la Ecuacin 10.48. 10.19 Escriba un procedimiento para mostrar una matriz dada de valores de intensidad utilizando el mtodo de aleatorizacin ordenada. 10.20 Escriba un procedimiento para mplementar el algoritmo de difusin de errores para una matriz dada m por // de valores de intensidad. 10.21 Escriba un programa para implementar el algoritmo bsico de trazado de rayos para una escena que contenga una nica esfera situada por encima de un cuadrado de tierra con un patrn ajedrezado. La escena debe iluminarse con una nica fuente puntual situada en la posicin de visualizacin. 10.22 Escriba un programa para implementar el algoritmo bsico de trazado de rayos para una escena que contenga cualquier disposicin especificada en esferas y caras poligonales iluminadas por un conjunto dado de fuentes luminosas puntuales. 10.23 Escriba un programa para implementar el algoritmo bsico de trazado de rayos utilizando mtodos de subdivisin espacial para cualquier disposicin especificada de esferas y caras poligonales iluminadas por un conjunto dado de fuentes luminosas puntuales. 10.24 Escriba un programa para implementar las siguientes caractersticas del mecanismo de trazado de rayos distribuido: muestra de pxel con 16 rayos por pxel ajustados mediante fluctuacin, direcciones de rellexin distribuidas (brillo), direcciones de refraccin distribuidas (translucidez) y fuentes luminosas de tamao finito. 10.25 Disee un algoritmo para modelar el desenfoque de movimiento de un objeto mvil utilizando trazado de rayos distribuido. 10.26 Implcmente el algoritmo bsico de radiosidad para representar las superficies interiores de un rectngulo cuando una de las caras interiores del rectngulo es una fuente luminosa. 10.27 Disee un algoritmo para implementar el mtodo de radiosidad basado en refinamiento progresivo. 10.28 Escriba una rutina para transformar un mapa de entorno en la superficie de una esfera. 10.29 Escriba un programa para mapear un patrn de textura detenninado sobre cualquier cara de un cubo. 10.30 Modifique el programa del ejercicio anterior de modo que el patrn sea mapeado sobre una cara de un tetraedro.
CAPTULO 10
Modifique el programa del ejercicio anterior de modo que el patrn sea mapeado sobre una seccin especificada de una superficie esfrica. Hseriba un programa para mapear un palrn de texturas unidimensional sobre una cara especificada de un cubo, en forma de una banda diagonal.
10.33 Modifique el programa del ejercicio anterior de modo que la textura unidimensional sea mapeada sobre la superficie de una esfera, dados dos puntos de la superficie esfrica. 10.34 Dada una superficie esfrica, escriba el procedimiento de mapeado de relieve para simular la superficie rugosa de una naranja. 10.35 Escriba una rutina de mapeado de relieve para producir variaciones en las normales a la superficie de acuerdo con cualquier funcin de relieve especificada.
10.36 Escriba un programa OpenGL para mostrar una escena que contenga una esfera y un tetraedros iluminados por dos fuentes luminosas. Una de ellas es una fuente local de color rojo y la otra es una fuente de luz blanca distante. Especifique los parmetros de superficie tanto para la reflexin difusa como especular con representacin superficial de Gouraud y aplique una funcin cuadrtica de atenuacin de la intensidad. 10.37 Modifique el programa del ejercicio anterior de modo que la nica fuente local de color rojo se sustituya por dos fuentes de tipo foco: una roja y otra azul. 10.38 Modifique el programa del ejercicio anterior para aadir una atmsfera llena de humo a la escena. 10.39 Modifique el programa del ejercicio anterior de modo que la escena se visualice a travs de un panel de cristal semitransparente. 10.40 Escriba un programa OpenGL completo para mostrar un conjunto de lneas diagonales utilizando diversos patrones de textura unidimensional, como en a Figura 10.114. 10.41 Escriba un programa utilizando un patrn de texturas bidimensional de OpenGL con el fin de mostrar un patrn ajedrezado blanco y negro sobre un fondo azul. 10.42 Modifique el programa del ejercicio anterior de modo que el palrn ajedrezado tenga cuadrados rojos y azules y el fondo sea de color blanco. 10.43 Escriba un programa utilizando un patrn de textura bidimensional de OpenGL para mostrar un rectngulo blanco con un conjunto de bandas diagonales rojas equiespaciadas. Defina como color de fondo el azul. 10.44 Modifique el programa del ejercicio anterior para mapear el palrn de textura sobre la superficie de una esfera. 10.45 Modifique el programa del ejercicio anterior para mapear el patrn de textura sobre la superficie de la tetera GLL'T.
CAPTULO
11
Entrada interactiva dentro del entorno de realidad virtual denominado CAVE de NCSA, que est formado por tres paredes verticales, un suelo, un lecho y un sistema estereoscpico de proyeccin. (Cortesa de National Centerfor Snpercomputing Applications, Universidad de Illinois en Urbana-Champaign.)
Datos de entrada grficos Clasificacin lgica de los dispositivos de entrada Funciones de entrada para datos grficos Tcnicas interactivas de construccin de imgenes
Entornos de realidad virtual Funciones OpenGL para dispositivos de entrada interactiva Funciones de men OpenGL Diseo de una inlerfaz grfiea de usuario Resumen
Aunque podemos construir programas y proporcionar datos de entrada utilizando los mtodos e instrucciones de programa explicados en los captulos anteriores, a menudo resulta til poder especificar interactivamente las entradas grficas. Durante la ejecucin de un programa, por ejemplo, puede que queramos cambiar el punto de vista o la ubicacin de un objeto de una escena apuntando una posicin de la pantalla, o bien puede que queramos variar los parmetros de una animacin utilizando selecciones en un men. En las aplicaciones de diseo, las coordenadas de los puntos de control para la construccin de splines se seleccionan interactivamente y a menudo se construyen imgenes utilizando mtodos de dibujo interactivo. Son diversos los tipos de datos utilizados por los programas grficos y se han desarrollados numerosos mtodos de entrada interactiva para procesar dichos datos. Adems, las interfaces de los sistemas utilizan ahora ampliamente los grficos interactivos, incluyendo ventanas de visualizacin, iconos, mens y un ratn u otros dispositivos de control del cursor.
690
CAPTULO 11 LOCALIZADOR
Mtodos interactivos de entrada e interfaces grficas de usuario - Un dispositivo para especificar una posicin de coordenadas. - Un dispositivo para especificar un conjunto de posiciones de coordenadas. - Un dispositivo para especificar entrada textual. - Un dispositivo para especificar un valor escalar. - Un dispositivo para elegir una opcin de men. - Un dispositivo para seleccionar un componente de una imagen.
Dispositivos localizadores
La seleccin interactiva de un punto descrito por sus coordenadas se suele llevar a cabo situando el cursor de la pantalla en una determinada ubicacin dentro de una escena, aunque tambin podran utilizarse en determinadas aplicaciones otros mtodos, como por ejemplo opciones de men. Podemos utilizar un ratn, m joystick, una trackball, una spacehalf, un ratn de bola, un dial, un cursor de mano o un lpiz digitalizador para el posicionamiento del cursor dentro de la pantalla. Y tambin pueden emplearse diversos botones, teclas o conmutadores para indicar las opciones de procesamiento para la ubicacin seleccionada. Los teclados se emplean para los datos de localizacin de diversas maneras. Un teclado de propsito general suele tener cuatro teclas de control de cursor que mueven el cursor hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha de la pantalla. Con otras cuatro teclas adicionales, podemos tambin mover el cursor diagonalmente. El movimiento rpido del cursor se consigue manteniendo apretada la tecla de cursor seleccionada. En ocasiones, los teclados incluyen un joystick, wwjoydisk, una trackball o un ratn de bola para posicionar un cursor en pantalla. En algunas aplicaciones, puede que resulte tambin conveniente utilizar un teclado para escribir valores numricos u otros cdigos que indiquen los valores de las coordenadas. Tambin se han utilizado otros dispositivos, como los lpices luminosos, para introducir interactivamente coordenadas en un sistema. Pero los lpices luminosos registran las posiciones de pantalla detectando la luz emitida por los fsforos de la misma, lo que requiere procedimientos especiales de implementacin.
Dispositivos de trazo
Esta clase de dispositivos lgicos se utiliza para introducir una secuencia de coordenadas y los dispositivos fsicos empleados para generar las entradas de tipo localizador se utilizan tambin como dispositivos de trazo. El movimiento continuo de un ratn, de una trackball, de un joystick o de un cursor de mano se traduce en una serie de coordenadas de entrada. La table grfica es uno de los dispositivos de trazo ms comunes. Puede usarse la activacin de botones para colocar la tableta en modo continuo. A medida que se mueve el cursor por la superficie de la tableta, se genera un flujo de valores de coordenadas. Este procedimiento se utiliza en los sistemas de dibujo para generar imgenes utilizando diversos trazos de pincel. Los sistemas de ingeniera tambin utilizan este procedimiento para trazar y digitalzar planos.
Dispositivos evaluadores
Podemos emplear las entradas de evaluacin en los programas grficos para especificar valores escalares en las transformaciones geomtricas, parmetros de visualizacin y parmetros de iluminacin. En algunas apli-
eaeiones, las entradas de tipo escalar se utilizan tambin para establecer parmetros fsicos tales como la temperatura, la tensin o factores de carcter mecnico. Un dispositivo lisico tipie*) utilizado para proporcionar entradas de evaluacin son los paneles de diales de control. Las posiciones de los diales se calibran para generar valores numricos dentro de un rango predefinido. Una serie de potencimetros rotatorios convierten la rotacin del dial en una tensin correspondiente, que a continuacin se traduce en un nmero comprendido dentro de un rango escalar predefinido, como por ejemplo entre 10.5 y 25.5. En lugar de utilizar diales, en ocasiones se emplean potencimetros deslizantes para convertir movimientos lineales en valores escalares. Puede utilizarse como dispositivo evaluador cualquier teclado que disponga de un conjunto de teclas numricas, aunque los diales y los potencimetros deslizantes son ms eficientes para la introduccin rpida de valores. Los juvxficks, las Iraekballs, las tabletas y otros dispositivos interactivos pueden adaptarse para introducir valores interpretando la presin o el movimiento del dispositivo en relacin con un rango escalar. Para una determinada direccin de movimiento, como por ejemplo de izquierda a derecha, pueden introducirse valores escalares crecientes; el movimiento en la direccin opuesta reduce el valor escalar de entrada. Los valores seleccionados suelen presentarse en pantalla para que el usuario pueda verificarlos. Otra tcnica para proporcionar entradas de evaluacin consiste en mostrar representaciones grficas de deslizadores, botones, diales rotatorios y mens en el monitor de vdeo. La figura 11.1 ilustra algunas posibilidades para la representacin de este tipo de controles. li\ posicionamietd del cursor mediante un ratn, joys/ick, spaceball u otro dispositivo permite seleccionar un valor en uno de esos controles virtuales. Como mecanismo de realimentacin para el usuario, los colores seleccionados se muestran mediante barras de color y el valor escalar seleccionado se indica en una pequea ventana prxima a cada control.
Dispositivos de eleccin
Los mens se utilizan normalmente en los programas grficos para seleccionar opciones de procesamiento, valores de parmetro y formas de los objetos que haya que utilizar para construir una imagen. Los dispositi-
FIGURA 11.1. Representacin de controles grficos para la introduccin de datos de evaluacin. Hn esta imagen, se proporcionan representaciones de controles deslizantes y de diales para la seleccin de los valores de los parmetros . v i y. v 2 de una supcivlipse, adems de para la introduccin de componentes de color K(ilJ, ngulos de rotacin y parmetros de escala. Alternativamente, puede posieionarse un pequeo crculo sobre la rueda de colores con el fin de seleccionar simultneamente las tres componentes R(iH. Tambin pueden utilizarse las teclas de Hecha del teclado y determinados botones con el f i n de realizar pequeos cambios en un valor escalar seleccionado.
692
CAPTULO 11
vos de eleccin comnmente utilizados para seleccionar una opcin de men son los dispositivos de posicionamiento del cursor, como por ejemplo un ratn, una trackhult, el teclado, un panel de control o un panel de botones. A menudo se utilizan las teclas de funcin de un teclado o paneles de botones independientes para introducir las selecciones de men. Cada botn o tecla de funcin se programa para seleccionar una operacin o valor concreto, aunque en ocasiones se incluyen en los dispositivos de entrada botones o teclas preconfigurados. Para la seleccin en pantalla de las opciones de men mostradas, se utiliza un dispositivo de posicionamiento del cursor. Cuando se selecciona una posicin (.v,y) del cursor en pantalla, dicha posicin se compara con las extensiones de coordenadas de cada uno de los elementos de men mostrados. De esta forma, se seleccionar un elemento de men que tenga lmites verticales y horizontales . r , . r , y y v de los valores de coordenadas si las coordenadas introducidas satisfacen las desigualdades:
m j n m a x
mm
m a x
< V ^
. V
< V < V
(//
/)
Para los mens de mayor tamao en los que se muestre un nmero relativamente pequeo de opciones, se utiliza comnmente un panel tctil. La posicin seleccionada de la pantalla se compara con las extensiones de coordenadas de las opciones de men individuales, con el fin de determinar el proceso que hay que ejecutar. Otros mtodos alternativos para la realizacin de elecciones dentro de una aplicacin incluyen el teclado y los dispositivos de entrada de voz. Un teclado estndar puede utilizarse para escribir comandos u opciones de men. Para este mtodo de introduccin de elecciones, resulta til disponer de algn tipo de formato abreviado; los elementos de men pueden estar numerados o tener nombres cortos identificativos. Puede utilizarse un esquema de codificacin similar con los sistemas de entrada vocal. La entrada vocal resulta particularmente til cuando el nmero de opciones es pequeo (20 o menos).
Dispositivos de seleccin
Los dispositivos de seleccin se emplean para seleccionar una parte de una escena que haya que transformar o evitar de alguna manera. Pueden utilizarse diversos mtodos distintos para seleccionar un componente de una escena visualizada, y cualquier mecanismo de entrada que se utiliza para este propsito se clasificar como un dispositivo de seleccin. Normalmente, las operaciones de seleccin se realizan posicionando el cursor en la pantalla. Utilizando un ratn, un joystirk o un teclado, por ejemplo, podemos realizar las seleccion e s posicionando el cursor en la pantalla y presionando un botn o una tecla para registrar las coordenadas del pxel. Esta posicin de la pantalla puede entonces usarse para seleccionar un objeto completo, una faceta de una superficie teselada, una arista de un polgono o un vrtice. Otros mtodos de seleccin incluyen los esquemas de resalte, los mecanismos de seleccin de objetos por su nombre o una combinacin de algunos de estos mtodos. Utilizando la tcnica de posicionamicnto del cursor, un procedimiento de seleccin podra mapear una posicin de pantalla seleccionada sobre una ubicacin en coordenadas universales utilizando las transformaciones inversas de visualizacin y geomtrica que hubieran sido especificadas para la escena. Entonces, la posicin en coordenadas universales puede compararse con la extensin de coordenadas de los objetos. Si la posicin seleccionada se encuentra dentro de la extensin de coordenadas de un nico objeto, habremos identificado el objeto seleccionado. Entonces, puede usarse el nombre del objeto, sus coordenadas u otra informacin relativa al mismo para aplicar las operaciones deseadas de transformacin o de edicin. Pero s la posicin seleccionada se encuentra dentro de la extensin de coordenadas de dos o ms objetos, ser necesario realizar comprobaciones adicionales. Dependiendo del tipo de objeto que haya que seleccionar y de la complejidad de una escena, puede que se requieran varios niveles de bsqueda para identificar el objeto seleccionado. Por ejemplo, si estamos tratando de seleccionar una esfera cuya extensin de coordenadas se solapa con la de algn otro objeto tridimensional, la posicin seleccionada podra compararse con las extensiones de coordenadas de las facetas superficiales individuales de los dos objetos. Si esta comprobacin no arrojara resultados concluyentes, podran comprobarse las extensiones de coordenadas de los segmentos de lnea individuales.
Cuando las comprobaciones de extensin de coordenadas no permitan identificar unvocamente el objeto seleccionado, pueden calcularse las distancias desde la posicin seleccionada hasta los segmentos de linea individuales. La Figura 1 1 . 2 lustra la seleccin de una posicin que se encuentra dentro de las extensiones de coordenadas de dos segmentos de linea. Para un segmento de lnea bidimensional cuyas coordenadas de los extremos sean (.r,, Vj) y (x ,y ), el cuadrado de la distancia perpendicular desde una posicin seleccionada (.v, y) hasta la lnea se calcula como:
2 2
|A (.v-. )-AyU-. )f
y V | y |
Ax'+Ay
2 2
"
donde Av = x ~x y Av = y ~y\- Se han propuesto tambin otros mtodos, como la comparacin de las distancias a los puntos extremos, para simplificar las operaciones de seleccin de lneas. Los procedimientos de seleccin pueden simplificarse si no se llevan a cabo las comprobaciones de extensin de coordenadas para las facetas de superficie y los segmentos de lnea de un objeto. Cuando la posicin de seleccin se encuentre dentro de las extensiones de coordenadas de dos o ms objetos, los procedimientos de seleccin pueden simplemente devolver una lista de todos los objetos candidatos. Otra tcnica de seleccin consiste en asociar una ventana de seleccin con una posicin seleccionada del cursor. La ventana de seleccin estar centrada en la posicin del cursor, como se muestra en la Figura 1 1 . 3 y se utilizarn procedimientos de recorte para determinar qu objetos se interseetan con la ventana de seleccin. Para la seleccin de lneas, podemos asignar valores muy pequeos a las dimensiones w y h de la ventana de seleccin, de modo que slo intersecte un segmento de lnea con la ventana de seleccin. Algunos paquetes grficos implementan la seleccin tridimensional reconstruyendo una escena utilizando las transformaciones de visualizacin y proyeccin y empleando la ventana de seleccin como ventana de recorte. No se muestra ninguna imagen correspondiente a esta reconstruccin, si no que simplemente se aplican los procedimientos de recorte para determinar qu objetos se encuentran dentro del volumen de seleccin. Entonces, puede devolverse una lista de informacin para cada objeto contenido en el volumen de seleccin, con el fin de procesar los distintos objetos. Esta lista puede contener informacin tal como el nombre del objeto y su rango de profundidad, pudiendo emplearse el rango de profundidad para seleccionar el objeto ms cercano dentro del conjunto de objetos contenidos en el volumen de seleccin.Tambin pueden utilizarse tcnicas de resalle para facilitar la seleccin. Una forma de hacer esto consiste en resaltar sucesivamente aquellos objetos cuyas extensiones de coordenadas se solapen con una posicin de seleccin (o ventana de seleccin). A medida que se resalta cada objeto, el usuario puede ejecutar una accin de rechazo o aceptacin utilizando los botones del teclado. La secuencia se detendr cuando el usuario acepte como seleccin el objeto resallado. La seleccin tambin podra llevarse a cabo simplemente resaltando sucesivamente todos los objetos de la escena sin seleccionar una posicin del cursor. Esta secuencia de resalle puede iniciarse mediante un botn o tecla de funcin, pudiendo emplearse un segundo botn para detener el proceso cuando est resaltado el objeto deseado. Si hubiera que ir pasando de esta manera a travs de una lista muy grande de objetos, pueden
(y V
FIGURA 11 .2. Distancias desde una posicin seleccionada a dos segmentos de linea distintos.
FIGURA 11.3.
p p
694
CAPTULO 11
utilizarse botones adicionales para acelerar el proceso de resalte. Un botn iniciara un resalle rpido sucesivo de estructuras, un segundo boln se activara para detener el proceso y un tercer botn se empleara para ir lentamente hacia airas en el proceso de resalte. Finalmente, puede presionarse un botn de parada para completar el procedimiento de seleccin. Si los componentes de una imagen pueden seleccionarse por su nombre, podria emplearse la entrada de teclado para seleccionar un objeto. Este procedimiento es muy sencillo pero menos interactivo. Algunos paquetes grlicos permiten asignar nombres a ios componentes de una imagen a diversos niveles, hasta llegar al nivel de las primitivas individuales. Pueden usarse nombres descriptivos para ayudar al usuario durante el proceso de seleccin, pero esta tcnica tiene sus desventajas: generalmente es ms lenta que la seleccin interactiva en pantalla y el usuario probablemente necesite que se presenten indicaciones en pantalla para recordar los diversos nombres de las estructuras.
Modos de entrada
Algunas funciones de entrada en un sistema grfico interactivo se utilizan para especificar cmo deben interacluar el programa y los dispositivos de entrada. Un programa podra requerir las entradas en un momento concreto del procesamiento (modo de solicitud) o un dispositivo de entrada podra proporcionar de manera independiente datos de entrada actualizados (modo de muestreo), o el dispositivo podra almacenar de manera independiente todos los dalos recopilados (modo de sucesos). En el modo de solicitud, el programa de aplicacin es quien inicia la introduccin de los datos. Cuando se solicitan valores de entrada, el procesamiento se suspende hasla que se reciben los valores requeridos. Este modo de entrada se corresponde con la operacin lipica de entrada en un lenguaje de programacin general. El programa y los dispositivos de entrada operan de manera alternativa. Los dispositivos se quedan en un estado de espera hasta que se realiza una solicitud de entrada, en cuyo momento el programa espera hasta que se entregan los datos. En el modo de muestreo, el programa de aplicacin y los dispositivos de entrada operan de manera independiente. Los dispositivos de entrada pueden estar operando al mismo tiempo que el programa procesa otros datos. Los nuevos valores obtenidos desde los dispositivos de entrada sustituyen a los valores de datos introducidos previamente. Cuando el programa requiera nuevos datos, nuicstrear los valores actuales que se hayan almacenado a partir de la entrada del dispositivo. En el modo de sucesos, los dispositivos de entrada son quienes inician la introduccin de datos en el programa de aplicacin. De nuevo, el programa y los dispositivos de entrada operan concurrentemente, pero ahora los dispositivos de entrada suministran dalos a una cola de entrada, tambin llamada cola de sueesos. Todos los datos de entrada se almacenan. Cuando el programa requiere nuevos datos, los extrae de la cola de datos.
695
Normalmente, puede haber varios dispositivos operando al mismo tiempo en los modos de muestreo y de sucesos. Alguno de ellos pueden estar operando en modo de muestreo mientras que otros operan en modo de sucesos. Por el contrario, en el modo de solicitud, slo puede haber un dispositivo en cada momento suministrando las entradas. Otras funciones de la biblioteca de entrada se utilizan para especificar los dispositivos fsicos correspondientes a las distintas clases lgicas de datos. Los procedimientos de entrada en un paquete interactivo pueden implicar un procesamiento relativamente complicado para algunos tipos de entrada. Por ejemplo, para obtener una posicin en coordenadas universales, los procedimientos de entrada deben procesar una ubicacin de pantalla suministrada como entrada, aplicndole las transformaciones de visualizacin y otras transformaciones hasta llegar a la descripcin original en coordenadas universales de la escena. Y este procesamiento tambin implica obtener informacin de las rutinas de gestin de las ventanas de visualizacin.
Funciones de retrollamada
En los paquetes grficos independientes de los dispositivos, puede proporcionarse un conjunto limitado de funciones de entrada en una biblioteca auxiliar. Los procedimientos de entrada pueden entonces gestionarse como funciones de retrollamada (Seccin 2.9) que interacten con el software del sistema. Estas funciones especifican qu acciones debe tomar un programa cuando tenga lugar un suceso de entrada. Los sucesos de entrada tpicos son el movimiento del ratn, la posicin de un botn del ratn o la pulsacin de un botn del teclado.
Arrastre de objetos
Olra tcnica interactiva de posicionamiento consiste en seleccionar un objeto y arrastrarlo hasta una nueva ubicacin. Utilizando un ratn, por ejemplo, posicionamos el cursor sobre el objeto, pulsamos un botn del ratn, movemos el cursor a una nueva posicin y liberamos el botn. Entonces, el objeto se mostrar en la nueva ubicacin del cursor. Usualmente, el objeto tambin se suele mostrar en las posiciones intermedias a medida que se mueve el cursor por la pantalla.
Restricciones
Se denomina restriccin a cualquier procedimiento destinado a alterar los valores de coordenadas introducidos con el fin de obtener una orientacin o alineacin particulares de un objeto. Por ejemplo, puede restringirse un segmento de lnea de entrada para que sea horizontal o vertical, como se ilustra en las Figuras 11.4 y 11.5. Para mplementar este tipo de restriccin, comparamos los valores de coordenada de entrada de los dos puntos extremos. Si la diferencia en los valores y de los dos extremos es menor que la diferencia en los valores A\ se mostrar una lnea horizontal, mientras que en caso contrario se mostrar una lnea vertical. La restriccin horizontal-vertical resulta til, por ejemplo, al construir diagramas de red y elimina la necesidad de posicionar de manera precisa las coordenadas de los extremos. Pueden aplicarse otros tipos de restricciones a las coordenadas de entrada con el fin de producir diversas clases de alineaciones. Pueden restringirse las lneas para que tengan una pendiente concreta, como por ejemplo 45, y las coordenadas de entrada pueden restringirse para que caigan a lo largo de una serie de trayectorias predefinidas, como por ejemplo arcos circulares.
Cuadrculas
Otro tipo de restriccin es una cuadrcula rectangular que puede mostrarse en alguna parte de la pantalla. Si est activada la restriccin de cuadrcula, las coordenadas de entrada se redondean a la interseccin de cuadrcula ms prxima. La Figura 11.6 ilustra el procedimiento de dibujo de una lnea utilizando una cuadrcula. Cada una de las posiciones de cursor en este ejemplo se desplaza hasta el punto de interseccin de la cuadrcula ms cercano, trazndose una lnea entre esas dos posiciones de cuadrcula. Las cuadrculas facilitan la construccin de los objetos, ya que puede unirse fcilmente una lnea con otra previamente dibujada, seleccionando cualquier posicin cerca de la interseccin de cuadrcula correspondiente a uno de los extremos de la lnea previa. Normalmente, el espaciado entre las lneas de cuadrcula puede ajustarse, y tambin suele ser posible utilizar cuadrculas parciales o cuadrculas con di lrente espaciado en las diferentes reas de la pantalla.
697
FIGURA 11.6. Construccin de un segmento de lnea en el que los extremos estn restringidos de forma que slo pueden colocarse en las posiciones de interseccin de la cuadrcula.
A medida que el cursor se mueve. una lnea se extiende a partir del punto inicial
La lnea sigue la posicin del cursor hasta que se selecciona el segundo extremo
FIGUFA 11.7. Mtodo de banda elstica para la construccin y posicionamiento de un segmento de lnea recta.
698
CAPTULO 11
en
Campo de gravedad
En la construccin de figuras, en ocasiones surge la necesidad de conectar lneas en las posiciones de algunos extremos que no se encuentran situados en las intersecciones de la cuadrcula. Puesto que el posicionamiento exacto del cursor de pantallas sobre el punto de conexin puede resultar difcil, los paquetes grficos pueden incluir procedimientos que conviertan cualquier posicin de entrada situada cerca del segmento de lnea a una posicin sobre una lnea utilizando un rea de campa de gravetkulalrededor de la lnea. Cualquier posicin seleccionada dentro del campo de gravedad de una lnea se mover (gravitar) hasta la posicin ms cercana situada sobre la lnea. En la Figura 11.10 se ilustra mediante una regin sombreada el rea del campo de gravedad situado alrededor de una lnea. Los campos de gravedad alrededor de los extremos de la lnea estn agrandados para hacer que le resulte ms fcil al diseador conectar las lineas por los extremos. Las posiciones seleccionadas en una de las reas circulares del campo de gravedad se vern atradas hasta el extremo correspondiente a dicha rea. El tamao de los campos de gravedad se selecciona de forma que sea lo suficientemente grande como para ayudaren el posicionamiento, pero lo suficientemente pequeo como para reducir las posibilidades de solapamienlo con otras lneas. Si se muestran muchas lneas, las reas de gravedad pueden solaparse y puede resultar difcil
FIGURA 11.10. Campo de gravedad alrededor de una lnea. Cualquier punto seleccionado en el rea sombreada se desplaza a una posicin sobre la lnea.
699
especificar los punios correctamente. Normalmente, los sistemas no muestran en pantalla las fronteras de estos campos de gravedad.
FIGURA 11.11. Una captura de pantalla que muestra un tipo de inlerfaz de un paquete para dibujo artstico. (Cortesa de Thomson Digital Imagc.)
FIGURA 11.12. Utilizando un visiocasco estreo, denominado BOOM (Fake Space Labs, Inc.) y un electroguante Dataglove(VPL, Inc.), un investigador manipula interactivamente una serie de sondas dentro del turbulento flujo que existe alrededor de un avin Harrier a reaccin. El software ha sido desarrollado por Steve Bryson; y los datos han sido proporcionados por Harrier. (Cortesa de Sam Uselton. NASA Ames Research Center.) Otro mtodo para generar escenas virtuales consiste en mostrar proyecciones estereogrficas sobre un monitor de barrido, visualizando las dos imgenes estereogrficas en ciclos de refresco alternativos. Entonces, la escena puede observarse mediante unas gafas estereogrficas. De nuevo, la manipulacin interactiva de los objetos puede llevarse a cabo con un electroguantc, utilizndose un dispositivo de seguimiento para monitorizar la posicin y orientacin del guante en relacin con la posicin de los objetos de la escena.
701
Este procedimiento de retrollamada para control del ratn, al que hemos denominado mouseFcn, tiene cuatro argumentos:
v o i d mouseFcn (GLint button, GLnt action, GLirtt GLint xMouse,
yMouse)
Al parmetro b u t t o n se le asigna una constante simblica L U T que denota uno de los tres botones del ratn, mientras que al parmetro a c t i o n se le asigna una constante simblica que especifica qu accin del botn podemos utilizar para disparar el suceso de activacin del ratn. Los valores permitidos para b u t t o n son G L U T L E F T B U T T O N , GLUTJv1IDDLE_BUTTON y G LUT_R I G HT_B UTTON (si slo disponemos de un ratn de dos botones, usaremos nicamente las designaciones correspondientes al botn izquierdo y al botn derecho; con un ratn de un nico botn, el nico valor que podemos asignar al parmetro b u t t o n es GLUT_LEFT_BUTTON). Al parmetro a c t i o n se le pueden asignar las constantes GLUT_D0WN o GLUT_UP, dependiendo de si queremos iniciar una accin cuando pulsemos el botn del ratn o cuando lo liberemos. Cuando se invoca el procedimiento mouseFcn, se devuelve la ubicacin del cursor del ratn dentro de la venlana de visualizacin. en forma de una pareja de coordenadas ( x M o u s e , y M o u s e ) . Esta ubicacin es relativa a la esquina superior izquierda de la ventana de visualizacin, de modo que xMouse ser la distancia en pxeles desde el borde izquierdo de la ventana de visualizacin e y M o u s e ser la distancia en pxeles desde el borde superior de la ventana de visualizacin. Activando un botn del ratn mientras el cursor se encuentra dentro de la ventana de visualizacin, podemos seleccionar una posicin para mostrar una primitiva, como por ejemplo un nico punto, un segmento de lnea o un rea de relleno. Tambin podemos utilizar un ratn como dispositivo de seleccin, comparando la posicin en pantalla devuelta con las extensiones de coordenadas de los objetos visualizados en la escena. Sin embargo, OpenGL proporciona otras rutinas para utilizar el ratn como dispositivo de seleccin, y hablaremos de esas rutinas en una seccin posterior. Como ejemplo simple de utilizacin de la rutina g l u t M o u s e F u n c , el siguiente programa dibuja un punto rojo, con un tamao de punto igual a 3, en la posicin del cursor dentro de la ventana de visualizacin; para dibujar el punto, debemos presionar el botn izquierdo del ratn. Puesto que el origen de coordenadas para las funciones primitivas OpenGL es la esquina inferior izquierda de la ventana de visualizacin, ser necesario invertir el valor y M o u s e devuelto en el procedimiento m o u s e P t P l o t .
#include GLsizei <GL/glut.h> winWidth = 400, winHeight 300; // // void init (void) Tamao de inicial de la ventana
viaualizacin.
{
glClearColor {0.0, 0.0, 1.0, 1.0) // // glMatrixMode gluOrtho2D (GL_PROJECTION); 200.0, 0.0, 150.0); Establecer azul como color ventana de visualizacin.
(0.0,
}
void { glClear glColor3f (GL_COLOR_BUFFER_BIT); (1.0, 0.0, 0.0); // // // Borrar ventana de visualizacin. c o l o r de punco. 3.0. displayFcn (void)
Establecer Definir
r o j o como de
glPointSize
)
(3.0);
tamao
punto
702
CAPTULO
11
Mtodos
v o i d winReehapeFcn
(GLint
newWidth,
GLint
newHeight)
{
/* Reinicial izar (0, 0, ( parmetros newWidth, ); GLdouble (newWidth), de 0.0, GLdouble (newHeight)); */ de proyeccin y visor */ glViewport newHeight);
(GL_PROJECTION);
{0.0,
tamao v e n t a n a d e v i s u a l i z a c i n .
winWidth winHeight
}
void plotPoint ( glBegin glEnd { (GL__P0INTS); (x, y); ); glVertex2i (GLint x, GLint y)
}
void mousePtPlot if (button mm (GLint button, GLint action, action yMouse); GLint == xMouse, GLint yMouae)
GLUT_DOWN)
plotPoint glFlush ( ) ;
}
void
f
main
(int
arge,
char** argv);
argv)
glutlnit
(&argc,
GLUT_RGB);
glutlnitWindowPosition
("Mouse
init
l
VA siguiente ejemplo de programa utiliza la entrada de ratn para seleccionar la posicin de un extremo de un segmento de lnea recta. Hn el programa se conectan segmentos de lnea seleccionados para ilustrar la construccin interactiva de una polilinea. Inicialmente. deben seleccionarse con el botn izquierdo del ratn dos ubicaciones dentro de la ventana de visualizacin para generar el primer segmento de lnea. Cada una de las posiciones subsiguientes que se seleccione agrega otro segmento a la polilinea. En la Figura 11.13 se proporciona una salida de ejemplo de este programa.
703
ttinclude GLsizei
< G L / g l u t . h> winWidth = 0,400, winHeight = 300; // // // Tamao extremos inicial de ventana v i s u a l i z a c i n . de puntos
GLint endPtCtr =
Inicializar
contador lneas.
class
scrPt
{ y;
public: GLint
};
void init (void)
{
glClearColor (0.0, 0.0, 1.0, 1.0) // // glMatrixMode glu0rtho2D } void displayFcn (void) (GL_PROJECTION); (0.0, 200.0, 0.0, 150.0); ' / Establecer azul como color ventana de visualizacin.
{
glClear (GL_COLOR_BUFFER_BIT);
}
v o i d winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Reinicializar (0, 0, ( parmetros newWidth, ) ; GLdouble (newWidth), 0.0, GLdouble (newHeight)); */ tamao d e la ventana de v i s u a l i z a c i n . de proyeccin y visor */ glViewport newHeight);
(GL_PRCJECTION);
(0.0,
%^^
704
CAPITULO 11
void
drawLineSegment
(scrPt
endPtl,
scrPt
endPt2)
glBegin
^^^^^^^^^^^^^^^^^^^^^^^^^^
void polyline (GLint b u t t o n , GLint action, GLint xMouse, GLint yMouee) static *f scrPt endPtl, { GLUT_LEFT_BUTTON = = 1; xMouse,winHeight yMouse; && action == GLUT_DOWN) { endPtZ;
(ptCtr if
= = 0 }
else if (button exit else if (button == GLUT_LEFT_BUTTON & & a c t i o n == GLUT_DOWN) { == (0); GLUT_RIGHT_BUTTON) // Salir del programs,
e n d P t 2 . x = xMouse;
endPt2.y = winHeight yMouse; endPt2); drawLineSegment endPtl else if (button exit glFlush ( ) ; == GLUT_RIGHT_BUTTON) // Salir del programa. = endPt2; (endPtl,
(0);
v o i d main
(int
argc,
char**
argv)
f
glutlnit (fitargc, argv) (GLUT_SINGLE (100, (winWidth, ("Draw | GLUT_RGB); 100); winHeight); Polyline"); glutlnitDisplayMode glutlnitWindowSize glutCreateWindow
glutlnitWindowPosition
Interactive
i n i t ( );
glutDisplayFunc glutReshapeFunc glutMouseFunc glutMainLoop { (displayFcn); (winReshapeFcn); (polyline); ) ;
705
Esta rutina invoea f c n D o S o m e t h i n g euando se mueve el ratn dentro de la ventana de visualizacin con uno o ms botones activados. La funcin que se invoca en este caso tiene dos argumentos:
void fcnDoSomething (GLint xMouse, GLint yMouse)
donde ( x M o u s e , y M o u s e ) es la ubicacin del ratn en la \ cotana de visualizacin, relativa a la esquina superior izquierda, cuando se mueve el ratn con un botn pulsado. De forma similar, podemos realizar alguna accin cuando movamos el ratn dentro de la ventana de visualizacin sin presionar un botn:
glutPassiveMotionFunc (fcnDoSomethingElse);
De nuevo, la ubicacin del ratn se devuelve a f c n D o S o m e t h i n g E l s e como la posicin de coordenadas ( x M o u s e , y M o u s e ) , relativa a la esquina superior izquierda de la ventana de visualizacin.
Al parmetro k e y se el asigna un valor de tipo carcter o el correspondiente cdigo ASCII. La ubicacin del ratn dentro de la ventana de visualizacin se devuelve como la posicin ( x M o u s e , y M o u s e ) , relativa a la esquina superior izquierda de la ventana de visualizacin. Cuando se pulsa una tecla designada, podemos utilizar la ubicacin del ratn para iniciar alguna accin, independientemente de si hay o no pulsado algn botn del ratn. En el siguiente cdigo, presentamos un procedimiento simple de dibujo de curvas utilizando la entrada de teclado. Se genera una curva a mano alzada moviendo el ratn dentro de la ventana de v isualizacin mientras se mantiene apretada la tecla c. Esto hace que se muestre una secuencia de puntos rojos en cada una de las posiciones registradas del ratn. Moviendo lentamente el ratn, podemos obtener una lnea curva continua. Los botones del ratn no tienen ningn efecto en este ejemplo. En la Figura 1 1 .14 se proporciona una salida de ejemplo del programa.
FIGURA 11.14. Una salida de ejemplo que muestra un dibujo a mano alzada generado mediante el procedimiento curveDrawing.
706
CAPTULO 11
<GL/glut.h> winWidth (void) = 400, winHeight = 300; // Tamao inicial ventana visualizacin.
init
{
glClearColor visualizacin. glMatrixMode gluOrtho2D (GL_PROJECTION>; 200.0, 0.0, 150.0); (0.0, 0.0, 1.0, 1.0); // Establecer azul como color ventana de
(0.0,
}
void displayFcn (void)
{
glClear glColor3f (GL_COLOR_j3UFFER_BIT} ; (1.0, 0.0, // 0.0); // // Borrar ventana rojo de de visualizacin. color de 3.0. punto.
Establecer tamao
como
glPointSize
(3.0);
Especificar
punto
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
(
/* Reinicializar (0, 0, ( parmetros newWidth, ); GLdouble (newWidth), 0.0, GLdouble (newHeight)); */ de proyeccin y visor */ glViewport newHeight);
(GL_PROJECTION);
(0.0,
tamao d e
la ventana de v i s u a l i z a c i n .
winWidth winHeight
}
void { glBegin glEnd ( (GL_POINTS); (x, y); ); plotPoint (GLint x, GL.int y)
glVertex2i
}
/* a void Mover el cursor */ (GLubyte curvePlotKey, GLint xMouse, GLint yMouse) mientras se pulsa la tecla c activa el dibujo de curvas mano a l z a d a .
curveDrawing
{
GLint GLint switch case x y * xMouse; winHeight yMouse;
plotPoint
707
g l P l u s h ( ) ,-
v o i d main
(int
argc,
char**
argv)
{
glutlnit (fcargc, a r g v ) ; g l u t l n i t D i s p l a y M o d e (GLUT_SINGLE glutlnitWindowPosition glutlnitWindowSize glutCreateWindow init ( ); (displayFcn); (winReshapeFcn); (curveDrawing) (100, (winWidth, ("Keyboard | GLUT_RGB); 100); winHeight); Example");
Curve-Drawing
) ;
Pun las teclas de funcin, teclas de Hecha y otras teclas de propsito especial, podemos utilizar el comando:
glucSpecialFunc (specialKeyFcn);
pero ahora al parmetro s p e c i a l K e y se le asigna una constante simblica GLUT de valor entero. Para seleccionar una tecla de funcin, utilizamos una de las constantes G L U T _ K E Y _ F l a GLUT_KEY _F12. Para las teclas de cursor, usamos constantes del estilo de G L U T _ K E Y J J P y G L U T _ K E Y _ R I G H T . Otras teclas pueden designarse mediante GLUT_KEY_PAGE_DOWN. GLUT_KEY_HOME y otras constantes similares para las teclas de RePg, Fin e Insert. Las teclas de retroceso, Supr y Esc pueden designarse mediante la rutina g l u t K e y b o a r d F u n c utilizando sus cdigos A S C I I , que son 8, 127 y 27, respectivamente. El siguiente fragmento de cdigo es un programa interactivo que ilustra el uso del ratn, el teclado y las teclas de funcin. La entrada de ratn se utiliza para seleccionar una ubicacin para la esquina inferior izquierda de un cuadrado rojo. La entrada de teclado se emplea para cambiar la escala del cuadrado y podemos obtener un nuevo cuadrado con cada clic del botn izquierdo del ratn.
ftinclude #inclue GLsizei <GL/glut.h> <stdlib.h> winWidth = 400, 10; winHeight = 300; // // // Tamao de inicial arista ventana v i s u a l i z a c i n . inicial para
GLint e d g e L e n g t h
Longitud el
cuadrado.
708
CAPTULO 11
void
init
{void)
{
glClearColor visualizacin. glMatrixMode gluOrtho2D (GL_PROJECTION); 200.0, 0.0, 150.0); (0.0, 0.0, 1.0, 1.0) // Establecer azul como color ventana de
(0.0,
}
void { glClear glColor3f (GL_COLOR_BUFFER_BIT); (1.0, 0.0, (GLint 0.0); // // Borrar ventana rojo de visualizacin. color de relleno. displayFcn (void)
Establecer GLint
como
}
void winReshapeFcn newWidth, de newHeight) y visor */
(
/* R e i n i c i a l i z a r parmetros (0, 0, { newWidth, ); GLdouble {newWidth), 0.0, GLdouble la ventana {newHeight)); de v i s u a l i z a c i n . */ (GL_PROJECTION); proyeccin glViewport newHeight);
(0.0,
tamao d e
winWidth winHeight
}
/* void Mostrar un cuadrado r o j o con un fillSquare {GLint b u t t o n , GLint tamao s e l e c c i o n a d o d e action, GLint xMouse, arista. GLint */
yMouse)
{
GLint /* * */ if { xl yl x2 y2 = = xMouse; winHeight xl yl + + (xl, yMouse; edgeLength; edgeLength; yl, x2, y2); (button == GtiUT_LEFT_BUTTON && action == GLUT_D0WN) xl, Usar la yl, x2, y2; del ratn para del s e l e c c i o n a r una p o s i c i n para botn izquierdo inferior
esquina
izquierda
cuadrado.
glRecti
}
else if salir. exit glFlush { ); (0); {button == QLUT_RIGHT_BUTTON) // Utilizar botn derecho del r a t n para
709
/*
Utilizar teclas
2,
y 4
para
agrandar
el
cuadrado.
*/
void enlargeSquare
(GLubyte
sizeFacto'r,
GLint xMouse,
GLint yMouse)
i
switch (sizeFactor)
{
case '2 ' : *= 2; edgeLength break; case '3 : *= 3;
1
/* void
Utilizar
t e c l a s de
funcin
F2
F4
para GLint
los
f a c t o r e s de GLint
reduccin
1/2
1/4.
reduceSquare
(GLint
reductionKey,
xMouse,
yMouse)
{
switch (reductionKey)
l
case GLUT_KEY_F2: /=* 2; edgeLength break; case GLUT_KEY_F3: /= 4; edgeLength break; default: break;
)
v o i d main (int argc, char** argv)
{
glutlnit (&argc, argv); (GLUT_SINGLE (100, (winWidth, ("Display | GLUT_RGB); 100); winHeight); of Various Sizes"); glutlnitDisplayMode glutlnitWindowSize glutCreateWindow init ( ); (displayFcn); (winReshapeFcn); (fillSquare); (enlargeSquare); (reduceSquare); ) ;
glutlnitWindowPosition
Squares
710
CAPTULO 11
y los argumentos para la funcin invocada son similares a los del caso del ratn: void tabletFcn (GLint tabletButton, GLint a c t i o n , GLint xTablet, GLint yTablet) Podemos designar un botn de la tableta mediante un identificador entero tal como I, 2, 3. etctera, y la accin correspondiente al botn se especifica, de nuevo, mediante GLUT_UP O GLUT_DOWN . Los valores devueltos x T a b l e t e y T a b l e t son las coordenadas de la tableta. Podemos determinar el nmero de botones de la tableta disponibles mediante el comando: glutDeviceGet fGLUT_NCJM_TABLET_BUTTONS) ; l*l movimiento de un cursor o un lpiz en la tableta se procesa mediante la siguiente funcin: glutTabletMotionFunc tabletMotionFcn);
donde la funcin invocada tiene la forma: void tabletMotionFcn (GLint xTablet, GLint yTablet)
La funcin de rctrollamada tiene dos parmetros: void spaceballFcn (GLint spaceballButton, GLint action) Los botones de la spaceball se identifican mediante los mismos valores enteros que para una tableta, y al parmetro a c t i o n se le asigna el valor GLUT_UP o GLUT_DOWN . Podemos determinar el nmero de botones de la spaceball disponibles mediante una llamada a g l u t D e v i c e G e t utilizando el argumento GLUT_NUM_ SPACEBAL)L__BUTTONS. MI movimiento de traslacin de una spaceball cuando el ratn se encuentra en la ventana de visualizacin se registra mediante la llamada de funcin: glutSpaceballMotionFunc (spaceballTranlFcn);
Las distancias de traslacin tridimensional se pasan a la funcin invocada, como por ejemplo: void spaceballTranslFcn (GLint t x , GLint ty, GLint t-z)
Estes distancias de traslacin estn normalizadas en el rango comprendido entre 1000 y OO. De forma similar, una rotacin de la spaceball se registra mediante: glutSpaceballRotateFunc (spaceballRotFcn);
Los ngulos de rotacin tridimensionales estarn entonces disponibles tambin para la funcin de retrollamada: void spaceballRotFcn (GLint thetaX, GLint thetaY, GLint thetaZ)
711
La activacin de un botn puede pasarse a la funcin invocada mediante los correspondientes parmetros:
void buttonBoxFcn {GLint button, GLint action);
Los botones se identifican mediante valores enteros y la accin realizada por el botn se especifica como: GLUT_UP O GLUT_DOWN.
En este caso, utilizamos la funcin de retrollamada para identificar el dial y obtener el ngulo de rotacin:
void dialsFcn (GLint dial, GLint degreeValue);
Los diales se designan mediante valores enteros y la rotacin del dial se devuelve como un valor entero que especifica los grados.
Tambin podemos utilizar una modificacin de estos procedimientos para seleccionar objetos sin necesidad de utilizar el ratn para la entrada interactiva. Esto se lleva a cabo especificando los vrtices del nuevo volumen de visualizacin, en lugar de designar una ventana de seleccin.
712
CAPTULO 11
Podemos definir una matriz que aete como bfer de seleccin mediante el comando:
glSelectBuffer (pickBufESize, pickBuffer);
Kl parmetro p i c k B u f f e r designa una matriz de enteros con p i c k B u f f S i z e elementos. La funcin g l S e l e c t B u f f e r debe invocarse antes de activar las operaciones OpenGL de seleccin (modo de seleccin). Para cada objeto seleccionado mediante una nica entrada de seleccin se registrar la correspondiente informacin dentro del bfer de seleccin, en forma de valores enteros. En el bfer de seleccin pueden almacenarse varios registros de informacin, dependiendo del tamao y de la ubicacin de la ventana de seleccin. Cada registro del bfer de seleccin contiene la informacin siguiente: (1) (2) (3) (4) La posicin del objeto en la pila, que es el nmero de idenlilicadores que hay en la pila de nombres, incluyendo la propia posicin del objeto seleccionad*). La profundidad mnima del objeto seleccionado. La profundidad mxima del objeto seleccionado. La lista de identificadores contenida en la pila de nombres, desde el primer identilicador (el de la parte inferior) basta el identilicador correspondiente al objeto seleccionado.
3 2
Los valores enteros de profundidad almacenados en el bfer de seleccin son los valores originales, comprendidos en el rango de 0 a 1.0, multiplicados por 2 1. Las operaciones de seleccin OpenGL se activan mediante:
glRenderMode (GL_SELECT);
I sto hace que el sistema se configure en modo de seleccin, lo que significa que se procese la escena a travs de la pipeline de visualizacin, pero el resultado no se almacena en el bfer de imagen. En lugar de ello, se almacena en el bfer de seleccin un registro de informacin para cada objeto que hubiera sido visualizado en el modo normal de representacin. Adems, este comando devuelve el nmero de objetos seleccionados, que ser igual al nmero de registros de informacin contenidos en el bfer de seleccin. Para volver al modo de representacin normal (el predeterminado) invocamos la rutina g l R e n d e r M o d e utilizando el argumento GL_RENDER . Una tercera opcin es el argumento G L F E E D B A C K , que almacena las coordenadas de los objetos y otras informaciones en un bfer de realimentacin sin visualizar los objetos. Este modo de realimentacin se utiliza para obtener informacin acerca de los tipos de las primitivas, los atributos y otros parmetros asociados con los objetos de una escena. Utilizamos la siguiente instruccin para activar la pila de nombres basados en identificadores enteros para las operaciones de seleccin:
glInitNames ( );
La pila de identificadores est inicialmente vaca y slo puede utilizarse en el modo de seleccin. Para almacenar un valor entero sin signo en la pila, podemos invocar la siguiente funcin:
glPushName (ID) ;
listo coloca el valor del parmetro ID en la parte superior de la pila y empuja el nombre previamente colocado en la primera posicin hasta la siguiente posicin de la pila. Tambin podemos simplemente sustituir la posicin superior de la fila utilizando:
g1LoadName (ID);
pero no podemos emplear este comando para almacenar un valor en una pila vaca. Para eliminar el elemento superior de la pila de identificadores, se utiliza el comando:
glPopName ( );
Para definir una ventana de seleccin dentro de un visor especificado se utiliza la siguiente funcin (LU:
713
LOS parmetros x P i c k e y P i c k proporcionan la ubicacin en coordenadas de pantalla de doble precisin correspondiente al centro de la ventana de seleccin, siendo esas coordenadas relativas a la esquina interior izquierda del visor. Cuando se introducen estas coordenadas mediante la entrada de ratn, las coordenadas del ratn se especifican de forma relativa a la esquina superior izquierda, por lo que ser necesario invertir el valor yMouse de entrada. Los valores de doble precisin para la anchura y la altura de la ventana de seleccin se especifican mediante los parmetros w i d t h P i c k y h e i g h t P i c k . El parmetro v p A r r a y designa una matriz de enteros que contiene las coordenadas y el tamao del visor actual. Podemos obtener los parmetros del visor utilizando la funcin g l G e t i n t e g e r v (Seccin 6.4). Esta ventana de seleccin se utiliza entonces como ventana de recorte para construir un nuevo volumen de visualizacin para las transformaciones de \ isualizacin. La informacin relativa a los objetos que intersecten este nuevo volumen de visualizacin se almacenar en el bfer de seleccin. Vamos a lustrar las operaciones de seleccin OpeniL en el siguiente programa, que visualiza los tres rectngulos de color que se muestran en la Figura 1 1 . i 5. Para este ejemplo de seleccin, utilizamos una ventana de seleccin 5 por 5, proporcionando el centro de la ventana de seleccin mediante la entrada de ratn. Por tanto, necesitaremos invertir el valor yMouse de entrada utilizando la altura del visor, que es el cuarto elemento de la matriz v p A r r a y . Asignamos al rectngulo rojo el valor II) = 30, al rectngulo azul el identificador ID = l() y al rectngulo verde el identitlcador ID = 20. Dependiendo de la posicin de entrada del ratn, podemos no seleccionar ningn rectngulo, seleccionar uno, seleccionar dos o seleccionar los tres a la vez. Los ident i Picadores de los rectngulos se introducen en la pila de identificadores segn su orden de color: rojo, azul, verde. Por tanto, cuando procesemos un rectngulo seleccionado, podemos utilizar su identificado!- 0 su nmero de posicin dentro de la pila. Por ejemplo, si el nmero de posicin en la pila, que es el primer elemento en el registro de seleccin, es 2, entonces habremos seleccionado el rectngulo azul y habr dos idenlillcadores de rectngulo especificados al final del registro. Alternativamente, podramos utilizar la ltima entrada del registro, que ser el identillcador del objeto seleccionado. En este programa de ejemplo, simplemente enumeramos el contenido del bfer de seleccin. Los rectngulos estn definidos en el plano .vv, de modo que todos los valores de profundidad son 0. En el Ejemplo 11.1 se proporciona una muestra de la salida para una posicin de entrada del ratn que se encuentre cerca de la frontera entre los rectngulos rojo y verde. No proporcionamos ningn mecanismo para terminar el programa, por lo que puede procesarse cualquier nmero de entradas de ratn.
FIGURA 11.15. Los tres rectngulos de color mostrados por el programa de seleccin de ejemplo.
GLint
Establecer
inicial
GLsizei void { /*
winWidth (void)
400,
winHeight
init
Especificar
blanco 1.0,
como 1.0,
color 1.0);
de
la ventana
de v i s u a l i z a c i n .
*/
glClearColor
(1.0,
I
/* void if Definir rects (mode 3 rectngulos y sus identificadores asociados. */ (GLenum mode) == GLJ3ELECT) (30); 0.0, 130, // Rectngulo 260); rojo. 0.0);
150,
1.0);
GL_SELECT) (20);
1.0,
glPushName
glC0lor3f
//
Rectngulo
0.0);
verde.
(0.0,
glRecti } /* void
(40,
40,
260,
130);
Imprimir el
bfer
de
s e l e c c i n para [
cada ])
seleccin del
ratn.
*/
processPicks
nPicks,
GLuint p i c k B u f f e r
(
GLint GLuint printf printf ptr /* */ for (j <= 0; = (" j < nPicks; j++) ( objID printf *ptr; Stack p o s i t i o n = %d\n", objID); = j, k; *ptr; objects picked %d\n" nPiaks); ObjID, ("
H
Number o f
M
P r o p o r c i o n a r como s a l i d a
("
Min
depth
%g,",
float
(*ptr/0x7fffffff});
("
Max
depth
%g\n",
float
(*ptr/0x7fffffff>)/
("
IDs
are:
\n"); k+ + ) {
(k printf
objID;
%d ' ' , * p t r ) ;
ptr+*;V
}
printf
}
("\n\n");
}
void pickRects GLuint (GLint b u t t o n , GLint action, GLint xMouse, GLint yMouse)
pickBuffer
vpArray
GLUT_LEFT_BUTTON
(pickBuffSize, ) ;
pickBuffer); // //
//
Designar las la
el pila
bfer de
de de
seleccin. seleccin.
(GL_SELECT);
Activar
operaciones
tnicializar
identificadores
matriz ( ); (
de
visualizacin
actual.
*/
glMatrixMode glPushMatrix
* una
ventana
invertir es el
la
visor,
cuarto
vpArray.
vpArray); GLdouble (vpArray [3] - yMouse), vpArray); 300.0); los rectngulos en el */ modo d e s e l e c c i n .
(xMouse),
gluOrtho2D rects /*
(0.0,
300.0, //
(GL_SELECT); Restaurar
Procesar
la matriz ;
de visualizacin
original.
glMatrixMode glPopMatrix
(GL_PROJECTION);
glFlush /* *
Determinar al modo d e
representacin normal.
nPickS
glRenderMode (nPicks, { ) ;
processPicks
glutPostRedisplay
void
displayFcn
(void)
(GL__RENDER) ; );
}
v o i d winReshapeFcn (GLint newWidth, GLint newHeight)
/*
Reinicializar (0, 0,
parmetros newWidth,
de
proyeccin
visor.
*/
glViewport
newHeight);
glMatrixMode glLoadldentity
(GL_PROJECTION>; ( ) ;
gluOrtho2D
(0.0,
300.0,
0.0,
300.0);
glMatrixMode /*
winWidth winHeight
v o i d main
(int
argc,
char**
argv)
glutlnit
(&argc,
argv);
(winWidth, ("Example
Pick
init ( );
glutDisplayFunc glutReshapeFunc glutMouseFunc (displayFcn); (winReshapeFcn); ( p i o k R e c t s ) ,-
glutMainLoop
);
717
Max d e p t h 5
are:
3 0
Max d e p t h 5
are:
donde el parmetro menuFcn es el nombre de un procedimiento que haya que invocar cuando se seleccione una entrada del men. Este procedimiento tiene un argumento, que ser el valor entero correspondiente a la posicin de una opcin seleccionada: void menuFcn (GLint menuItemNumber) El valor entero pasado mediante el parmetro menuItemNumber se utiliza entonces en la funcin menuFcn para realizar algn tipo de operacin. Cuando se crea un men, se le asocia con la ventana de visualizaron actual. Una vez designada la funcin de men que haya que invocar cuando se seleccione un elemento del men, deberemos especificar las opciones que haya que enumerar dentro del men. Podemos hacer esto con una serie de instrucciones que indiquen el nombre y la posicin de cada opcin. Estas instrucciones tienen la forma general:
glutAddMenuEntry (charString, menuItemNumber);
El parmetro c h a r S t r i n g especifica el texto que hay que visualizar en el men, mientras que el parmetro menuItemNumber indica la ubicacin de dicha entrada dentro del men. Por ejemplo, las siguientes instrucciones crean un men con dos opciones:
glutCreateMenu (menuFcn);
A continuacin, debemos especificar el botn del ratn que hay que utilizar para seleccionar una opcin del men. Esto se realiza mediante:
glutAttachMenu (button);
donde al parmetro b u t t o n se le asigna una de las tres constantes simblicas GLUT que hacen referencia a los botones izquierdo, central y derecho del ratn. Para ilustrar la creacin y utilizacin de un men GLUT, el siguiente programa proporciona dos opciones para visualizar el relleno interior de un tringulo. Inicialmente. el tringulo est definido con dos vrtices blancos, un vrtice rojo y un color de relleno determinado por la interpolacin de los colores de los vrtices. Utilizamos la funcin g l s h a d e M o d e l (Secciones 4.14 y 10.20) para seleccionar un relleno del polgono que puede ser un color homogneo o una interpolacin (representacin de Gouraud) de los colores de los vrtices. En este programa creamos un men que nos pennite elegir entre las dos opciones utilizando el botn derecho del ratn, cuando el cursor del ratn se encuentre dentro de la ventana de visualizacin. Este men emergente se muestra con la esquina superior izquierda situada en la posicin del cursor del ratn, como se ilustra en la Figura 11.16. Las opciones de men se resaltarn cuando situemos el cursor del ratn sobre ellas. La opcin resaltada puede entonces seleccionarse liberando el botn derecho. Si se selecciona la opcin Salid-Color FUI, el tringulo se rellenar con el color especificado para el ltimo vrtice (que es el rojo). Al final del procedimiento de visualizacin del men, f i l l O p t i o n , incluimos un comando g l u t P o a t R e d i s p l a y (Seccin 6.4) para indicar que es necesario redibujar el tringulo cuando se visualice el men.
<GL/glut.h> winWidth red = = 400, green winHeight = 1.0, = blue 400; = /'/ 1.0; Tamao // inicial ventana visualizacin. del tringulo:
1.0,
Color
inicial
fillMode
GL_SMOOTH;
//
Relleno
inicial
del
polgono:
interpolacin
de
colores. void init (void) (0.6, 0.6, 0.6, 1.0); // Establecer gris como color ventana de
(0.0,
}
void fillOption (GLint selectedOption) { GL_FLAT; GL_SM00TH; break; break; // // Representacin plana de superficies, R e p r e s e n t a c i n de Gouraud.
I
glutPoatRedisplay ( ) ;
}
void displayTriangle (void)
719
glClear
{GL_COLOR_BUFFER_BIT); (fillMode); green, blue); // // Establecer Establecer mtodo de r e l l e n o para los primeros tringulo. dos v r t i -
(red,
color para
(GLJTRIANGLES) ; (280, (160, (red, (20, 20); 280); 0.0, 100); 0.0); // Asignar rojo como color del ltimo vrtice.
); { )i
void {
reshapeFcn
(GLint (0, 0,
newWidth,
GLint
newHeight)
glViewport
newWidth,
newHeight);
(0.0, );
displayTriangle
arge,
char argv);
**argv)
(&argc,
GLUT_RGB);
glutlnitWindowPosition ("Menu
200); winHeight);
Example");
glutDisplayFunc glutCreateMenu
glutAddMenuEntry glutAddMenuEntry /*
("Solid-Color
Fill",
("Color-Interpolation
Seleccionar opcin de
men u t i l i z a n d o e l
(GLUT_RIGHT_BUTTON); (reshapeFcn); );
720
CAPTULO 11
FIGURA 11.16. Men OpenGL emergente mostrado por el programa de ejemplo de gestin de menus.
El men recin creado se convertir en el men actual para la ventana de visualizacin actual. Para activar un men en la ventana de visualizacin actual, se utiliza la instruccin:
glutSetMenu (menuID);
Este men se convertir entonces en el men actual, que emerger dentro de la ventana de visualizacin cuando se pulse el botn del ratn que se haya asociado a dicho men. Podemos eliminar un men mediante el comando:
glutDestroyMenu (menuID);
Si el men especificado es el men actual de una ventana de visualizacin, entonces dicha ventana no tendr ningn men asignado como men actual, aun cuando existan otros mens. Para obtener el identificador del men actual de la ventana de visualizacin actual se utiliza la siguiente funcin:
currentMenuID = glutGetMenu ( );
Se devolver un valor 0 si no hay ningn men para esta ventana de visualizacin o si el men actual anterior ha sido eliminado mediante la funcin g l u t D e s t r o y M e n u .
721
cipal. Podemos aadir el submen a la lista de opciones de un men principal (o de otro submen) utilizando una secuencia de instrucciones tal como:
submenuID = glutCreateMenu glutAddMenuEntry ("First (submenuFcn); Submenu Item"
i);
glutCreateMenu
glutAddMenuEntry
glutAddSubMenu
("Submen Option",
submenuID);
La funcin g l u t A d d S u b M e n u puede tambin utilizarse para aadir el submen al men actual. Vamos a ilustrar la creacin de un submen en el siguiente programa. Este programa, que es una modificacin del programa anterior de gestin de mens, muestra un submen que proporciona tres opciones de color (azul, verde y blanco) para los primeros dos vrtices del tringulo, lil men principal se visualizar ahora con tres opciones, y la tercera de ellas incluye un smbolo de flecha para indicar que aparecer un submen desplegable cuando se resalte dicha opcin, como se muestra en la Figura H . I 7 . Se incluye una funcin g l u t P o s t R e d i s p l a y tanto al final de la funcin correspondiente al men principal, como de la funcin correspondiente al submen.
FIGURA 11.17. Fl men emergente principal OpenGL y el correspondiente submen mostrados por el programa de ejemplo de definicin de submens.
include GLsizei GLfloat <GL/glut.h> winWidth red = = 400, green winHeight = 1.0, = blue 400; = // 1.0; Tamao // // inicial de ventana visualizacin. color de iniciales. relleno.
1.0,
Valores Mtodo
inicial
{ glClearColor (0.6, 0.6, 0.6, 1.0); // // glMatrixMode gluOrtho2D (GL_PROJECTION); (0.0, 300.0, 0.0, 300.0); Establecer gris como c o l o r ventana visualizacin.
void
mainMenu
(GLint
Milli
/* void
glutPoBtRedisplay
) ;
color de
acuerdo con
la opcin del
submenu
colorOption)
{
switch case (colorOption) 1: = 0.0; green
m
{
glutPostRedisplay ( );
)
void displayTriangle (void)
{
glClear (GL_COLOR_BUFFER_BIT); (renderingMode); //
glShadeModel
mtodo el
de
relleno de los
para
//
glColor3f (red, green, blue); //
//
glBegin (GLJTRIANGLES); (280, (160, (1.0, (20, 20); 280); 0.0, 100); 0.0); // glVertex2i glVertex2i glColor3f
c e .
Seleccionar
rojo
como
color
del
ltimo
vrti-
glVertex2i glEnd ( ) ; ( ;
glFlush
723
void
reshapeFcn
(GLint (0, 0,
newWidth, newWidth,
GLnt
newHeight)
!
glViewport newHeight); glMatrixMode glLoadldentity gluOrtho2D (GL_PROJECTION); ( ); GLfloat ( ); (newWidth), 0.0, GLfloat {newHeight});
(0.0,
displayTriangle glFlush ( );
void {
main
tint
argc,
char
**argv)
//
i d e n t i f i c a d o r para
el
submenu,
GLUT_RGB);
gltlnitwindowPosition
2 0 0 ) ,winHeight); Example");
("Submenu
glutDisplayFunc subMenu =
(displayTriangle) (colorSubMenu); 1); 2); 3) ,C r e a r men Fill", principal 1); Fill", 2).,emergente.
glutCreateMenu
(mainMenu);
("Solid-Color
ratn.
*/
724
CAPTULO 11
Al parmetro m o u s e B u t t o n se le asigna la constante GLUT que identifique el botn izquierdo, derecho o central que hubiera sido previamente asociado con el men. Tambin pueden modificarse las opciones definidas dentro de un men existente. Por ejemplo, podemos borrar una opcin del men actual mediante la funcin:
glucRemoveMenuItem (itemNumber);
donde al parmetro i t e m N u m b e r se le asigne el valor entero de la opcin de men que haya que borrar, Otras rutinas GLUT nos permiten modificar los nombres o el estado de los elementos de un men existente. Por ejemplo, podemos utilizar estas rutinas para cambiar el nombre con el que se visualiza una opcin de men, para cambiar el nmero de elemento asignado a la opcin o para transformar una opcin en un submen.
Ventanas e iconos
La Figura 11.18 muestra ejemplos de interfaces grficas tpicas. Se utilizan representaciones visuales tanto para los objetos que hay que manipular en la aplicacin como para las acciones que hay que realizar sobre los objetos de la aplicacin. Adems de las operaciones estndar de gestin de las ventanas de visualizacin, como son las de apertura, cierre, posicionamicnto y cambio de tamao, tambin hacen falta otras operaciones para trabajar con los deslizadores, botones, iconos y mens. Algunos sistemas pueden soportar mltiples gestores de ventanas con el fin de utilizar diferentes estilos de ventana, cada uno con su propio gestor, que podran estar estructurados de forma especial para una aplicacin concreta.
725
1 Si
1
3
o c a ra
(a) (b)
FIGURA 11.18. Ejemplos de disposiciones de pantalla que utilizan ventanas de visualizacin, menus e iconos. (Cortesa de (a) Intergraph Corporation; (b) Visual Numerics, Inc.; (c) Sun Microsystems.) Los iconos que representan objetos tales como paredes, puertas, ventanas y elementos de circuito se suelen denominar iconos de aplicacin. Los iconos que representan acciones, como por ejemplo rotar, magnificar, cambiar de escala, recortar o pegar, se denominan iconos de control o iconos de comando.
726
CAPTULO 11
De forma similar, las facilidades de ayuda pueden disearse con distintos niveles de modo que los principiantes puedan embarcarse en un dilogo detallado, mientras que los usuarios ms experimentados pueden reducir o eliminar los mensajes indicativos. Las facilidades de ayuda tambin pueden incluir una o ms aplicaciones de ejemplo, que proporcionen a los usuarios una introduccin a las capacidades y ai modo de utilizacin del sistema.
Coherencia
Una consideracin de diseo importante en una interfaz es la coherencia. Una cierta forma de icono debe tener siempre el mismo significado, en lugar de utilizarse para representar diferentes acciones u objetos dependiendo del contexto. Otros ejemplos de coherencia que podramos citar son colocar los menus en las mismas posiciones relativas, de modo que el usuario no tenga que andar buscando una opcin concreta; utilizar siempre la misma combinacin de teclas para una accin y emplear siempre la misma codificacin de color, de modo que un cierto color no tenga diferentes significados en las distintas situaciones.
Minimization de la memorizacin
Las operaciones de la interfaz deben estar tambin estructuradas de modo que sean fciles de comprender y de recordar. Los formatos de comando extraos, complicados, incoherentes y abreviados conducen a la confusin y a una reduccin en las capacidades de aplicar el software de manera efectiva. Por ejemplo, una tecla o botn utilizados para todas las operaciones de borrado son ms fciles de recordar que un conjunto de diferentes teclas que se empleen para diferentes tipos de procedimientos de borrado. Los iconos y sistemas de ventana tambin pueden organizarse para reducir las necesidades de memorizacin. Los diferentes tipos de informacin pueden separarse en diferentes ventanas, de modo que el usuario pueda identificar y seleccionar fcilmente los elementos. Los iconos deben disearse de manera que sus formas sean fcilmente reconocibles y estn relacionadas con los objetos y acciones de la aplicacin. Para seleccionar una accin concreta, el usuario debe poder seleccionar el icono que recuerde a esa accin.
Realimentacin
Otra caracterstica importante de las interfaces es que deben responder a las acciones de los usuarios, particularmente en el caso de los usuarios no experimentados. A medida que se introduce cada accin, debera darse algn tipo de respuesta. En caso contrario, el usuario puede comenzar a preguntarse qu es lo que el sistema est haciendo y si debe volver a introducir los datos. La realimentacin puede proporcionarse de muchas formas, como por ejemplo resaltando un objeto, mostrando un icono o un mensaje o visualizando una opcin de men seleccionada en un color distinto. Cuando el procesamiento de una accin solicitada sea largo, la visualizacin de un mensaje parpadeante, de un reloj,
II
Resumen
727
de un reloj de arena o de algn otro indicador de progreso tiene una importancia crucial. Tambin puede ser posible que el sistema muestre resultados parciales a medida que se completan, de modo que la imagen final se construye de elemento en elemento. El sistema podra tambin permitir a los usuarios introducir otros comandos u otros datos mientras se est procesando una instruccin. Se utilizan diseos estndar de ciertos smbolos para determinados tipos de realimentacin. Para indicar un error, se utiliza a menudo un aspa, una cara con las cejas fruncidas o un puo con el pulgar hacia abajo, mientras que para indicar que se est procesando una accin suele empicarse algn lipo de smbolo relacionado con el tiempo o alguna seal parpadeante que indique que el sistema est trabajando. Este tipo de realimentacin puede ser muy efectiva con un usuario experto, pero es posible que los principiantes necesiien una realimentacin ms detallada que no slo indique claramente qu es lo que el sistema est haciendo, sino tambin lo que el usuario debe introducir a continuacin. La claridad es otro aspecto de gran importancia en la realimentacin. Las respuestas deben ser claramente comprensibles, pero no tan detalladas que interrumpan la concentracin del usuario. Con las teclas de funcin, la realimentacin puede proporcionarse en forma de un clic audible o iluminando la tecla que ha sido pulsada. La realimenlacin sonora tiene la ventaja de que no ocupa espacio de pantalla y no distrae la atencin del usuario del rea de trabajo. Tambin puede utilizarse un rea de mensajes lija, de modo que el usuario siempre sepa dnde buscar los mensajes, aunque en otras ocasiones pueden que sea ventajoso colocar los mensajes de realimenlacin en el rea de trabajo, cerca del cursor. Los mensajes de realimenlacin pueden tambin mostrarse en diferentes colores, para distinguirlos de los restantes objetos visualizados. La realimenlacin de eco resulta til en muchas ocasiones, particularmente para la entrada desde teclado, de modo que puedan detectarse rpidamente los errores. Las entradas de bolones y diales pueden proporcionarse de la misma como eco. Los valores escalares seleccionados con diales o con reguladores virtuales (representados en pantalla) suelen mostrarse como eco en la pantalla para que el usuario pueda comprobar la precisin de los valores introducidos. La seleccin de puntos de coordenadas puede tambin proporcionarse como eco mediante un cursor o un smbolo que aparezca en la posicin seleccionada. Para proporcionar un eco ms preciso de las posiciones seleccionadas, los valores de las coordenadas podran tambin mostrarse en la pantalla.
11.9 RESUMEN
La entrada de los programas grficos puede provenir de muchos tipos distintos de dispositivos hardware, pudiendo haber ms de un dispositivo proporcionando la misma clase general de datos de entrada. Las funciones de entrada de los paquetes grficos se suelen disear para que sean independientes del hardware, adoptando una clasificacin lgica de los dispositivos de entrada. Entonces, los dispositivos se especifican tic acuerdo con el tipo de entrada grfica. Los seis tipos de dispositivos lgicos utilizados en los estndares ISO y ANSII son los dispositivos localizadores, de trazado, de cadena, evaluadores, de eleccin y de seleccin. Los dispositivos localizadores introducen una nica posicin de coordenadas. Los dispositivos de trazado proporcionan como entrada un flujo de coordenadas. Los dispositivos de cadena proporcionan como entrada cadenas de texto. Los dispositivos evaluadores se utilizan para introducir valores escalares. Los dispositivos de eleccin se utilizan para elegir opciones de men. Por su parte, los dispositivos selectores permiten seleccionar componentes de la escena. Los paquetes grficos independientes de los dispositivos incluyen un conjunto limitado de funciones de entrada que se definen en una biblioteca auxiliar. Para las funciones de entrada se utilizan comnmente tres modos distintos. El modo de solicitud coloca la entrada bajo control del programa de aplicacin. El modo de muestren permite que los dispositivos de entrada y el programa operen concurrentemenle. El modo de sucesos permite que los dispositivos de entrada inicien la introduccin de datos y controlen el procesamiento de los mismos. Una vez elegido un modo para una clase de dispositivo lgico y el dispositivo fsico concreto que hay que utilizar para introducir dicha clase de dalos, se utilizan las funciones de entrada para introducir los valores de ios datos dentro del programa. Un pro-
728
CAPTULO 11
grama de aplicacin puede introducir simultneamente varios dispositivos de entrada fsicos que operen en diferentes modos. Los mtodos interactivos de construccin de imgenes se utilizan comnmente en diversas aplicaciones, incluyendo los paquetes de diseo y de dibujo. Estos mtodos proporcionan a los usuarios la capacidad de especificar las posiciones de los objetos, restringir los objetos para que adopten orientaciones o alineaciones predefinidas y dibujar o pintar interactivamente objetos en una escena. Se utilizan mtodos tales como las cuadrculas, los campos de gravedad y los mtodos de banda elstica corno ayuda durante el posicionamiento y durante la realizacin de otras operaciones de generacin de imgenes. Las interfaces grficas de usuario son ahora una caracterstica estndar de las aplicaciones software. El software se basa en un procedimiento de dilogo diseado a partir del modelo del usuario, que describe el propsito y la funcin del paquete de aplicacin. Todos los elementos de ese procedimiento de dilogo se presentan en el lenguaje de la aplicacin. Los sistemas de ventanas proporcionan una interlaz tpica, con procedimientos para manipular las ventanas de visualizacin, los mens y los iconos. Pueden disearse sistemas de gestin de ventanas generales que soporten mltiples gestores de ventanas. Las principales preocupaciones a la hora de disear un procedimiento de dilogo con el usuario son la facilidad de uso, la claridad y la flexibilidad. Especficamente, las interfaces grficas se disean tratando de mantener la coherencia en las interacciones con el usuario y de adaptarse a los diferentes niveles de experiencia de los distintos usuarios. Adems, las interfaces se disean para tratar de reducir los esfuerzos de memorizacin por parte del usuario, para proporcionar una realimentacin suficiente y para proporcionar unas capacidades adecuadas de cancelacin de acciones y de tratamiento de errores. En GLUT (Utility Toolkil), hay disponibles funciones de entrada para dispositivos interactivos tales como ratones, tabletas, spaceballs, cajas de botones y cajas de diales. Adems, GLUT proporciona una funcin para aceptar una combinacin de valores de entrada procedentes de un ratn y un teclado. Las operaciones de seleccin pueden realizarse utilizando funciones de la biblioteca GLU y de la biblioteca bsica OpenGL. Tambin podemos mostrar mens emergentes y submens utilizando un conjunto de funciones de la biblioteca GLUT. En las Tablas 11.1 y 1 1 . 2 se proporciona un resumen de las funciones de entrada y de mens de OpenGL. TABLA 11,1. RESUMEN DE FUNCIONES DE ENTRADA 0p< Funcin
glutMouseFunc
Descripcin Especifica una funcin de retrollamada para el ratn que ser invocada cuando se pulse un botn del ratn. Especifica una funcin de retrollamada para el ratn que ser invocada cuando se mueva el cursor del ratn mientras est pulsado un botn. Especifica una riincin de retrollamada para el ratn que ser invocada cuando se mueva el cursor del ratn sin presionar un botn. Especifica una funcin de retrollamada para el teclado que ser invocada cuando se pulse una tecla estndar. Especifica una funcin de retrollamada para el teclado que ser invocada cuando se pulse una tecla de propsito especial (por ejemplo, una tecla de funcin). Especifica una funcin de retrollamada para una tableta que ser invocada cuando se pulse un boln de la table mientras el cursor del ratn se encuentra en una ventana de visualizacin.
Contina
glutMotionFunc
glutPassiveMotionFunc
g 1 u t K e y b o a r d Func
glutSpecialFunc
glutTablecBuctonFunc
11.9 Resumen
729
TABLA 11.1.
Funcin
glutTabletMotionFunc
Descripcin
Especifica una funcin de reirollamada para una tableta que ser invocada c u a n d o se mueva el cursor o el lpiz de la tableta mientras el cursor del ratn se encuentra en una ventana de visualizacin.
glutSpaceballButtoxiFunc
Especifica una funcin de retrollamada para una spaceball que ser invocada c u a n d o se pulse un botn de la spaceball mientras el cursor del ratn se encuentra en una ventana de visualizacin, o bien utilizando algn otro m t o d o de activacin de ventanas de visualizacin.
glutSpaceballMotionFunc
Especifica una funcin de retrollamada para una c u a n d o s e produzca un m o v i m i e n t o giratorio de na de visualizacin activada.
glutButtonBoxFunc
Especifica una funcin de retrollamada para cajas de botones que ser invocada cuando se pulse un botn.
glutDialsFunc
Especifica una funcin de retrollamada para un dial que ser invocada cuando se gire un dial.
glSelectBuffer glRenderMode
Especifica el tamao y el nombre del bfer de seleccin. Activa las operaciones de seleccin utilizando el argumento G L _ S E L E C T . Esta funcin tambin se utiliza para activar el m o d o de representacin normal o el m o d o de realimentacin.
A c t i v a la pila de nombres idcntificadores de los objetos. Introduce un identillcador de un objeto en la pila de identificadores. Sustituye el identillcador situado en la parte superior de la pila por otro valor especificado.
glPopName gluPickMatrix
Elimina el elemento superior de la pila de identificadores. Define una ventana de seleccin y construye un nuevo volumen de visualiz a c i n para las operaciones de s e l e c c i n .
Funcin
glutcreateMenu
Descripcin
r e a u n m c n u
do se s e l e c c i o n e un elemento del men; se asigna un identillcador entero al men creado. glutAddMenuEntry glutAttachMenu Especifica una opcin que hay que incluir en un men emergente. Especifica el botn del ratn que se utilizar para seleccionar las opciones de men.
Contina
730
CAPTULO 11
RESUMEN DE FUNCIONES DE MEN OpenGL {Cont.) Descripcin Especifica el men actual para la ventana de visuali/aein actual. Especifica el identificador de un men que se quiere eliminar. Devuelve el identificador del men actual asociado a la ventana actual.
" l
Rspecilica un submen que hay que incluir en otro men, debiendo haberse definido el submen indicado mediante la ruina glutCreateMenu. Cancela la asociacin especificada de botn de ratn para el men actual. Borra una opcin especificada en el men actual.
glutDetaehMenu glutRemoveMenuItem
REFERENCIAS
La evolucin del concepto de los dispositivos de entrada lgicos (o virtuales) se analiza en Wallace (1076) y en Rosenthal, Micbener, Pfaff, Kessener y Sabin (1982). Puede encontrar implemcntaciones para diversos procedimientos de entrada en Glassner (1990), Arvo (1991), Kirk (1992), Heckbert (1994) y Paeth (1995). Tambin puede encontrar ejemplos tradicionales de programacin utilizando la entrada de ratn y de teclado en Woo, Neider, Davis y Shreiner (1999). Para ver una lista completa de funciones de la biblioteca bsica OpenGL y de la biblioteca GLU, consulte Shreiner (2000). Las funciones de entrada y de mens de GLUT se tratan con detalle en Kilgard (1996). Puede encontrar directrices para el diseo de interfaces de usuario en Shneiderman (1986), Apple (1987), Bleser (1988), Brown y Cunningham (1989), Digital (1989), OSE/MOT1E (1989) y Laurel (1990). Para obtener informacin sobre el sistema XWindow, consulte Young (1990) y Culler, Gilly y Reilly (1992).
EJERCICIOS
11.1 Disee un algoritmo que permita situar objetos en la pantalla utilizando un dispositivo localizador. May que presentar un men de objetos con fonnas geomtricas al usuario, el cual seleccionar un objeto y la posicin donde hay que colocarlo. El programa debe permitir la colocacin de un nmero arbitrario de objetos, hasta que se proporcione una seal de terminacin. Ample el algoritmo del ejercicio anterior para poder cambiar la escala de los objetos y girarlos antes de colocarlos. Las opciones de transformacin y los parmetros de transformacin deben presentarse al usuario como opciones de men. Detina un procedimiento para dibujar interactivamente objetos utilizando un dispositivo de trazado. Explique los mtodos que podran emplearse en un procedimiento de reconocimiento de patrones para hacer corresponder los caracteres de entrada con una biblioteca almacenada de formas. Escriba una rutina que muestre una escala lineal y un deslizador en la pantalla y que permita seleccionar valores numricos posicionando el deslizador a lo largo de la escala. Debe proporcionarse como eco el valor numrico seleccionado, dentro de un recuadro que se muestre cerca de la escala lineal. Escriba una rutina que muestre una escala circular y un puntero o un deslizador que puedan moverse por el crculo con el fin de seleccionar ngulos (en grados). Debe proporcionarse como eco el valor angular seleccionado, dentro de un recuadro que se muestre cerca de la escala circular.
11.2
I \ .3 11.4 11.5
11.6
Ejercicios 11.7
731
Escriba un programa de dibujo que permita a los usuarios crear una imagen mediante un conjunto de segmentos lineales dibujados entre puntos especificados. Las coordenadas de los segmentos de linea individuales se seleccionarn mediante un dispositivo localizador. Escriba un programa de dibujo que permita crear imgenes mediante segmentos de linea recta dibujados entre puntos especificados. Defina un campo de gravedad alrededor de cada lnea de la imagen, como ayuda para conectar las nuevas lincas con las lneas existentes. Modifique el programa de dibujo del ejercicio anterior para poder restringir las lneas horizontal o verticalmente.
11.8
11.9
11.10 Escriba un programa de dibujo que pueda mostrar un patrn de cuadrcula opcional, de modo que las posiciones de pantalla seleccionadas se ajusten para que coincidan con intersecciones de la cuadrcula. El programa debe proporcionar capacidades de dibujo de lneas, seleccionndose los extremos de las lneas mediante un dispositivo localizador. lili 11.12 Escriba una rutina que permita al diseador crear una imagen dibujando lincas rectas mediante un mtodo de banda elstica. Disee un programa de dibujo que permita construir lneas rectas, rectngulos y crculos utilizando mtodos de banda elstica.
11.13 Escriba un procedimiento que permita al usuario seleccionar componentes de una escena bidimensional. Las extensiones de coordenadas de cada objeto deben almacenarse y utilizarse para identificar el objeto seleccionado a partir de la posicin del cursor suministrada como entrada. 11.14 Desarrolle un procedimiento que permita al usuario disear una imagen a partir de un men de formas bsicas visualizadas, arrastrando cada forma seleccionada hasta su posicin de destino mediante un dispositivo de seleccin.
11.15 Disee una implementacin de las funciones de entrada para el modo de solicinid. 11.16 Disee una implementacin de las funciones de entrada para el modo de muestreo. 11.17 Disee una implementacin de las funciones de entrada para el modo de sucesos. 11.1X Il.lv Disee un procedimiento para implemenlar funciones de entrada para los modos de solicitud, muestreo y sucesos. Ample el programa OpenGL de dibujo de puntos de la Seccin 11.6 para incluir un men que permita al usuario seleccionar el tamao del punto y el color del punto. 11.20 Ample el programa OpenGL de polilineas de la Seccin 11.6 para incluir un men que permita al usuario seleccionar los atributos de la lnea: tamao, color y anchura. 11.21 Modifique el programa del ejercicio anterior para que se pueda elegir un patrn de textura para la polilnea, 11.22 Escriba un programa OpenGL interactivo para mostrar un rectngulo de 100 por 100 pxeles en cualquier posicin que se suministre como entrada, dentro de una ventana de visualizacin. La posicin de entrada ser el centro del rectngulo. Incluya un men de opciones de color para mostrar el rectngulo con un color homogneo. 11.23 Modifique el programa del ejercicio anterior de modo que se rechace la posicin de entrada si no se puede mostrar todo el rectngulo dentro de la ventana de visualizacin. 11.24 Modifique el programa del ejercicio anterior para incluir un men de opciones de textura para el rectngulo. Utilice como mnimo dos patrones de textura. 11.25 Disee un programa OpenGL interactivo para mostrar una cadena de caracteres de entrada en cualquier posicin dentro de una ventana de visualizacin. La posicin de entrada ser la posicin de inicio del texto, 11.26 Escriba un programa OpenGL interactivo para posicionar un nico objeto bidimensional en cualquier posicin dentro de una ventana de visualizacin. El objeto se seleccionar de entre un men de formas bsicas, que deber incluir (como mnimo) un cuadrado, un crculo y un tringulo. 11.27 Modifique el programa del ejercicio anterior para permitir que se visualice cualquier composicin de los anteriores objetos bidimensionales, seleccionndose cada objeto del men hasta que se elija la opcin de men que permita abandonar el programa.
732 CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario 11-28 Modifique el programa del ejercicio anterior para permitir cambiar la escala de los objetos o girarlos. Las operaciones de transformacin geomtrica debern enumerarse en un men.
11.29 Escriba un programa OpenGL interactivo para posicionar un nico objeto tridimensional dentro de una ventana de visualizacin. E] objeto se seleccionar en un men de slidos GLUT almbricos, compuesto por ejemplo de una esfera, un cubo y un cilindro, y deber estar centrado el objeto en la posicin que se indique como entrada. 11.30 Modifique el programa del ejercicio anterior para poder visualizar los objetos en modo slido o almbrico. Para la visualizacin de objetos slidos, incluya una fuente de luz puntual en la posicin de visualizacin y utilice los parmetros predeterminados de iluminacin y de sombreado superficial. 11.31 Escriba un programa para implementar las operaciones de seleccin OpenGL para una escena tridimensional que contenga varios objetos. Para cada seleccin, cree una pequea ventana de seleccin y traiga al frente el objeto ms distante contenido dentro de dicha ventana de seleccin.
11.32 Escriba un programa OpenGL interactivo para mostrar una curva de lzier cbica bidimensional. Las posiciones de los cuatro puntos de control se seleccionarn mediante el ratn. 11.33 Modifique el programa del ejercicio anterior para mostrar una curva de Bzier cuyo grado ser seleccionable, pudiendo ser de grado tres, cuatro o cinco. 11.34 11.35 Escriba un programa OpenGL interactivo para mostrar una B-spline cbica bidimensional. Los parmetros de la spiine se proporcionarn como entrada y los puntos de control se seleccionarn con el ratn. Escriba un programa OpenGL interactivo para mostrar un parche superficial cbico de Bzier. Las coordenadas x ey de los puntos de control podrn seleccionarse con el ratn y la coordenada z puede proporcionarse como una altura por encima de un plano de tierra.
11.36 Seleccione alguna aplicacin grfica con la que est familiarizado y defina un modelo de usuario que pueda servir como base para el diseo de una interfaz de usuario para las aplicaciones grficas utilizadas en dicha rea. 11.37 Enumere las posibles facilidades de ayuda que pueden proporcionarse en una interfaz de usuario y explique que tipos de ayuda son ms apropiados para los distintos niveles de experiencia de los usuarios.
11.38 Resuma los mtodos utilizados para el tratamiento de errores y para la cancelacin de operaciones. Qu mtodos son adecuados para un principiante? Qu mtodos son mejores para un usuario experimentado? 11.39 Enumere los posibles formatos de presentacin de meniis a un usuario y explique en qu circunstancias puede ser apropiado para cada uno 11.40 Explique las alternativas de realimentacin existentes en relacin con los diversos niveles de experiencia de los usuarios. 11.41 11.42 Enumere las funciones que debe proporcionar un gestor de ventanas para gestionar la disposicin de pantalla cuando existen mltiples ventanas solapadas. Disee un paquete de gestin de ventanas.
11.43 Disee una interfaz de usuario para un programa de dibujo. 11.44 Disee una interfaz de usuario para un paquete de modelado jerrquico de dos niveles.
Una escena de llores generada por computadora, modelada con diversas combinaciones de color y una forma bsica de ptalo. (Cortesa de Przemyslaw Pntsinkiemcz, Universiy of Catgary. M 987.)
Propiedades de la luz Modelos de color Primarios estndar y diagrama cromtico III modelo de color RGB El modelo de color YIQ y los modelos relacionados
Eos modelos de color CMY y CMYK El modelo de color IISV El modelo de color HLS Seleccin y aplicaciones del color
12.10 Resumen
Nuestras explicaciones sobre el color hasta este momento se han concentrado en el modelo de color RGB, que es el que se utiliza para generar las imgenes en los monitores de vdeo. Hay varios otros modelos de color que tambin son tiles en las aplicaciones infogrficas. Algunos de los modelos se utilizan para describir la salida de color a travs de impresoras y trazadoras grficas. Otros se emplean para transmitir y almacenar informacin de color y otros, en fin, se usan para proporcionar a los programas una interfaz ms intuitiva para el manejo de los parmetros de color.
12.1
P R O P I E D A D E S DE LA LUZ
Como hemos indicado en los captulos anteriores, la luz exhibe muchas caractersticas distintas y podemos describir las propiedades de la luz en diferentes formas en diferentes contextos. Fsicamente, podemos caracterizar la luz como energa radiante, pero tambin necesitamos otros conceptos si queremos describir nuestra percepcin de la luz.
El espectro electromagntico
En trminos fsicos, el colores una radiacin electromagntica dentro de una estrecha banda de frecuencias. Algunos de los otros grupos de frecuencias del espectro electromagntico son los de las ondas de radio, las microondas, las ondas infrarrojas y los rayos X. La Figura 12.1 muestra los rangos de frecuencia aproximados para estos distintos tipos de radiacin electromagntica. Cada valor de frecuencia dentro de la regin visible del espectro electromagntico se corresponde con un color espectral distinto. En el extremo de baja frecuencia (aproximadamente 3.8 X 1 0 hercios) se encuentran los colores rojos, mientras que en el extremo de alta frecuencia (aproximadamente 7.9 x 1 0 hercios) encontramos los colores violetas. En la realidad, el ojo humano tambin es sensible a algunas frecuencias de las bandas infrarroja y ultravioleta. Los colores espectrales van variando desde las tonalidades de rojo, a travs del naranja y el amarillo (en el extremo de baja frecuencia), pasando luego por el verde, el ayul y el violeta (en el extremo alto). En el modelo ondulatorio de la radiacin electromagntica, la luz puede describirse como un campo electromagntico que oscila de manera transversal y se propaga a travs del espacio. Los campos elctricos y magnticos oscilan en direcciones perpendiculares entre s y la direccin de propagacin. Para cada color espectral, la frecuencia de oscilacin de la magnitud del campo est dada por la frecuencia/ La Figura 2.2 ilustra las oscilaciones variables en el tiempo de la magnitud del campo elctrico dentro de un plano. El tiempo entre dos posiciones consecutivas de la onda que tienen la misma amplitud se denomina perodo T \/f de la onda. Y la distancia que la onda viaja entre el comienzo de una oscilacin y el comienzo de la siguiente se denomina longitud de onda A. Para un color espectral (una onda monocromtica), la longitud de onda y
14 14
736
CAPTULO 12
i
cid
I
*i i O
10
I
3
12
IO
,J
I0
16
Frecuencia (hercios)
10'
FIGURA 12.2. Variacin en el tiempo de la amplitud en el campo elctrico de una frecuencia de una onda electromagntica con polarizacin plana. El tiemp comprendido entre dos picos consecutivos de amplitud o dos mnimos consecutivos de amplitud se denomina perodo de la onda. la frecuencia son inversamente proporcionales entre s, siendo la constante de proporcionalidad la velocidad de la luz c:
c = Xf
(ill)
La frecuencia para cada color espectral es una constante para todos los materiales, pero la velocidad de la luz y la longitud de onda dependen de cada material. En el vaco, la velocidad de la luz es muy aproximadamente c = 3 X 1 0 cm/sec. Las longitudes de onda de la luz son muy pequeas, por lo que las unidades de luz utilizadas para designar los colores espectrales suelen proporcionarse en cmgslroms (1 = 10~ cm) o en nanometros (Inm = 1 0 ~ cm). Un trmino equivalente para el nanometro es el de milimicra. La luz en el extremo de baja frecuencia del espectro (roja) tiene una longitud de onda de aproximadametne 780 nanometros (nm), mientras que la longitud de onda del otro extremo del espectro (violeta) es de unos 380 nm. Puesto que las unidades de longitud de onda son algo ms cmodas de utilizar que las de frecuencia, los colores espectrales se suelen escenificar en trminos de su longitud de onda en el vaco.
1 0 8 7
Una fuente luminosa como el Sol o como una bombilla domstica emite todas las frecuencias dentro del rango visible para producir luz blanca. Cuando la luz blanca incide sobre un objeto opaco, algunas de las frecuencias son rellejadas y otras son absorvidas. La combinacin de frecuencias presentes en la luz reflejada determina lo que nosotros percibimos como color del objeto. Si las bajas frecuencias son las predominantes en la luz reflejada, describiremos el objeto como rojo. En este caso, decimos que la luz percibida tiene una
737
frecuencia dominante (o longitud de onda dominante) en el extremo rojo del espectro. La frecuencia dominante se denomina tambin tono, o simplemente color, de la luz.
FIGURA 12.3.
blanca.
Energa
Vilela
Frecuencia
FIGURA 12.4. Distribucin de energa para una fuente luminosa con una frecuencia dominante cerca del extremo rojo del rango de frecuencias.
738
Colores primarios
Cuando combinamos la luz de dos o ms fuentes con diferentes frecuencias dominantes, podemos variar la cantidad (intensidad) de luz de cada fuente para generar un. rango de colores adicionales. Esto representa un posible mtodo para formar un modelo de color. Los tonos que elijamos para las fuentes se denominan colores p r i m a r i o s y la g a m a de colores del modelo ser el conjunto de todos los colores que podemos producir a partir de los colores primarios. Dos primarios que se combinen para generar el color blanco se denominan colores c o m p l e m e n t a r i o s . Como ejemplos de parejas de colores complementarios podemos citar el rojo y el cian, el verde y el magenta y el azul y el amarillo. No existe ningn conjunto finito de colores primarios reales que puedan combinarse para producir todos los posibles colores visibles. Sin embargo, tres primarios resultan suficientes para la mayora de los propsitos y los colores que no estn presentes en la gama de colores correspondientes a un conjunto especificado de primarios pueden, de lodos modos, describirse utilizando extensiones a los mtodos. Dado un conjunto de tres colores primarios, podemos caracterizar cualquier cuarto color utilizando procesos de mezcla de colores. As, una mezcla de uno o dos de los primarios con el cuarto color puede utilizarse para que se ajuste a alguna combinacin de los restantes primarios. En este sentido ampliado, podemos considerar que un conjunto de tres colores primarios puede describir todos los colores. La Figura I2.5 muestra un conjunto defunciones ajuste de color para tres primarios y la cantidad de cada uno que hace falta para producir cualquier color espectral. Las cuerdas dibujadas en la Figura 12.5 se han obtenido promediando las opiniones de un gran nmero de observadores. Los colores en la vecindad de 500 nm slo pueden generarse restando una cierta cantidad de luz roja de una combinacin de luz azul y luz verde. Esto significa que un color situado en torno a 500 nm slo puede describirse combinando dicho color con una cierta cantidad de luz roja con el fin de producir la combinacin azul-verde especificada en el diagrama. As, un monitor color RGB no puede mostrar colores en la vecindad de 500 nm.
700
FIGURA 12.5. Tres funciones de ajuste de color para mostrar frecuencias espectrales dentro del rango aproximado que va de 400 nm a 700 nm.
12.3 Primarios
estndar y diagrama
cromtico
739
puro (tono puro), el artista aade pigmento negro para generar distintas sombras de dicho color. Cuanto ms pigmento negro aada, ms oscura ser la sombra del color. De forma similar, las diferentes tintas del color se obtienen aadiendo pigmento blanco al color original, hacindolo ms claro cuanta mayor cantidad de blanco se aada. Los tonos del color se obtienen aadiendo pigmento tanto blanco como negro. Para muchas personas, estos conceptos de color son ms intuitivos que describir un color mediante un conjunto de tres nmeros que nos den las proporciones relativas de los colores primarios. Generalmente, es mucho ms fcil pensar en crear un color rojo pastel aadiendo blanco a un rojo puro y generar un color azul oscuro aadiendo negro a un azail puro. Por esto, los paquetes grficos que proporcionan paletas de color a los usuarios suelen utilizar dos o ms modelos de color. Uno de los modelos proporciona una interfaz de color intuitiva para el usuario y el otro describe los componentes de color para ios dispositivos de salida.
= i 0.5 -
700
X(nm)
FIGURA 12.6. Las tres funciones de ajuste de color para los primarios de Ja CTE.
El parmetro k en estos clculos tiene el valor de 683 lumens/vatio. donde el lumen es una unidad de medida para la radiacin luminosa por unidad de ngulo slido desde una fuente luminosa puntual estndar (que antiguamente se denominaba candela). La funcin / (X) representa la radiancia espectral, que es la intensidad luminosa seleccionada en una direccin concreta, y la funcin de ajuste de color f se elige de tal de manera que el parmetro y es la luminancia (Ecuacin 10.26) de dicho color. Los valores de luminancia se ajustan normalmente para que ocupen el rango de 0 a 100.0, donde 100.0 represenU la luminancia de la luz blanca. Cualquier color puede representarse en el espacio de color XYZ como una combinacin aditiva de los primarios utilizando los vectores unitarios X, Y, Z. As, podemos escribir la Ecuacin 12.2 de la forma:
Y
C(X) = XX + YX + ZX
(2.4)
x =
x~vhz'
T r h z '
Z=
~X+Y+Z'
{ L L 5 )
Puesto que x + y + z = 1, cualquier color puede representarse simplemente con los valores x Q y. Asimismo, hemos efectuado la normalizacin con respecto a la energa total, por lo que los parmetros xey dependen slo del tono y de la pureza y se denominan valores de cromaticidad. Sin embargo, los valores* e^ no nos permiten por s solos describir completamente todas las propiedades del color, y no podemos obtener los valores X, Y y Z. Por tanto, una descripcin completa de un color se suele proporcionar mediante los tres valores x,y y la luminancia Y. Los valores restaes del modelo de la CE se calculan entonces mediante las frmulas X = -Y, y = ~y
}
U2.6)
donde z = I - x y. Utilizando las coordenadas de cromaticidad (x y% podemos representar todos los colores en un diagrama bidimensional.
Diagrama cromtico de la CI
Cuando dibujamos los valores normalizados x ty para los colores del espectro visible, obtenemos la curva con forma aproximada de parbola mostrada en la Figura 12.7. Esta curva se denomina diagrama cromtico CI. LOS puntos de la curva son los colores espectrales (colores puros). La lnea que une los puntos espectrales correspondientes al rojo y al violeta, denominada lnea prpura, no forma parte del espectro. Los puntos interiores representan todas las posibles combinaciones de colores visibles. El punto C del diagrama corresponde a la posicin de la luz blanca. En realidad, este punto se dibuja para una fuente luminosa blanca conocida con el nombre iluminante C, que se utiliza como aproximacin estndar para la luz diurna promedio. Los valores de luminancia no estn disponibles en el diagrama cromtico, debido a la normalizacin. Distintos colores con diferente luminancia pero con la misma cromaticidad se representarn mediante el mismo punto. El diagrama cromtico resulta til para: Comparar las barras de colores correspondientes a diferentes conjuntos de primarios. Identificar colores complementarios. Determinar la pureza y la longitud de onda dominante de un color especificado.
741
v
C O A
0.8 0.7 f-(Verde) 0.6 [ 500 0.5 0.4 0.3 0.2 0.1 0
\
\
(Amarillo)
UCin) N.600 ^ > 700 (Rojo) (Linca prpura) \40O(Violeta) 1 \v 1 1 l 1 1 0.1 0.2 0.3 0.4 0.5 0.6 0.7 . v
FIGURA 12.7. Diagrama cromatico CI para los colores espectrales comprendidos entre 400 nm y 700 nm.
FIGURA 12.8. Gamas de colores definidos en el diagrama cromtico para un sistema de primarios de dos colores y de tres colores.
Gamas de colores
Podemos identificar las gamas de colores en el diagrama cromtico como segmentos de lnea recta o regiones poligonales. Todos los colores situados en la lnea recta que une las posiciones C, y C en la Figura I2.8 pueden obtenerse mezclando las cantidades apropiadas de dichos colores C y C . Si se utiliza una mayor proporcin de C | , el color resultante estar ms prximo a C que a C . La gama de colores para tres puntos, como por ejemplo C C y C en la Figura I2.8, es un tringulo con sus vrtices situados en las posiciones de dichos tres colores. Estos tres primarios pueden generar nicamente los colores situados dentro del tringulo o en sus aristas de contorno. As, el diagrama cromtico nos ayuda a comprender porqu ningn conjunto de tres primarios puede combinarse de forma aditiva para generar todos los colores, ya que ningn tringulo del diagrama puede abarcar todos los colores del mismo. Podemos comparar cmodamente mediante el diagrama cromtico las gamas de colores de los monitores de vdeo y de los dispositivos de obtencin de copias impre2 { 2 { 2 v 4 5
Colores complementarios
Puesto que la gama de colores para dos puntos es una lnea recta, los colores complementarios deben estar representados en el diagrama de cromaticidad como dos puntos situados en lados opuestos de C y colineales con C, como en la Figura 12.9. Las distancias de los dos colores C y C, a C determinan la cantidad de cada color necesaria para producir luz blanca.
]
que ser el punto C , como longitud de onda dominante. Los colores como C en este diagrama tienen distinciones espectrales como longitudes de onda dominantes substractivas. Podemos describir dichos colores restando de la luz blanca la longitud de onda dominante espectral.
sp 2
Pureza
Para un punto de color tal como C, en la Figura 12.10, determinamos la pureza como la distancia relativa de C| a C segn la linea recta que une C con C' . Si d \ denota la disntancia desde C a C, y d es la distancia desde C a C , podemos representar la pureza como el cociente d /d . El color ?i en esta figura tiene una pureza aproximadamente del 25 por ciento, ya que est situado aproximadamente a un cuarto de la distancia total de Ca C . En la posicin C > el punto de color sera 100 por cien puro.
v c cs A c{ cs v s
(12.7)
donde los parmetros R G y B toman valores en el rango que va de 0 a 1.0. Por ejemplo, el vrtice magenta se obtiene sumando los valores mximos de rojo y azul para producir la tripleta ( 1 , 0 , 1), mientras que el blan-
743
FIGURA 12.11. El modelo de color RGB, Cualquier color dentro del cubo unitario puede describirse mediante la combinacin aditiva de los tres colores primarios.
(a)
(b)
FIGURA 12.12. Dos vistas del cubo de color RGB. La vista (a) es segn la diagonal de cscala de grises que va de blanco a negro y la vista (b) es segn la diagonal de escala de grises que va de negro a blanco.
co en ( I , I, I) es la suma de los valores mximos de rojo, verde y azul. Las sombras de gris estn representadas a lo largo de la diagonal principal del cubo, desde el origen (negro) hasta el vrtice blanco. Los puntos situados en esta diagonal tienen una contribucin igual de cada uno de los colores primarios, y una sombra de gris a medio camino entre el negro y el blanco se representa como (0.5, 0.5, 0.5). Las graduaciones de color en los planos frontales y superior del cubo RGB se ilustran en la Figura 12.12. Las coordenadas cromticas para los fsforos RGB del estndar NTSC (National Television System Committee) se indican en la Tabla 12.1. Tambin se indican las coordenadas cromticas RGB dentro del modelo de color CI y los valores aproximados utilizados para los fsforos en los monitores en color. La Figura 12.13 muestra la gama aproximada de colores para los primarios RGB del estndar NTSC. TABLA 12.1. COORDENADAS CROMTICAS RGB (x, >). Estndar NTSC R G B (0.670, 0.330) (0.2 i0, 0.710) {0.140, 0.080)
744
FIGURA 12.13. La gama de colores RGB para las coordenadas cromticas NTSC. El iluminante C se encuentra en la posicin (0.310, 0.316), con un valor de luminaneia de Y - 100.0.
745
Podemos calcular el valor de luminancia para un color RGB utilizando la Ecuacin 10.27, y un mtodo para producir los valores cromticos consiste en restar la luminancia de las componentes roja y a/ul del color. As, Y = 0.299 R + 0.587 G + 0.114 B 1 = R- Y Q = B - Y U2.8)
(12.9)
0.701 -0.299
A la inversa, una seal de vdeo NTSC puede convertirse a valores de color RGB utilizando un decodificador NTSC, que primero separa la seal de vdeo en las componentes YIQ y luego convierte los valores YIQ a valores RGB. La conversin desde el espacio YIQ al espacio RGB se lleva a cabo mediante la transformacin inversa 12.9: R
i/
Los sistemas Y U V e Y C C
r
Debido al menor ancho de banda asignada a la inforamcin cromtica en la seal de vdeo analgico compuesta NTSC, la calidad del color de una imagen NTSC no es la que debiera. Por tanto, se han desarrollado variaciones de la codificacin YIQ para mejorar la calidad del color en las transmisiones de vdeo. Una de tales codificaciones es el conjunto YU V de parmetros de color, que proporciona la informacin de color compuesto para transmisiones de vdeo en sistemas tales como PAL (Phase Altemation Line) Broadcasting, que se utiliza en la mayor parte de Europa, as como en frica, Australia y Eurasia. Otra variacin de YIQ es la codificacin digital denominada Y C C . lista representacin del color se utiliza para manipulacin de vdeo digital, y est incorporada en diversos formatos de archivo grfico, como por ejemplo el sistema JPEG (Seccin 15.4).
r b
12.6
Un monitor de vdeo muestra los patrones de color combinando la luz emitida por los fsforos de pantalla, lo cual es un proceso aditivo. Sin embargo, los dispostivos de obtencin de copias impresas, como las impresoras y trazadoras grficas, generan una imagen en color recubriendo el papel con pigmentos coloreados. Nosotros vemos los patrones de color del papel mediante la luz reflejada, lo cual es un proceso substractivo.
746
CAPTULO 12
M
focaia de grises
FIGURA 12.14. F.l modelo de color CMY. Las posiciones dentro del cubo N describen restando del blanco las cantidades especificadas de los colores primarios. do se refleja lu/ blanca en una tinta de color ciati, la luz reflejada slo contiene las componentes verde y azul, y la componente roja es absorbida, o restada, por la tinta. De forma similar, la tinta magenta resta la componente verde de la luz incidente y la tinta amarilla resta la componente azul. En la Figura 12.14 se ilustra un cubo unitario que sirve para representar el modelo CMY. En el modelo CMY, la posicin espacial (I, I, 1 ) representa el negro, porque se restan todos los componentes de la luz incidente. El origen representa la luz blanca. Si se utilizan cantidades iguales de cada uno de los colores primarios, se obtienen las sombras de gris, situadas a lo largo de la diagonal principal del cubo. Una combinacin de cian y magenta produce luz a/ul, porque las componentes roja y verde de la luz incidente se absorven. De forma similar, una combinacin de tinta cian y amarilla produce luz verde, mientras que una combinacin de tinta magenta y amarilla nos da la luz roja. El proceso de impresin CMY utiliza a menudo una coleccin de cuatro puntos de tinta, que estn dispuestos en un determinado patrn, de modo similar a cmo se utilizan en un monitor RGB los tres puntos de fsforo. As, en la prctica, el modelo de color CMY se denomina modelo CMYK, donde K es el parmetro tic color negro. Se utiliza un punto de tinta para cada uno de los colores primarios (cian. magenta y amarillo) y otro punto de tinta es negro. Se incluye un punto negro porque la luz reflejada a partir de las tintas cian. magenta y amarilla slo produce normalmente sombras de gris. Algunos trazadores grficos producen diferentes combinaciones de color indexando las tintas de unos colores primarios sobre otros y permitindolas mezclarse antes de que se sequen. Para impresin en blanco y negro o en escala de grises, slo se utili/a la tinta negra.
G B
U2.ll)
donde el punto blanco del espacio RGB est representado mediante el vector columna unitario. Asimismo, podemos convertir de una representacin en color CMY a una representacin RGB utilizando la matriz, de transformacin:
i a = i B i
R
c
M Y
(12.12)
En esta transformacin, el vector columna unitario representa el punto negro del espacio de color CMY.
747
Para la conversin de RGB al espacio de color CMYK, primero hacemos K = max(/?. G\ B) y luego restamos K de cada uno de los valores C, M e Y en la Ecuacin 12.11. De forma similar, para la transformacin de CMYK a RGB, primero hacemos K = min(fl, G, B) y luego restamos K de cada uno de los valores /?, G y B de la Ecuacin 12.12. En la prctica, estas ecuaciones de Iransformacin se suelen modificar con el fin de mejorar la calidad de impresin de cada sistema concreto.
FIGURA 12.15. Cuando vemos (a) el cubo de color RGB segn la diagonal que va del blanco al negro, el contorno del cubo de color liene forma hexagonal (b).
Verde (120)
Amarillo
Tono puro
Can
(5= I . V - I)
V= 0'
(Negro)
S Saturacin I
FIGURA 12.17. Seccin Iransversal del cono hexagonal HSV, que muestra las regiones para las sombras, tintas y tonalidades.
color que queremos aadiendo blanco o negro al tono puro. La adicin de negro hace que disminuya el valor de Vmientras que S se mantiene constante. Por ejemplo, para obtener un azul oscuro, le podramos asignara V el valor 0.4 con S = 1.0 y H = 240. De modo similar, cuando se aade blanco al tono seleccionado, el parmetro S decrece mientras que E s e mantiene constante. Un azul claro podra especificarse con S = 0.3, V = 1.0 y H = 240". Aadiendo algo de negro y algo de blanco, hacemos que disminuyan tanto V como S. Las interfaces que utilizan este modelo suelen presentar las opciones de seleccin de los parmetros HSV mediante una paleta de color que contiene deslizadores y una rueda de color.
749
(public: (public: =
float float
r, h,
g, s,
b;}; v;};
noHue
-1.0;
rain(float
a,
a,
f l o a t b)
float rgb, b)
{ r e t u r n (a <
{return (a
b)?
a : b;}
a : b;}
float max(float
> b)?
rgbTOhsv
(rgbSpace&
havSpace& hsv)
i
/* float if L o s v a l o r e s RGB y HSV e s t a n e n e l min = (r, min (g, b) ) , deltaRGB ImaxRGB minRGB; rango 0 a 1.0 (r, */ max (g, b)) ; f l o a t minRGB v m maxRGB; (maxRGB s else 8 if (8 { (r h else if (g h else if h *= (b mm maxRGB) == = maxRGB) + (b r) / deltaRGB; 2.0 (g maxRGB) b) / deltaRGB; = <= 0.0; 0.0) = 0.0) / maxRGB; deltaRGB maxRGB = max
h * n o H u e ; else if
h = 4 , 0 + (r - g) / deltaRGB;
60.0;
750
h h ) /=
+=
360.0;
360.0;
I (Claridad)
/, = i
Amarillo
Azul
12.10 Resumen
751
Para especificar un color, comenzamos seleccionando el ngulo de lono //. Entonces, podemos obtener Una sombra, titila o tonalidad correspondientes a dicho tono ajusfando los parmetros L y .S'. Se obtiene un color ms claro incrementando L, mientras que si se disminuye L el color que se obtiene es ms oscuro. Cuando se reduce .V, el punto de color espacial se mueve hacia la lnea de escala de grises.
12.10 RESUMEN
La luz puede describirse como una radiacin electromagntica con una cierta distribucin de energa y que se propaga a travs del espacio, y los componentes de color de la luz se corresponden con las frecuencias situadas dentro de una estrecha banda del espectro electromagntico. Sin embargo, la luz exhibe otras propiedades, y podemos caracterizar los diferentes aspectos de la luz utilizando diversos parmetros. Con las teoras Je la luz basadas en la dualidad onda-corpsculo, podemos explicar las caractersticas tsicas de la radiacin visible, mientras que para cuantificar nuestras percepciones sobre una fuente luminosa utilizamos trminos tales como la frecuencia dominante (tono), la luminancia (brillo) y la pureza (saturacin). El tono y la pureza se suelen denominar, conjuntamente, propiedades cromticas de un color. Tambin utilizamos los modelos de color para explicar los efectos de la combinacin de fuentes luminosas. Un mtodo para definir un modelo de color consiste en especificar un conjunto de dos o ms colores primarios que se combinan para generar otros colores. Sin embargo, no hay ningn conjunto finito de colores primarios capaz de producir todos los colores o de describir todas las caractersticas de color. El conjunto de colores que puede generarse a partir del conjunto de primarios se denomina gama de colores. Dos colores que puedan combinarse para producir luz blanca se denominan colores complementarios. En I931, la CI (Comisin Internacional de Iluminacin) adopt como estndar un conjunto de tres funciones hipotticas de ajuste de color. Este conjunto de colores se denomina modelo XYZ, donde A", Y y Z
752
representan las cantidades de cada color necesarias para generar cualquier color del espectro electromagntico Las funciones de ajuste de color estn estructuradas de modo que todas las funciones sean positivas y que el valor de Y correspondiente a cada color represente la luminancia. Los valores-Ve Y normalizados, denominados x e y se utilizan para situar las posiciones de todos los colores espectrales en el diagrama cromtico CE. Podemos utilizar el diagrama cromtico para comparar gamas de colores correspondientes a diferentes modelos de color, para identificar colores complementarios y para determinar la frecuencia dominante y pureza de un color especificado. Otros modelos de color basados en un conjunto de tres primarios son los modelos RGB, Y1Q y CMY. Utilizamos el modelo RGB para describir los colores que se muestran en los monitores de vdeo. El modelo YIQ se utiliza para describir la seal de vdeo compuesta utilizada en las emisiones de televisin. Por su parte, el modelo CMY se emplea para describir el color en los dispositivos de obtencin de copias impresas. Las interfaces de usuario proporcionan a menudo modelos de color intuitivos, como los modelos HSV y HLS, para las selecciones de valores de color. Con estos modelos, especificamos un color como una mezcla de un tono seleccionado y ciertas cantidades de blanco y de negro. La adicin de negro produce las distintas sombras de color, la adicin de blanco produce las tintas y la adiccin tanto de negro como de blanco produce las tonalidades. La seleccin del color es un factor importante en el diseo de imgenes efectivas. Para evitar las combinaciones de color chillonas, podemos seleccionar colores adyacentes en una imagen que no difiera grandemente en cuanto a su frecuencia dominante. Asimismo, podemos seleccionar las combinaciones de color extrayndolas de un pequeo subespacio de un cierto modelo de color. Como regla general, un pequeo nmero de combinaciones de color formadas por tintas y sombras, en lugar de por tonos puros, da como resultado imgenes en color ms armoniosas.
%
REFERENCIAS
Puede encontrar un anlisis detallado de la ciencia del color en Wyszecki y Stiles (19X2). Los modelos de color y las tcnicas de visualizacin de colores se Iratan en Smilh (1978), ileckberl (19X2), Durrelt (1987). Schwartz, Cowan y Beatty (1987), Hall (1989) y Truvis (1991). Puede encontrar algoritmos para diversas aplicaciones del color en Glassner( 1990), A r v o ( l 9 9 l ) , Kirk (1992), Heckbert (1994) y Paeth (1995). Para obtener informacin adicional sobre el sistema visual humano y nuestra percepcin de la luz y el color, consulte Glassner(1905).
EJERCICIOS
12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 Calcule las expresiones para convenir los parmetros de color RGB en valores HSV. Calcule las expresiones para convertir valores de color HSV en valores RGB. Disee un procedimiento interactivo que permita seleccionar parmetros de color HSV a partir de un men visualizado; entonces, convierta los valores HSV en valores RGB para poder almacenarlos en un bfer de imagen. Escriba un programa para seleccionar colores utilizando un conjunto de tres deslizadores con los que selcceionar los valores de los parmetros de color HSV. Modifique el programa del ejercicio anterior para mostrar los valores numricos de las componentes RGB de eada color seleccionado. Modifique el programa del ejercicio anterior para mostrar las componentes de color RGB y el color combinado en pequeas ventanas de visualizacin. Calcule las expresiones para convenir los valores de color RGB en parmetros de color III S. Calcule las expresiones para convertir valores de color HLS en valores RGB.
Ejercicios 12.9
753
Escriba un programa que produzca un conjunto de colores linealmente interpolados a partir de dos posiciones especillcadas en el espacio RGB.
12.10 Escriba una rutina interactiva para seleccionar valores de color dentro de un subespacio especificado del espacio RGB. 12.11 Escriba un programa que produzca un conjunto de colores linealmente interpolados a partir de dos posiciones especificadas dentro del espacio IISV.
12.12 Escriba un programa que genere un conjunto de colores linealmente interpolados entre de dos posiciones especificadas del espacio MLS. 12.13 Escriba un programa para mostrar dos rectngulos de color RGB adyacentes. Rellene un rectngulo con un conjunto de puntos de color RGB aleatoriamente seleccionados y rellene el otro rectngulo con un conjunto de punios de color seleccionados de entre un pequeo subespacio RGB. Experimente con diferentes selecciones aleatorias y diferentes subespacios para comparar los dos patrones de color. 12.14 Muestre los dos rectngulos de color del ejercicio anterior utilizando selecciones de color del espacio IISV o del espacio IILS.
Una imagen cuyas caractersticas faciales han sido transformadas mediante las tcnicas de morfismo. (Cortesa de Vrtigo Technology', Inc.)
Mtodos de barrido para las animaciones por computadora Diseo de secuencias de animacin Tcnicas tradicionales de animacin Funciones generales de animacin por computadora Lenguajes de animacin por computadora
Sistemas de fotogramas clave Especificaciones de movimientos Animacin de figuras articuladas Movimientos peridicos
Hoy en da, se utilizan los mtodos litografieos de forma comn para generar animaciones para muy di\crsas aplicaciones, incluyendo el entretenimiento (pelculas y dibujos animados), la industria publicitaria, los estudios cientficos y de ingeniera, la formacin y la educacin. Aunque todos leudemos a pensaren la animacin como si implicara el movimiento de objetos, el trmino animacin por computadora se refiere, en general, a cualquier secuencia temporal donde se aprecien cambios visuales en una imagen. Adems de cambiar las posiciones de los objetos mediante traslaciones o rotaciones, una animacin generada por computadora puede mostrar variaciones temporales que afecten al tamao de los objetos, a su color, a su transparencia o a las texturas superficiales. Las animaciones utilizadas en la industria publicitaria recurren frecuentemente a las transiciones entre una forma de objeto y otra: por ejemplo, transformar una lata de aceite para motores en un motor de automvil. Tambin podemos generar animaciones por computadora variando parmetros de la cmara, como la posicin, la orientacin o la distancia focal. Y las variaciones en los efectos de iluminacin u otros parmetros y procedimientos asociados con la iluminacin y la representacin de escenas pueden usarse tambin para producir animaciones por computadora. Una consideracin importante en las animaciones generadas por computadora es la cuestin del realismo. Muchas aplicaciones requieren imgenes suficientemente realistas. Por ejemplo, una representacin precisa de la forma de una tormenta o de otro fenmeno natural escrito con un modelo dinmico tiene una gran importancia para evaluar la Habilidad del modelo. De forma similar, los simuladores para el entrenamiento de los pilotos de aeronaves y de los operadores de equipos pesados debe producir representaciones razonablemente! precisas del entorno. Las aplicaciones de entretenimiento y publicitarias, por el contrario, suelen estar ms interesadas en los efectos visuales. De este modo, puede que las escenas se muestren con formas exageradas y movimientos y transformaciones no realistas. Sin embargo, hay muchas aplicaciones de entretenimiento y publicitarias que s que requieren una representacin precisa en las escenas generadas por computadora. En algunos estudios cientficos y de ingeniera, el realismo no constituye un objetivo: por ejemplo, determinadas magnitudes tsicas suelen mostrarse con pseudo-colores o con formas abstractas que cambian con el tiempo con el fin de ayudar al investigador a comprender la naturaleza del proceso fsico. Dos mtodos bsicos para la construccin de una secuencia animada son la animacin en tiempo real \ la animacin imagen a imagen. En una animacin por computadora en tiempo real, cada etapa de la secuencia se visualiza a medida que se la genera. Por ello, la animacin debe generarse a una frecuencia que sea compatible con las restricciones de la frecuencia de refresco. Para una animacin imagen a imagen, se genera de forma separada cada imagen de la secuencia y se la almacena. Posteriormente, las imgenes pueden grabarse sobre una pelcula o mostrarse de forma consecutiva en un monitor de vdeo, en el modo de reproduccin en tiempo real. Las secuencias animadas simples se suelen producir en tiempo real, mientras que las animaciones ms complejas se construyen ms lentamente, imagen a imagen. Pero algunas aplicaciones requieren animacin en tiempo real, independientemente de la complejidad de la animacin. Una animacin para un
756
CAPTULO 13
simulador de vuelo, se tiene que generar en tiempo real, porque las imgenes de vdeo deben construirse respondiendo de manera inmediata a los cambios de las configuraciones de control. En tales casos, se suelen desarrollar sistemas hardware y software especializados con el fin de poder generar rpidamente las complejas secuencias de animacin.
Doble bfer
Un mtodo para producir una animacin en tiempo real con un sistema de barrido consiste en emplear dos bferes de refresco. Inicialmentc, creamos una imagen para la animacin en uno de los bferes. Despus, mientras se refresca la pantalla a partir del contenido de dicho bfer, construimos la imagen siguiente de la secuencia en el otro bfer. Cuando dicha imagen se complete, cambiamos los roles de los dos bferes para que las rutinas de refresco utilicen el segundo bfer mientras se crea la siguiente imagen de la secuencia en el siguiente bfer. Este proceso alternativo de conmutacin de bferes continua mientras dure la secuencia. Las bibliotecas grficas que permiten tales operaciones suelen disponer de una funcin para activar la rutina de doble bfer y otra funcin para intercambiar los papeles de los dos bferes. Cuando se realiza una llamada para conmutar los dos bferes de refresco, el intercambio puede realizarse en diversos instantes. La implemenlacin ms sencilla consiste en conmutar los bferes al final del ciclo de refresco actual, durante el retorno vertical del haz de electrones. Si un programa puede completar la construccin de una imagen dentro del tiempo que dura un ciclo de refresco, como por ejemplo d e segundo, la secuencia animada se mostrar de forma sincronizada con la tasa de refresco de pantalla. Pero si el tiempo necesario para construir una imagen es mayor que el tiempo de refresco, la imagen actual se mostrar durante dos o ms ciclos de refresco mientras se genera la siguiente imagen de la secuencia de animacin. Por ejemplo, si la tasa de refresco de pantalla es de 60 imgenes por segundo y se t a r d a d de segundo en construir cada nueva imagen de la secuencia, las imgenes se mostrarn en pantalla dos veces y la velocidad de animacin ser nicamente de 30 imgenes por segundo. De forma similar, si el tiempo de construccin de una nueva imagen es de de segundo, la velocidad de imagen de la animacin se reduce a 20 imgenes por segundo, ya que cada una de las imgenes tendr que ser mostrada tres veces. Con la tcnica de doble bfer pueden aparecer velocidades de animacin irregulares cuando el tiempo de generacin de cada imagen est muy prximo a un mltiplo entero del tiempo de refresco de pantalla. Como ejemplo de esto, si la velocidad de refresco de pantalla es de 60 imgenes por segundo, podra producirse una velocidad de animacin errtica si el tiempo de construccin de la imagen estuviera muy prximo a d e
757
segundo, j^-de segundo o ^ d e segundo, etc. Debido a las pequeas variaciones en el tiempo de ejecucin de las rutinas que generan las primitivas y sus atributos, algunas imgenes podran requerir algo ms de tiempo para generarse y otras podran requerir un tiempo ms corto. Eso podra hacer que la velocidad de animacin cambiara de forma abrupta y errtica. Una forma de compensar este efecto consiste en aadir un pequeo retardo temporal al programa, mientras que otra posibilidad es alterar los movimientos o la descripcin de la escena con el fin de acortar el tiempo de construccin de las imgenes.
FIGURA 13.1. Animacin en tiempo real en un sistema de barrido mediante una tabla de colores.
758
CAPTULO 13
El guin es un resumen de la accin en el que se define la secuencia de movimiento como el conjunto de sucesos bsicos que deben tener lugar. Dependiendo del tipo de animacin que haya que producir, el guin puede estar compuesto por un conjunto de burdos dibujos y una breve descripcin de los movimientos, o puede ser simplemente una lista de las ideas bsicas que describen la accin. Originalmente, ese conjunto de burdos dibujos que describen el guin se sola fijar en un panel de gran tamao que se utilizaba para presentar una vista global del proyecto de animacin. De aqu proviene el nombre ingles stotyhoard. Para cada participante en la accin se proporciona una definicin del objeto. Los objetos pueden definirse en trminos de las formas bsicas, como por ejemplo polgonos o splines superficiales. Adems, suele proporcionarse una descripcin de los movimientos que tengan que realizar cada personaje u objeto descrito en el guin. Un fotograma clave es un dibujo detallado de la escena en un cierto momento de la secuencia de animacin. Dentro de cada fotograma clave, cada objeto (o personaje) se posiciona de acuerdo con el tiempo correspondiente a dicho fotograma. Algunos fotogramas clave se eligen en las posiciones extremas de la accin, mientras que otros se espacian para que el intervalo de tiempo entre un fotograma clave y el siguiente no sea excesivo. Para los movimientos intrincados se especifican ms fotogramas clave que para los movimientos simples o lentos. El desarrollo de los fotogramas clave suele, por regla general, ser responsabilidad de los animadores expertos, siendo normal que se asigne un animador distinto para cada personaje de la animacin. Los fotogramas intermedios (in-betsveens) son los comprendidos entre los sucesivos fotogramas clave. El nmero total de imgenes o fotogramas, y por tanto el nmero total de fotogramas intermedios, necesarios para una animacin vendr determinado por el medio de visualizacin que se utilice. Las pelculas requieren 24 imgenes por segundo, mientras que los terminales grficos se refrescan con una tasa de 60 o ms imgenes por segundo. Normalmente, los intervalos temporales de la secuencia se configuran de tal modo que haya entre tres y cinco fotogramas intermedios entre cada par de fotogramas clave sucesivos. Dependiendo de la velocidad especificada para la secuencia, ser necesario definir ms o menos fotogramas clave. Como ejemplo, una secuencia de pelcula de un minuto de duracin contiene un total de 1440 fotogramas; si se requieren cinco fotogramas intermedios entre cada par de fotogramas clave, entonces ser necesario desarrollar 288 fotogramas clave.
FIGURA 13.2. Una imagen del galardonado corto animado Laxo Jr. Esta pelcula fue diseada utilizando un sistema de animacin basado en fotogramas clave y tcnicas de dibujos animados con el fin de que las lmparas se muevan con si estuvieran vivas. Las imgenes finales fueron obtenidas con mltiples fuentes luminosas y con tcnicas de texturado procedimental. (Cortesa de Pixar. &986 Pixar.)
FIGURA 13.3. Un fotograma del corto Tin Toy, la primera pelcula de animacin por computadora que gan un Osear. Diseada mediante un sistema de animacin basada en fotogramas clave, la pelcula tambin requiri un detallado modelado de las expresiones faciales. Las imgenes finales fueron obtenidas utilizando sombreado procedimental, tcnicas de auto-sombreado, desenfoque de movimiento y mapeado de texturas. (Cortesa de Pixar. /988 Pixar.)
759
Puede que sea necesario llevar a cabo diversas otras tareas, dependiendo de la aplicacin. Estas tareas adicionales incluyen la vcriticacin del movimiento, la edicin y la produccin y sincronizacin de una banda sonora. Muchas de las funciones necesarias para producir animaciones generales se llevan ahora a cabo con ayuda de computadoras. Las Figuras 13.2 y 13.3 muestran ejemplos de imgenes generadas por computadora para secuencias de animacin.
FIGURA 13.4. Ejemplo de rebote de una pelota donde se ilustra la tcnica de compresin y expansin para enfatizar la aceleracin de los objetos.
FIGURA 13.5. I.os cambios de posicin entre l o W n . n a mas para el rebote de una bola se incrementan a medida que lo hace la velocidad de una bola.
760
CAPTULO 13
se hacia adelante y girar el cuerpo antes de comenzar a correr. O bien, otro personaje puede hacer un molinillo con los brazos antes de arrojar una bola. De forma similar, las acciones de seguimiento pueden utilizarse para enfatizar un movimiento anterior. Despus de arrojar una bola, un personaje puede continuar moviendo el brazo hasta volver a acercarlo al cuerpo. O bien, el sombrero de la cabeza de un personaje que se lia detenido abruptamente puede salir volando. Asimismo, las acciones pueden enfatizarse mediante las tcnicas de regulacin del punto de atencin, que hacen referencia a cualquier mtodo que permita centrarse en una parte importante de la escena, como por ejemplo aquella parte donde un personaje est ocultando algo.
Extensin
FIGURA 13.7. Grados de libertad de traslacin y rotacin para la base del brazo robolizado.
simple, cada objeto de la escena se define como un conjunto de cuerpos rgidos conectados en las uniones y con un nmero limitado de grados de libertad. Por ejemplo, el robot de un nico brazo de la Figura 13.6 tiene seis grados de libertad, que se denominan barrido del bra^o, movimiento del hombro, extensin del codo, inclinacin, orientacin y giro. Podemos ampliar el nmero de grados de libertad de este brazo robolizado a nueve permitiendo una traslacin tridimensional de la base (Figura 13.7). Si tambin permitimos rotaciones de la base, el brazo robotizado puede tener un total de doce grados de libertad. Por comparacin, el cuerpo humano tiene ms de 200 grados de libertad. Los sistemas paramelrizados permiten especificar las caractersticas del movimiento de los objetos como parte de la definicin de esos mismos objetos. Los parmetros ajustables controlan caractersticas de los objetos tales como grados de libertad, las limitaciones del movimiento y los cambios permitidos en la forma. Los sistemas de siripi permiten definir las especificaciones de los objetos y las secuencias de animacin mediante un siripi introducido por el usuario. Mediante el scrpi, puede construirse una biblioteca de objetos y movimientos diversos.
762
CAPTULO 13
Morfismo
La modificacin de la forma de un objeto, para que ste adopte una forma distinta, se denomina morfismo, palabra que proviene de metamorfosis. L'n animador puede modelar un morfismo haciendo que las formas de los polgonos efecten una transicin a lo largo de los fotogramas intermedios comprendidos entre un fotograma clave y el siguiente. Dados dos fotogramas clave, cada uno de ellos con un nmero diferente de segmentos de lnea que especifican la transformacin de un objeto, podemos primero ajustar la especificacin del objeto en uno de los fotogramas de modo que el nmero de aristas poligonales (o el nmero de vrtices de los polgonos) sea el mismo para los dos fotogramas. Esta etapa de preprocesamienlo se ilustra en la Figura 13.8. Un segmento de lnea recta en el fotograma clave k se transforma en dos segmentos de lnea en el fotograma clave k + I. Puesto que el fotograma A' + I. tiene un vrtice adicional, aadimos un vrtice entre los vrtices I y 2 en el fotograma clave k para equilibrar el nmero de vrtices (y aristas) en los dos fotogramas clave. Utilizando interpolacin lineal para generar los fotogramas intermedios, efectuamos la transicin del vrtice aadido en el fotograma clave k hacia el vrtice 3' segn el trayecto lineal mostrado en la Figura 13.9. En la Figura 13.10 se proporciona un ejemplo de un tringulo que se expande linealmente en un cuadriltero. Las Figuras 13.11 y 13.12 muestran ejemplos de morfismo en anuncios de televisin. Podemos enunciar reglas de procesamiento generales para ecualizar los fotogramas clave en trminos del nmero de aristas o del nmero de vrtices que haya que aadir a un fotograma clave. Vamos a considerar primero la ecualizacin del nmero de aristas, donde los parmetros L y denotan el nmero de segmentos de lnea en dos fotogramas consecutivos. El nmero mximo y mnimo de lneas que habr que ecualizar ser
k
L min
min(/, .,
x
L )
k+]
UH)
N,=L
nrM
modL
nu
(i
N =mt
s
j*
FIGURA 13.8. lina ansia con dos vrtices I y t en el fotograma clave k evoluciona para convertirse en dos aristas conectadas en fotograma clave i + 1.
Fotograma clave k
Fotograma clavo k + I
FIGURA 13.9. Interpolacin lineal para transformar un segmento de lnea en el fotograma clave k en dos segmentos de lnea conectados en el fotograma clave k + 1.
Fotograma clave
Fotograma intermedio
l'iograum clave
+ I
Punu>
.lll.i.lulo
ciave I
ith
(c)
FIGURA 13.11. Transformacin de una lata de aceite para automviles STP en un motor de automvil. {Cortesiu de Silit n Graphics, Inc.) Las etapas de preprocesamiento para la eeualizacin de aristas pueden llevarse a cabo entonces con los dos siguientes procedimientos: (!) (2) Dividir A', aristas de fotognimitclave ^ en pL + I secciones.
( y m mm s
Dividir las lneas restantes de jotogramclave en N secciones. Como ejemplo, si L = 15 y 7 - ^ , = 11, dividiramos cuatro lneas de fotogramaclave ^, en dos secciones cada una. Las lneas restantes de fotogramoclave se dejan intactas. Si eeuali/amos el nmero de vrtices, podemos utilizar los parmetros V y para denotar el nmero de vrtices en dos fotogramas clave consecutivos. En este caso, determinamos los nmeros mximo y mnimo de vrtices de la forma siguiente:
k k ki k
764
CAPTULO 13
min
N = int
p
Estos dos valores se utilizan entonces para llevar a cabo la ecualizacin de vrtices mediante los procedimientos; (1) Aadir N puntos N secciones de lnea de fotogramaciave .
p is mm
(2)
Aadir N p
Para el ejemplo de transformacin de un tringulo en un cuadriltero, V = 3 y = 4. Tanto N como N son I, por lo que aadiramos un punto a una arista tfologramaclave . No se aadira ningn punto a las lneas restantes de Jtogramaclave .
f} k k
Simulacin de aceleraciones
A menudo se utilizan tcnicas de ajuste de curvas para especificar los trayectos de animacin entre fotogramas clave. Dadas las posiciones de los vrtices en los fotogramas clave, podemos ajustar las posiciones mediante trayectos lineales o no lineales. La Figura 13.13 ilustra un ajuste no lineal de las posiciones en los fotogramas clave. Y para simular aceleraciones, podemos ajustar el espaciado temporal correspondiente a los fotogramas intermedios. Si el movimiento debe tener lugar a velocidad constante (aceleracin cero), utilizamos intervalos temporales iguales para los fotogramas intermedios. Por ejemplo, con n fotogramas intermedios y con sendos tiempos jj y t para los fotogramas clave (Figura 13.14), el intervalo temporal entre los fotogramas clave se divide en n + 1 subintervalos iguales, lo que nos da un espaciado de los fotogramas intermedios igual a:
2
Intermedio
Fotograma clave
FIGURA 13.13. Ajuste de las posiciones de los vrtices en los fotogramas clave mediante splines no lineales.
-|
k
jA/
FIGURA 13.14. Posiciones de los fotogramas intermedios para movimiento a velocidad constante.
At=
(1-15)
,/A,
, = l,2.--,
y este tiempo se utiliza para calcular las coordenadas de posicin, los colores y otros parmetros fsicos para
dicho fotograma de la secuencia. Usualmenle, hacen falta cambios de velocidad (aceleracin distinta de cero) en algn punto de las secuencias de animacin o de dibujos animados, particularmente al principio y al Ilnal de un movimiento. Las partes de arranque y de parada de un trayecto de animacin se suelen modelar con splines o funciones trigonomtricas, pero tambin se han aplicado funciones temporales parablicas y cbicas para modelar las aceleraciones. Los paquetes de animacin suelen proporcionar funciones trigonomtricas para simular las aceleraciones. Para modelar una velocidad creciente (aceleracin positiva), lo que puede hacerse es incrementar el espaciado temporal entre fotogramas, de modo que se produzcan cambios ms grandes en la posicin a medida que aumenta la velocidad del objeto. Podemos obtener un tamao creciente para el intervalo temporal mediante la funcin: I - eos
a,
0<
6< n/1
Para n fotogramas intermedios, el tiempo correspondiente al fotograma intennedio /-simo se calculara como: 1-cos
2 (#i
+ J).
j = 1,2, -, n
766
CAPTULO 13
FIGURA 13.15. Una funcin de aceleracin Irigonomlriea y el correspondiente espaciado de fotogramas intermedios para n = 5 y 6 = j7t/\2 en la Ecuacin 13.7, lo que produce cambios crecientes en los valores de las coordenadas a medida que el objeto pasa de un intervalo temporal a otro. donde Al es la diferencia de tiempo entre los dos fotogramas clave. La figura 1 3 . 1 5 muestra una grfica de la funcin trigonomtrica de aceleracin y del espaciado de los fotogramas intermedios para n = 5. Podemos modelar una velocidad decreciente (deceleracin) utilizando la funcin sin ft con 0 < 6< nfi. El tiempo correspondiente a un fotograma intermedio se determina entonces mediante la frmula tf, =t. + A / s i n ^ ^ ' 2( + l)
1
7 = 1.2,
(13.8)
En la Figura 13.16 se muestra una g r f i c a de esta funcin y el tamao decreciente de los intervalos temporales, para cinco fotogramas intermedios.
tB
M |
FIGURA 13.16. Una funcin de deceleracin trigonomtrica y el correspondiente espaciado de los fotogramas intermedios para n = 5 y 9 = fi\2 en lu Ecuacin 13.8, lo que produce cambios decrecientes en las coordenadas a medida que el objeto pasa de un intervalo temporal a otro.
767
FIGURA 13.17. La funcin trigonomtrica de aceleracin-deceleracin (1 - eos 0)/2 y el correspondienie espaciado de los fotogramas intermedios para // == 5 en la Ecuacin 13.9. A menudo los movimientos contienen tanto aceleraciones como frenados. Podemos modelar una combinacin de velocidad creciente-decreciente incrementando primero el espaciado temporal de los fotogramas intermedios y luego reducindolo. Una funcin para poder conseguir estos cambios de carcter temporal es: -(1-COS0), 0<0<7t/2
"2.
,.,,+*{'-""**"'}.
J-m-m.
na
donde A/ denota la diferencia temporal entre dos fotogramas clave. Los intervalos temporales para un objeto en movimiento se incrementarn primero y luego se reducirn, como se muestra en la Figura 13.17. El procesamiento de los fotogramas intermedios se simplifica si modelamos inicialmenle objetos esqueleto (almbricos), de modo que puedan ajustarse interactivamente a las secuencias de movimiento. Despus de definir completamente la secuencia de animacin, puede proeederse a obtener la representacin de los objetos en imgenes.
768
CAPTULO 13
FIGURA 13.18. Aproximacin del movimiento de una bola que rebota sobre el suelo mediante una funcin seno amortiguada (Ecuacin 13.10). tamenle los valores de los ngulos de rotacin y de los vectores de traslacin. A continuacin, se aplican las matrices de transformacin geomtrica para transformar las posiciones de coordenadas. Alternativamente, podramos usar una ecuacin de aproximacin en la que apare/can estos parmetros para especificar ciertos tipos de movimientos. Por ejemplo, podemos aproximar la trayectoria de una bola que rebote en el suelo utilizando una curva seno amortiguada y rectificada (Figura 13.18): y(x) = A\
SII(K
fl^l*"**'
0
(/5.70)
donde A es la amplitud inicial (altura de la bola sobre el suelo), oes la frecuencia angular, 0 es el ngulo de fase y A es el coeficiente de amortiguamiento. Este mtodo de especificacin del movimiento resulta particularmente til para las secuencias de animacin simples programas por el usuario.
Cinemtica y dinmica
Tambin podemos construir secuencias de animacin utilizando descripciones cinemticas o dinmicas. Con una descripcin cinemtica, especificamos la animacin proporcionando los parmetros de movimiento (posicin, velocidad y aceleracin) sin referencia a las causas ni a los objetivos del movimiento. Para una velocidad constante (aceleracin cero), designamos los movimientos de los cuerpos rgidos de una escena proporcionando una posicin inicial y un vector de velocidad para cada objeto. Como ejemplo, si la velocidad se
769
especfica como (3, 0, 4) km/seg, entonces este vector proporcionar la direccin de la trayectoria lineal de movimiento y la velocidad (mdulo del vector) ser igual a 5 km/seg. Si tambin especificamos las aceleraciones (tasa de cambio de la velocidad), podemos modelar arranques, paradas y trayectos de movimiento curvos. La especificacin cinemtica de un movimiento tambin puede proporcionarse simplemente describiendo la trayectoria del movimiento. Esto se suele hacer mediante curvas de pospline. Un enfoque alternativo consiste en utilizar cinemtttica inversa. Con este mtodo, especificamos las posiciones inicial y final de los objetos en instantes determinados y es el sistema el que se encarga de calcular los parmetros del movimiento. Por ejemplo, suponiendo una aceleracin cero, podemos determinar la velocidad constante que pennitir conseguir el movimiento de un objeto desde la posicin inicial hasta la posicin final. Este mtodo se suele utilizar para objetos complejos proporcionando las posiciones y orientaciones de un nodo terminal de un objeto, como por ejemplo una mano o un pie. El sistema determina entonces los parmetros de movimiento de los otros nodos que hacen falta para conseguir el movimiento deseado. Las descripciones dinmicas, por el contrario, requieren la especificacin de las fuerzas que producen las velocidades y aceleraciones. La descripcin del comportamiento de los objetos en trminos de la influencia de las fuerzas se suele denominar modelado fsico (Captulo 8). Como ejemplos de fuerzas que afectan al movimiento de los objetos podemos citar las fuerzas electromagnticas, gravitatorias, de friccin y otras fuerzas mecnicas. Los movimientos de los objetos se obtienen a partir de las ecuaciones de las fuerzas que describen leyes fsicas, como por ejemplo las leyes de Newton del movimiento para los procesos gravilalorios y de friccin, las ecuaciones de Euler o de Navier-Stokes que describen el flujo de Huidos y las ecuaciones de Maxwell para las fuerzas electromagnticas. Por ejemplo, la forma general de la segunda ley de Newton para una partcula de masa m es:
F = 4 ('V)
di
(13.11)
donde F es el vector de la fuerza y v es el vector velocidad. Si la masa es constante, resolvemos la ecuacin F = /wa, donde a representa el vector de aceleracin. En caso contrario, la masa ser una funcin del tiempo, como sucede en el movimiento relativista o en el movimiento de naves espaciales que consuman cantidades no despreciables de combustible por unidad de tiempo. Tambin podemos utilizar la dinmica inversa para obtener las fuerzas, dadas las posiciones inicial y final de los objetos y el tipo de movimiento requerido. Entre las aplicaciones del modelado tsico se incluyen los sistemas complejos de cuerpos rgidos y tambin otros sistemas no rgidos como las ropas y los materiales plsticos. Normalmente, se utilizan mtodos numricos para obtener los parmetros de movimiento incrementalmente a partir de las ecuaciones dinmicas, utilizando condiciones iniciales de valores de contorno.
770
CAPTULO 13
FIGURA 13.20. Posibles ungimientos para un conjunto ele enlaces conectados que representan una pierna llevando a cabo la accin de andar. Por ejemplo, podramos definir como en la Figura 13.20 un conjunto de movimientos para una pierna que estuviera efectuando la accin de andar. La articulacin de la cadera se mueve hacia adelante segn una lnea horizontal, mientras que los enlaces conectados realizan una serie de movimientos en torno a las articulaciones de la cadera, de la rodilla y del taln. Comenzando con una pierna recta (Figura I3.2()(a)>. el primer movimiento consiste en doblar la rodilla a medida que la cadera se mueve hacia adelante (Figura I3.20(b)). Entonces, la pierna avanza, vuelve a la posicin vertical y empuja hacia atrs, como se muestra en las Figuras 13.20(c), (d) y (e). Los movimientos finales son un movimiento amplio hacia atrs y una vuelta a la posicin vertical, como en las Figuras 13.20(1) y (g). Este ciclo de movimiento se repite mientras dure la animacin, a medida que el personaje recorre una distancia especificada o hasta que transcurra un determinado intervalo de tiempo. A medida que se mueve un personaje, se incorporan otros movimientos a las diversas articulaciones. Puede aplicarse un movimiento sinusoidal, a menudo de amplitud variable, a las caderas para que stas se muevan con respecto al torso. De la misma forma, puede aplicarse un movimiento giratorio a los hombros y tambin la cabeza puede moverse hacia arriba y hacia abajo. En la animacin de personajes se utilizan tanto descripciones cinemticas del movimiento como descripciones basadas en cinemtica inversa. La especificacin del movimiento de las articulaciones suele ser una tarea no demasiado complicada, pero la cinemtica inversa puede tambin resultar til para generar mov-
771
menlos simples sobre un terreno arbitrario. Para una figura complicada, la cinemtica inversa puede no producir una secuencia de animacin nica, ya que, por ejemplo, puede que sean posibles muchos movimientos rotatorios distintos para un conjunto especificado de condiciones iniciales y finales. En tales casos, puede obtenerse una solucin nica aadiendo ms restricciones al sistema, como por ejemplo el principio de conservacin de la cantidad de movimiento.
(a) 0 seg.
0
1 /72 seg.
1/1 S
(e) se*;.
FIGURA 13.21. Cinco posiciones del radio durante un ciclo de movimiento de una rueda que est girando a l 8 revoluciones por segundo.
Fotograma O 0 seg.
FIGURA 13.22. Los cinco primeros fotogramas de pelcula para la rueda giratoria de la Figura 13.21, producidos con una velocidad de 24 imgenes por segundo.
772
CAPTULO 13
En las animaciones generadas por computadora, podemos controlar la velocidad de muestreo de un movimiento peridico ajustando los parmetros de movimiento. Por ejemplo, podemos configurar el incremento angular para el movimiento de un objeto giratorio de modo que se generen mltiples fotogramas en cada revolucin. As, un incremento de 3 para un ngulo de rotacin produce 1 20 pasos de movimiento durante una revolucin, mientras que un incremento de 4 genera 90 posiciones. Para movimientos ms rpidos, pueden utilizarse pasos de rotacin ms amplios, siempre y cuando el nmero de muestras por ciclo no sea demasiado pequeo y el movimiento se visualice claramente. Cuando haya que animar objetos complejos, tambin deberemos tener en cuenta el efecto que el tiempo de generacin del fotograma pueda tener sobre la tasa de refresco, como se explica en la Seccin I3.I. El movimiento de un objeto complejo puede ser mucho ms lento de lo que deseamos si se tarda demasiado en generar cada fotograma de animacin. Otro factor que tenemos que consideraren la visualizacin de un movimiento repetitivo es el efecto de los redondeos en los clculos de los parmetros de movimiento. Como hemos observado en la Seccin 5 A, podemos reinicializar peridicamente los valores de los parmetros para evitar que la acumulacin de los errores produzca movimientos errticos. Para una rotacin continua, podramos reinicializar los valores de los parmetros una vez por ciclo (360).
o
Esto proporciona dos bferes, denominados bfer frontal y bfer trasero, que podemos utilizar alternativamente para refrescar la imagen de pantalla. Mientras uno de los bferes acta como bfer de refresco para la ventana de visualizacin actual, puede irse construyendo la siguiente imagen de la animacin en el otro bfer. Podemos especificar cundo hay que intercambiar los roles de los dos bferes mediante el comando:
glutSwapBuffers { ) ;
Para determinar si estn disponibles las operaciones de doble bfer en un sistema, puede efectuarse la siguiente consulta:
glGetBooleanv (GL DOUBLEBUFFER, status);
Se devolver un valor G L T R U E al parmetro de matriz s t a t u s si hay disponibles en el sistema tanto un bfer frontal como otro trasero. En caso contrario, el valor devuelto es G L _ F A L S E . Para una animacin continua, tambin podemos usar:
glutldleFunc {animationFcn);
donde al parmetro a n i m a t i o n F c n se le puede asignar el nombre de un procedimiento que se encargue de realizar las operaciones de incremento de los parmetros de animacin. Este procedimiento se ejecutar de modo continuo cuando no haya sucesos de la ventana de visualizacin que procesar. Para desactivar la funcin g l u t l d l e F u n c , podemos asignar a este argumento el valor NTJLL O el valor 0. En el siguiente fragmento de cdigo se proporciona un ejemplo de programa de animacin que hace girar de modo continuo un hexgono regular en el plano xy en torno a un eje z. El origen de las coordenadas de pantalla tridimensionales se coloca en el centro de la ventana de visualizacin, de modo que el eje r pasa a travs
773
de esta posicin central. En el procedimiento i n i t , utilizamos una lista de visualizacin para especificar la descripcin del hexgono regular, cuya posicin central est originalmente en la posicin (150, 150) de las coordenadas de pantalla y que tiene un radio (distancia desde el centro del polgono a cualquiera de sus vrtices) igual a 100 pxeles. En la funcin de visualizacin, d i s p l a y H e x , especificamos una rotacin inicial de 0 en torno al eje z e invocamos la rutina g l u t S w a p B u f f e r s . Para activar la rotacin, utilizamos el procedimiento m o u s e F c n que incrementa continuamente el ngulo d e rotacin en 3 cuando pulsamos el botn central del ratn.. El clculo del ngulo de rotacin incrementado se lleva a cabo en el procedimiento r o t a t e H e x , que e s invocado por la rutina g l u t l d l e F u n c en el procedimiento m o u s e F c n . Detenemos la rotacin pulsando el botn derecho del ratn, lo que hace que se invoque g l u t l d l e F u n c con un argumento
U
NULL.
<GL/glut.h> <math.h> < stcU ib.h> = 6.2831853; winHeight = 0.0; = 500; // rotTheta // Tamao i n i c i a l nombre para ventana v i s u a l i z a c i n . lista visualizacin.
500,
GLuint r e g H e x ;
Definir
public: GLint
void
init
(void)
hexVertex; hexTheta; k; (1.0, 1.0, 1.0, 0.0); hexgono regular de color rojo.
GLdouble
glClearColor /* + * regHex
equiespaciados
s o b r e una
glNewList glBegin
GL_COMPILE) ; 0.0);
glColor3f
(GL_POLYGON); for (k = 0; k < 6; = = = k++) * k + + ( / 6; * * eos sin (hexTheta); (hexTheta); 100 100
hexTheta
(hexVertex.x,
hexVertex.y)
}
glEnd glEndList void ( ( ); ); (void)
displayHex
774
CAPTULO 13
glClear
glutSwapBufters glFlush ( );
}
void { rotTheta if += 3.0; > -= 360.0) 360.0; ( ); rotateHex (void)
(rotTheta rotTheta
glutPostRedisplay
}
v o i d winReshapeFcn glViewport (0, (GLint 0, newWidth, GLint newHeight) (GLsizei) newHeight);
(GLsizei)
newWidth,
(-320.0,
(GLJ40DELVIEW); ( );
(GL_COLOR_BUFFER__BIT) ;
(GLint
button,
GLint
action,
GLint x,
GLint y)
(button) (action
GLUT_MIDDLE_BUTTON: glutldleFunc
break; case if GLUT_RIGHT_BUTTON; (action glutldleFunc break; default: break; GLUT_DOWN) (NULL);
J
}
v o i d main (int argc, char** argv)
{
glutlnit (fcargc, argv); (GLUT_DOUBLE | GLUT_RGB) ; glutlnitDisplayMode
13.11
Resumen
775
(150,
(winWidth, ("Animation
13.11 RESUMEN
Podemos construir una secuencia de animacin fotograma a fotograma o podemos generarla en liempo real. Cuando se construyen y almacenan fotogramas independientes de una animacin, los fotogramas pueden posteriormente transferirse a una pelcula o mostrarse en una rpida sucesin sobre un monitor de vdeo. Las animaciones que incluyen escenas y movimientos complejos suelen crearse de fotograma en fotograma, mientras que las secuencias de movimiento ms simples se muestran en tiempo real. En un sistema de barrido, pueden usarse mtodos de doble bfer para facilitar la visualizacin del movimiento. Se utiliza un bfer para registrar la pantalla, mientras que se carga en un segundo bfer los valores de los pxeles correspondientes al siguiente fotograma de la secuencia. Despus, se intercambian los papeles de los dos bferes, usualmente al final de un ciclo de refresco. Otro mtodo de barrido para mostrar una animacin consiste en realizar secuencias de movimiento utilizando transferencias en bloque de los pxeles. Las traslaciones se llevan a cabo mediante un simple movimiento de un bloque rectangular de pxeles desde una posicin de bfer de imagen a otra. Asimismo, las rotaciones en incrementos de 90 pueden llevarse a cabo mediante una combinacin de traslaciones e intercambios de filas-columnas dentro de la matriz de pxeles. Pueden usarse mtodos basados en tablas de colores para construir animaciones de barrido simples, almacenando una imagen de un objeto en mltiples ubicaciones del bfer de imagen y utilizando diferentes valores en la tabla de colores. Una imagen se almacena con el color de primer plano y las copias de la imagen en las otras ubicaciones tendrn un color de fondo. Intercambiando rpidamente los valores de color de primer plano y de fondo almacenados en la tabla de colores, podemos mostrar el objeto en varias posiciones de pantalla. Son varias las etapas de desarrollo necesarias para producir una animacin, comenzando con el guin, las definiciones de los objetos y la especificacin de los fotogramas clave. El guin es un resumen de la accin, mientras que los fotogramas clave definen los detalles de los movimientos de los objetos para posiciones seleccionadas dentro de una secuencia de animacin. Una vez definidos los fotogramas clave, se generan los fotogramas intermedios para conseguir un movimiento suave entre un fotograma clave y el siguiente. Una animacin infogrfica puede incluir especificaciones de movimiento para la cmara, adems de trayectorias de movimientos para los objetos y personajes que participen en la animacin. Se han desarrollado diversas tcnicas para simular y enfatizar los efectos de movimiento. Los electos de compresin y expansin son mtodos estndar para resaltar las aceleraciones, y la modificacin del tiempo entre unos fotogramas y otros permite conseguir variaciones de velocidad. Otros mtodos incluyen movimientos preliminares de preparacin, movimientos de seguimiento al tlnal de la accin y mtodos de variacin del punto de atencin que centran la imagen sobre una accin importante que est teniendo lugar en la escena. Nonnalmente, se utilizan funciones trigonomtricas para detenninarel espaciado temporal de los fotogramas intermedios cuando los movimientos incluyen aceleraciones.
776
CAPTULO 13
Las animaciones pueden generarse mediante software de propsito especial o utilizando un paquete gradeo de propsito general. Entre los sistemas disponibles para la animacin automtica por computadora se incluyen los sistemas basados en fotogramas clave, los sistemas parametrizados y los sistemas basados en scripts. Muchas animaciones incluyen efectos de morfismo, en los que se hace que cambie la forma de un objeto. Estos efectos se consiguen utilizando fotogramas intermedios para efectuar la transicin, transformando los puntos y lneas que definen un objeto en los puntos y lneas que definen el objeto final. Los movimientos dentro de una animacin pueden describirse por especificacin directa del movimiento o pueden estar dirigidos por objetivos. As, una animacin puede definirse en trminos de los parmetros de traslacin y rotacin, o los movimientos pueden describirse mediante ecuaciones o mediante parmetros cinemticos o dinmicos. Las descripciones cinemticas del movimiento especifican las posiciones, velocidades y aceleraciones; las descripciones dinmicas del movimiento se proporcionan en trminos de las fuerzas que actan sobre los objetos incluidos en una escena. A menudo se utilizan figuras articuladas para modelar el movimiento de las personas y de los animales. Con este mtodo, se definen enlaces rgidos dentro de una estructura jerrquica, conectados mediante articulaciones giratorias. Cuando se imprime movimiento a un objeto, cada subparte est programada para moverse de una forma concreta en respuesta al movimiento global. La velocidad de muestreo para los movimientos peridicos debe producir los suficientes fotogramas por ciclo como para mostrar correctamente la animacin. En caso contraro, pueden producirse movimientos errticos o confusos. Adems de las operaciones de barrido y de los mtodos basados en tablas de colores, hay disponibles algunas funciones en GLUT (OpenGL Utility Toolkit) para desarrollar programas de animacin. Estas funciones proporcionan rutinas para las operaciones de doble bfer y para incrementar los parmetros de movimiento durante los intervalos de inactividad durante el procesamiento. En la Tabla I3.l se enumeran las funciones GLUT para generar animaciones con programas OpenGL.
Descripcin Activa las operaciones de doble bfer. Intercambia los bferes de refresco frontal y trasero. Consulta al sistema para determinar si estn disponibles las operaciones de doble bfer. Especifica una funcin para incrementar los parmetros de animacin.
glutldleFunc
REFERENCIAS
Los sistemas de animacin por computadora se analizan en Thalmann y Thalmann (l985),Watt and Walt (1992), O'Rourke (1998), Maestri (1999 y 2002), Kerlow (2000), Gooch y Gooch (2001), Parent (2002), Pocock y Rosebush (2002) y Strothotte y Schlechtweg (2002). Las tcnicas tradicionales de animacin se exploran en Lasseter (1987), Thomas, Johnston y Johnston (1995) y Thomas y Lefkon (1997). Los mtodos de morfismos se estudian en Hughes (1992), Kent, Carlson y Parent (1992), Sederberg y Greenwood (1992) y Gomes, Darsa, Costa y Velho (1999). Hay disponibles diversos algoritmos para aplicaciones de animacin en Glassner (1990), Arvo (1991), Kirk (1992), Gascuel (1993), Snyder, Woodbury, Fleischer, Currin y Barr (1993) y Paeth (1995). Para ver una explicacin de las tcnicas de animacin en OpenGL, consulte Woo, Neider, Davis y Shreiner (1999).
Ejercicios
777
EJERCICIOS
13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 Disee un guin y los fotogramas clave correspondientes para una animacin de una figura articulada simple, como en la Figura 13.19. Escriba un programa para generar los fotogramas intermedios para los fotogramas clave especificados en el Ejercicio 13.1 utilizando interpolacin lineal. Expanda la secuencia de animacin del Ejercicio 13.1 para que incluya dos o ms objetos mviles. Escriba un programa para generar los ltogramas intermedios para los fotogramas clave del Ejercicio 13.3 utilizando interpolacin lineal. Escriba un programa de modismo para transformar cualquier polgono en otro polgono e.speeilicado, utilizando cinco fotogramas intermedios. Escriba un programa de morfismo para transfonnar una esfera en un poliedro especificado, utilizando cinco fotogramas intermedios. Defina una especificacin de una animacin que incluya aceleraciones y que implemcntc la Ecuacin 13.7. Defina la especificacin de una animacin que incluya tanto aceleraciones como deceleraciones, implementando los clculos de espaciado de los fotogramas intermedios dados en las Ecuaciones 13.7 y 13.8. Defina la especificacin de una animacin que impleniente los clculos de aceleracin-deceleracin de la Ecuacin 13.9.
13.10 Escriba un programa para simular los movimientos lineales bidimcnsionales de un circulo relleno dentro de un rea rectangular especificada. Hay que dar al crculo una posicin y una velocidad iniciales y el crculo debe rebotar en las paredes, siendo el ngulo de reflexin igual al ngulo de incidencia. 13.11 Convierta el programa del ejercicio anterior en un juego de frontn, sustituyendo un lado del rectngulo por un lado del rectngulo por un corlo segmento de lnea que pueda moverse adelante y atrs a lo largo de dicho lado del rectngulo. El movimiento interactivo del segmento de lnea simula una raqueta que puede colocarse para evitar que escape la bola. El juego terminar cuando el crculo escape del interior del rectngulo. Los parmetros iniciales de entrada incluyen la posicin del circulo, la direccin y la velocidad. La puntuacin del juego puede incluir el nmero de veces que la raqueta golpea a la bola. 13.12 Modifique el juego de frontn del ejercicio anterior para variar la velocidad de la bola. Despus de un corto intervalo fijo, como por ejemplo cinco rebotes, la velocidad de la bola puede incrementarse. 13.13 Modifique el ejemplo de la bola bidimensional dentro de un rectngulo, para convertirlo en una esfera que se mueva tridimensionalmenle en el interior de un paraleleppedo. Pueden especificarse parmetros de visualizacin interactivos para ver el movimiento desde distintas direcciones. 13.14 Escriba un programa para implementar la simulacin de una bola que rebote utilizando la Ecuacin 13.10. 13.15 Expanda el programa del ejercicio anterior para incluir efectos de comprensin y expansin. 13.16 Escriba un programa para implementar el movimiento de una bola que rebote utilizando ecuaciones dinmicas. El movimiento de la bola deber estar gobernado por una fuerza gravilatoria dirigida hacia abajo y una fuerza de friccin con el plano de tierra. Inicialmente, se proyecta la bola hacia el espacio con un vector de velocidad dado. 13.17 Escriba un programa para implementar especificaciones de movimiento dinmico. Especifique una escena con dos objetos o ms, con unos parmetros de movimiento iniciales y con unas fuerzas especificadas. Despus, genere la animacin resolviendo las ecuaciones de fuerza. (Por ejemplo, los objetos podran ser la Tierra, la Luna y el Sol, con fuerzas gravitatorias atractivas que sean proporcionales a la masa e inversamente proporcionales al cuadrado de la distancia). 13.18 Modifique el programa del hexgono giratorio para permitir al usuario seleccionar interactivamente el objeto que hay que girar, a partir de una lista de opciones de men. 13.19 Modifique el programa del hexgono giratorio para que la rotacin sea alrededor de una trayectoria elptica. 13.20 Modifique el programa del hexgono giratorio para permitir una variacin interactiva de la velocidad de rotacin.
Modelado jerrquico
Una escena fotogrfica que contiene un complejo de edificios modelado jerrquicamente. (Cortesa de Silicon Graphics, Inc.)
Al definir un sistema de objeto complejo, lo ms fcil suele ser especificar primero las subparles y luego describir cmo encajan estas subpartes para formar el objeto o sistema global. Por ejemplo, una bicicleta puede describirse en trminos de un chasis, unas ruedas, unos pedales, un asiento, etc., junto con las reglas para posicionar estos componentes con el fin de formar la bicicleta. Una descripcin jerrquica de este tipo puede proporcionarse en forma de estructura de rbol, que estar compuesta de las subpartes en los nodos del rbol y de las reglas de construccin como las ramas del rbol. Los sistemas de arquitectura e ingeniera, como por ejemplo los planos de edificios, los diseos de automviles, los circuitos electrnicos y los electrodomsticos, se desarrollan hoy en da utilizando siempre paquetes de diseo asistido por computadora. Asimismo, se usan mtodos de diseo grfico para representar sistemas econmicos, financieros, organizativos, cientficos, sociales y medioambientales. A menudo, se construyen simulaciones para estudiar el comportamiento de un sistema en diversas condiciones, y el resultado de la simulacin puede servir como herramienta de formacin o como base para tomar decisiones acerca del sistema. Los paquetes de diseo proporcionan, generalmente, rutinas para crear y gestionar modelos jerrquicos y algunos paquetes tambin contienen formas predefinidas, como por ejemplo ruedas, puertas, ejes o componentes de circuitos elctricos.
780
CAPTULO 14
Modelado jerrquico
Eni rad ;i
Imi un li
FIGURA 14.1. Modelo de un circuito lgico. dicho smbolo. Tenemos una instancia para los smbolos or y nal en la Figura 14.1 y dos instancias para el smbolo and. En muchos casos, los smbolos grficos concretos elegidos para representar las partes de un sistema estn dictados por la descripcin del propio sistema. Para los modelos de circuitos, se utilizan smbolos lgicos o elctricos estndar, pero con modelos que representen conceptos abstractos, como por ejemplo sistemas polticos, financieros o econmicos, podemos utilizar como smbolos cualquier patrn geomtrico que nos resulte conveniente. La informacin que describe un modelo suele proporcionarse como una combinacin de datos geomtricos y no geomtricos. La informacin geomtrica incluya las coordenadas para ubicar las partes componentes, las primitivas de salida y las funciones de atributo que definen la estructura de los componentes, as como dalos para construir las conexiones entre esos componentes. La informacin no geomtrica incluye las etiquetas de texto, los algoritmos qtie describen las caractersticas de operacin del modelo y las reglas para determinar las relaciones o conexiones entre las partes componentes, si es que stas no estn especificadas como datos geomtricos. Hay dos mtodos para especificar la informacin necesaria para construir y manipular un modelo. Uno de ios mtodos consiste en almacenar la informacin en una estructura de datos, como por ejemplo una tabla o una lista enlazada. El otro mtodo se basa en especificar la informacin mediante procedimientos. En general, una especificacin de un modelo contendr tanto estructuras de datos como procedimientos, aunque algunos modelos estn definidos completamente mediante estructuras de dalos y otros utilizan slo especificaciones procedimentales. Una aplicacin para realizar el modelado de objetos slidos puede que utilice principalmente informacin extrada de algn tipo de estructura de datos con el Un de definir las coordenadas, emplendose muy pocos procedimientos. Un modelo climtico, por el contrario, puede que necesite principalmente procedimientos para poder calcular los grficos de temperatura y las variaciones de presin. Como ejemplo de utilizacin de combinaciones de estructuras de datos y procedimientos, vamos a considerar algunas especificaciones alternativas para el modelo del circuito lgico de la Figura 14.1. Un mtodo consiste en definir los componentes lgicos en una tabla de dalos (Tabla 14.1), empleando una serie de procedimientos de procesamiento para especificar cmo deben realizarse las conexiones de red y cmo opera el circuito. Los datos geomtricos contenidos en esta tabla incluyen las coordenadas de parmetros necesarios para dibujar y posicionar las puertas. Estos smbolos pueden dibujarse como formas poligonales o pueden formarse mediante combinacin de segmentos de lnea recta y arcos elpticos. Las etiquetas para cada una de las puertas componentes tambin se han incluido en la tabla, aunque podran omitirse si los smbolos se mostraran mediante formas comnmente reconocibles. Despus de esto, utilizaramos procedimientos para mostrar las puertas y construir las lneas de conexin, basndonos en las coordenadas de las puertas y en un orden especificado para interconectarlas. Se empleara tambin otro procedimiento adicional para producir la salida del circuito (valores binarios) a partir de cualquier entrada dada. Este procedimiento podra definirse de modo que slo mostrara la salida final, o bien se le podra disear para que mostrara tambin los valores de salida intermedios, con el fin de ilustrar el funcionamiento interno del circuito. Alternativamente, podramos especificar la informacin grfica correspondiente al modelo de circuito mediante estmeturas de datos. Las lneas de conexin, asi como las puertas, podran entonces definirse en una tabla de dalos que enumerara explcitamente los extremos de cada una de las lneas del circuito. Con esto, podramos emplear un nico procedimiento para visualizar el circuito y calcular la salida. En el otro extremo.
1. TABLA DE DATOS QUE DEFINE LA LA FIGURA 14.1 Cdigo de! smbolo Puerta 1 Puerta 2 Puerta 3 Puerta 4 Descripcin geomtrica (Coordenadas y otros parmetros)
sera tambin posible definir completamente el modelo mediante procedimientos, sin utilizar ninguna estructura de datos externa.
Jerarquas de smbolos
Muchos modelos pueden organizarse como una jerarqua de smbolos. Los elementos bsicos del modelo se definen como formas geomtricas simples que resulten apropiadas para el tipo de modelo que se est considerando. Estos smbolos bsicos pueden usarse para formar objetos compuestos, algunas veces denominados mdulos, que a su vez pueden agruparse para formar objetos de nivel superior, etc., para los diversos componentes del modelo. En el caso ms simple, podemos describir un modelo mediante una jerarqua de un nico nivel formada por las partes componentes, como en la Figura 14.2. Para este ejemplo de circuito, asumimos que las puertas se colocan y se conectan unas a otras con lneas rectas, de acuerdo con una serie de reglas de conexin especificadas con cada descripcin de puertas. Los smbolos bsicos en esta descripcin jerrquica son las puertas lgicas. Aunque las propias puertas podran describirse como jerarquas (formadas por lneas rectas, arcos elpticos y textos) dicha descripcin no resultara cmoda para construir circuitos lgicos, ya que en este tipo de circuitos los bloques componentes ms simples son las puertas. En una aplicacin en la que estuviramos interesados en disear diversas formas geomtricas, los smbolos bsicos podran definirse mediante segmentos de lnea recta y arcos. En la Figura 14.3 se muestra mi ejemplo de una jerarqua de smbolos de dos niveles. Aqu, el plano de una fbrica se construye mediante una disposicin de reas de trabajo. Cada rea de trabajo est equipada con un conjunto de muebles. Los smbolos bsicos son los muebles: mesa de trabajo, silla, estantes, archivador, etc. Los objetos de nivel superior son las reas de trabajo, que se componen mediante diferentes organizaciones de los muebles. Cada instancia de un simbolo bsico se define especificando su posicin, su tamao y su orientacin dentro de cada rea de trabajo. Las posiciones se especifican mediante las coordenadas dentro del rea de trabajo y las orientaciones se especifican como rotaciones que determinan hacia qu direccin apuntan los smbolos. En el primer nivel debajo del nodo raz del rbol correspondiente a la fbrica, cada rea de
Circuito lgico
Puerta and
FIGURA 14.2. Una descripcin jerrquica de un solo nivel para un circuito formado mediante puertas lgicas.
782
CAPTULO 14
Modelado jerrquico
Fbrica
rea de trabajo l
rea de trabajo 2
rea de trabajo 3
Me su de trabajo
Silla
- ,. . Archivador
Mesa de . . trabajo
Silla
Estantes
f trabajo
S i l l a
Estantes
Archivador
'
FIGURA 14.3. Una descripcin jerrquica en dos niveles para el plano de una fbrica. trabajo se define especificando su posicin, su tamao y su orientacin dentro del plano de la fbrica. La frontera de cada rea de trabajo puede estar definida mediante un divisor que encierre el rea de trabajo y proporcione una serie de entornos independientes dentro de la fbrica. Otras jerarquas de smbolos ms complejas pueden formarse mediante el agrupamiento repetido de conjuntos de smbolos en cada nivel superior. La disposicin de la fbrica mostrada en la Figura I4.3 podra ampliarse para incluir grupos de smbolos que formaran diferentes habitaciones, diferentes pisos de un edificio, diferentes edificios dentro de un complejo y diferentes complejos en ubicaciones geogrficas ampliamente separadas.
FIGURA 14.4. Una jerarqua de objetos generada utilizando el paquete PHIGS Toolkit desarrollado en la Universidad de Manchester. El propio rbol de objetos visualizado es una estructura PHIGS. (Cortesa de T. L. J. Howard. J. G Williams y W, T, l/ewitt. Departamento de Computer Science, Universidad de Manchester. Reino Unido.)
783
FIGURA 14.6. Un modelo CAD que muestra los componentes individuales de un motor, representado por Ted Malone. ITI/3D-Magic. (Cortesa de Silicon Graphics, hn\)
qua de estructuras Pl IIGS es el que se muestra en la Figura 14.4. Esta imagen fue generada utilizando el software PHIGS Toolkil, desarrollado en la Universidad de Manchester y que proporciona un editor, ventanas, mens y otras herramientas de interfaz para aplicaciones PHIGS. Si una biblioteca grfica no contiene funciones de modelado, podemos utilizar a menudo una interfaz que algn paquete de modelado ofrezca para esas rutinas grficas. Alternativamente, podemos crear nuestras propias rutinas de modelado utilizando las transformaciones geomtricas y otras funciones disponibles en la biblioteca grfica. Los paquetes de modelado especializados, como algunos sistemas CAD, se deinen y estructuran de acuerdo con el tipo de aplicacin para la que el paquete haya sido diseado. Estos paquetes proporcionan mens con las formas de los smbolos, as como funciones para la aplicacin pretendida. Dichos paquetes pueden estar diseados para modelado bidimensional o tridimensional. La Figura 14.5 muestra un esquema bidimensional generado por un paquete CAD configurado para aplicaciones de diseo de circuitos, mientras que la
FIGURA 14.7. Una representacin mediante nodos de aristas para residuos de aminocidos, modelada y representada por Julie Newdoll, UCSF Computer (raphics Lab. (Cortesa de Silicon Graphics, Inc.)
FIGURA 14.8. Una mitad de una pareja de imgenes estereoscpicas que muestran un modelo molecular tridimensional del ADN. Datos suministrados por Schlick, NYU y Wilma K. Olson, Rutgers University; visualizacin realizada por Jerry Greenberg, SDSC. (Cortesa de S/ephanie Sides. San Diego Stfpercomputer Center. j
Figura 14.6 ilustra una aplicacin C A D tridimensional. En las Figuras 14.7 y 14.8 se muestran ejemplos de modelado molecular, mientras que la Figura 14.9 incluye un modelo tridimensional de una vivienda.
Coordenadas locales
En aplicaciones generales de diseo, los modelos se construyen con instancias (copias transformadas) de las formas geomtricas definidas en un conjunto bsico de smbolos. Cada instancia se coloca, con la orientacin
Sistema de las ruedas delanteras FIGURA 14.10. Sistemas de coordenadas posibles utilizados a la hora de simular el movimiento de un tractor. Una rotacin del sistema de las ruedas delanteras hace que el tractor gire. Tanto el marco de referencia de las ruedas como el del tractor se desplazan dentro del sistema de coordenadas universales.
14.3
Mtodos generales
de
modelado jerrquico
785
10 1-
5 -
O -
0 -
-5 -
-5 "5 0
iii
-10 JL
-10
-5
0 Mesa de trabajo
10
Matriz de coordenadas de la silla Silla r "3 -3 3 3 l 2 1 (ai FIGURA 14.11. Objetos definidos en coordenadas locales. Silla v -3 3 -3 3 0 3
j i
8 8
0 6 6 -10 -1
apropiada, en el sistema de coordenadas universales correspondiente a la estructura global del modelo, Los
diversos objetos grficos que hay que usar en una aplicacin se definen en relacin con el sistema de referencia de coordenadas universales, refirindonos a este nuevo sistema como sistema de coordenadas /ocales de dicho objeto. Las coordenadas locales se denominan tambin coordenadas de modelado o, en ocasiones, coordenadas maestras. La Figura 14.II ilustra las definiciones en coordenadas locales para dos smbolos que podran usarse en una aplicacin de diseo bidimensional de planos de oficinas.
Transformaciones de modelado
Par construir un modelo grfico, aplicamos transformaciones a las definiciones de los smbolos en coordenadas locales, con el fin de producir instancias de los smbolos dentro de la estructura global del modelo. Las transformaciones aplicadas a las definiciones de los smbolos en coordenadas de modelado, con el fin de dar a esos smbolos una posicin y orientacin concretas dentro de un modelo, se denominan transformaciones de modelado. Las transformaciones tpicamente disponibles en un paquete de modelado son las de translacin, rotacin y cambio de escala, aunque algunas aplicaciones pueden tambin utilizar otros tipos de transformaciones.
786
CAPTULO 14
Modelado jerrquico
Definimos cada mdulo inicial como una lista de instancias de smbolos, junto con los apropiados parmetros de transformacin para cada smbolo. En el siguiente nivel, definimos cada mdulo de nivel superior como una lista de smbolos y de instancias de mdulo de nivel inferior, junto con sus parmetros de transformacin. Este proceso contina hasta alcanzar la raz del rbol, que representa el modelo total en coordenadas universales. En un paquete de modelado, un mdulo se crea con una secuencia de comandos del tipo:
cerrarMduloi
A cada instancia de un smbolo bsico se le asigna un conjunto de parmetros de transformacin para dicho mdulo. De forma similar, los mdulos se combinan para formar otros mdulos de primer nivel con funciones tales como:
cerrarMdulo6
La funcin de transformacin para cada mdulo o smbolo especifica cmo hay que encajar dicho enfoque dentro del mdulo de nivel superior. A menudo, se proporcionan opciones para que una determinada matriz de transformacin pueda premultiplicar, postmultiplicar o sustituir a la matriz de transformacin actual. Aunque en un paquete de modelado puede haber disponible un conjunto bsico de smbolos, puede que ese conjunto de smbolos no contenga las formas que necesitamos para una aplicacin concreta. En tal caso, podemos crear formas adicionales dentro de un programa de modelado. Como ejemplo, el siguiente pseudocdigo ilustra la especificacin de un modelo simple de bicicleta:
crearSmboloRueda crearSmboloChasis
crearMduloBicicleta
especificarTransformacinChasis insertarSmboloChasie
14.5 Resumen
787
En los sistemas diseados para modelado jerrquico suele haber disponibles varias otras rutinas de modelado. Suele ser habitual que los mdulos puedan visualizarse selectivamente o extraerse temporalmente de la representacin de un sistema. Estos permite al diseador experimentar con diferentes formas y estructuras de diseo. Asimismo, los mdulos pueden resaltarse o desplazarse a travs de la imagen durante el proceso de diseo.
glNewList
(bicycle,
GL_COMPILE;
tyl,
tzl);
tz2);
(wheel);
De forma similar, la lista de visualizacin f r a m e (chasis) podra a su vez estar compuesta de listas de visualizacin individuales que describieran el manillar, la cadena, los pedales y otros componentes.
14.5 RESUMEN
El trmino modelo, en aplicaciones infogrficas, hace referencia a una representacin grfica de un sistema. Los componentes grficos de un sistema se representan como smbolos definidos en sistemas de referencia de coordenadas locales, las cuales se denominan tambin coordenadas maestras o de modelado. Podemos crear un modelo, como por ejemplo un circuito elctrico, colocando instancias de los smbolos en ubicaciones seleccionadas y con orientaciones prescritas. Muchos modelos se construyen como jerarquas de smbolos. Podemos construir un modelo jerrquico a nivel de mdulos, que estarn compuestos de instancias de smbolos bsicos y de otros mdulos. Este proce-
788
so de anidamiento debe continuar hacia abajo, hasta alcanzar smbolos que estn definidos mediante primitivas grficas de salida y sus correspondientes atributos. A medida que se anida cada smbolo o mdulo dentro de un mdulo de nivel superior, se especifica una transformacin de modelado asociada con el fin de describir su papel concreto dentro de la estructura anidada. Podemos definir un modelo jerrquico en OpenGL utilizando listas de visualizacin. La funcin g l N e w L i s t puede utilizarse para definir la estructura global de un sistema y sus mdulos componentes. Los smbolos individuales u otros mdulos se insertan dentro de un mdulo utilizando la funcin g l C a l l L i s t , precedida mediante un conjunto apropiado de transformaciones que especifiquen la posicin, orientacin y (amafio del componente insertado.
REFERENCIAS
Puede encontrar ejemplos de aplicaciones de modelado con OpenGL en Woo. Neider. Davis y Shreiner
(I999).
EJERCICIOS
14.1
Explique las representaciones de modelos que sedan apropiadas para diferentes tipos de sistemas que tengan caractersticas muy distintas. Asimismo, explique cmo pueden implementarse las representaciones grficas para cada sistema. Disee un paquete de diseo bidimensional de oficinas, I lay que proporcionar al diseador un men de formas d muebles y el diseador puede poder utili/ar un ratn para seleccionar y colocar un objeto en cualquier ubicacin dentro de una habitacin (jerarqua de un nico nivel). Las transfonnaciones de instancias pueden limitarse a traslaciones y rotaciones. Ample el ejercicio anterior para poder tambin cambiar la escala de las formas de los muebles. Disee un paquete bidimensional de modelado de oficinas que presente un men de formas de muebles. Utilice una jerarqua de dos niveles, de modo que los muebles puedan colocarse en diversas reas de trabajo y que las reas de trabajo puedan disponerse dentro de un rea mayor. Los muebles deben poder colocarse en las reas de trabajo utilizando nicamente transformaciones de instancia de traslacin y rotacin. Ampli el ejercicio anterior de modo que tambin pueda cambiarse la escala de los muebles. Escriba un conjunto de rutinas para crear y visualizar smbolos para el diseo de circuitos lgicos. Como mnimo, el conjunto de smbolos debe incluir las puertas and, or y nol mostradas en la figura 14.1. Desarrolle un paquete de modelado para el diseo de circuitos lgicos que pennita al diseador colocar smbolos elctricos dentro de la red de un circuito. Utilice el conjunto de smbolos del ejercicio anterior y emplee nicamente traslaciones para colocar en la red una instancia de las formas contenidas en el men, l.'na \ez colocado un componente en la red. debe podrselo conectar con otros componentes especificados mediante segmentos de lnea rectu. Escriba un conjunto de rutinas para editar mdulos que hayan sido creados en un programa de aplicacin. Las rutinas deben proporcionar las siguientes modalidades de edicin: adicin, insercin, sustitucin y borrado de mdulos. Dadas las extensiones de coordenadas de todos los objetos visualizados en un modelo, escriba una rutina para borrar cualquier objeto seleccionado.
14.2
14.3 14.4
14.8
14
14.10 Escriba procedimientos para visualizar y borrar un mdulo especificado dentro de un modelo. 14.11 Escribe una rutina que permita extraer selectivamente mdulos de la imagen de un modelo o volver a activar su visualizacin.
Ejercicios
789
14.12
Escriba un procedimiento para resaltar de alguna manera un mdulo seleccionado. Por ejemplo, el mdulo seleccionado podra mostrarse con un color distinto o podra encerrrselo dentro de un contorno rectangular.
14.13 Escriba un procedimiento para resaltar un mdulo seleccionado en un modelo, haciendo que el mdulo parpadee.
Una escena generada por computadora creada con golpes de pincel de acuarela simulada.
15.1
Cualquier representacin ilustrativa almacenada se denomina archivo grfico o archivo de imagen. Para sistemas de grllcos digitalizados, un dispositivo de pantalla en color se representa en el bler de imagen como un conjunto de valores de pxel RGB. Como se pudo ver en la Seccin 2 . 1 , el contenido del bfer de imagen, o cualquier seccin rectangular del mismo, se llama pixmap. Aunque las imgenes monocromticas pueden almacenarse en formato bitmap (usando un bit para cada pxel) la mayora de los grllcos digitalizados se almacenan como pixmaps. En general, cualquier representacin digitalizada correspondiente a un grfico es lo que se denomina archivo digitalizado o raslerizado. Se han desarrollado muchos fonnatos para organizar la informacin en un archivo de imagen de varias maneras, y los archivos digitalizados de color completo pueden ser bastante grandes, por lo que la mayora de los formatos de archivo aplican algn tipo de compresin para reducir el tamao del mismo, tanto para archivado definitivo como para su transmisin. Adems, el nmero de valores de color en un archivo de imagen de color completo debe reducirse cuando la imagen va a visualizarse en un sistema con capacidades de color limitadas, o cuando el archivo va a almacenarse en un formato que no soporta 24 bits por pxel. Aqu, se ofrece una breve introduccin a los formatos de archivos grficos y los mtodos usados comnmente para reducir el tamao tanto del archivo como del nmero de colores que se van a usar en la visualizacin de una imagen.
7 9 2 CAPTULO 1 5
lares, curvas de splines y otras primitivas. Las representaciones geomtricas pueden contener tambin informacin sobre los atributos y los parmetros de visualizacin. Este tipo de representacin de imgenes se llama comnmente formato vectorial, incluso cuando no todas las estructuras geomtricas se definen mediante segmentos de lnea recta. Originalmente, el trmino de archivo vectorial se empleaba para describir una lista de segmentos de lnea que se visualizaban en un sistema vectorial (barrido aleatorio). Aunque los sistemas vectoriales han sido sustituidos por sistemas digitalizados, y las descripciones de objetos no lineales han sido aadidas a los archivos vectoriales, el nombre continua siendo aplicado a cualquier archivo que usa una representacin geomtrica para una imagen. Los formatos de archivo que soportan tanto representacin de imgenes geomtricas como digitalizadas son lo que se denominan formatos hbridos o metaarchivos. Las aplicaciones de visualizacin cientfica a menudo usan un archivo de imagen que es un conjunto de valores de datos generados a partir de instrumentos de medicin o de simulaciones numricas por computadora. Hay disponibles diversos programas que se usan para ofrecer visualizaciones de datos particulares, tales como visualizaciones de pseudo-color, representaciones de isosuperficies o representaciones de volmenes.
1 5.3
Tcnicas de compresin
de archivos
793
Valores R G B originales
Valores R G B reducidos
FIGURA 15.1. Reduccin uniforme de color de los valores RGB de una imagen de color cernpelo a k niveles.
FIGURA 15.2. Bloque de colores de imagen y divisin de este bloque en la posicin de la componente roja media.
gen para reducir la representacin de bits para las componentes individuales RGB. Luego, se explora este conjunto modificado de colores para producir un recuento, o un histograma, de la frecuencia de aparicin de cada componente de color RGB. Para producir un archivo de color reducido con k colores, se selecciona la k de los colores que aparecen ms frecuentemente en el archivo de imagen.
R e d u c c i nd ec o l o rd ec o r t em e d i o
En este algoritmo, se subdivide el espacio de color para el archivo de imagen en k subregiones y se calcula el color medio para cada una de las subregiones. Para formar las subregiones, primero se determinan los valores mnimo y mximo para cada componente RGB: R , R G , G , B y B . Estos valores proporcionan los saltos en el bloque de colores dentro del cubo de color RGB que est presente en la imagen. Para el mayor de estos tres intervalos, se determina el valor medio y se usa este valor para formar dos bloques de color ms pequeos. Por ejemplo, si el componente rojo tiene el rango ms largo, se calcula el valor R de tal forma que la mitad de los colores de pxel estn por encima de este valor y la mitad por debajo. Despus se recorta la imagen de color dentro de dos subbloques en la posicin E L ^ j , como se muestra en la Figura I 5 . 2 . Cada uno de los dos subbloques de color son procesados usando el mismo procedimiento de subdivisin. Este proceso continua hasta que se tiene subdividido el bloque de color de la imagen original en k subbloques. En cada paso, se puede aplicar el procedimiento de subdivisin al subbloquc mayor. Un color medio con la precisin deseada se calcula para cada subbloqtie, y todos los colores de la imagen dentro de un subbloque se sustituyen con el color promedio del subbloque.
m i n m a x % m j n n i a x m i n l l l a x m c d i a n
15.3
Hay disponible una amplia variedad de tcnicas de compresin que permiten reducir el nmero de bytes en un archivo de imagen, pero la eficacia de un mtodo de compresin particular depende del tipo de imagen. Los mtodos sencillos que necesitan patrones en el archivo de imagen son ms efectivos con diseos geomtricos que contienen amplias reas de colores sencillos, mientras que los esquemas de compresin complejos producen mejores resultados con grficos por computadora fotorrealislas y fotografas digitali/adas. La tcnica general empleada para reducir el tamao de los archivos grficos consiste en sustituir los valores de color con una codificacin que ocupe menos bytes que en el archivo original. Adems, se incorporan cdigos a los archivos comprimidos para indicar cosas como el final de una lnea de barrido y el final del archivo de imagen.
794
CAPTULO 15
Formatos
de archivos grficos
Algunos algoritmos de compresin implican operaciones en punto flotante, que pueden introducir errores de redondeo. Adems, algunos mtodos usan aproximaciones que tambin modifican los colores de la imagen. Como resultado, un archivo que ha sido decodificado a partir de un archivo comprimido a menudo contiene valores de color que no son exactamente los mismos que haba en la imagen original. Por ejemplo, un color entero RGB que se especifica como (247, i08, I75) en un archivo de imagen de entrada puede convertirse en el color (242, I I I , 177) despus de decodificar el archivo comprimido. Pero tales cambios de color, normalmente, son tolerables porque el ojo humano no es sensible a pequeas diferencias de color. Los mtodos de reduccin de archivos que no cambian los valores en un archivo de imagen emplean tcnicas sin prdida de compresin, y aqullos que dan lugar a cambios de color usan tcnicas con prdidas de compresin. En la mayora de los casos, los mtodos con prdidas de compresin dan lugar a una tasa de comprensin mucho mayor para un archivo, siendo la tasa de compresin el nmero de bytes del archivo original dividido entre el nmero de bytes del archivo comprimido.
lo que indica que el valor 20 ocurre 4 veces, seguido de 3 valores no repetitivos 99. 68 y 3 1 , el cual va seguido por 8 ocurrencias del valor 40. En este ejemplo de codificacin, los primeros 15 bytes del archivo de entrada se comprimen en 8 bytes.
Codificacin L Z W
Desarrollado por Lempel, Ziv y Weleh, el mtodo LZW es una modificacin de los anteriores LZ, LZ77 y LZ78 algoritmos de reconocimiento de patrones. En el esquema LZW, los patrones repetidos en un archivo de imagen son sustituidos por un cdigo. Por ejemplo, la siguiente lista de 12 valores contiene dos ocurrencias para cada patrn {128, 96} y |200, 30, 10}:
{128, 96, 200, 30, 10, 128,
96,
50,
240,
200,
30,
10,
. . .
Se pueden sustituir estos dos patrones con los cdigos c\ y c2 y, al patrn restante 50, 240} puede asignrsele el cdigo el. Esto reduce los primeros doce valores de la lista de entrada a los siguientes 5 bytes: { e l , c2, e l , c3, c2, . . . } Alternativamente, cualquier secuencia de valores no repetitivos, tales como {50, 240 podran almacenarse en el archivo comprimido sin asignar un cdigo a la secuencia.
795
Bsicamente, el algoritmo LZW busca secuencias repetidas y construye una tabla de tales secuencias junto con sus cdigos asignados. As, este esquema de codificacin se denomina algoritmo sustitucional o algoritmo basado en diccionario. El archivo comprimido se decodiflca entonces con la tabla de cdigos.
Codificacin Huffman
Con el mtodo IlulTman la compresin del archivo se logra usando un cdigo de longitud variable para los valores de un archivo de imagen. El mtodo de codificacin Huffman asigna el cdigo ms cono al valor del archivo que tiene una ocurrencia ms frecuente, y el cdigo ms largo se asigna al valor que ocurre con menor frecuencia. La idea bsica en el algoritmo Ilufman es la misma que en el cdigo Morse, el cual asigna cdigos de caracteres de longitud variable a letras del alfabeto. A las letras con mayor frecuencia en el esquema Morse, se les asigna cdigos de un carcter, y las letras con frecuencia ms baja tienen asignado cdigos de cuatro caracteres. Por ejemplo, la letra E se codifica con un punto (V), la letra T se codifica como guin (-) y la letra 0 se codifica como una secuencia de cuatro caracteres con un punto y tres guiones (--.-). En cambio, en lugar de usar cdigos de caracteres, el cdigo Huffman asigna cdigos de bits de longitud variable a los valores de un archivo de imagen, que ofrecen mayores tasas de compresin. El primer paso en el algoritmo Huffman consiste en contar el nmero de ocurrencias para cada valor contenido en el archivo de imagen de enUada. Luego, los cdigos de bits se asignan a los valores de acuerdo con la frecuencia contada. Un mtodo para asignar los cdigos de bits de longitud variable es construir un rbol binario con los valores de alta frecuencia cerca de la raz del rbol y los valores con frecuencias ms bajas como nodos hoja. Comenzando con los valores de baja frecuencia, se pueden crear subrboles de abajo a arriba. A cada nodo rama de un subrbol se le asigna una etiqueta numrica, que es la suma de las cuentas de frecuencia o los nodos etiqueta de sus dos hijos. Cuando el rbol est completo, todos los subrboles de la izquierda se etiquetan con el valor binario 0 y todos los rboles de la derecha se etiquetan con el valor binario I . El cdigo de bit para cada valor del archivo se forma mediante la concatenacin de las etiquetas de bit de las ramas, desde la raz del rbol hacia abajo hasta el nodo posicin de aquel valor de archivo del rbol. Para ilustrar los pasos generales de construccin de un rbol se usa el conjunto de seis valores de la Tabla 15.1. Este conjunto representa una pequea imagen de ejemplo que contiene 21 elementos, en la que el valor % aparece 8 veces, el valor 177 aparece 4 veces, y as sucesivamente para los otros cuatro valores del archivo.
TABLA 15.1. RECUENTO DE FRECUENCIAS PARA LOS VALORES DE UN ARCHIVO PEQUEO DE EJEMPLO
Valor de archivo
Recuento de frecuencias
4
I
3
1
j
21
(43)
1
4 3
1
3
3 (I4I)
(85)
FIGURA 15.3. Formacin de un subrbol Huffman usando los valores de archivo 21 y 43.
FIGURA 15.4. Formacin de un subrbol Huffman usando los valores de archivo 141 y 85.
7
4 (177)
(210)
FIGURA 15.5. Formacin de un subrbol Huffman usando los valores de archivo 177 y un subrbol creado previamente.
FIGURA 15.6. Formacin de un subrbol Huffman uniendo dos suhrboles previamente creados.
21
(177)
FIGURA 15.7. rbol binario llutYman completo para los valores de archivo de la Tabla 15.1. Los valores 210 y 43 de esta tabla tienen el recuento de frecuencias ms bajo, por lo que se usan estos dos valores para formar el primer subrbol (Figura 15.3). A la raz de este subrbol se le asigna una etiqueta nodo que es igual a la suma del nmero de ocurrencias de sus dos hijos: 3 = 2 -I- 1. Se borran esos dos valores de archivo (210 y 43) de la lista activa de tal forma que el siguiente recuento de frecuencia menor es 3. Pero justo
797
21
13
0/ \1 (96)
7 0/
4 (177)
\l
3
0/
0/ \l
3 (141)
\l
3
1
(43)
FIGURA 15.8. rbol binario Huffman completo con el etiquetado de las ramas. se ha creado un subrbol que tambin tiene la etiqueta de nodo 3. Por tanto, se puede formar el siguiente subrbol usando cualquier par de los tres elementos que tienen la etiqueta 3. Se eligen los dos valores de archivo para formar el subrbol mostrado en la Figura 15.4, y se borran los valores 141 y 85 de la lista activa. El siguiente subrbol se construye con el valor de archivo 177, el cual presenta una frecuencia de 4, y el subrbol cuya rama tiene la etiqueta 3 (Figura 15.5). Se borra el valor de archivo 177 y el nodo del rbol con la etiqueta 3 de la lista activa, y ahora los dos recuentos ms bajos de la lista representan subrboles. Estos dos subrbolcs se combinan para producir el nuevo subrbol mostrado en Figura 15.6. Finalmente, se completa la construccin del rbol binario (Figura 15.7) uniendo el valor de archivo 96 con el ltimo subrbol creado. El valor asignado a la raz del rbol es el recuento total (21) de lodos los valores del archivo de imagen. Ahora que se tienen todos los valores del archivo en el rbol binario, se pueden etiquetar las ramas de la izquierda del rbol con el valor binario 0 y las ramas de la derecha con el valor binario 1, como se muestra en la Figura 15.8. Comenzando desde la raz del rbol, se concatenan las etiquetas de las ramas hacia abajo en cada uno de los nodos hoja. Esto forma el conjunto de cdigos de longitud variable para cada uno de los valores de archivo, y despus se establece la Tabla 15.2, la cual se almacenar con el archivo comprimido. En este ejemplo, hay un valor de archivo con un cdigo binario de un dgito, tres valores de archivo con un cdigo binario de tres dgitos, y dos valores de archivo con un cdigo binario de cuatro dgitos. Los valores de baja frecuencia tienen cdigos ms largos, y los valores con frecuencia ms alta tienen cdigos ms cortos. Una caracterstica importante de los cdigos Huffman es que ningn cdigo de bits es un prefijo para ningn otro cdigo de bits. Esto permite decodificar una lista codificada de valores de archivo proporcionando la Tabla 15.3 junto con la Tabla 15.2. Para demostrar el algoritmo de decodiicacin, se supone que el archivo comprimido contiene la trama de bits {100100100...}. El primer valor de bits en este archivo es l,as que - TABLA 15.2. CDIGOS HUFFMAN INDEXADOS PARA EL ARCHIVO ndice l 2 3 4 5 6 Valor de archivo 96 I77 I4l 85 2I 43 Cdigo binario l 000 010 011 0010 0011
TABLA 15.3. TABLA DE REFERENCIA DE CDIGOS DE BIT Longitud de cdigo de bits I 3 4 Valor minimo de cdigo I 000 0010 Valor mximo de cdigo 1 011 0011 Primer indice
1
2 5
debo representar el valor de archivo % porque hay un cdigo de bit I y no puede ser un prefijo para ningn otro cdigo. Despus, se tiene el valor de bit 0. No hay ningn otro cdigo de bits adems del I y no hay cdigos de dos bits, as que el siguienle cdigo debe ser 001 0010. Verificando la tabla de cdigos indexada, se encuentra un valor de archivo de 210 con un cdigo 0010, lo que significa que no puede haber un valor de archivo con el cdigo 001. En este punto, se tienen decodificados los dos primeros valores de archivo. % y 210. El siguiente cdigo en la trama de bits debe ser 010 0100. Hay un valor de archivo con el cdigo 010, as que no puede haber un cdigo de cuatro bits con dicho prefijo. Por tanto, el tercer valor de archivo decodillcado es 141. Se continua analizando la trama de bits de esta manera hasta que el archivo comprimido haya sido completamente decodificado. Se pueden usar tambin otros esquemas para generar y asignar cdigos de bits Huffman. Una vez que se tiene el recuento de frecuencias, se podra asignar una longitud de cdigo a cada valor de archivo. Usando la longitud de cdigo y el recuento de la frecuencia, se puede usar un algoritmo de combinacin de listas para deducir los cdigos de bits especficos. Tambin se puede emplear un conjunto de cdigos predefinido para asignar cdigos a los valores de archivo, lo que elimina la necesidad de almacenar los cdigos con el archivo comprimido.
C o d i f i c a c i na r i t m t i c a
En este esquema de compresin, el recuento de frecuencias de un archivo se usa para obtener cdigos numricos para secuencias de valores de archivo. El algoritmo de codificacin aritmtica primero calcula la fraccin del archivo que est ocupada por cada valor. Esto crea un conjunto de subintervalos dentro del intervalo de 0.0 a 1.0. Despus, cada fraccin de archivo se mapea repetidamente sobre estos subintervalos para establecer intervalos numricos para las diferentes combinaciones de valores de archivo. Los lmites numricos de estos intervalos se usan para codificar estas combinaciones. Para ilustrar el mtodo, consideramos un archivo con 80 entradas y slo tres valores distintos. El recuento de frecuencias y las correspondientes fracciones de archivos para los tres valores se enumeran en la Tabla 15.4. Asi, el valor V se asocia con el stibinlervalo de 0.00 a 0.20 dentro del intervalo unidad, el valor V se asocia con el subintervalo de 0.20 a 0.50, y el valor S| se asocia con el subintervalo de 0.50 a 1.00. En otras palabras, el 20 por ciento del intervalo unidad se asocia con F,, el 30 por ciento con K-, y el 50 por ciento con
{ 2
TABLA 15,4. RECUENTO DE FRECUENCIAS Y FRACCIN DE OCURRENCIAS PARA LOS VALORES DE UN ARCHIVO PEQUEO DE EJEMPLO Valor del archivo Recuento de frecuencias 16 24 40 Total 80 Fraccin de archivo 0.20 0.30 0.50 LOO Rango del intervalo unidad 0.00-0.20 0.20-0.50 0.50-I.O
TABLA
15.5. RANGO DEL INTERVALO UNIDAD PARA CADA SECUENCIA DE DOS VALORES QUE COMIENZA CON EL VALOR V* Secuencia Rango del intervalo unidad 0.50-0.60 0.60-0.75 0.75-1.00
l'y Si ahora mapeamos l\ sobre el subinterv alo K sle ocupar el 20 por ciento de la mitad superior del intervalo unidad. Este nuevo suhintervalo, con un rango de 0.50 a 0.60, representa la secuencia F , F Resultados similares se obtienen para los mapeos de W y \\ sobre el subintervalo V la Tabla 15.5 enumera los rangos para estas tres secuencias de dos valores. Continuando de esta forma, se pueden mapear los intervalos para las secuencias de dos valores sobre otros subintervalos para obtener las secuencias para combinaciones ms largas de los valores de archivo. Los valores lmite para los subintervalos se usan entonces para codificar y decoditlcar las secuencias dentro del archivo. Pueden emplearse varios algoritmos para determinar las subdivisiones del intervalo unidad y asignar cdigos numricos a combinaciones de valores de archivo. Y el algoritmo de codificacin aritmtica se implemeiv ta tpicamente usando nmeros binarios en lugar de valores en punto flotante dentro del intervalo unidad. El archivo comprimido es entonces una secuencia de valores binarios.
v p y
para / = 0 . 1
/i-l
<ISM
donde. , para j = 0
. para j * * 0 n Por tanto, este mtodo de transformacin calcula una suma discreta de trminos coseno con una frecuencia que se va incrementando y con amplitudes que son proporcionales a los valores de entrada. Excepto por la posibilidad de errores de redondeo, los valores originales se recuperan con la trasformada inversa:
n
I
(2A
+ I)J;r
para / ; = ( ) , !
n -1
(15.2)
800
Muy a menudo, los valores de transformacin Vj'sc refieren a los coeficientes de las funciones coseno en la ecuacin de la trasformada inversa. Pero sta es una terminologa incorrecta, ya que los coeficientes de los trminos coseno en el sumatorio son los productos c Vj. Para ilustrar este mtodo de transformacin, consideremos la siguiente lista de 8 valores de entrada:
f
{2I5, 2 0 9 , 2 1 1 , 2 0 7 , 192, 148, 88. 63) Los valores transformados, calculados con dos posiciones decimales, para esta entrada son: 471.29, 143.81.-67.76, 16.33,7.42,-4.73,5.49, 0.05} En este ejemplo, observamos que las amplitudes de los valores transformados decrecen notablemente, de tal fomia que los trminos coseno con la frecuencia ms alta contribuyen menos a la recuperacin de los valores de entrada. Esta es una caracterstica bsica de la trasformada discreta del coseno, que permite aproximarse muy estrechamente a los valores originales usando slo los primeros valores transformados. Por tanto, para obtener un archivo de imagen comprimido, se podran calcular y almacenar slo la primera mitad de los valores de transformacin. La Tabla 15.6 muestra los resultados de la Ecuacin 15.2 cuando se emplean 4, 5 o los 8 valores transformados para recuperar los valores de entrada. Todos los valores calculados en la tabla estn redondeados a dos posiciones decimales. Podemos mejorar la eficiencia de esta tcnica de compresin transformando bloques rectangulares de valores de entrada, mejor que transformando conjuntos lineales de valores a travs de una sola lnea de barrido. Para un bloque cuadrado de // por n valores de entrada, los valores de transformacin se calculan como:
vL = <;, Llecos
con
2k +
2n
eos
(2j
+ \)mn
2n
(15.3)
/, m = 0, 1, . .
n- 1
y
-, si/=0 o m=0
-, n
si / * ( ) y thQ
i/
VV
i/'
\(2j + \)l7t]
I )mn \{2k + \)
(15.4,
C U L O SD EL AT R A N S F O R M A C I NI N V E R S AD I S C R E T AD E LC O S E I
Valores de entrada 215 Trminos suma 4 5 8 209 211 207 192 148 88 63 Valores de la transformada inversa discreta del coseno 212.63 215.26 215.00 211.85 209.23 209.00 211.53 208.91 211.00 207.42 210.04 207.00 188.43 191.06 192.00 147.65 145.02 148.00 95.47 92.84 88.00 58.02 60.64 63.00
donde / k
- 0, 1
//
Esta tranformada y su inversa se implementan tpicamente usando grupos de 8 por 8 valores de entrada, de tal forma que los grupos de valores de color a lo largo de 8 lneas de barrido se procesan simultneamente.
J P E G :J o i n tP h o t o g r a p h i cE x p e r t sG r o u p
En su forma bsica, este sistema complejo y ampliamente utilizado, desarrollado por el comit JPEG de la organizacin internacional de estndares ISO consiste en una larga coleccin de opciones para compresin de archivos. Ms de dos docenas de variantes se dan para la definicin de JPEG, as que se puede implcmentar de un nmero de maneras diferente, desde un simple algoritmo con prdidas hasta un mtodo de alta compresin sin prdidas. Pero la definicin bsica de JPEG no especifica completamente cmo el archivo de imagen comprimido debera estructurarse para que pueda usarse en distintos sistemas informticos o por diferentes aplicaciones. Por ejemplo, no hay una organizacin especifica para la informacin de cabecera y no hay especificacin para el modelo de color que debera usarse en el archivo comprimido. II estndar JPEG define cuatro modos generales para la compresin de archivos, que son los modos sin prdidas, secuencia], progresivo y jerrquico. En el modo JPE( sin prdidas, un esquema de reconocimiento de patrones se combina tanto con codificacin Huffman como con codificacin aritmtica. Sin embargo, el modo original de JPEG sin prdidas no es tan eficiente como otros formatos sin prdidas disponibles, por lo que raramente se implementan. El modo seeiiencial JPEG bsico es la versin de JPEG ms comnmente utilizada. Los valores numricos para los componentes de color en una imagen se almacenan en 8 hits, y el algoritmo tic compresin combina la tranformada discreta del coseno con la codificacin Huffman o arilm-
802
tica. Tambin se ha definifo un modo secuencia! extendido con ms opciones que el modo secuencial bsico y cuyos componentes de color pueden especificarse usando 16 bits. En el modo JPEG progresivo, un archivo de imagen se procesa usando distintas pasadas para que las "capas" de la imagen puedan generarse con distintas resoluciones. Este modo, generalmente llamado JPEG progresivo, se est haciendo popular para aplicaciones de Interne!, porque una aproximacin de tipo borrador de una imagen puede visualizarse rpidamente antes de descargarse ta imagen de archivo completa. Otra coleccin de procedimientos para obtener versiones de una imagen mejoradas incrementalmente est contenida en el modo JPEG jerrquico, que divide una imagen en un conjunto de subimgenes. Esto permite seleccionar secciones de una imagen para construirlas progresivamente. Debido a su complejidad, el JPEG jerrquico no es muy usado. Pueden ofrecerse opciones en implementaciones de JPEG a gran escala para la seleccin del modo de compresin y los parmetros de compresin, como el nmero de trminos que hay que usar en los clculos del sumalorio de la transformada discreta inversa del coseno. Tambin, las definiciones de compresin JPEG especifican que tanto la codificacin 1 IuITman como la codificacin aritmtica pueden combinarse con la trasformada discreta del coseno. Pero las implementaciones de JPEG nunca usan los algoritmos de codificacin aritmtica, porque estos algoritmos estn patentados y requieren el pago de una licencia. A pesar de que la especificacin de JPEG no define una estructura especfica del archivo de imagen comprimido, ahora las implementaciones usan el formato JPEG File Interchange (JFIF) propuesto por Eric Hamilton en C-Cube Microsystems y basado en sugerencias de muchos usuarios de JPEG. En este formato, la cabecera del archivo contiene un idenlificador JFIF unvoco (que es lo que se denomina "firma" del archivo), la versin del JFIF utilizado para configurar el archivo, el tamao de la imagen (en pixeles por cm o en pxeles por pulgada), la altura y anchura de la vista preliminar opcional RGB del archivo (denominada imagen "miniatura") y los valores RGB para la la vista preliminar opcional de la imagen. Los valores de los pxeles del archivo comprimido se almacenan usando el modelo de color YC .C , y los componentes de color se almacenan en orden, en primer lugar Y, en segundo C y, por ltimo, C . Para una imagen en escala de grises, slo se usa la componente Y. Otra informacin del archivo incluye las tablas necesarias para los algoritmos de compresin. Los enteros se almacenan en archivos JPEG usando el formato big-endian.
f !t h r
La codificacin secuencial bsica JPEG/JF1F de un archivo de imagen consiste normalmente en las siguientes operaciones. (I) Conversin de color: los valores de color de pxel RGB en un archivo de imagen son convertidos en componentes de color YC C .
r h
Muestreo de color: el nmero de valores de color del archivo puede reducirse usando slo los valores para los pxeles seleccionados o haciendo la media de las componentes de color para grupos de pxeles adyacentes. Una implemenlaein sencilla para estas operaciones de muestreo debe tomar los valores de color de todos los otros pxeles, todos los pxeles terceros o todos los pxeles cuartos. Usualmente, las componentes de color se muestrean en diferentes frecuencias, por lo que los valores de mayor luminancia, las componentes K, se seleccionan. Esto permite alcanzar mayores tasas de compresin, ya que se almacenan muy pocos valores diferentes de crominancia, las componentes C yC ,
r h
Tranformada discreta del coseno: a continuacin, los grupos de 8 por 8 valores de pxeles de color se convierten en valores de la trasformada discreta del coseno usando la Ecuacin 15.3. (4) Reduccin de los valores transformados: para una compresin mayor del archivo de imagen codifi-
cado, se almacena un conjunto reducido de valores de la trasformada (Seccin 15.3). El nmero de valores del conjunto reducido puede fijarse, o puede calcularse usando un algoritmo para determinar la influencia de los diversos trminos de la trasformada. (5) Codificacin Huffman: se realiza una operacin de compresin final convirtiendo los valores de la trasformada discreta del coseno en cdigos Huffman, como se ha explicado en la Seccin 15.3, El frmalo SPIFF (Still-Picture Interchange File Format) desarrollado por Eric Hamilton y el comit ISO JPEG, es una extensin de JFIF. Este formato tiene muchas ms caractersticas y opciones que JFIF, y se
espera que SP1FF sustituya eventualmenie a JFIF en las implementaciones JPEG Sin embargo, como JPEG, esta extensin del formato JFIF contiene muchas ms opciones que pueden resultar prcticas en una implementacin. Por ejemplo, JFIF usa slo un modelo de color (YC C ), pero SPIFF ofrece opciones para trece modelos de color diferentes. Para imgenes fotorrealistas de grficos por computadora y fotografas digitalizadas, las implementaciones JPEG actuales ofrecen una mayor tasa de compresin que cualquier otro sistema. Pero otros formatos pueden ofrecer tasas de compresin comparables sin prdida de informacin de color para imgenes sencillas que contengan grandes reas de un mismo color.
r h
CGM: C o m p u t e r G r a p h i c sM e t a f i l eF o r m a t
Este formato es otro estndar desarrollado por ISO y ANS. Est diseado para usarse en cualquier sistema infomitico y en cualquier rea de los grficos por computadora, incluyendo la visualizacin cientfica, los sistemas CAD, las artes grficas, la maquetacin electrnica, publicidad electrnica y cualquier aplicacin que utilice bibliotecas grficas GKS o P111GS. As, CGM soporta una gran variedad de caractersticas y opciones. Como indica la denominacin me/afile (metaarchivo), CGM permite que una descripcin de imagen sea dada como un pixmap o como un conjunto de definiciones geomtricas, incluyendo atributos tales como tamao de la lnea, tipo de linea, estilo del relleno y especificaciones de las cadenas de caracteres. En un archivo de imagen pueden incluirse muchos otros parmetros, tal como el valor mximo para las componentes de color, el tamao de una tabla de color, la lista de fuentes usadas en el archivo y los lmites de la ventana de recorte. En CGM, se usa un esquema de codificacin de caracteres para minimizar el tamao del archivo y se optimiza un cdigo numrico binario para codificar y decodificar el archivo de imagen ms rpidamente. Los valores de pxeles pueden darse usando varios esquemas de color, tales como los modelos RGB, CMYK, YC C , CI y tablas de color. Adems, los archivos pixmap pueden comprimirse usando variantes de la codificacin de longitud de recorrido y de la codificacin Huffman.
r h
T I F F : T a gI m a g e F i l eF o r m a t
Un consorcio de compaas de computadoras encabezadas por Aldus Corporation desarrollaron TIFF como un formato eficiente para la transferencia de imgenes digitalizadas entre diferentes aplicaciones y sistemas informticos. Aunque es altamente complejo, TIFF es uno de los formatos ms verstiles y puede personalizarse para aplicaciones individuales. Es ampliamente usado en aplicaciones diversas como son las imgenes mdicas, la edicin electrnica, las interfaces grficas de usuario, el almacenamiento de imgenes por satlite y la transmisin de fax. El formato TIFF puede usarse con nivel-b, escala de grises, imgenes a color completo, y los archivos TIFF se disean para almacenar mltiples imgenes digitalizadas. La informacin de pxeles de color puede proporcionarse como componentes RGB o como tablas de color. Se ofrecen ms alternativas de compresin en TIFF que en cualquier otro sistema. Estos esquemas de compresin incluyen combinaciones de codificacin de longitud de recorrido, codificacin LZW, codificacin Huffman y la serie de mtodos JPEG.
P N G :P o r t a b l eN e t w o r k G r a p h i c sF o r m a t
Diseado por un grupo de desarrolladores independientes, PNG proporciona un esquema de compresin sin prdidas enormemente eficiente para el almacenamiento de imgenes. Los algoritmos de compresin en PNG incluyen codificacin Huffman y variaciones de la codificacin LZ. Este formato est ganando popularidad en Internet para el almacenamiento y la transmisin de imgenes. Tambin es til para almacenar imgenes temporalmente para ediciones repetidas. Para imgenes sencillas de grficos por computadora, PNG genera archivos con tasas de compresin muy altas, comparables a aquellos archivos comprimidos con JPEG
804
Los valores enteros se almacenan en orden hig-endkm y las componentes de color pueden especificarse con una precisin superior a 16 bits por pixel. PNG soporta una serie de opciones, incluyendo componentes de color RGB, componentes de color XYZ, escala de grises, tablas de color y un valor all para la informacin de transparencia.
XBM: X Window System Bitmap Format y XPM: X Window System Pixmap Format
A diferencia de otros formatos, XBM y XPM almacenan la informacin de las imgenes como cdigo C o C-H- que se procesa en estaciones de trabajo usando el sistema X Window. As, los valores de pxel se representan en matrices, se almacenan en el orden de barrido, de izquierda a derecha. Como sus propios nombres indican, XBM es un formato para bitmaps (un bit por pixel) y XPM es un formato para pxmaps (mltiples bits por pxel). Estos formatos son soportados por la mayora de los exploradores web. Los formatos XBM y XPM no contienen algoritmos de compresin, pero el tamao de los archivos puede reducirse usando programas de compresin especialmente diseados. En lugar de cabeceras de archivos, estos formatos usan directivas de preprocesador tdefwe para especificar informacin como el nmero de pxeles por lnea de barrido y el nmero de lneas de barrido. Hn el formato XBM, los valores de bit iguales a 1 representan el color del primer plano actual y los valores de bit iguales a 0 representan el color del fondo actual. En el formato XPM, los valores pueden almacenarse en tablas de color usando componentes RGB o HSV.
15.5 Resumen
805
B M P :F o r m a t oB i t m a p
Aunque se denomina formato bitmap, BMP en realidad soporta archivos de imagen que contienen mltiples bits por pxel. Este formato fue desarrollado por Microsoft Corporation para aplicaciones del sistema operativo Windows. Los sistemas operativos IBM OS/2 tambin emplean otro formato pixmap similar, que tambin se denomina BMP. Los valores de pxel en un archivo BMP se almacenan en orden iile-indian usando I, 2 , 4 , 8, 16, 24 32 bits por pxel. Los valores de pxel de color pueden especificarse con componentes de color RGB o con tablas de color. Y las lneas de pxeles de barrido se almacenan de abajo hacia arriba, con el origen de coordenadas en la posicin inferior izquierda del pixmap. Un archivo BMP normalmente no se comprime, pero el algoritmo de codificacin de longitud de recorrido puede aplicarse a pixmaps con 4 u 8 bits por pxel.
P C X :F o r m a t od ea r c h i v oP CP a i n t b r u s h
Desarrollado por Zsoft Corporation. PCX es otro formato pixmap usado por sistemas operativos Windows. Los archivos de imagen en el formato PCX pueden contener desde I a 24 bits por pxel, y los valores de pxel pueden especificarse usando componentes RGB o tablas de color. Los valores se almacenan en orden littlcendian, con el orden de las lneas de barrido de arriba hacia abajo. Y los archivos digitalizados pueden comprimirse usando la codificacin de longitud de recorrido.
T G A :F o r m a t oT r u e v i s i o nG r a p h i c s A d a p t e r
Desarrollado por Truevision Corporation para su uso junto con los adaptadores grficos Targa y Vista, el formato TGA pixmap es tambin conocido como formato Targa. liste formato es usado popularmente para la edicin de vdeo. En el formato TGA, los valores de pxel se almacenan en orden lite-endkm, y los archivos de imagen pueden contener 8, 16, 24 32 bits por pxel. Los colores de pxel pueden especificarse como componentes RGB o en tablas, con dos posibles formatos de tabla. Puede usarse una nica tabla de color RGB, o las componentes R, G y B pueden venir dadas en tablas separadas. Normalmente, los archivos TGA no se comprimen, pero los algoritmos de codificacin de longitud de recorrido pueden aplicarse a archivos de imagen ms grandes.
G I F :G r a p h i c sI n t e r c h a n g eF o r m a t
Este formato, diseado para una transmisin enciente a travs de lnea telefnica de archivos de imagen digitalizados, es un producto de CompuServe Corporation. Usando un algoritmo LZW, GIF ofrece tasas de compresin razonables para imgenes de grficos por computadora. Pero las tasas de compresin generadas por GIF para imgenes fotorrealistas no son tan buenos como aquellos producidos por JPEG o PNG. A pesar de ello, GIF se ha usado en muchas aplicaciones, aunque su popularidad ha decado drsticamente debido a las evidentes aportaciones asociadas a los algoritmos de compresin LZW. Tanto imgenes monocromas como multicolor pueden procesarse con GIF, pero los valores de pxel slo pueden especificarse en un rango de 1 a 8 bits, permitiendo un mximo de 256 colores. Los valores de pxel se almacenan en orden little-endian usando tablas de color RGB.
15.5 RESUMEN
Para un sistema de grficos digitalizados, un archivo de imagen normalmente es un pixmap RGB, el cual a menudo se denomina archivo digitalizado sin formato. Los valores de pxel RGB se almacenan como enteros en un rango de 0 hasta un valor mximo, el cual viene determinado por el nmero de bits disponibles para cada pxel. Una imagen tambin puede almacenarse usando una representacin que contenga descripciones geomtricas de componentes de la imagen, tales como segmentos de lnea, reas de relleno y apunes.
806
Cuando los archivos de imgenes digitalizadas se transfieren entre sistemas o se almacenan de una forma particular, es necesario reducir el nmero de valores de color representados en la imagen. El nmero de colores se puede reducir uniformemente mediante la combinacin de niveles de color de varias maneras, tal como la media de niveles. El mtodo para reducir colores por popularidad selecciona los valores de color que aparecen ms frecuentemente. Y el mtodo de corte medio subdivide el espacio de color en un conjunto de bloques, siendo lodos los colores contenidos en cada bloque sustituidos por el color promedio del bloque. Se han desarrollado diferentes formatos para el almacenamiento de archivos de imagen de forma conveniente para aplicaciones particulares o sistemas concretos. Estos formatos difieren en la estructura de la cabecera del archivo, el orden de los bytes (big eruikm o little endian) para valores enteros, y los mtodos usados (si se usa alguno) para reducir el tamao del archivo para su almacenamiento. La electividad de los mtodos de reduccin de archivos se puede medir por la tasa de compresin, que es la relacin entre el tamao del archivo original y el tamao del archivo comprimido. Los algoritmos para reducir el tamao del archivo que alteran los valores de color en un archivo de imagen se denominan con prdidas, y aquellos que pueden r e s tablecer los valores de color exactamente se llaman sin prdidas. Algunos formatos de archivo tambin pueden emplear esquemas de reduccin de color. Un mtodo comn de compresin de archivos de imagen es la codificacin de longitud de recorrido, la cual sustituye una secuencia de valores de pxel repetidos por el valor y la longitud del recorrido. El esquema de compresin de archivos LZW es una variacin de la codificacin de longitud de recorrido que sustituye patrones de pxeles repetidos por un cdigo. Otros mtodos de compresin de reconocimiento de patrones incluyen la comparacin de lincas de barrido y procedimientos fractales para identificar conjuntos de valores de pxel aulosimilares, En la codificacin Huffman, un cdigo de longitud variable es asignado a valores de color de tal forma que los valores que ocurren ms frecuentemente tienen el cdigo ms corto. La codificacin aritmtica usa el recuento de frecuencias para valores de color en un archivo de imagen para crear subdivisiones del intervalo unidad desde 0.0 hasta l .0. Los lmites de cada suhintervalo se emplean entonces para codificar las secuencias de valores de color representadas por ese suhintervalo. La trasformada discreta del coseno multiplica los valores de color de pxel por los trminos del coseno con frecuencia creciente, y luego suma dichos productos. Este proceso sumatorio convierte un conjunto de valores de pxeles de color en un conjunto de valores transformados. La compresin de archivos se consigue entonces mediante la eliminacin de algunos valores transformados, que producen una compresin con prdidas de la imagen. Muchos formatos de archivo estn disponibles para diversas aplicaciones grficas y para diferentes sistemas informticas. Algunos formatos fueron desarrollados por las organizaciones de estndares ISO y ANS, algunos surgieron de compaas de hardware o software, y algunos son productos de grupos independientes. Los formatos ms ampliamente utilizados son JPEG, TILE, PNG, y aquellos para el sistema X Window, computadoras Apple Maeinloeh, y sistemas operativos Windows.
REFERENCIAS
Los mtodos de reduccin de color se presentan en Hcckbert (1982 y 1994), Glassner (I990), Arvo (I99I) y Kirk (1992). Gonzlez y Wintz (1987) exponen los mtodos de trasformada y las tcnicas de procesamiento de imgenes en general. Y varios algoritmos de compresin de archivos se detallan en Huffman (1952), Ziy y Lcmpel (I977 y I978), Welch (I984), Rao y Yip (1990), Arvo ( I 9 9 I ) , y Barnsley y Ilurd (I993). Puede encontrarse informacin de carcter general sobre formatos de archivos grficos en Brown y Shepherd (I995), y Miao (1999). Para obtener informacin adicional acerca de JPEG, consulte Taubman y Marcellin (200I), El formato de archivo estndar CGM se detalla en Henderson y Mumlbrd (I993).
EJERCICIOS
15.1 Escribir un programa para implemeniar reduccin de color uniforme para todos los valores de color en un sistema a color completo, donde cada componente de color RGB se especifica en un rango de enteros de 0 a 255. La
Ejercidos
807
entrada ser cualquier divisin culera del factor J que se aplicar a cada componente de color y la salida es un conjumo reducido de niveles de color enteros. 1 5 . 2 Modificare! programa del ejercicio anterior de modo que la entrada sea un entero k que especifique el nmero de niveles reducidos que se va a generar en lugar del factor de divisin. 1 5 . 3 Modificar el programa del Ejercicio 15.2 de modo que un nmero de reduccin diferente se aplique a los componentes R, G y B. Las reducciones pueden especificarse corri el rango de enteros para cada componente o el nmero de bits. 1 5 . 4 Escribir un programa para implementar el esquema de reduccin de color que reduzca un archivo de imagen de entrada a k colores. La entrada del programa es una matriz de valores de pxeles y el tamao de la matriz, especificado por el nmero de lneas de barrido y el nmero de posiciones de pxel a lo largo de cada lnea de barrido. 1 5 . 5 Escriba un programa para implementar el esquema de reduccin de color de medio corte. Un archivo de imagen que contiene // valores de pxel RGB debe reducirse a k valores de color. 1 5 . 6 Escriba un programa para implementar la codificacin de longitud de recorrido para un sola lnea de barrido que contiene 1024 valores enteros, con cada valor dentro del rango de 0 a 255. 1 5 . 7 Modifique el programa del ejercicio anterior para codificar un archivo que contenga n lneas de barrido. 1 5 . 8 Escriba un programa para implemeniar un algoritmo de codificacin LZ simplificado para una sola lnea de futrrido que contiene 1024 valores enteros, con cada valor dentro del rango de 0 a 255. El programa debe buscar slo tres elementos de patrones, representando colores RGB repetidos. Use cdigos enteros para los patrones. 1 5 . 9 Ample el programa del ejercicio anterior para procesar un archivo de entrada con n lincas de barrido. 1 5 . 1 0 Dado un archivo de imagen de entrada que contiene // lneas de barrido y m colores de pxel RGB en cada lnea de barrido, escriba un programa para obtener una tabla de recuentos de frecuencias para los colorea de pxel. 1 5 . 1 1 Con el recuento de frecuencias del ejercicio anterior, escriba un programa para comprimir el archivo de imagen usando codificacin HulVman. 1 5 . 1 2 Con el recuento de frecuencias del Ejercicio 15.10. escriba un programa para comprimir el archivo de imagen usando codificacin aritmtica. 1 5 . 1 3 Dada una lista de 32 colores de pxel, con tres componentes de color RGB para cada pxel, escriba un programa para calcular los valores de la trasfornuida discreta del coseno (Ecuacin 15.1) para cada grupo sucesivo de 8 pxeles de la lista. 1 5 . 1 4 Usando la Ecuacin 15.2 y los valores trasformados del ejercicio anterior, escriba un programa para calcular los 32 colores de pxel originales (restablecidos). 1 5 . 1 5 Modifique el ejercicio anterior para calcular los valores de la trasformada inversa para cada conjunto de 8 pxeles, usando cualquier nmero // seleccionado de entre los valores transformados; es decir, ti puede ser cualquier valor de I a 8, ambos inclusive. 1 5 . 1 6 Dado un archivo de imagen que contiene 32 por 32 colores de pixel, con tres componentes de color RGB, escriba un programa para calcular los valores de la trasformada discreta del coseno (Ecuacin 15.3} para cada grupo sucesivo de pxeles 8 por 8. 1 5 . 1 7 Usando la Ecuacin 15.4 y los valores transformados del ejercicio anterior, escriba un programa para calcular los colores de pxel de 32 por 32 originales (restablecidos). 1 5 . 1 8 Modifique el ejercicio anterior para calcular los valores de la trasformada inversa para cada conjunto de pxeles de 8 por 8. usando cualquier nmero /; por m seleccionado de entre los valores transformados; es decir, n y m pueden cada uno ser asignados a cualquier valor entero comprendido entre 1 y ambos inclusive.
v=v
J -'m
-v
' inven
Uf
En algunos paquetes de aplicacin, el origen de las coordenadas de pantalla puede situarse en una posicin arbitraria, como por ejemplo en el centro de la pantalla.
810
APNDICE A
FIGURA A.1. Coordenadas de pantalla cartesianas referenciadas con respecto a la esquina inferior izquierda de la pantalla (a) o a la izquierda superior izquierda de la pantalla (b).
C o o r d e n a d a sp o l a r e se ne lp l a n ox y
Un sistema no cartesiano bidimensional frecuentemente utilizado es el sistema de referencia en coordenadas polares (Figura A . 2 ) , en el que las coordenadas se especifican mediante una distancia radial r con respecto a un eje de coordenadas y un desplazamiento angular O con respecto a la horizontal. Los desplazamientos angulares positivos se definen en el sentido contrario a las agujas del reloj, mientras que los desplazamientos angulares negativos se definen en el sentido de las agujas del reloj. La relacin entre coordenadas cartesianas y polares se muestra en la Figura A . 3 . Considerando el tringulo recto de la Figura A. 4 y utilizando la definicin de las funciones trigonomtricas, podemos realizar la transformacin de coordenadas polares a coordenadas cartesianas mediante las expresiones: A* = r c o s 0 , y = rsinfl (A.2)
Los valores angulares pueden medirse en grados o en unidades adimensionales (radianes). Un radian se define como el ngulo subtendido por un arco circular que tenga una longitud igual al radio del crculo. Esta
Lusa
V
FIGURA A.2. Sistema de referencia en coordenadas polares, formado mediante crculos concntricos y lneas radiales.
eje F
/
> O
ojo X
811
r
y
definicin se ilustra en la Figura A.5, que muestra dos lneas que se intersectan en un plano y un crculo centrado en el punto de interseccin P. Para cualquier crculo centrado en P, el valor del ngulo # e n radianes est dado por el cociente: 6 =r (radianes)
donde ,v es la longitud del arco circular que subtienden a By r es el radio del crculo. La distancia angular total alrededor del punto P es la longitud del permetro del crculo (2pr) dividida por r, lo que es igual a 2p radianes. Si hablamos en grados, una circunferencia se divide en 360 arcos de igual longitud, por lo que cada arco subtiende un ngulo de l grado. Por tanto, 360 = 2n radianes. Pueden utilizarse otras cnicas, adems de los crculos, para especificar las coordenadas. Por ejemplo, utilizando elipses concntricas en lugar de crculos, podemos especificar los puntos en coordenadas elpticas. De forma similar, pueden aprovecharse otros tipos de simetras para definir coordenadas planas hiperblicas o parablicas.
cje>' i
eje
ejez
eje x
eje ;
eje i
(a)
FIGURA A.6. Coordenadas de un punto P en la posicin (.v, y, z) en un sistema de referencia cartesiano estndar que cumple la regla de la mano derecha.
813
eje z
z ^
eje v.
ejejr
eje y
eje*.
FIGURA A.8. L'n sistema de coordenadas curvilneas general. FIGURA A.9. Coordenadas cilindricas p, 6 y r.
En la Figura A.9 se muestra una especificacin en coordenadas cilindricas de un punto en el espacio en relacin con un sistema de referencia cartesiano. La superficie de p constante es un cilindro vertical; la superficie de 0 constante es un plano vertical que contiene al eje z; y la superficie de z constante es un plano horizontal paralelo al plano cartesiano xy. Podemos efectuar la transformacin de coordenadas cilindricas a un sistema de referencia cartesiano mediante las ecuaciones: x = pcos0, y = psin0, z=Z
iA.5)
Otro sistema de coordenadas curvilneas comnmente utilizado es el sistema de coordenadas esfricas de la Figura A. 1 0. Las coordenadas esfricas se denominan en ocasiones coordenadas polares en el espacio tridimensional. La superficie de r constante es una esfera; la superficie de 6 constante es, de nuevo, un plano vertical que contiene al eje z; y al superficie de 0 constante es un cono cuyo vrtice se encuentra en el origen de coordenadas. Si tp < 90, el cono se encontrar por encima del plano xy. Si tp > 90, el cono se encontrar por debajo del plano xy. Podemos efectuar la transformacin de coordenadas esfricas a un sistema de referencia cartesiano mediante las ecuaciones: x = rcos #sin0,
z
y = rsin sin0,
z =rcos<p
(A-6)
P(r.0.<t
FIGURA A.11. ngulo slido 0) subtendido por un FIGURA A.10. Coordenadas esfricas r, G y < > . parche esfrico superficial con rea A y radio r.
ngulo slido
La definicin de ngulo slido rose formula por analoga con la definicin de ngulo en radianes bidimensionales 0entre dos lneas que se inlersectan (licuacin A.4). Sin embargo, para un ngulo tridimensional, lo que hacemos es definir un cono cuyo vrtice est en un punto P y una esfera centrada en P, como se muestra en la Figura A. 11. El ngulo slido oen la regin cnica que tiene su vrtice en el punto P se define como
U 7 )
donde A es el rea de la superficie esfrica intersectada por el cono y r es el radio de la esfera. Asimismo, por analoga con las coordenadas polares bidimensionales, la unidad adimensional para los ngulos slidos se denomina estereoradian. El ngulo slido total en torno al punto P es el rea total de la superficie esfrica (4/ D ~) dividida por lo que es igual a 4;restereoradianes.
V=P -P,
:
= (x -x y -y )
2 r 2 i
(A.8)
donde las componentes cartesianas (o elementos cartesianos) l' y V son las proyecciones de V sobre los ejes xcy. Tambin podramos obtener estas mismas componentes del vector Utilizando otros dos puntos dentro del sistema de coordenadas. De hecho, existe un nmero infinito de parejas de puntos que nos dan las mismas componentes de vector, y los vectores se suelen definir mediante un nico punto relativo al sistema de referencia actual. Por tanto, un vector no tiene una posicin fija dentro de un sistema de coordenadas. Asimismo, si transformamos la representacin de V a otro sistema de referencia, las coordenadas de las posiciones P y P, cambiarn, pero las propiedades bsicas del vector no sufrirn modificacin. Podemos describir un vector como un segmento de linea dirigido que tiene dos propiedades fundamentales: mdulo y direccin. Para el vector bidimensional de la Figura A. 13, calculamos el mdulo del vector utilizando el teorema de Pitgoras, que nos da la distancia entre sus dos extremos segn la direccin del vector:
v y (
A . 2 Puntos y vectores 8 1 5
ti
P
Sistema B
Ir-*
t .t
Sistema A
FIGURA A.13. Un vector hidimensional V definido en un sistema de referencia cartesiano como la diferencia entre dos puntos.
Podemos especificar la direccin del vector de diversas formas. Por ejemplo, podemos proporcionar la direccin en trminos del desplazamiento angular con respecto a la horizontal de la forma siguiente: (A. 10)
Un vector tiene el mismo mdulo y direccin independientemente de dnde situemos el vector dentro de un cierto sistema de coordenadas. Asimismo, el mdulo del vector es independiente del sistema de coordenadas que elijamos. Sin embargo, si transformamos el vector a otros sistema de referencia, los valores de esos componentes y su direccin dentro de ese sistema de referencia pueden cambiar. Por ejemplo, podramos transformar el vector a un sistema de referencia cartesiano rotado, de modo que la direccin del vector est definida ahora segn la nueva direccin >>. Para una representacin cartesiana tridimensional de un vector, V = (K., K, KJ, el mdulo del vector ser:
Ivi-VvZ+^+i?
u , , )
Y podemos dar la direccin del vector en trminos de los ngulos directores, a, /3 y y, que el vector forma con cada uno de los ejes de coordenadas (Figura A. 1 4 ) . Los ngulos directores son los ngulos positivos que el vector forma con cada uno de los ejes de coordenadas positivos. Podemos calcular estos ngulos de la forma siguiente: V.
c o s a =
(A. 12)
COS y =
=7
V Los valores eos , eos /3 y eos y se denominan cosenos directores del vector. En realidad, slo hace falta especificar dos de los cosenos directores para proporcionar la direccin de V, ya que: eos" a + eos /3 + cos y = I
3 J
(A. 13)
*Y
FIGURA A.14.
ngulos directores a, fi y y,
FIGURA A.16. Dos vectores (a) pueden sumarse geomtricamente situando los dos vectores uno a continuacin de otro (b) y dibujando el vector resultante desde el extremo inicial del primer vector hasta el extremo final del segundo vector.
Los vectores se utilizan para representar cualquier tipo de magnitud que tenga como propiedades un mdulo y una direccin. Dos ejemplos comunes son la fuerza y la velocidad (Figura A.15). Una fuerza puede considerarse como la intensidad con que se tira 0 empuja en una direccin concreta. Un vector de velocidad especifica la rapidez con la que un objeto se mueve en una cierta direccin.
(A. 14)
La Figura A.16 ilustra geomtricamente la suma bidimensional de vectores. Obtenemos la suma de vectores colocando el extremo inicial de un vector sobre el extremo final del otro vector y dibujando la representacin del vector suma desde el extremo inicial del primer vector hasta el extremo final del segundo. La suma de un vector con un escalar no est definida, ya que un escalar slo tiene un valor numrico, mientras que un vector tiene n componentes numricas en un espaci -dimensional. La multiplicacin de un vector por un valor escalar s se define como s\=(sV ,sV ,sV )
x K :
(A.15)
Por ejemplo, si el parmetro escalar s tiene el valor 2, cada componente de V se dobla y el mdulo se dobla tambin. Tambin podemos combinar vectores utilizando procesos multiplicativos, de diversas formas. Un mtodo muy til consiste en multiplicar los mdulos de los dos vectores, de modo que este producto se utilice para formar otro vector o una magnitud escalar.
()<6<x
(A.16)
A.2
Puntos y vectores
817
donde fies el ms pequeo de los dos ngulos que pueden definirse entre las direcciones de ambos vectores (figura A. 17). Este esquema de multiplicacin se denomina producto escalar de dos vectores. Tambin se denomina producto interno, particularmente al hablar de productos escalares en el anlisis tensorial. La Ecuacin A. 16 es vlida en cualquier sistema de coordenadas y puede interpretarse como el producto de las componentes paralelas de los dos vectores, donde |V | eos 6 es la proyeccin del vector V-, en la direccin de V,Adems de expresar el producto escalar en forma independiente del sistema de coordenadas, podemos tambin expresar este clculo en un sistema de coordenadas especfico. Para un sistema de referencia cartesiano, el producto escalar se calcula como:
9
El producto escalar es una generalizacin del teorema de Pilgoras y el producto escalar de un vector por s mismo da como resultado el cuadrado del mdulo del vector. Asimismo, el producto escalar de dos vectores es cero si y slo si los dos vectores son perpendiculares (ortogonales). El producto escalar es conmutativo:
porque esta operacin produce un valor escalar. Asimismo, el producto escalar es distributivo con respecto a la suma de vectores:
v .(v
|
vj
v -v,+v v
l r
4^
V x V = u|V, HVjsin^,
( 2
()<9^n
2
El parmetro u en esta expresin es un vector unitario (mdulo 1) perpendicular tanto a V! como a V (Figura A. 18). La direccin de u est determinada por la regla de la mano derecha: rodeamos un eje perpendicular al plano que contiene a Vj y V de modo que los dedos de la mano derecha se curven desde V! aV,. El vector u estar entonces en la direccin a la que apunta el dedo pulgar. Este clculo se denomina producto vectorial de dos vectores y la Ecuacin A.20 es vlida en cualquier sistema de coordenadas. El producto vectorial de dos vectores es otro vector perpendicular al plano de esos dos vectores, y el mdulo del producto vectorial es igual al rea del paralclogramo formado por los dos vectores. Tambin podemos expresar el producto vectorial en trminos de las componentes de los vectores dentro de un sistema de referencia especfico. En un sistema de coordenadas cartesianas, calculamos las componentes del producto vectorial como:
2
v,xv
<A2
"
V, X V,
FIGURA A.18. El producto vectorial de dos vectores es un vector que apunta en una direccin perpendicular a FIGURA A.17. El producto escalar de dos vectores se obtiene multiplicando las componentes paralelas.
los dos vectores originales y con un mdulo igual al rea del paralclogramo sombreado.
818
APNDICE A
Si designamos los vectores unitarios (mdulo I ) segn los ejes x, y, z como u , u y u_, podemos escribir el producto vectorial en trminos de las componentes cartesianas utilizando una notacin de determinantes (Seccin A.5):
v v
U.
(A.22)
V,xV =
2
v.
2
2;
El produelo vectorial de cualesquiera dos vectores paralelos es cero. Por tanto, el producto vectorial de un vector por si mismo es cero. Asimismo, el producto vectorial no es conmutativo, sino anticonmutativo: V.xVj = - V , x V , ) Tambin se verifica que el produelo vectorial no es asociativo, es decir, V,x(V,xV )*(V,xV,)xV,
1
( - )
2 3
U-24)
Sin embargo, el producto vectorial es distributivo con respecto a la suma y resta de vectores: V x ( V , + V , ) = (V xV,) + (V,xV )
| l 1
iA.25)
A.3 TENSORES
Una generalizacin del concepto de vector es la clase de objetos denominados tensores. Formalmente, un tensor se define como una magnitud con un rango especificado y con ciertas propiedades de transformacin cuando se convierte el tensor de un sistema de coordenadas a otro. Para sistemas de coordenadas ortogonales, las propiedades de transformacin son simples e iguales a las de los vectores. Diversas propiedades tsicas de los objetos, como la tensin y la conductividad, son tensores. El rango de un tensor, junto con la dimensin del espacio en la que el tensor est definido, determina el nmero de componentes (tambin denominados elementos o coeficientes) de dicho tensor. Las magnitudes escalares y los vectores son casos especiales de la clase ms general de tensores. Un escalar es un tensor de rango cero, mientras que un vector es un tensor de rango uno. Bsicamente, el rango de un tensor especifica el nmero de subndices utilizados para designar los elementos del tensor, mientras que la dimensin espacial determina el nmero de valores que pueden asignarse a cada subndice. As, una magnitud escalar (tensor de rango cero) tiene cero subndices, mientras que un vector (tensor de rango uno) tiene un subndice. Algunas veces, cualquier parmetro con un subndice se denomina incorrectamente "unidimensional" y cualquier parmetro con dos subndices se denomina, tambin incorrectamente, bidimensional. Sin embargo, la dimensin de una magnitud depende de la representacin espacial, no del nmero de subndices. En el espacio bidimensional. el nico subndice de un vector puede tener dos valores, y el vector bidimensional tendr dos componentes. En el espacio tridimensional, el nico subndice de un vector puede tener tres valores y el vector tridimensional tiene tres componentes. De forma similar, un tensor de rango dos tiene dos subndices y en el espacio tridimensional este tensor tendr nueve componentes (tres valores por cada subndice).
819
Estos vectores tangentes a los ejes forman un conjunto de vectores linealmente independiente, es decir, ninguno de los vectores de los ejes puede escribirse como combinacin lineal de los restantes vectores de los ejes. Asimismo, todos los dems vectores del espacio podrn escribirse como combinacin lineal de los vectores de los ejes, y el conjunto de vectores de los ejes se denomina b a s e o conjunto de v e c t o r e s base, del espacio. En general, el espacio se denominar espacio vectorial y la base contendr el nmero mnimo de vectores necesario para representar cualquier otro vector del espacio como combinacin lineal de los vectores base.
D e t e r m i n a c i nd el o sv e c t o r e sb a s ep a r au ne s p a c i od ec o o r d e n a d a s
Los vectores base en cualquier espacio se determinan a partir del v e c t o r d e posicin r , que es la representacin vectorial de cualquier punto del espacio. Por ejemplo, en el espacio cartesiano tridimensional, el vector de posicin para cualquier punto (jr, v, z) es: f = r u + m + zu
( v v
(A.26)
donde u , u y u, son los vectores base unitarios para los ejes .r,>' y z. A diferencia de otros sistemas de coordenadas, los vectores base cartesianos son constantes e independientes de las coordenadas en el espacio, por lo que tendremos: , = f dx fc-ft oy %M di .27)
(A
De forma similar, para cualquier otro espacio tridimensional, podemos formular la expresin del vector de posicin f(.i,, x x ) en trminos de las coordenadas de dicho espacio y luego determinar los vectores base como:
2J 3
-|t-,
= 1,2,3
(A.2S)
En general, los vectores base no son ni constantes, ni vectores unitarios, sino que estn en funcin de las coordenadas espaciales. Como ejemplo, el vector de posicin en un sistema de coordenadas polares bidimensiotl sera:
r = rcos0 u + r s i n 0
(
(A.29)
or = = -rslnO U , + TCOS0 II
0
00
I n este espacio, , que es funcin de 0, es un vector unitario. Pero u, que es funcin tanto de r como de 0, no es un vector unitario.
r
820
APNDICE A
Bases ortonormales
A menudo, los vectores de una base se normalizan para que cada vector tenga un mdulo igual a I. Podemos obtener vectores base unitarios en cualquier espacio tridimensional mediante la frmula:
u*
lI
= 1,2,3
(AJ)
y este conjunto de vectores unitarios se denomina base normal. Asimismo, para sistemas de referencia cartesianos, cilindricos, esfricos y otros tipos de sistemas comunes, incluyendo las coordenadas polares, los ejes de coordenadas son mutuamente perpendiculares en cada punto del espacio y el conjunto de vectores base se denomina entonces base ortogonal. Un conjunto de vectores base unitario ortogonales se denomina base ortonormal, y estos vectores base satisfacen las siguientes ecuaciones: u
A
u = 1,
k k
u u =0,
t
Aunque normalmente trataremos con sistemas ortogonales, los sistemas de referencia no ortogonales tambin son tiles en algunas aplicaciones, incluyendo la teora de la relatividad y los esquemas de visualizacin para ciertos conjuntos de datos. Un sistema cartesiano bidimensional tiene la base ortonormal: u,=(l,0), u =(0,l)
v
u =(0,1,0),
v
u, =(0,0,1)
(AJ4)
Tensor mtrico
Para sistemas de coordenadas ordinarios (es decir, aquellos en los que podemos definir distancias y que formalmente se denominan espacios riemanicmos\ los productos escalares de los vectores base forman los elementos del denominado tensor mtrico de dicho espacio:
8*
=u
> *
jk k
As, el tensor mtrico tiene rango dos y es simtrico : g = g j. Los tensores mtricos tienen varias propiedades tiles. Los elementos de un tensor mtrico pueden utilizarse para determinar (1) la distancia entre dos puntos del espacio, (2) las ecuaciones de transformacin para la conversin a otro espacio y (3) las componentes de diversos operadores vectoriales diferenciales (como el gradiente, la divergencia y el rotacional) dentro de dicho espacio. En un espacio ortogonal, g =0, para./**: ( - )
A 3 6
Por ejemplo, en un sistema de coordenadas cartesianas, en el que los vectores base son vectores unitarios constantes, el tensor mtrico tiene las componentes: g
;
[I, =< 0,
s; =* en caso contrario
, (espacio cartesiano)
fc
J 7
Y para ios vectores base en coordenadas polares (Ecuaciones AJO), podemos escribir el tensor mtrico en la Forma matricial:
A .5 Matrices
821
g =
I O r
Para un sistema de referencia en coordenadas cilindricas, los vectores base son: = c o s 0 u + sin0 u ,
p T y
= - p s i n 0 u, + p c o s 0 u ,
B v
=u
(A.39)
0 p 0
0 0
1
0 0
(A.4I)
= r sin0 sin 0 u + r c o s # s i n 0 u
f t
= rcos0cos0 u + r s i n 0 e o s 0 n
(
-rsin</> u .
Utilizando estos vectores base en la Ecuacin A.35, se obtiene la siguiente representacin matricial para el tensor mtrico:
1
0 r sin 0
2
0 0
(coordenadas esfricas)
(/f .42)
A.5 MATRICES
Una matriz es una disposicin rectangular de magnitudes (valores numricos, expresiones o funciones), denominados elementos de la matriz. Algunos ejemplos de matrices son:
(zUJ)
3.60 -5.46 -0.0 0.00 2.00 1.63
1
e e
X M X
Las matrices se identifican de acuerdo con el nmero de fdas y el nmero de columnas. Para los ejemplos anteriores, las matrices, de izquierda a derecha son 2 por 3, 2 por 2, 1 por 3 y 3 por 1. Cuando el nmero de filas es igual al nmero de columnas, como en el segundo ejemplo, la matriz se denomina matriz cuac/rcula. En general, podemos escribir una matriz r por c como: m, m (AA4)
n
2,
III rl
_ "VI
jk
donde m representa los elementos de la matriz M. El primer subndice de cada elemento proporciona el nmero de illa y el segundo subndice proporciona el nmero de columna. Una matriz con una nica fila o una nica columna representa un vector. As, los dos ltimos ejemplos de matrices en A.43 son, respectivamente un vector fila y un vector columna. En general, una matriz puede considerarse como una coleccin de vectores fila o como una coleccin de vectores columna.
8 2 2 APNDICE A Matemticas para grficos por computadora Cuando expresamos diversas operaciones en forma matricial, el convenio matemtico estndar consiste en representar un vector mediante una matriz columna. De acuerdo con este convenio, escribiremos la representacin matricial de un vector tridimensional en coordenadas cartesianas como;
V=
(A.45)
Aunque utilicemos esta representacin matricial estndar tanto para los puntos como para los vectores, existe una distincin importante entre ambos conceptos. La representacin vectorial de un punto siempre asume que el vector est definido desde el origen hasta dicho punto y la distancia del punto al origen no ser invariante cuando cambiemos de un sistema de coordenada a otro. Asimismo, no podemos sumar puntos y tampoco podemos aplicar a los puntos operaciones vectoriales, como el producto escalar y el producto vectorial.
M = entonces, 3M =
1 4
2 5
3 6
3 12
6 15
9 18
La suma de matrices slo est definida para aquellas matrices que teagan el mismo nmero de filas r y el mismo nmero de columnas c. Para cualesquiera dos matrices r por g, la suma se obtiene sumando los correspondientes elementos. Por ejemplo, 1.5 1.1 0.2 -10.0 1.0 -2.0 3.5 6.1 -4.0
Multiplicacin de matrices
El producto de dos matrices se define como una generalizacin del producto escalar de vectores. Podemos multiplicar una matriz m por n A por una matriz p por q B para formar la matriz producto AB, supuesto que el nmero de columnas de A sea igual al nmero de filas de B. En otras palabras, debe cumplirse que n = p. Entonces, se obtiene la matriz producto formando las sumas de los productos de los elementos de los vectores fila de A por los elementos correspondientes de los vectores columna de B. As, para el siguiente producto: C = AB obtenemos una matriz m por q C cuyos elementos se calculan como: {A.46)
En el siguiente ejemplo, una matriz 3 por 2 se postmultiplica por una matriz 2 por 2, para generar una matriz producto 3 por 2:
A.5 Matrices
823
o -r 5 7
. ~
2 8
0'l + (-l)-3 0 2 + ( - i ) - 4 l 1 2 3 4
5 1 + 7-3 -21+8-3
r-3
26 22
-41 38 28
La multiplicacin de vectores en notacin matricial produce el mismo resultado que el producto escalan supuesto que el primer vector se exprese como un vector fila y el segundo vector se exprese como un vector columna. Por ejemplo.
[1
3]
= [32]
Este producto de vectores da como resultado una matriz con un nico elemento (una matriz 1 por I). Sin embargo, si multiplicamos los vectores en orden inverso, obtendremos la siguiente matriz 3 por 3: 4 [1 2 3] = 5 6 8 12
10 15 12 18
Como ilustran los dos producios de vectores anteriores, la multiplicacin de matrices no es conmutativa por regla general. Es decir, AB^BA (A.48) Pero la multiplicacin de matrices es distributiva con respecto a la suma de matrices:
A(B + C) = A B + A C
{A.49)
(A. 50)
= M ' M f
(AJ)
a a -a a
u n n
Los determinantes de orden superior se obtienen recursivamente a partir de los valores de los determinantes de orden inferior. Para calcular un determinante de orden 2 o superior, podemos seleccionar cualquier columna k de una matriz n por n y calcular el determinante como:
det A = ( - I V ^ d e t A ,
>=>
(A.53)
donde detA es el determinante (n~ I) por (ti1) de la subrnatriz que se obtiene a partir de A borrando la fila/'-sima y la columna -sima. Alternativamente, podemos seleccionar cualquier fila j y calcular el determinante como:
/A
detA = ( - l ) '
, a
^detA ,
y
(A.54)
N
La evaluacin de determinantes para matrices de gran tamao (por ejemplo, n > 4) puede realizarse de manera ms eficiente utilizando mtodos numricos. Una forma de calcular un determinante consiste en descomponer una matriz en dos factores: A = LL, donde lodos los elementos de la matriz L por encima de la diagonal son cero y todos los elementos de la matriz U por debajo de la diagonal son cero. Entonces, podemos calcular el producto de las diagonales tanto para L como para U y obtener detA multiplicando los dos productos diagonales. Este mtodo se basa en la siguiente propiedad de los determinantes: det(A B) = (det A)(dei B) (A.55)
Otro mtodo numrico para calcular determinantes se basa en los procedimientos de eliminacin gausiana que se explican en la Seccin A. 14.
<
A 5
>
donde 1 es la matriz identidad. "Iodos los elementos diagonales de I tiene el valor 1 y todos los dems elementos (los no situados en la diagonal) son cero. Los elementos de la matriz inversa M~ pueden calcularse a partir de los elementos de M mediante la frmula:
{
;-lr"*detM det M
W$ty
H
donde ni~ es el elemento en la flay-sima y la columna A-sima de M y M es la subrnatriz (n - 1) por (n - 1) que se obtiene al borrar la fila / -sima y la columnay-sima de la matriz M. Para valores de w, podemos calcular de manera ms eficiente los valores de los determinantes y los elementos de la matriz inversa utilizando mtodos numricos.
t kj
donde x se denomina parte real de z e_v se denomina parte imaginaria de z. Las partes real e imaginaria de un nmero complejo se designan como:
825
Eje imaginario
v --
z
FIGURA A.20. Componentes real e imaginaria de un punto z en el plano complejo.
lije real
. v = Re(z).
. y = Im(z)
U S 9 )
Geomtricamente, un nmero complejo puede describirse como un punto en el plano complejo, como se ilustra en la Figura A.20. Cuando Re(r) = 0, decimos que el nmero complejo z es un nmero imaginario puro. De forma similar, cualquier nmero real puede representarse como un nmero complejo con Im(z) = 0. As, podemos escribir cualquier nmero real en la forma: * = (x, 0) Los nmeros complejos surgen como solucin de ecuaciones tales como: j e
2
+ 1 = 0,
x -2x + 5 = 0
que no tienen ningn nmero real como solucin. As, el concepto de nmero complejo y las reglas para la aritmtica compleja se han desarrollado como extensiones de las operaciones con nmeros reales que proporcionan la solucin a tales tipos de problemas.
= (*,,>-,) + (x y ) = (x, + x v, + y )
v 2 v 2
, s e dclne como:
Esta definicin de la multiplicacin compleja da el mismo resultado que la multiplicacin de nmeros reales cuando las partes imaginarias con cero: (x,,0)(x , 0) = (x,.v ,0)
2 2
Unidad imaginaria
El nmero imaginario puro con y = I se denomina unidad imaginaria y se escribe:
/ = (0,1)
(A.6I)
(Los ingenieros elctricos utilizan a menudo el smbolo j como unidad imaginaria, porque el smbolo / se utiliza para representar la corriente elctrica). A partir de la regla de la multiplicacin compleja, tendremos que: / = (0, 1X0, !) = ( - ! . 0)
2
8 2 6 APNDICE A Matemticas para grficos por computadora Por tanto, ij es el nmero real 1, y i = yP\ (A. 62)
Podemos representar un nmero imaginario puro utilizando cualquiera de las dos siguientes formas: z= iy = (Q,y) Y un nmero complejo general puede expresarse en la forma: z = .r + iy (A. 63)
Utilizando la definicin de /, podemos verificar que esta representacin satisface las reglas de la suma, resta y multiplicacin complejas.
z| = V F = >jx +y
(A. 65)
Este nmero nos da la distancia del punto z en el plano complejo con respecto al origen, lo que a veces se denomina longitud del vector del nmero complejo. As, el valor absoluto del nmero complejo es simplemente una representacin del teorema de Pitgoras en el plano complejo.
Divisin compleja
Para evaluar el cociente de dos nmeros complejos, podemos simplificar la expresin multiplicando el numerador y el denominador por el conjugado complejo del denominador. Despus, utilizamos las reglas de multiplicacin para determinar los valores de las componentes del nmero complejo resultante. Asi, las partes real e imaginaria del cociente de dos nmeros complejos se obtienen como:
Z\ Z\ Z-\
Z-2
^2
n
*js
2
_U ,v, ) ( X M - V = 2
J
2 2
"
2
(A.66)
\
A-,^+y,y ^ ,V,-X,y
A.7 Cuaternios
827
Eje.v imaginario
r,
- e
Eje X real
FIGURA A.21. Parmetros en coordenadas polares dentro del plano complejo. e = eos 9+ / sin 6
i9
(A.69)
que es la frmula de Euter. Utilizando la forma en coordenadas polares, calendamos el producto de dos nmeros complejos multiplicando sus valores absolutos y sumando sus ngulos polares. As, z,z
2
=r r e
t 2
Para dividir un nmero complejo por otro, dividimos sus valores absolutos y restamos sus ngulos polares: (AJ)
Tambin podemos utilizar la representacin polar para calcular las races de los nmeros complejos. Las raices w-simas de un nmero complejo se calculan como: 0 + 2kit \ . . 16 + lkn
COS +/S111
(AJ2) . = 0,1,2,...,/i-l
Estas races descansan sobre un crculo de radio yfr cuyo centro est en el origen del plano complejo y forman los vrtices de un polgono regular de n lados.
A.7 CUATERNIOS
El concepto de nmero complejo se puede ampliar a un nmero mayor de dimensiones utilizando cuaternios. que son magnitudes con una parte real y tres partes imaginarias, que se escriben como: q = s + ta +jb + kc (AJ3)
donde los coeficientes a, b y c en los trminos imaginarios son nmeros reales y el parmetro s es otro nmero real, que se denomina parte escalar. Los parmetros k se definen con las propiedades:
/2 = j2
=
_|
_j
A?4)
La multiplicacin por un escalar se define por analoga con las correspondientes operaciones relativas a vectores y nmeros complejos. Es decir, cada una de las cuatro componentes del cuaternio se multiplica por el valor. De forma similar, la suma de cuaternios se define como la suma de los correspondientes elementos: H\ +
m = li
(AJ)
La multiplicacin de dos cuaternios se lleva a cabo utilizando las operaciones descritas en las Ecuaciones A.74yA.75.
8 2 8 APNDICE A Matemticas para grficos por computadora Tambin podemos utilizar la siguiente notacin de pares ordenados para un cuaternio, que es similar a la representacin de pares ordenados de un nmero complejo; q m (.v, v) (A.77)
El parmetro v en esta representacin es el vector (a, b, c). Utilizando la notacin de pares ordenados, podernos expresar la suma de cuaternios de la forma:
Podemos escribir la frmula de la multiplicacin de cuaternios de manera relativamente compacta si utilizamos las operaciones de producto escalar y producto vectorial de dos vectores, de la manera siguiente: q q = (s s - v , v
x 2 { 2 2
,. v , v
+s
v , + v, X v
(A.79)
El mdulo al cuadrado de un cuaternio se define por analoga con las operaciones de nmeros complejos, utilizando la siguiente suma de los cuadrados de los componentes de los cuaternios.
tf = 5
2
+ v v
(AM)
9
de modo que,
l a a
'
(A.81)
=q V/ = (1,0)
A.8
REPRESENTACIONES N0 PARAMTRICAS
Cuando escribimos las descripciones de los objetos directamente en trminos de las coordenadas correspondientes al sistema de referencias que estamos utilizando, la representacin se denomina no paramtrica. Por ejemplo, podemos describir una superficie con cualquiera de las siguientes funciones cartesianas: / , ( x , * z ) = 0, o z=f (x.y)
2
(A.82)
La primera forma de la Ecuacin A.82 se denomina frmula implcita de la superficie, mientras que la segunda forma se denomina representacin explcita. En la representacin explcita, x e y se denominan variables independientes, y z se denomina variable dependiente. De forma similar, podemos representar una lnea curva tridimensional en forma no paramtrica como la interseccin de dos funciones de superficie, o bien podemos representar la curva con la pareja de funciones: y=J{x) y z = g(x) (AM)
con la coordenada x como variable independiente. Los valores de las variables dependientes y y z se determinan entonces a partir de las Ecuaciones A.83 asignando valores a x para algn nmero prescrito de intervalos. Las representaciones no paramtricas resultan tiles para describir los objetos de un cierto sistema de referencia, pero presentan algunas desventajas a la hora de utilizarlas en algoritmos grficos. Si queremos obtener una grfica suave, debemos cambiar la variable independiente cuando la primera derivada (pendiente) de /(*) gW superior a 1. Esto requiere controlar de manera continua los valores de las derivadas para determinar cundo es necesario cambiar los roles de las variables dependientes c independientes. Asimismo, las Ecuaciones A.83 proporcionan un formato muy engorroso para representar funciones multivaluadas. Por ejemplo, la ecuacin implcita de un crculo centrado en el origen dentro del plano xy es:
0 s e a
x + r - r = 0
A. 10 Operadores diferenciales 8 2 9
Fin general, una representacin ms conveniente para describir los objetos en los algoritmos grficos es en trminos de ecuaciones paramtricas.
(AM)
donde cada una de las coordenadas cartesianas es una funcin del parmetro u. En la mayora de los casos, podemos normalizar las tres funciones de coordenadas de modo que el parmetro u vare en el rango comprendido entre 0 y 1.0. Por ejemplo, un crculo en el plano xy con radio r. y con centro en el origen de coordenadas puede definirse en forma paramtrica mediante las siguientes tres funciones: x(u) = r cos(2*w), y(n) = r sin(2jn/), z(u) = 0, 0<u< I (A.85)
Puesto que esta curva est definida en el plano xy, podemos eliminar la funcin z(w), que tiene el valor constante 0. De forma similar, podemos representar las coordenadas de una superficie utilizando la siguiente funcin vectorial cartesiana:
Pgfe v) = (x(u, v), f c v), z(, t>)) (AM)
Cada una de las coordenada cartesianas es ahora funcin de los dos parmetros de la superficie u y v. Una superficie esfrica con radio / y con centro en el origen de coordenadas, por ejemplo, puede describirse mediante las ecuaciones: -v<w, v) = reos(2;r/Osin(7n > y(u,v) = rsin(2/r)sm(Jn') z(w, i>) = rcos(/rv) El parmetro // define lneas de longitud constante sobre la superficie, mientras que el parmetro v describe lneas de latidud constante. Las ecuaciones paramtricas, de nuevo, se suelen normalizar para asignara // y a v valores en el rango comprendido entre 0 y 1.0. Manteniendo uno de estos parmetros fijo mientras se vara el otro en un subrango del intervalo unitario, podemos dibujar las lineas de latitud y longitud de cualquier seccin esfrica (figura A.22). 0 < u. v < I (A.87)
,
FIGURA A.22. Seccin de una superficie esfrica descrita por lneas de constante y lineas de v constante en las Ecuaciones A.87.
4f dx
| m
f(x + Ax)-f(x) Ar
(A. 88)
y esta definicin es la base para obtener soluciones numricas a problemas que impliquen operaciones de tipo diferencial. Las formas funcionales de las derivadas de las funciones ms comunes, como los polinomios y las funciones trigonomtricas, pueden consultarse en las tablas de derivadas. Y para los problemas de diferenciales que impliquen funciones simples, normalmente podremos obtener soluciones cerradas. Sin embargo, en muchos casos, ser necesario resolver los problemas diferenciales utilizando mtodos numricos. Cuando tenemos una funcin de varias variables, las operaciones diferenciales efectuadas con respecto a las variables individuales se denominan derivadas parciales. Por ejemplo, con una funcin tal c o m o / ( * , > \ z, /), podemos determinar la tasa de cambio de la funcin con respecto a cualquiera de los ejes de coordenadas, xy o z, o con respecto al parmetro temporal /. Una derivada parcial para una variable independiente concreta se define mediante la Ecuacin A.88, manteniendo constantes todas las dems variables independientes. As, por ejemplo, la derivada parcial d e / c o n respecto al tiempo se define como:
evalundose esta frmula en una determinada posicin espacial y en un determinado instante de tiempo. Hay una serie de operadores de derivadas parciales que aparecen de manera lo suficientemente frecuente como para asignarles nombres especiales, como el gradiente, la laplaciana, la divergencia y el rotacional. Estos operadores resultan tiles en diversas aplicaciones, como por ejemplo a la hora de determinar la geometra y orientacin de los objetos, a la hora de describir el comportamiento de los objetos en ciertas situaciones, a la hora de calcular los efectos de la radiacin electromagntica o a la hora de utilizar conjuntos de datos en los trabajos de visualizacin cientfica.
O p e r a d o rg r a d i e n t e
El operador vectorial con las siguientes componentes cartesianas se denomina operador gradiente: (A.89) El smbolo V se denomina nubla, del o simplemente operador grad. Una aplicacin importante del operador gradiente es a la hora de calcular un vector normal a una superficie. Cuando se describe una superficie con la representacin no paramtrica f(x,y, z) - constante, la normal a la superficie en cualquier posicin se calcula como: N = V/* (Vector normal para una representacin paramtrica de la superficie) (A.90)
Como ejemplo, una superficie esfrica con radio r puede representarse en coordenadas locales con la representacin cartesiana no paramtrica/(*, >>, z) = x + y + z = / , y el gradiente d e / p r o d u c i r el vector normal a la superficie ( 2 r , 2 y , 2 z > . Pero si se representa la superficie con una funcin vectorial paramtrica P(, v), entonces podemos determinar la normal a la superficie utilizando la operacin de producto vectorial:
2 2 2 2
N=
au
av
D e r i v a d ad i r e c c i o n a l
Tambin podemos utilizar el operador gradiente y el producto escalar de vectores para formar un producto escalar denominado derivada direccional de una funcin fi
Esto nos proporciona la tasa de cambio d e / e n una direccin especificada por el vector unitario u. Como ilustracin, podemos determinar la derivada direccional para la funcin de superficie esfrica/ = x + y + z en la direccin z de la forma siguiente:
2 2, 2
f-
dz
z
= u V/ =
C
donde u es el vector unitario segn la direccin z positiva. Y para el siguiente vector unitario en el plano xy\
du
V2
dx
V2
By
F o r m ag e n e r a ld e lo p e r a d o rg r a d i e n t e
Dentro de cualquier sistema ortogonal de coordenadas tridimensionales, podemos obtener las componentes del operador gradiente utilizando los clculos:
En esta expresin, cada u representa el vector base unitario en la direccin de la coordenada x , y g son los componentes diagonales del tensor mtrico del espacio.
k kk
O p e r a d o rd eL a p l a c e
Podemos utilizar el operador de gradiente y el producto escalar de vectores para formar un operador escalar diferencial denominado laplaciana u operador de Laplace, que tiene la forma en coordenadas cartesianas:
832
El simbolo V- se denomina en ocasiones grado al cuadrado, del al cuadrado o nabla ed cuadrado. Y en cualquier sistema ortogonal de coordenadas tridimensionales, la laplaciana de una f u n c i n / ( x , ^ , z) se calcula como:
V7 =
dx,
V ^^n Son muchas las aplicaciones donde surgen ecuaciones en las que interviene la laplaciana, incluyendo la descripcin de los efectos de la radiacin electromagntica.
+ a*.
(4-55)
O p e r a d o rd i v e r g e n c i a
El producto escalar de vectores tambin puede utilizarse para combinar el operador gradiente con una funcin vectorial con el fin de producir una magnitud escalar denominada divergencia de un vector, que tiene la siguiente forma cartesiana:
dv
x y z
dv
(A.96)
div V = V - V = - + dz dx^ + r )y En esta expresin, V , V y V son las componentes cartesianas del vector V. La divergencia es una medida de la tasa de incremento o decrcmento de una funcin vectorial, como por ejemplo un campo elctrico, en un determinado punto del espacio. En cualquier sistema ortogonal de coordenadas tridimensionales, la divergencia de un vector V se calcula como:
jvV=V-V=
2
. ySitXas
[^(>/g^V^ *i *
x
con los parmetros Vs, V y V$ como componentes del vector V con respecto a los ejes de coordenadas, y siendo Xp x y x^ y g los elementos diagonales del tensor mtrico.
2 kfi
O p e r a d o rr o t a c i o n a l
Otro operador diferencial muy til es el rotacional de un vector, que se aplica utilizando el operador gradiente y el producto vectorial. Las componentes cartesianas del rotacional de un vector son: rot V = V x V =
' * ^ w f i
E-
dx ay
>
(AM)
Esta operacin nos da una medida de los electos rotacionales asociados con una magnitud vectorial, como por ejemplo en la dispersin de la radiacin electromagntica. En un sistema ortogonal de coordenadas tridimensionales, podemos expresar las componentes del rotacional en trminos de las componentes del tensor mtrico, utilizando la siguiente representacin en forma de determinante: (A.99) rot V = V x V =
||#22#.0
Los vectores u son los vectores base unitarios del espacio, y g son los elementos diagonales del tensor mtrico.
k kk
833
A.11
En muchas aplicaciones, nos encontramos con problemas que implican operaciones diferenciales que es preciso integrar (sumar) en una cierta regin del espacio, lo que puede ser a lo largo de un trayecto de lnea recta, en toda una superficie o en todo un volumen del espacio. A menudo, el problema puede simplificarse aplicando un teorema de transformacin que convierta una integral de superficie en una integral de lnea, una integral de lnea en una integral de superficie, una integral de volumen en una integral de superficie o una integral de superficie en una integral de volumen. Estos teoremas de transformacin tienen una gran importancia a la hora de resolver un amplo rango de problemas prcticos.
Teorema de Stokes
Para una funcin vectorial continua F (.t, y, z) definida sobre una cierta regin superficial, el l e o r e m a de S t o k e s indica que la integral de la componente perpendicular del rotacional de F es igual a la integral de lnea de F alrededor de la curva de permetro C de la superficie. Es decir,
J Jmpr
ff
(rot
F)
Je
dA
=(
ds
{A. 100)
donde la frontera C d e b e ser continua por tramos, lo que significa que C debe ser una curva continua o una curva compuesta por un nmero finito de secciones continuas, como por ejemplo arcos circulares o segmentos de lnea recta. En esta frmula, n es el vector unitario normal a la superficie en cualquier punto, dA es un elemento diferencial de rea superficial, r es un vector unitario tangente a la curva de contorno Cen cualquier punto y ds es el segmento de lnea diferencial a lo largo de C. La direccin de integracin alrededor de C es en sentido contrario a las agujas del reloj, si estamos mirando a la parte frontal de la superficie (Seccin 3.15), como se muestra en la Figura A.23.
x
2
(A.IOI)
Aqu,/j (*,>>) yf (x*y) son dos funciones continuas definidas en toda el rea plana delimitada por la curva C, y la direccin de integracin alrededor de C e s en sentido contrario a las agujas del reloj. Tambin pode-
FIGURA A.23. La integracin alrededor de la lnea de contorno C es en sentido contrario a las agujas del reloj en el leorema de Stokes cuando miramos a la superficie desde la regin exterior del espacio.
FIGURA A.24. Las integrales de lnea en el teorema de Green para el plano se evalan recorriendo las curvas lmite C, y C, de modo que la regin interior (sombreada) queda siempre a la izquierda. mos aplicar el teorema de Green a una regin que tenga agujeros internos, como en la Figura A.24, pero entonces deberemos integrar en el sentido de las agujas alrededor de las curvas de contorno interiores. Aunque fue desarrollado de manera independiente, el teorema de Green para un plano es un caso especial del teorema de Stokcs. Para demostrar esto, vamos a definir la funcin vectorial F con componentes cartesianos (f f * E n t o n e s , el teorema de Green puede escribirse en forma vectorial:
v 2
n
A
(rolF)-u.<M=(f
Je
(A. 102)
F T Y
ma
donde w, es el vector unitario perpendicular al plano xy (en la direccin z), dA = dx dy, y los otros parmetros son los mismos que en la Ecuacin A. 100. Podemos utilizar el teorema de Green para un plano para calcular el rea de una regin plana, haciendo /i = 0 yf x. Entonces, a partir del teorema de Green, el rea A de una figura plana ser
2
A=\\
J Jaren
2
dxdy = &xdy
Jt"
= ff
J Jarea
dx dy = - y dx
J C
Y tambin podemos convertir esta expresin cartesiana del rea a la siguiente forma en coordenadas polares: (AJ06)
El teorema de Green para el plano puede expresarse de muchas otras formas tiles. Por ejemplo, si definimos /. = df/cfy yfj (tf/dx para alguna funcin continua j\ tendremos:
y
835
Teorema de divergencia
Los dos teoremas anteriores nos proporcionan mtodos para realizar la conversin entre integrales de superficies e integrales de lnea. El teorema de divergencia proporciona una ecuacin para convertir una integral de volumen en una integral de superficie, o a la inversa. Lstc teorema tambin se conoce con varios otros nombres, incluyendo los de teorema de Creen en el espacio y teorema de Causs. Para una funcin vectorial continua tridimensional F. definida sobre un cierto volumen del espacio, podemos expresar el teorema de divergencia en forma vectorial:
f f
livF</V=f
F.,M
'
donde dVcs un elemento diferencial de volumen, n es el vector normal a la superficie de contomo y dA es un elemento diferencial de rea superficial. Podemos utilizar el teorema de divergencia para obtener varias otras transformaciones integrales tiles. Por ejemplo, si F = V / p a r a alguna funcin tridimensional c o n t i n u a / tenemos la versin para volmenes de la Ecuacin A. 107, que es:
ff w ^ f f
J J J wh J J
m
Mirprrf .ufpcrf
dn
En esta ecuacin, dffdn es la derivada direccional d e / e n la direccin de la normal a la superficie. A partir del teorema de divergencia, podemos hallar expresiones para calcular el volumen de una regin del espacio ulilizando una integral de superficie. Dependiendo de cmo representemos la funcin vectorial F, podemos obtener cualquiera de las siguientes formas cartesianas para la integral de superficie:
v-\\\ ,/.-
n
2 l
xdydz =
ydzdx =
J tJ II i J -
zdxdy
tiirprtl
~\
&4yd:
ydzdx
zdxdy)
(A. 10)
m
2
(/v./;+y/i-vy;wi/=
J WpBf
fMm
OH
UIID
val
En estas ecuaciones,/, yf son funciones escalares continuas tridimensionales, y (tf/dn y df*Jdn son sus derivadas direccionales en la direccin de la normal a la superficie.
836
APNDICE A
!- I
centroide en aquellos programas que implican transformaciones geomtricas, simulaciones, diseo de sistemas y animaciones.
r e ad eu np o l g o n o
A partir de la Ecuacin A. 103, podemos calcular el rea de un polgono expresando las coordenadas cartesianas de forma paramtrica y evaluando la integral de lnea alrededor del permetro del polgono. Las ecuaciones paramtricas para los n lados de un polgono con n vrtices en el plano .rv (Figura A.25) pueden expresarse en la forma:
V=v,+(v
n+l T | v
t l
- v )u
t
donde x =*,y.v =y Sustituyendo la expresin diferencial dy = (y , - y )du y la expresin paramtrica de x en la Ecuacin A. 103, tenemos:
k+ k
A = <^> x dy
'i
i
II
=
X - ^ - '
) [ A
''
+ (
) / 2 ]
Para cada segmento de lnea, el segundo y tercer trminos de esta suma se cancelan con los trminos similares de signos opuestos que podemos encontrar para valores sucesivos de k. Por tanto, el rea del polgono se calcula mediante la frmula:
C e n t r o i d ed eu np o l g o n o
Por definicin, el centroide es la posicin del centro de masas para un objeto de densidad constante (todos los puntos del objeto que tienen la misma masa). Por tanto, las coordenadas del centroide son simplemente los
valores medios de las coordenadas, calculados para todos los puntos contenidos dentro de las fronteras del objeto. Para algunas formas poligonales simples, podemos obtener el centroide promediando las posiciones de los vrtices. Pero, en general, el promediado de vrtices no permite localizar correctamente el centroide, porque no se tienen en cuenta las posiciones de los restantes puntos del polgono. Como se ilustra en la Figura A.26, el punto que se obtiene al promediar las coordenadas de los vrtices est situado cerca de la zona con mayor concentracin de vrtices, mientras que el centroide se encuentra en la posicin central relativa a toda el rea poligonal. Podemos calcular la posicin del centroide (x y) de un polgono en el plano xy promediando las coordenadas de todos los puntos situados dentro de las fronteras del polgono:
t
i f f
A J J
*~
.v
i f f
A J Jarea
fin estas expresiones, f y fL se denominan momentos del rea con respecto a los ejesx e y, respectivamente, donde se asume que el rea tiene una unidad de masa por unidad de rea. Podemos evaluar cada uno de los momentos del polgono utilizando los mismos procedimientos que ya hemos empleado para calcular el rea del polgono. A partir del teorema de Oreen para un plano, obtenemos una integral de lnea equivalente a la integral de rea y evaluamos la integral de lnea utilizando las representaciones paramtricas de las coordenadas cartesianas que describen los puntos situados en las aristas del polgono. El teorema de Creen para una superficie plana (Ecuacin A. 101) indica que:
x
J Jrn^
I "T-ayV* = ox f Ir
2
% Je
M-II7)
/i, = f i
xdxdy = i ( t x dy
(A.
J Jarea 2JC A partir de las representaciones paramtricas A.l 13 para los lados del polgono, tenemos: x
2
=x +2x (x
k k
kti
-X )M + (X^, -x )V
4 4
n. Por tanto.
838
APNDICE A
=x(-v . +A )U y -T ,,v )
i 1 i 4 i i 2
(AV/9)
/i=JJ
k
ydxdy = ^ y d x
(A.I20)
Utilizando las representaciones paramtricas A. 113 para evaluar la integral de lnea, tenemos
o Dado cualquier conjimlo de vrtices de un polgono, podemos entonces usar las expresiones correspondientes A, p y fi en las Ecuaciones A.l 16 para calcular las coordenadas del centroide del polgono. Puesto que la expresin (x y ~x y ) aparece en los clculos de las tres magnitudes. A, fi y fJL, calcularemos dicha expresin una sola vez para cada segmento de linea.
v v k k+l k+[ k x
uhdz
{ A
'
2 2 )
Esta integral puede convertirse en una integral de superficie utilizando alguna de las ecuaciones de transfonuacin A.l 10. Para un poliedro, la integral de superficie puede entonces evaluarse utilizando una representacin paramtrica de los puntos situados en cada cara del slido. Calculamos las coordenadas del centroide de un poliedro utilizando mtodos similares a los que se emplean para los polgonos. Por definicin, la posicin del centroide en coordenadas cartesianas para una regin del espacio (con unidad de masa por unidad de volumen) es el promedio de todos los puntos comprendidos dentro de dicha regin:
,
i !
dxdydz = y
ydxdydz =
(A. 123)
De nuevo, podemos convertir las integrales de volumen en integrales de superficie, sustituir las represen
taciones paramtricas de las coordenadas cartesianas y evaluar las integrales de superficie para las caras del poliedro.
A. 14
Mtodos numricos
839
ax
n
+ ---+a x
ln
tl
=b
(A. 124)
donde los valores de los parmetros a^y b son conocidos. Este conjunto de ecuaciones puede expresarse en la forma malricial:
AX=B
(A. 125)
donde A es una matriz cuadrada n por n cuyos elementos son los coeficientes X es la matriz columna de valores Xj y B es la matriz columna de valores /y Resolviendo la ecuacin matncial para despejar X, obtenemos: X = A 'B Este sistema de ecuaciones puede resolverse si y slo si A es una matriz no singular, es decir, si su determinante es distinto de cero. En caso contrario, la inversa de la matriz A no existe. Un mtodo para resolver el sistema de ecuaciones es la regla de Cramer:
donde A es la matriz que se obtiene al sustituir la columna -sima de la matriz A por los elementos de B. Este mtodo es adecuado para problemas que tengan unas pocas variables. Sin embargo, para ms de tres o cuatro variables, el mtodo es extremadamente ineficiente, debido al gran nmero de multiplicaciones necesarias para calcular cada determinante. La evaluacin de un nico determinante n por n requiere ms de n\ multiplicaciones. Podemos resolver el sistema de ecuaciones de manera ms eficiente utilizando variantes de la eliminacin gausiana. Las ideas bsicas de la eliminacin gausiana pueden ilustrarse con el siguiente sistema de dos ecuaciones:
k Xl
+2x =-4
2 2
AJ28)
1x^Ax =\ Para resolver este sistema de ecuaciones, podemos multiplicar la primera ecuacin por -3 y luego sumar las dos ecuaciones para eliminar el trmino x lo que nos da la ecuacin:
v
-2x = 13
2
que tiene la solucin x - - 13/2. Entonces, podemos sustituir este valor en cualquiera de las ecuaciones originales para obtener la solucin correspondiente a x,, que es 9. Podemos emplear esta tcnica bsica para
2
840
resolver cualquier sistema de ecuaciones lineales, aunque se han desarrollado algoritmos para realizar de forma ms eficiente las etapas de eliminacin y sustitucin. Una modificacin del mtodo d e eliminacin gausiana e s l a d e s c o m p o s i c i n L U ( o f a c t o r i z a c i n L U ) para la resolucin de sistemas de ecuaciones lineales. En este algoritmo, primero factorizamos la matriz A en dos matrices, denominadas matriz diagonal inferior L y matriz diagonal superior U de modo que A=L Todos los elementos de la matriz L situados por encima de su diagonal tienen el valor 0, y todos los elementos de la diagonal tienen el valor I . Todos los elementos de la matriz U situados por debajo de la diagonal tienen el valor 0. Entonces, podemos escribir la Ecuacin A. 1 25 como: L U X =B Esto nos permite resolver los dos siguientes sistemas de ecuaciones, que son mucho ms simples. L Y = B, UX=Y (A.I3I) (A.I30)
Una vez obtenidos los valores de los elementos de la matriz Y en la Ecuacin A. 1 3 1 , podemos usarlos en el segundo sistema de ecuaciones para calcular los elementos de la matriz X. Como ejemplo, la siguiente ecuacin ilustra la factorizacin para una matriz de coeficiente de tamao 2 por 2: A =
3i]
o ][ 2
0
3 1 -7
M&
.4 1 _
Un mtodo para calcular los elementos de las matrices de factorizacin est dado por el siguiente sistema de ecuaciones, donde u, son los elementos de la matriz triangular superior U y lj son los elementos de la matriz triangular inferior L :
(A. 132)
La eliminacin gausiana es susceptible, en ocasiones, a graves errores de redondeo, y otros mtodos pueden que no produzcan una solucin precisa. En tales casos, puede que podamos obtener una solucin utilizando el mtodo de Gauss-Seidel. Este mtodo tambin constituye una forma eficiente de resolver el sistema de ecuaciones lineales cuando conocemos los valores aproximados de la solucin. En la tcnica de Gauss-Seidel, comenzamos con una estimacin inicial de los valores de las variables x y luego calculamos repetidamente una serie de aproximaciones sucesivas, hasta que la diferencia entre dos valores sucesivos para cada x sea pequea. En cada paso, calculamos los valores aproximados de las variables mediante las frmulas:
k k
b . - a ^ - a ^ x, = _h -a x -o x
1 2i { 2y i
ax
2n
Si podemos reordenar la matriz A de modo que cada elemento diagonal tenga una magnitud superior a la suma de las magnitudes de los otros elementos situados en esa fila, entonces est garantizado que el mtodo (iauss-Seidel converge hacia una solucin.
MI
dx x (t
(A., 34)
A'|
d o n d e / ' ( . v ) designa la derivada d e / ( . Y ) evaluada enx = * . Repetimos este proceso para cada aproximacin que calculemos hasta que la diferencia entre las aproximaciones sucesivas sea "lo suficientemente pequea". Adems de resolver los problemas que impliquen variables reales, el algoritmo de Newton-Raphson puede aplicarse a una funcin de una variable c o m p l e j a / ( r ) , a una funcin de varias variables y a sistemas de funciones no lineales, reales o complejas. Asimismo, si el algoritmo de Newton-Raphson converge hacia una raz, converger de forma ms rpida que cualquier otro mtodo de determinacin de races. Pero el hecho es que este algoritmo no siempre converge. Por ejemplo, el mtodo falla si la derivada f'(x) toma el valor 0 en algn punto de la iteracin. Asimismo, dependiendo de las oscilaciones de la curva, las aproximaciones sucesivas pueden diverger con respecto a la posicin de la raz. Otro mtodo, que es ms lento pero cuya convergencia est garantizada, es el mtodo de la biseccin. En este algoritmo, debemos identificar un intervalo .v que contenga una raz. Entonces, aplicamos un procedimiento de bsqueda binaria dentro de dicho intervalo para ir cercando la raz en un intervalo cada vez ms
0 0
FIGURA A.27. Aproximacin de una curva en un valor inicial x* mediante una lnea recta que sea tangente a la curva en dicho punto.
842
APNDICE A
pequeo. Primero examinamos el puni medio del intervalo para determinar si la raiz se encuentra en la mitad superior o inferior del mismo. Este procedimiento se repite para cada subintervalo sucesivo basta que la diferencia entre las posiciones centrales sucesivas sea ms pequeo que un cierto valor preestablecido. Puede acelerarse el mtodo interpolando posiciones x sucesivas en lugar de dividir por la mitad cada subintervalo (mtodo de la falsa posicin).
E v a l u a c i nd ei n t e g r a l e s
La integral es un proceso de suma. Para una funcin de una nica variables, la integral de/(.v) es igual al rea bajo la curva, como se ilustra en la Figura A.28. Para inlegrandos simples, podemos determinar a menudo una forma funcional de la integral, pero en general es necesario evaluar las integrales utilizando mtodo numricos. A partir de la definicin de la integral, podemos formar la siguiente aproximacin numrica:
l /W & % & $ k
m
(A.
136)
La funcin f (x) es una aproximacin de la/(.v) en el intervalo x . Por ejemplo, podemos aproximar la curva mediante un valor constante en cada subintervalo y sumarle las reas de los rectngulos resultantes (Figura A.29). Esta aproximacin mejora, hasta cierto punto, a medida que reducimos el tamao de subdivisiones del intervalo que va desde a hasta b. Si las subdivisiones son demasiado pequeas, puede que los valores de las sucesivas reas rectangulares se pierdan dentro de los errores de redondeo. Si se utilizan aproximaciones polinmicas para la funcin en cada subintervalo, generalmente se obtienen mejores resultados que con los rectngulos. Utilizando una aproximacin lineal, las subreas resultantes son trapezoides y el mtodo de aproximacin se denomina entonces regla del trapezoide. Si utilizamos un polinomio cuadrlico (parbola) para aproximar la ecuacin en cada subintervalo, el mtodo se denomina regla de Simpson y la aproximacin de la integral ser:
k k
FIGURA A.28. La integral de/(x) es igual al rea comprendida entre la funcin y el eje x en el intervalo que va desde a hasta b.
FIGURA A.29. Aproximacin de una integral mediante la suma de las reas de pequeos rectngulos.
A. 14 Mtodos n umricos 84 3
FIGURA A.30. Una funcin con oscilaciones de alta frecuencia. donde n es un mltiplo de 2 y donde = a.
X
FIGURA A.31. Una posicin aleatoria (\, y) generada dentro de un rea rectangular que encierra la funcin /(.r) en el intervalo que va de a hasla />.
k-1
A*,
k = 1,2,. ... n
Para una funcin con una amplitud que vare de forma muy rpida, como el ejemplo de la Figura AJO, puede que sea difcil aproximar de manera precisa la funcin en los distintos subintervalos. Asimismo, las integrales mltiples (las que incluyen varias variables de integracin) no son fciles de evaluar mediante la regla de Simpson ni mediante los otros mtodos de aproximacin. En estos casos, podemos aplicar las tcnicas de integracin de Monte Cario. El trmino Monte Cario se utiliza para describir cualquier mtodo que utilice procedimientos basados en nmeros aleatorios para resolver el problema determinista. Aplicamos el mtodo Monte Cario para evaluar una integral generando n posiciones aleatorias dentro de un rea rectangular que contenga a/(.v) en el intervalo que va desde a hasta b (Figura A.3I). Entonces, podemos calcular una aproximacin a la integral mediante la frmula: f"
Jb
f(x)dx~h(b-a)
c o u m
(A. 139)
donde el parmetro h es la altura del rectngulo y el parmetro w es el nmero de puntos aleatorios comprendidos entre/(,v) y el ejex. Calculamos una posicin aleatoria (.v, y) en la posicin rectangular generando primero dos nmeros aleatorios, r, y y luego realizando las operaciones: = $m ~ firn i * = "Ni <'> -al v = y. + rh
:
(A. 140)
Pueden aplicarse mtodos similares a las integrales mltiples. En los clculos de.v e>> en A. 140, asumimos que los nmeros aleatorios r, y r estn distribuidos uniformemente en el intervalo (0, I ). Podemos obtener r, y r a partir de una funcin generadora de nmeros alcatorios incluida en una biblioteca matemtica o estadstica, 0 bien podemos utilizar el siguiente algoritmo, denominado generador lineal de congruencias:
2
+ r(mod ni),
k = 1,2,3,...
(A.I4I)
donde los parmetros a, c, m y / son enteros e / es un valor inicial denominado semilla. El parmetro /// se elige lo mayor posible para una mquina concreta, eligindose los valores d e a y de forma que la cadena de nmeros aleatorios sea lo ms larga posible antes de que se repita un valor. Por ejemplo, en una mquina que represente los enteros mediante 32 bits, podemos hacer m 2 - 1, a = 1664525 y C = 1013904223.
() t 3 2
R e s o l u c i nd ee c u a c i o n e sd i f e r e n c i a l e so r d i n a r i a s
Cualquier ecuacin que tenga operadores diferenciales se denomina ecuacin diferencial. Las magnitudes pueden cambiar sus valores de forma continua desde una posicin de coordenada a otra. Tambin pueden cambiar a lo largo del tiempo en cada posicin lija y pueden cambiar con respecto a muchos otros parmetros, como por ejemplo la temperatura o la aceleracin de giro. Una ecuacin que incluya las derivadas de una funcin de una nica variable se denomina ecuacin diferencial ordinaria. Para resolver una ecuacin diferencial podemos determinar una forma funcional que satisfaga la ecuacin o podemos emplear mtodos de aproximacin numrica para determinar los valores de la magnitud en intervalos seleccionados. Para resolver una ecuacin diferencial, tambin necesitamos conocer uno o ms valores iniciales. Una ecuacin que slo incluya la primera derivada de una magnitud, que se denominar ecuacin diferencial de primer orden, requiere un nico valor inicial. Una ecuacin que contenga tanto primeras como segundas derivadas, que se denominar ecuacin diferencial de segundo orden, requiere dos valores iniciales. Y de forma similar para las ecuaciones que incluyan derivadas de orden superior. Hay dos clasificaciones bsicas para especificar los valores iniciales. Un problema de valor inicial es aquel en el que las condiciones conocidas se especifican para un nico valor de la variable independiente. Un problema de valor de contorno es aquel en el que las condiciones conocidas se especifican en las fronteras correspondientes a la variable dependiente. Un ejemplo simple de problema de valor inicial sera la ecuacin diferencial de primer orden: dx m =f(xj), dt
A
A.I42) x(J ) = x
t) Q
donde v representa alguna variable dependiente que varia con el tiempo t (la variable independiente),/(.v, /) es la funcin conocida de variacin con el tiempo para la primera derivada de v y x es el valor dado de x para el tiempo inicial / . Tambin podemos escribir esta ecuacin en la forma:
Q 0
dx =f(x, t) dt Y, a partir de la definicin de la derivada, podemos utilizar intervalos finitos para aproximar los diferenciales de la forma siguiente: Av
A f k k A
~f(x ,t )At ,
k k t
k=i),\
(A. 143)
donde A.v = x , x y t = - /, para n pasos temporales. Normalmente, lomaremos intervalos de tiempo iguales y utilizaremos los siguientes clculos incremntales para determinar los valores x en cada paso temporal, dado el valor de .v en / :
0 Q
.r
t f l
(A. 144)
Este procedimiento numrico se denomina mtodo de Euler y permite aproximar x con segmentos de lnea recta en cada intervalo temporal A/. Aunque el mtodo de Euler es un procedimiento simple de implemcntar, en general no resulta muy preciso. Es por ello que se han desarrollado mejoras a este algoritmo numrico bsico a partir de la siguiente expansin en serie de Taylor, incorporando trminos de orden superior en la aproximacin de la ecuacin diferencial: x{t + A/) = x[t) + x(l)At + ^x (t)Ar H Puesto que x'(t)= f(x, /), tendremos que x"(/)= f'(x, t) y as sucesivamente para las derivadas de orden superior. Un mtodo ms preciso y ms ampliamente utilizado para evaluar una ecuacin diferencial de primer orden es el algoritmo de Runge-Kutta, tambin denominado algoritmo de Kunge-Kutta de cuarto orden. liste procedimiento se basa en una expansin en serie de Taylor de cuarto orden. El algoritmo para el mtodo de Runge-Kutta es
A. 14 Mtodos numricos 8 4 5
a=f(x j )At
t t
kM
= x + (a + 2 + 2c + /)/6,
k
=0,1
;-1
Podemos aplicar mtodos similares para obtener la solucin de ecuaciones diferenciales ordinarias de orden superior. La tcnica general consiste en utilizar la expansin en serie de Taylor de x para incluir trminos en x'\x"\ etc., dependiendo del orden de la ecuacin diferencial. Por ejemplo, de la serie de Taylor podemos obtener la siguiente aproximacin para la segunda derivada:
J f e t f
S ^
(A. 147)
(A.I48)
9/_/,-/>
dx dt dt Ax
KM
Despus, resolvemos las ecuaciones para un nmero finito de posiciones x utilizando las condiciones iniciales o de contorno que se hayan especificado. Para las derivadas de orden superior, podemos utilizar las expansiones en serie de Taylor para obtener aproximaciones mediante diferencias finitas. Como ejemplo, podemos utilizar la siguiente aproximacin para la segunda derivada parcial d e / c o n respecto a x :
d f(xj) ^ fMU)-2fk/,.,</)
2
l50)
dx
Ax
Y cuando tengamos funciones definidas sobre superficies o volmenes del espacio, podemos dividir el
espacio en una cuadrcula regular y utilizar diferencias finitas para cada punto del espacio. Otra tcnica que se suele aplicar a las ecuaciones diferenciales parciales es el mtodo de los elementos finitos. Se especifica una cuadrcula de puntos en el dominio de inters, que podra ser una superficie o un volumen del espacio, y luego se resuelven las ecuaciones acopladas en las posiciones de nodo utilizando la tcnica de variaciones. Segn este mtodo, se utiliza una solucin funcional aproximada en lugar de las ecuaciones en diferencias finitas. Dependiendo del problema, se especifica una integral para alguna magnitud, como la
8 4 6 APNDICE A Matemticas para grficos por computadora energa potencial o el error residual. Entonces, podemos aplicar algn procedimiento, como el anlisis de nmeros cuadrados, para minimizar la energa potencial o el error residual. Esta minimizacin nos proporciona valores para los parmetros desconocidos en la funcin que aproxima a la solucin.
JL
i
151)
Los parmetros de la funcin f(x) se determinan entonces minimizando la expresin de error E. Como ejemplo, si queremos describir el conjunto de datos mediante la funcin lineal: /(*) = a entonces,
E + 0 a
= b - 2 * K+
) + <*l + 2 < W *
(AJ52)
Puesto que el error E es una funcin de dos variables (a y o), podremos minimizar E mediante las siguientes dos ecuaciones acopladas:
0
re-
"
t (
k = i
^ = Zt -2.v +2a + 2 ^ J = 0
oa
f
(A. 53)
|^ = I l - 2 . y - r , + 2
da, p
4
V A +
2^;]= 0
Entonces, podemos resolver este sistema de dos ecuaciones lineales utilizando la regla de Cramer. que nos da:
0 =
n
( I- ^ ) ( I , y Q - ( I ^ ) ( I , . ^ )
(
(
(A.154)
A. 14 Mtodos numricos 8 4 7
D
II
n
(A./55)
=
Podemos efectuar clculos similares para otras funciones. Por ejemplo, para el polinomio;
necesitaremos resolver un sistema de n ecuaciones lineales para determinar los valores de los parmetros a . Y tambin podemos aplicar el mtodo de ajuste por mnimos cuadrados a funciones de mltiples variables/ (*,, j r , . . . . . x ) que pueden ser lineales o no lineales con respecto a cada una de las variables.
k 2 m
Bibliografa
AKELEY,K. y T.JERMOLUK(198X). HighPerlbrmancc Polygon Rendering, en los an ionios de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 239-246. AKELEY, K. (1993). RealityEngine Graphics, en los artculos de S1GGRAP1E93, Computer Graphics, pgs. 109-116. AKENfNE-MLLER, T. y E HAINES (2002). Real-Time Rendering, Second Edition, A. K. Peters, Natick, MA. AMANATIDES, J. (1984). Ray Tracing with Cones, en los artculos de SIGGRAPIF84, Computer Graphics, 18(3), pgs. 129-135. AN J Y O , K., Y. USAMI y T. KURI11ARA (1992). A Simple Method for Extracting the Natural Beauty of llair, en los artculos de SIGGRAPH'92, Computer Graphics, 26(2), pgs. 111-120. APPLE COMPUTER, INC. (1987). Human Interface Guidelines: The Apple Desktop Interface, Addison-Wesley, Reading, MA. ARVO, J. y D. KIRK (1987). Fast Ray Tracing by Ray Classification, en los artculos de SIGGRAPIE87, Computer Graphics, 21(4), pgs. 55-64. ARVO, J., ed. (1991), Graphics Gems II, Academic Press, San Diego, CA. ATHERTON, P. R. (1983). A Scan-Line Hidden Surface Removal Procedure for Constructive Solid Geomelry, en los artculos de SIGGRAPH'83, Computer Graphics, 17(3), pgs. 73-82. BARAFF, D. (1989), Analytical Methods for Dynamic Simulation of Non-Penetrating Rigid Bodies, en los artculos de SIGGRAPIE89, Computer Graphics, 23(3), pgs. 223-232. BARAFF. D. y A. WITKIN (1992). Dynamic Simulation of Non-Penetrating Flexible Bodies, en los artculos de SIGGRAPFE92. Computer Graphics, 26(2), pgs. 303 J08. BARNSLEY. M. F., A. JACQUIN, F. MALASSENET, L. REUTER y D. SLOAN (1988). Harnessing Chaos for Image Synlhesis, en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 131-140. BARNSLEY,M. F. (1993). Fractals Everywhere, Second Edition, Academic Press, San Diego, CA. BARNSLEY, M. F. y L. P. I1URD, (1993). Fractal Image Compression, AK Peters, Wellesly, MA. BARR, A. II. (1981). Superquadrics and AnglePreserving Trans fbrrnations, IEEE Computer Graphics and Applications, 1(1), pgs. 11-23. BARSKY, B. A. y J. C. BEATTY (1983). Local Control of Bias and Tension in Beta-Splines, ACM Transactions on Graphics, 2(2), pgs. 109-134. BARSKY, B. A. (1984). A Description and Evaluation of Various 3-D Models, IEEE Computer Graphics and Applications, 4( I), pgs. 38-52. BARZEL, R. y A. II. BARR (1988). A Modeling System Based on Dynamic Constraints)), en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 179-188. BARZEL. R. (1992). Physically-Based Modeling for Computer Graphics, Academic Press, San Diego. CA. BAUM, D. R., S. MANN, K. P. SMITH y J. M. WENGET(I99I). Making Radiosty Usable: Automatic Preprocessing and Meshing Techniques for the Generation of Accurate Radiosity Solutions, en los artculos de S I G G R A P H ^ I , Computer Graphics, 25(4), pgs. 5 1 - 6 1 . BERGMAN, L. D., J. S. RICHARDSON, D. C. RICHARDSON y F. P. BROOKS, JR. (1993). VIEW- an Exploratory Molecular Visualization System with User-Definable Interaction Sequences)), en los artculos de
850
Bibliografa BLOOMENTHAL, J. (1985). Modeling the Mighty Maple, en los artculos de SIGGRAPIF85, Computer Graphics, 19(3), pgs. 305-312. BONO, P. R., J. L. ENCARNACAO, F. R. A. HOPGOOD, et al. (1982). GKS: The First Graphics Standard, IEEE Computer Graphics and Applications, 2(5), pgs. 9-23. BOUQUET, D. L. (1978). An Interactive Graphics Application to Advanced Aircraft Design, en los artculos de S1GGRAPIF78, Computer Graphics, 12(3), pgs. 330-335. BOURG, D. M. (2002). Physics for Game Developers, O'Reilly & Associates, Sebastopol, CA. BRESENHAM, J. E. (1965). Aigorithm for Computer Control of a Digital Plotter, IBM Systems Journal, 4( 1), pgs. 25-30. BRESENHAM, J. E. (1977). A Linear Algorithm for Incremental Digital Display of Circular Ares, Communications of the ACM, 20(2), pgs. 100-106. BROOKSJR., F. P. (1986). Walkthrough: A Dynamic Graphics System for Simulating Virtual Buildings, Interactive 3D, BROOKS JR., F. P. (1988). Grasping Reality Through Illusion: Interactive Graphics Serving Science, CHI '88, pgs. 111. BROOKS JR., F. P., M. OUH-YOUNG, J. J. BATTER y P. J. KILPATRICK (1990). Projecl GROPEHaptic Display for Scientific Visualization)), en los artculos de SIGGRAPFF90, Computer Graphics, 24(4), pgs. 177-185. BROWN, J. R. y S. CUNNINGHAM (1989). Programming the User Interface, John Wiley & Sons, Nueva York. BROWN, C. W. y B. J. SHEPHERD (1995). Graphics File Formats, Manning Publications, Greenwich, CT. BRUDERL1N, A. y T. W. CALVERT (1989). Goal-Directed, Dynamic Animation of Human Walking, en los artculos de S1GGRAP1P89, Computer Graphics, 23(3), pgs. 233-242. BRUNET, P. e I. NAVAZO (1990). Solid Representation and Operation Using Extended Octrees, ACM Transactions on Graphics, 9(2), pgs. 170-197.
SIGGRAPH'93, Computer Graphics, pgs. 117-126. BZIER, P. (1972). Numerical Con/rol: Mathematics and Applications, translated by A. R. Forrest and A. F. Pankhurst, John Wiley & Sons, Londres. B1RN, J. (2000). [digital] Lighting & Rendering, New Riders Publishing, Indianapolis, IN. BISHOP,*^, y D. M. W1EMER (1986). Fast Phong Sliading, en los artculos de SIGGRAPH'86, Computer Graphics, 20(4), pgs. 103-106. BLAKE, J. W. (1993). PH1GS and PHIGS Plus, Academic Press, Londres. BLESER, T. (1988). TAE Plus Styleguide User Interface Description, NASA oddard Space Flight Center, Greenbelt, MO. BLINN, J. F. y M. E. NEWELL (1976). Texture and Reflection in Computer-Generated Images, Communications of the ACM, 19(10), pgs. 542-547. BLINN, J. F. (1977). Models of Light Reflection for Computer-Synthesized Pictures;, en los artculos de SIGGRAPH'77, Computer Graphics, 11(2), pgs. 192-198. BLINN, J. F. y M. E. NEWELL (1978). Clipping Using Homogeneous Coordinates, en los artculos de SIGGRAPrT78, Computer Graphics, 12(3), pgs. 245-251. BLINN, J. F. (1978). Simulation of Wrinkled Surfaces, en los artculos de SIGGRAPH'78, Computer Graphics, 12(3), pgs. 286-292. BLINN, J. F. (1982). A Generalization of Algebraic Surface Drawing, ACM Transactions on Graphics, 1(3), pgs. 235-256. BLINN, J. F. (1982). Light Reflection Functions for Simulation of Clouds and Dusty Surfaces, en los artculos de SIGGRAP1T82, Computer Graphics, 16(3), pgs. 21-29. BLINN, J. F. (1993). A Trip Down the Graphics Pipeline: The Homogeneous Perspective Transform, IEEE Computer Graphics and Applications, 13(3), pgs. 75-80. BLINN, J. (1996). Jim Blinn's Corner:ATrip Down the Graphics Pipeline, Morgan Kauffman, San Francisco, CA. BLINN, J. (1998). Jim Blinn's Corner: Dirty Pixels, Morgan Kauffman, San Francisco, CA.
Bibliografa
851
BRYSON, S. y C. LEV1T (I992). The Virtual Wind Tunnel, IEEE Computer Grapbics and Applications, 12(4), pgs. 2 5 - 3 4 . CALVERT, T., A. BRUDERLIN, J. DILL, T. SCHIPHORST y C. WEILMAN (1993). Desktop Animation of Multiple Human Figures, IEEE Computer Graphics and Applications, 13(3), pgs. 18-26. CAMBELL, (i., T. A. DEFANTI, J. FREDER1KSEN, S. A. JOYCE y L. A. LESKE (1986). Tvvo Bit/Pixel Full-Color Fncodtng, en los artculos de S I G G R A P H ^ , Computer Graphics, 20(4), pgs. 215-224. CARPENTER, L. (1984). The A-Bufier: An Antialiased Hidden-Surface Melhod, en los artculos de SIGGRAPH*84, Computer Graphics, 18(3), pgs. 103-108. CHEN, S. E., H. E. RUSHMEILR, G MILLER y D. TURNER (1991). A Progressive Multi-Pass Method for (i loba I Illumination, en los artculos de SIGGRAPH'91, Computer Graphics, 25(4), pgs. 165-174. CHIN, N. y S. FEINER (1989). Ncar Real-Time Shadow Generation Using BSP Trees, en los artculos de SiGGRAPH'89, Computer Graphics, 23(3), pgs. 99-106. CHUNG, J. C, et al. (1989). Exploring Virtual Worlds with Head-Mounted Visual Displays, Artculos de SPIE (Society of Photo-Optical Instrumentation Engineers, ahora denominada International Society for Optical Engineering) Conference on Three-Dimensional Visualization and Display Technologies, 1083, enero de 1989, pgs. 15-2*0. COHEN, M. F. y D. P. GREENBERG (1985). The Hemi-Cube: A Radiosily Solution for Complex Lnvironments, en los artculos de SIGGRAPH'85, Computer Graphics, 19(3), pgs. 31-40. COHEN, M. F.. S. E. CHEN, J. R. WALLACE y D. P. GREENBERG (1988). A Progressive Rellnemenl Approach to Fast Radiosity Image Generation, en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 75-84. COHEN, M. F. y J. R. WALLACE (1993). Radiosity and Realistic Image Synthesis, Academic Press, Boston, MA.
COOK, R. L. y K. E. TORRANCE (1982). A Reflectance Model for Computer Graphics. ACM Transactions on Graphics, 1(1), pgs. 7-24. COOK, R. L., T. PORTER y L. CARPENTER (1984). Distribuled Ray Tracing, en los artculos de SIGGRAPH'84, Computer Graphics, 18(3), pgs. 137-145. COOK, R. L. (1984). Shade Trees, en los artculos de SIGGRAPH'84, Computer Graphics, 18(3), pgs. 223-231. COOK, R. L. (1986). Stochastic Sampling in Computer Graphics, ACM Transactions on Graphics, 6(1), pgs. 51-72. COOK, R. L . , L. CARPENTER y E. CATMULL (1987). The Reyes Image Rendering Architecture, en los artculos de SIG(iRAPH'87, Computer Graphics, 21(4), pgs. 95-102. COQUILLART, S. y P. JANCENE (1991). Animated Free-Form Deformation: An Interactive Animation Technique, en los artculos de S I G G R A P i r 9 | , Computer Graphics, 25(4), pgs. 2 3 - 2 6 . CROW, F. C. (1977a). The Aliasing Problem in Computer-Synthesized Shaded Images, (\nnmunications of the ACM, 20( 11), pgs. 799-805. ROW, F. C. (1977b). Shadow Algorithms for Computer Graphics, en los artculos de SIGGRAPH'77, Computer Graphics, 11(2), pgs. 242-248. CROW, F. C. (1978). The Use of Grayscale for Improved Raster Display of Vectors and Characters, en los artculos de SIGGRAPH'78, Computer Graphics, 12(3), pgs. 1-5. CROW, F. C. (1981). A Comparison of Antialiasing Techniques, IEEE Computer Graphics and Applications, 1(1), pgs. 40-49. CROW, F. C. (1982). A More Flexible Image Generation Environment)), en los artculos de SIGGRAPIF82, Computer Graphics, 16(3), pgs. 9 - 1 8 . CRUZ-NEIRA, C, D. J. SANDIN y T. A. DEFANTI (1993). Surround-Screen Projection-Based Virtual Reality: The Design and Implementation of the CAVE, en los artculos de SIGGRAPH' 93, Computer Graphics, pgs. 135-142.
852
Bibliografa artculos de SIGGRAPir9l, Computer Graphics, 25(4), pgs. 41-50. DREBIN, R. A., L. CARPENTER y P. HANRAIIAN (1988). Volume Rendering)), en los artculos de SKiGRAPir88, Computer Graphics, 22(4), pgs. 65-74. DURRETT, H. J.. ed. (1987). Color and the Computer, Academic Press, Boston. DUVANENKO. V. (1990). Improved LineSegment Clipping, Dr. Dohb's Journal, julio de 1990. DYER, S. (1990). A Dataflow Toolkit for Visualization)), IEEE Computer Graphics and Applications, 10(4), pgs. 60-69. EARNSHAW. R. A., ed. (1985). Fundamental Algorithms for Computer Graphics, SpringerVerlag, Berln. EDELSBRUNNER, H. (1987). Algorithms in Computational Geometry, Springer-Verlag, Berln. EDELSBRUNNER, H. y E. P. MUCKE (1990). Simulation of Simplicity: A Technique to Cope with Degenerate Cases in Geometric Algorithms, ACM Transactions on Graphics, 9(1), pgs. 66-104. ELBER, G y E.COHEN(1990). Hidden-Curve Removal for Free-Form Surfaces, en los artculos de SIGGRAPH'90, Computer Graphics, 24(4), pgs. 95-104. ENDERLE, G, K. KANSY y G PFAFF (1984). Computer Graphics Programming: GKSThe Graphics Standard, Springer-Verlag, Berln. PARIN, G (1988). Curves and Surfaces for (\*mputer-Aided Geometric Design, Academic Press, Boston, MA. FARIN, G. y D.HANSF0RD(I998). The Geometry Toolbox for Graphics and Modeling, A. K. Peters, Natick, MA. FEDER, J. (1988). Fractals, Plenum Press, Nueva York. FEYNMAN, R. P., R. B, LEIGHTON y M. L. SANDS (1989). The Feyntnan Lectures on Physics, Addison-Wesley, Reading, MA. FISHKIN. K. P. y B. A. BARSKY (1984). A family of New Algorithms for Soil Filling, en los artculos de S1GGRAPIF84, Computer Graphics, 18(3), pgs. 235-244.
CUNNINGHAM, S., N. K. CRAIGH1LL, M. W. FON (i, J. BROWN y J. R. BROWN, eds. (1992). Computer Graphics Using ObjectOriented Programming, JohnWiley & Sons, Nueva York. CUTLER, E., D. GILLY y T. O'REILLY, eds. (1992). The X Window System in a Nutshell, Second Edition, O'Reilly & Assoc., Inc., Sebastopol, CA. CYRUS, M. y J. BECK (1978). Generalized Twoand Three-Dimensional Clipping)), Computers and Graphics, 3( I), pgs. 23-28. DAY, A. M. (1990). The Implementation of an Algorithm to Find the Convex Hull of a Set of Three-Dimensional Points^4CA/ Transactions on Graphics, 9( I), pgs. 105-132. DEERING M. (1992). High Resolution Virtual Reality, en los artculos de SIGGRAP1F92, Computer Graphics, 26(2), pgs. 195-202. DEERING, M. F. y S. R. NELSON (1993). Leo: A System for Cost-Effective 3D Shaded Graphics, en los artculos de SIGGRAPH'93, Computer Graphics, pgs. 101-108. DEMERS, O. (2002). (digital] Texturing & Painting, New Riders Publishing, Indianapolis, IN. DEPP, S. W. y W. E. HOWARD (1993). Flat-Panel Displays, Scientific American, 266(3), pgs.
97. DE REFFYE, P., C. EDEL1N, J. F R A N ^ O N , M. JAEGER y C. PUECH (1988). Planl Models Faithful to Botanical Structure and Develop
ment)), en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 151-158. DEROSE, T. D. (1988). Geometric Continuity, Shape Parameters y Geometric Constructions for Catmull-Rom Splines, ACM Transactions on Graphics, 7( 1), pgs. 1-41. DIGITAL EQUIPMENT CORP. (1989). Digital Equipment Corporation XUI Style Guidc, Maynard, MA. DOCTOR, L. J. y J. G. TORBERG (1981). Display Techniques for Octree-Encoded Objects, IEEE Computer Graphics and Applications, 1(3), pgs. 29-38. DORSEY, J. O., F. X. SILLION y D. P. GREENBERG (1991). Design and Simulation of Opera Lighting and Projection Effects, en los
Bibliografia FIUMI:. E, L. (19X9). The Mathematical Structure of Raster Graphics, Academic Press, Boston. FOLEY, J. D., A. V A N D A M , S . K. FEINER y J. F.HUGHES (1990). Computer Graphics: Principles and Practice. Second Edition, Addison-Wesley, Reading, MA. FOURN1ER, A., IX FUSSEL y L. CARPENTER ( 19X2). Computer Rendering of Stochastic Models, Communications of the ACM, 25(6), pgs. 371-384. FOURNIER, A. y W. T. REEVES (1986). A Simple Model of Ocean Waves, en los artculos de S l G G R A P i r 8 6 , Computer Graphics, 20(4), pgs. 75-84. FOWLER, D. R., II. MEINIIARDT y P. PRUSINKIEWICZ (1992). Modeling Seashells, en los artculos de SIGGRAPIE92, Computer Graphics, 26(2), pgs. 379-387. FRANKLIN, W. R. y M. S. KANKANHALLI (1990). Parallel Object-Space Hidden Surface Removal, en los artculos de SIGGRAP1F90, Computer Graphics, 24(4), pgs. 87-94. FREEMAN, H. ed. (1980). Tutorial and Selected Readings in Interactive C 'omputer Graphics, IEEE Computer Society Press, Silver Springs, MD. IRENKEL, K. A. (1989). Volume Rendering, Communications of the ACM, 32(4). pgs. 426-435. FRIEDER, G, D. GORDON y R. A. REYNOLD (1985). Back-to-Front Display of Voxel-Based Objects, IEEE Computer Graphics and Applications, 5(1 ), pgs. 52-60. FRIEDHOFF, R. M. y W. BENZON (1989). The Second Computer Revolution: Visualization, Harry N. Abrams, Nueva York. FU, K. S. y A. ROSENFELD (1984). Pattern Recognition and Computer Vision, Computer, 17(10), pgs. 274-282. FUJIMOTO, A. y K. 1WATA (1983). Jag-Free Images on Raster Displays, IEEE Computer Graphics and Applications, 3(9), pgs. 26-34. FUNKHOUSER, T. A. y C. H. SEQUIN (1993). Adaptive Display Algorithms for Interactive Frame Rates during Visualization of Complex Virtual Environments, en los artculos de SIGGRAPH'93. Computer Graphics, pgs. 247-254.
853
GARDNER, T. N. y H. R. NELSON (1983). Interactive Graphics Developments in Energy Exploration, IEEE Computer Graphics and Applications, 3(2), pgs. 33-34. GARDNER, G. Y. (1985). Visual Simulation of Clouds, en los artculos de SIGGRAPIE85, Computer Graphics, 19(3), pgs. 297-304. GASCUEL, M.-P. (1993). An Implicit Formulation for Precise Contact Modeling between Flexible Solids, en los artculos de SIGGRAPIF93, Computer Graphics, pgs. 313-320. GASKINS, T. (1992). PHIGS Programming Manual, O'Reilly & Associates, Sebastopol. CA. GHARACHORLOO, N., S. GUPTA, R. F. SPROULL y I. E. SUTHERLAND (1989). A Characterization of Ten Rasterization Techniques, en los artculos de SIGGRAPH'89, Computer Graphics, 23(3), pgs. 355-368. GIRARD, M. (1987). Interactive Design of 3D Computer-Animated Legged Animal Motion, IEEE Computer Graphics and Applications, 7(6), pgs. 3 9 - 5 1 . GLASSNER, A. S. (1984). Space Subdivision for Fast Ray Tracing, IEEE Computer Graphics and Applications, 4( 10), pgs. 15-22. GLASSNER, A. S. (1986). Adaptive Precision in Texture Mapping, en los artculos de SIGGRAPH'86, Computer Graphics, 20(4), pgs. 297-306. GLASSNER, A. S. (1988). Spacetime Ray Tracing for Animation, IEEE Computer Graphics and Applications, 8(2), pgs. 60-70. GLASSNER, A. S., ed. (1989a). An Introduction to Ray Tracing, Academic Press, San Diego, CA. GLASSNER, A. S. (1989b). 3D Computer Graphics: A User's Guide for Artists and Designers. Second Edition, Design Books, Lyons & Bufford Publishers, Nueva York. GLASSNER, A. S., ed. (1990). Graphics Gems, Academic Press, San Diego, CA. GLASSNER, A. S. (1992). Geometrie Substitution: A Tutorial, IEEE Computer Graphics and Applications, 12(1), pgs. 22-36. GLASSNER, A. S. (1995). Principles of Digital Image Synthesis, Vols. 1-2, Morgan Kaufmann, San Francisco, CA.
854
Bibliografa SIGGRAPH'90, Computer Graphics, 24(4). pgs. 309-318. HALL, R. A. y D. P. GREENBERG (1983). A Testbed for Realistic Image Synthesis, IEEE Computer Graphics and Applications, 3(8), pgs. 10-20. HALL, R. (1989). Illumination and Color in Computer Generated Imagery, Springer-Verlag, Nueva York. HALLIDAY. D., R. RESNICK y J. WALKER (2000). Fundamentals of Physics, Sixth Edition, John Wiley & Sons. Nueva York. HANRAHAN, P. y J. LAWSON (1990). A Language for Shading and Lighting Calculations)), en los artculos de SIGG R A P H ^ O , Computer Graphics, 24(4), pgs. 289-298. HARDY, V. J. (2000). Java 2D API Graphics, Sun Microsystems Press, Palo Alto, CA. HART, J. C, 1>. J. SANDIN y L. II. KAUFFMAN (1989). Ray Tracing Deterministic 3D Fractals, en los artculos de SIGGRAPH'89, Computer Graphics, 23(3), pgs. 289-296. HART, J. C. y T. A. D K F A N T I (1991). Eflleient Antialiased Rendering of 3-D Linear Fractals)), en los artculos de SIGGRAPH'91, Computer Graphics, 25(4), pgs. 91-100. HAWRYLYSHYN, P. A., R. R. TASKER y L. W. ORGAN (1977). CASS: Computer-Assisted Stereotaxic Surgery, en los artculos de SIGGRAPH'77, Computer Graphics, 11(2). pgs. 13-17. HE, X. D., P. O. HEYNI-N, R. L. PHILLIPS, K. E. TORRANCE, D. H. SALESIN y D. P. GREENBERG (1992). A Fast and Accurate Light Reflection Model. en los artculos de SIGG R A P t F 9 2 , Computer Graphics, 26(2), pgs. 253-254. HEARN, D. y P. BAKER (1991). Scientifie Visualization: Anlntroduction, Eurographics VITechnical Report Series, Tutorial Lecture 6, Viena, Austria. HFCKBERT, P. S. (1982). Color Image Quantization for frame Buffer Display)), en los artculos de SIGGRAPH'82, Computer Graphics, 16(3), pgs. 297-307. HECKBERT, P. S. y P. HANRAIIAN (1984). Beam Tracing Polygonal Objects, en los
GLASSNER, A. S. (1999). Andrew Glassners Notebook: Recreational Computer Graphics, Morgan Kaufmann, San Francisco, CA. GLASSNER, A. S. (2002). Andrew Glassners Other Notebook: Further Recreations in Computer Graphics, A. K. Peters, Natick, MA. GLHICHER, M. y A. W1TKIN (1992). Throughthe-Lens Camera Control, en los artculos de SIGGRAPIF92, Computer Graphics, 26(2), pgs. 331-340. GOLDSMITH, J. y J. SALMON (1987). Aulomatic Creation of Object Hierarchies for Ray Tracing. IEEE Computer Graphics and Applications, 7(5), pgs. 14-20. GOMES, J., L. DARSA, B. COSTA y L. VELHO (1999). Warping and Morphing of Graphical Objects, Morgan Kaufmann. San Francisco, CA. GONZALEZ, R. C. y P. W1NTZ (1987). Digital Image Processing, Addison-Wesley, Reading, MA. GOOCH. B. y A. GOOCH (2001). Non-Photorealistic Rendering, A. K. Peters, Natick, MA. GORAL, C. M K. E. TORRANCE, D. P. GREENBERG y B. BATTAILE (1984). Modeling the Interaction of Light Between Diffuse Surfaces. en los artculos de SIGGRAPH 84, Computer Graphics, 18(3), pgs. 213-222. GORDON, D. y S. CHEN (1991). Front-to-Back Display of BSP Trees, IEEE Computer Graphics and Applications, 11(5), pgs. 79-85.
,
GORTLER, S. J., P. SCHRODER, M. F. COHEN y P. HANRAIIAN (1993). Wavelet Radiosity, en los artculos de SKGRAPIF93, Computer Graphics, pgs. 221 230. GOURAUD, H. (1971). Continuous Shading of Curved Surfaces, IEEE Transactions on Computers, C-20(6), pgs. 623-628. GREENE, N., M. KASS y G MILLER (1993). ^Hierarchical Z-BulTer Visibility, en los artculos de SIG(RAPH 93, Computer Graphics, pgs. 231-238. GROTCH. S. L. (1983). Three-Dimonsional and Stereoscopic Graphics for Scientific Data Display and Analysis, IEEE Computer Graphics and Applications, 3(8), pgs. 31-43.
,
HAEBERLI, P. y K. AKELEY (1990). The Accumulation Buffer: I hardware Support for High-Quality Rendering)), en los artculos de
Bibliografa artculos de SIGGRAPH'84, Computer Graphics, 18(3), pgs. 119-127. HECKBERT, P. S., ed. (1994). Graphics Gems IV, Academic Press Professional, Cambridge, MA. HENDERSON, L. R. y A. M. MUMFORD (1993). The CGM Handbook, Academic Press, San Diego, CA. IIOPGOOD, F. R. A., D. A. DUCE, J. R. GALLOP y D. C. SUTCLIFFE (1983). Introduction to the Graphical Kernel System (GKS), Academic Press, Londres. IIOPGOOD, F. R. A. y D. A. DUCE (1991). A Primer for PHIGS, John Wiley & Sons, Chichester, Inglaterra. HORSTMANN, C. S. y G. CORNELL (2001). Core Java 2, Vols, l-ll. Sun Microsystems Press, Palo Alto, CA. HOWARD, T. L. J., W. T. HEWITT, R. .1. HUBBOLD y K. M. WYRWAS (1991). A Practical Introduction to PHIGS and PHIGS Plus, Addison-Wesley, Wokingham, Inglaterra. HUFFMAN, D. A. (1952). A Method for the Construction of Minimum-Redundancy Codes, Communications of the ACM, 40(9). pgs. 1098-1101. HUGHES, J. F. (1992). Scheduled Fourier Volume Morphing. en los artculos de SIGGRAP1F92, Computer Graphics, 26(2), pgs. 43 46. IIUITRIC, H. y M. NAHAS (1985). B-Spline Surlces: A fool for Computer Painling, IEEE Computer Graphics and Applications, 5(3), pgs. 39-47. 1MMEL, D. S., M. F. COHEN y D. P. GREENBERG (1986). A Radiosity Method for NonDiffuse Environments", en los artculos de SIGGRAPH"86. Computer Graphics. 20(4). pgs. 133-142. ISAACS, P. M. y M. F. COHEN (1987). Conlrolling Dynamic Simulation with Kinematic Constraints, Behavior Functions y Inverse Dynamics, en los artculos de SIGCiRAPH'87, Computer Graphics, 21(4). pgs. 215-224. JARV1S, J. F., C. N. JUDICE y W. H. NINKE (1976). A Survey of Techniques for the Image Display of Continuous Tone Pictures on Bilevel Displays. Computer Graphics and image Processing. pgs. 13 40.
855
JENSEN, H.W. (2001). Realistic Image Synthesis Using Photon Mapping, A. K. Peters, Natick, MA. JOHNSON. S. A. (1982). Clinical Varifocal Mirror Display System at the University of Utah, Proceedings o/SP/E, 367, agosto de 1982, pgs. 145-148. K AJ YA, J. T. (1983). New Techniques for Ray Tracing Procedurally Defined Objects, ACM Transactions on Graphics, 2(3). pgs. 161-181. KAJIYA, J. T. (1986). The Rendering Equalion, en los artculos de SIGGRAPH'86. Computer Graphics, 20(4), pgs. 143 150. KAJIYA, J. T. y T. L. KAY (1989). Rendering Fur with Thrcc-Dimensional Tcxtures, en los artculos de SIGGRAPI-TS9, Computer Graphics, 23(3), pgs. 271-280. KAPPEL, M. R. (1985). An Ellipse-Drawing Algorithm for Fasler Displays, in Eundamental Algorithms for Computer Graphics, SpringerVerlag, Berln, pgs. 257-280. KAY, T. L. y J. T. KAJIYA (1986). Ray Tracing Complex Scenes, en los artculos de SIGGRAPH'86, Computer Graphics, 20(4), pgs. 269-278. KAY, D. C. y J. R. LEVINE (1992). Graphics File Formats, Windcrest/McGraw-Hill, Nueva York. KELLEY, A. D., M. C. MALIN y G M. NIELSON (1988). Terrain Simulation Using a Model of Stream Erosion, en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 263-268. KENT, J. R., W. E. CARLSON y R. E. PARENT (1992). Shape Transformation for Polyhedral Objects, en los artculos de SIGGRAPH'92. Computer Graphics, 26(2), pgs. 47-54. KERLOW, I. V. (2000). The Art of 3-D Computer Animation and Imaging, John Wiley & Sons, Nueva York. KILGARD, M. J. (1996). OpenGL Programming for the X Window System, Addison-Wesley. Reading, MA. KIRK, D. y J. ARVO (1991). Unbiased Sampling Techniques for Image Synthesis. en los artculos de SIGGRAPI-I'91, Computer Graphics* 25(4), pgs. 153-156. KIRK, D., ed. (1992). Graphics Gems ill. Academic Press. San Diego. CA.
856
Bibliografa LIANG, Y.-D. y B. A. BARSKY (1983). An Analysis and Algorithm for Polygon Clipping.)) Communications of the ACM, 26( 11), pgs. 868-877. LIANG, Y.-l). y B. A. BARSKY (1984). A New Concept and Method for Line Clipping)), ACM Transactions on Graphics, 3(1). pgs. 1-22. LINDLEYC.A. (1992). Practical Ray Tracing in C John Wiley & Sons, Nueva York. LISCII1NSKI, P F. TAMPIERI y D. P. GREENBERG (1993). Combining Hierarchical Radiosity and Discontinuity Meshing, en los artculos de S I G G R A P i r 9 3 , Computer Graphics, pgs. 199-208. LITWINOWICZ, P. C. (1991). lnkwell:A2 /i-D Animation System, en los artculos de SIGG R A P H ' 9 1 , Computer Graphics, 25(4). pgs. 113-122. LODD1NG, K. N. (1983). Iconic Interfacing)), IEEE Computer Graphics and Applications, 3(2), pgs. 11-20. LORE, T.-S., D. TAN, H.-S. SEAH y M.-H. ER (1992). Rendering Fireworks Displays, IEEE Computer Graphics and Applications, 12(3), pgs. 3 3 - 4 3 . LOOMIS, J., H. POIZNER, U. BELLUGI, A. BLAKEMORE y J. HOLLERBACH (1983). Compuler-Graphics Modeling of American Sign Language, en los artculos de SIGG R A P I E 8 3 , Computer Graphics, 17(3), pgs. 105-114. LOPES, A. y K.BRODLIE(2003). Improving the Robustness and Accuracy of the MarchingCubes Algorithm for Isosurfaces, IEEE Transactions on Visualization and Computer Graphics, 9(1), pgs. 16-29. LORENSON, W. E. y H. CLINE (1987). Marching Cubes: A High-Resolution 3D Surface Construction Algorithm)), en los artculos de SIGGRAP1E87, Computer Graphics, 21(4), pgs. 163-169. MACK1NLAY, J. D.. S. K. CARD y G. G ROBERTSON (1990). Rapid Controlled Movement Through a Virtual 3D Workspace)), en los artculos de SIGGRAPH'9(), Computer Graphics, pgs. 171-176. MACKINLAY, J. D., G G. ROBERTSON y S. K. CARD (1991). The Perspective Wall: Detail
l
KNUDSEN, J. (1999). Java 2D Programming, O'Reilly & Associates, Sebastopol. CA. KNUTH,D. E. (1987). Digital Halftones by Dot Diffnsion, ACM Transactions on Graphics, 6(4), pgs. 245-273. KOCH AN EK, D. H. U. y R. H. BARTELS (1984). Inleipoiating Splines with Local Tension, Continuity y Bias Control, en los artculos de SIGGRAPH*84, Computer Graphics, 18(3), pgs. 3 3 - 4 1 . KOH, E.-K. y D. HEARN (1992). Fasl Generation and Surface Structuring Methods for Terrain and Other Natural Phenomena, en los artculos de Enrographics'92, Computer Graphics Forum, 11(3), pgs. C I 6 9 - 1 8 0 . KOR1EN, J. U. y N. I. BADLER (1982). Techniques for Generating the Goal-Directed Motion of Articulated Structures)), IEEE Computer Graphics and Applications, 2(9), pags. 71-81. KORIEN, J. U . y N . I. BADLER (1983). Temporal antialiasing in Computer-Generated Animalion, en los artculos de SI(iGRAPH'K3, Computer Graphics, 17(3), pgs. 377-388. KREYSZIG, E. (1998). Advanced Engineering Mathematics, Eighth Edition, John Wiley & Sons, Nueva York. LASSETER, J. (1987). Principies of Traditional Animation Applied to 3D Computer Animalion, en los artculos de SIGGRAPIT87, Computer Graphics, 21(4), pgs. 35 44. LATIIROP, O. (1997). The Way Computer Graphics Works, John Wiley & Sons, Nueva York. LAUREL, B. (1990). The Art of Human-Computer Interface Design, Addision-Wesley. Reading, MA. LENGYEL, E. (2002). Mathematics for 3D Game Programming eft Computer Graphics, Charles River Media, llingham, MA. LEVOY, M. (1990). A Hybrid Ray Tracer for Rendering Polygon and Volume Dala. IEEE Computer Graphics and Applications, 10(2), pgs. 33-40. LEWIS, J.-P. (1989). Algorithms for Solid Noise Synlhesis, en los artculos de SK GRAPH'89, Computer Graphics, 23(3), pgs. 263-270.
liibhografia and Context Smoothly Integrated)), CHI '91, pgs. 173-179. MAESTRI, (i. (1999). [digital] Character Animation 2. Volume I Essential Techniques, New Riders Publishing, Indianapolis, IN. MAESTRI, G (2002). [digital] Character Animation 2, Volume 2Advanced Techniques, New Riders Publishing, Indianapolis, IN. MAGNENAT-TIIALMANN, N. y D. THALMANN (1985). Computer Animation: Theory and Practice, Springer-Verlag. Tokyo. MAGNENAT-TI IALMANN. N. y D. THALMANN (1987). Image Synthesis. SpringerVerlag, Tokyo. MAGNENAT-TI IALMANN, N. y D. THALMANN (1991). Complex Models for Animating Synthetic Actors, IEEE Computer Graphics and Applications, 11(5), pgs. 32-45. MANDELBROT, B. B. (1977). Eructis: Form, Chance, and Dimension, Freeman Press, San Francisco. MANDELBROT, B. B. (1982). The Fractal Geometry of Nature, Freeman Press, Nueva York. MANTYLA, M. (1988). An Introduction to Solid Modeling, Computer Science Press, Rockville, MD. MAX, N. L. y D. M. LERNER (1985). A Two-and a-Half-D Motion Blur Algorithm)), en los artculos de SIGGRAPH'SSj Computer Graphics, 19(3), pgs. 85-94. MAX, N. L. (1986). Atmospheric Illumination and Shadovvs, en los artculos de SIGGRAPH'86, Computer Graphics, 20(4), pgs. 117-124. MAX. N. L. (1990). Cone-Spheres)), en los artculos de SlG(iRAPH'9(), Computer Graphics, 24(4), pgs. 59-62. MCCARTHY, M. y A. DESCARTES (1998). Reality Architecture: Building JDlVorlds with Java andVRML, Prentice-Hall Europe, Reino Unido. MEYER, G. W. y D. R GREENBERG (1988). Color-Defective Vision and Computer Graphics Displays, IEEE Computer Graphics and Applications. 8(5), pgs. 28-40. MEYERS. D.. S. SKINNER y K.SLOAN(l992). Surfaces from Contours)), ACM Transactions on Graphics, 11(3), pgs. 228-258.
857
MIAO, J. (1999). Compressed Image File Formats, Addison-Wesley/ACM Press, Nueva York. MILLER, G S. P. (1988). The Motion Dynamics of Snakes and Worms, en los artculos de SIGGRAPIF88, Computer Graphics. 22(4), pgs. 169-178. MILLER, J. V., D. E. BREEN, W. E, LORENSON, R. M. O'BARA y M. J. WOZNY (1991). Geometricaily Deformed Models: A Method for Extracting Closed Geometric Models from Volume Data, en los artculos de SIGGRAPfr91, Computer Graphics, 25(4), pgs. 217-226. MITCHELL, D. P. (1991). Spectrally Optimal Sampling for Distribution Ray Tracing, en los artculos de SIGGRAPH'91, Computer Graphics, 25(4), pgs. 157-165. MITCHELL, D. P. y P. HANRAIIAN (1992). Illuminalion from Curved Rclleelors, en los artculos de SIGGRAPII'92, Computer Graphics, 26(2), pgs. 283 291. MITROO, J. B., N. HERMAN y N. I. BADLER (1979). Movies from Music:Visualizing Music Compositions)), en los artculos de S1GGRAPIF79, Computer Graphics, 13(2). pgs. 218-225. MIYATA. K. (1990). A Method of Generating Stone Wall Patterns, en los artculos de SKiGRAPIF90, Computer Graphics, 24(4). pgs. 387-394. MOLNAR, S., J. EYLES y J. POULTON (1992). PixelFIow: High-Speed Rendering Using Image Composition)), en los artculos de SIGGRAPIF92, Computer Graphics, 26(2). pgs. 231-240. MOON, F. C. (1992). Chaotic and Fractal Dynamics, John Wiley & Sons, Nueva York. MOORE, M. y J. WILHELMS (1988). Colusin Detection and Response lor Computer Animation)), en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 289-298. MORTENSON, M. E. (1985). Geometric Modeling. John Wiley & Sons, Nueva York. MURAKI, S. (1991). Volumetrie Shape Description of Range Data Using the 'Blobby Model, en los artculos de SIGGRAPH'91, Computer Graphics, 25(4), pgs. 227-235.
858
fihligmM
MUSGRAVE, F, K., C. E. KOLB y R. S. MACE (1989). The Synthesis and Rendering of Eroded Fractal Terrains, en los artculos de SIGGRAPH'89, Computer Graphics, 23(3), pgs. 41-50. MYERS, B, A. y W. BUXTON (1986). Creating High-Interactive and Graphical User Interfaces by Demonstration, en los artculos de S1GGRAPH'86, Computer Graphics, 20(4), pgs. 249-258. NAYLOR, B., 1 AMANATIDES y W. TIIIBAULT (1990). Merging BSP Trees Yields Polyhedral Set Operations, en los artculos de SIGGRAPH^X), Computer Graphics, 24(4), pgs. 115-124. NICHOLL, T. M., D. T. LEE y R. A. NICHOLL (1987). An Efficient New Algorithm for 2D Line Clipping: Its Development and Analysis, en los artculos de SIGGRAPH'87, Computer Graphics, 21(4), pgs. 253-262. NIELSON, G M.. B. SHRIVER y L. ROSENBLUM, ed. (1990). Visualization in Scientific Computing, IEEE Computer Society Press, Los Alamitos, CA. NIELSON, G M. (1993). Scattered Data Modeling, IEEE Computer Graphics and Applications, 13(1), pgs. 60-70. NISIIIMURA, H. (1985). Object Modeling by Distribution Function and a Method of Image Generation, Journal Electronics Comm. Conf '85, J68(4), pgs. 718-725. NISI UTA, T. y E. NAKAMAE (1986). Continuous-Tone Representation of ThreeDimensional Objects Illuminated by Sky Light, en los artculos de SIGGRAPH'86. Computer Graphics, 20(4). pgs. 125-132. NISHITA, T., T. SIRAI, K. TADAMURA y E. NAKAMAE (1993). Display of the Earth Taking into Account Atmospheric Scattering", en los artculos de SIGGRAPir93, Computer Graphics, pgs. 175-182. NORTON. A. (1982). Generation and Display of Geometric Fractals in 3-D, en los artculos de SIGGRAPIE82, ( 'omputer Graphics, 16(3), pgs. 61-67. NSF INVITATIONAL WORKSHOP (1992). Research Directions in Virtual Environments,
en los artculos de SIGGRAPH'92, Computer Graphics, 26(3). pgs. 153-177. OKABE. H.. II. IMAOKA, T. TOMIHAy II. N1WAYA (1992). Three-Dimensional Apparel C A D System, en los artculos de SIGGRAPH'92. Computer Graphics, 26(2), pgs. 105-110. OLANO, M., J. C. HART.W. HEIDRICH y M. McCOOL (2002). Real-Time Shading, A. K. Natick, MA. OPPENHEIMER, P. E. (1986). Real-Time Design and Animation of Fractal Plants and Trees, en los artculos de SIGGRAPH'86, Computer Graphics, 20(4), pgs. 55-64. O'ROURKE, M. (1998). Principles of ThreeDimensional Computer Animation, Revised Edition, W. W. Norton, Nueva York. OSF/MOTIF (1989). OSF/Motif St vie Guide, Open Software Foundation. Prentice-Hall, Englewood Cliffs, NJ. PAETH, A. W., ed. (1995). Graphics Gems % Morgan Kaufmann, San Diego, CA. PAINTER, .1. y K. SLOAN (1989). Anlialiased Ray Tracing by Adaptive Progressive Refinement. en los artculos de SIGGRAPI F89, Computer Graphics, 23(3), pgs. 281-288. PALMER, I. (2001). Essential Java 3D Fast, Springer-Verlag. Londres. PANG A. T. (1990). Linc-Drawing Algorithms for Parallel Machines, IEEE Computer Graphics and Applications. 10(5), pgs. 54-59. PAO. Y C. (19X4). Elements of Computer-Aided Design. John Wiley & Sons. Nueva York. PARENT. R. (2002). Computer Animation: Algorithms and Techniques. Morgan Kaufmann, San Francisco, CA. PAVLIDIS, T. (1982). Algorithms For Graphics and Image Processing, Computer Science Press. Rockville. Ml). PAVLIDIS, T. (1983). Curve Fitting with Come Splines, A CM Transactions on Graphics, 2( I), pgs. 1-31. PHACHEY. D. R. (1986). Modeling Waves and Suri, en los artculos de SIGGRAPH'86, Computer Graphics, 20(4). pgs. 65-74.
Bibliografia PEITGEN, H.-. y P. H. RICHTER (1986). The Beauty of Fractals, Springer-Verlag, Berln. PEITGEN, H.-O. y D. SAUPE, eds. (1988). The Science of Fractal Images, Springer-Verlag. Berln. PENTLAND, A. y J. WILLIAMS (1989). Good Vibrations: Modal Dynamics for Graphics and Animation, en los artculos de SIGGRAPIE89, Computer Graphics, 23(3), pgs. 215-222. PERLIN, K. y E. M. HOFFERT (1989). Ilypertexture, en los artculos de SIGGRAPH'89, Computer Graphics, 23(3), pgs. 253-262. PHONG, B. T. (1975). Illumination for ComputerGenerated Images, Communications of the ACM, 18(6), pgs. 311-317. PIEGL, L. y W. TILLER (1997). The NURBS Book, Springer-Verlag, Nueva York.
,
859
los artculos de SIGGRAPH 89, Computer Graphics, 23(3), pgs. 6 9 - 7 8 . PR ATT. W. K. (1978). Digital Image Processing, JohnWiley & Sons, Nueva York. PREPARATA, F. P. y M. I.SHAM0S(I985). Computational Geometry, Nueva York. Springer-Verlag.
PRESS,W. H., S. A. TEUKOLSKY,W. T. VETTERLING y B. P. FLANNERY (1993). Numerical Recipes in C: The Art of Scientific Computing, Second Edition, Cambridge University Press, Cambridge, Inglaterra. PRESS.W. H., S. A. TEUKOLSKY, W. T. VETTERLING y B. P. FLANNERY (2002). Numerical Recipes in C + + : The Art of Scientific Computing, Second Edition, Cambridge University Press, Cambridge, Inglaterra. PRESTON, K., FAGAN, HUANG y PRYOR (1984). Computing in Medicine, Computer, 17(10), pgs. 294-313. PRUSINKIEW1CZ, P.,M. S.HAMMEL y E. MJOLSNESS (1993). Animation of Plant Development, en los articulos de SIGGRAPIE93, Computer Graphics, pgs. 351-360. PRUYN, P. W. y D. P. GREENBERG (1993). Exploring 3D Computer Graphics in Cockpit Avionics, IEEE Computer Graphics and Applications, 13(3), pgs. 28-35. OUEK, L.-H. y D. HEARN (1988). Ellicicnt Space-Subdivision Methods in Ray-Tracing Algorithms. University of Illinois, Department of Computer Science Report UIUCDCS-R-881468. RAIBERT, M. H. y J. K. HODGNS ( 1991 ). Animalion of Dynamic Legged Locomotion, en los artculos de S I G G R A P H ^ I , Computer Graphics, 25(4), pgs. 349-358. RAO. K. R. y P. YIP (1990). Discrete Cosine Transform, Academic Press, Nueva York. REEVES. W. T. (1983a). Particle Systems: A Technique for Modeling a Class of Fuzzy Objects, ACM Transactions on Graphics, 2(2), pgs. 91-108. REEVES,W. T. (1983b). Particle Systems -A Technique for Modeling a Class of Fuzzy Objccts, en los artculos de SIGGRAPH'83, Computer Graphics, 17(3), pgs. 359-376.
Polygon Rasteri/alion, en los artculos de SIGGRAPIT88, Computer Graphics, 22(4), pgs. 17-20. PITPEWAY, M. L. V. y D. J. WATKINSON (1980). liresenham's Algorithm with Gray Scale. Communications of the ACM, 23( 11 ), pgs. 625-626. PLATT, J. C. y A. II. BARR (1988). Constraint Methods for Flexible Models, en los artculos de SIGGRAPH'88, Computer Graphics, 22(4), pgs. 279-288. POCOCK. L. y .1. ROSEBUSH (2002). The C 'omputer Animator s Technical Handbook. Morgan Kaufmann, San Francisco. CA. POTMESIL, M. y I. CHAKRAVARTY (1982). Synthctic Image Generation with a Lens and Aperture Camera Model. At 'M Transactions on Graphics. 1(2), pgs. 85-108. POTMESIL. M. y I. CHAKRAVARTY (1983). Modeling Motion Blur in Computer-Generated Images, en los artculos de SIGGRAPH'83. Computer Graphics, 17(3), pgs. 389-399. POTMESIL, M. y E. M. HOFFERT(1987). FRAMES: Software Tools for Modeling. Rendering and Animation of 3D Scenes, en los artculos de SIGGRAPIF87, Computer Graphics, 21(4), pgs. 85-93. POTMESIL. M. y E. M. HOFFERT (1989). The Pixel Machine: A Parallel Image Computer, en
860
Bibliografia
REEVES, W. T. y R. BLAU (1985). Approximate and Probabilistic Algorithms for Shading and Rendering Structured Particle Systems, en los artculos de SIGGRAPH'85, Computer Graphics, 19(3), pgs. 313-321. REEVES, W. T., D. II. SALESIN y R. L. COOK (1987). Rendering Antialiased Shadows with Depth Maps, en los artculos de SIGGRAPH' 87, Computer Graphics, 21(4), pgs. 283-291. REQUICHA A. A. G. y J. R. ROSSIGNAC (1992). Solid Modeling and Beyond, IEEE Computer Graphics and Applications, 12(5), pgs. 31-44. REYNOLDS, C. W. (1982). Computer Animation with Scripts and Actors, en los artculos de SIGGRAPH'82, Computer Graphics, 16(3), pgs. 289-296. REYNOLDS, C. W. (1987). Flocks, Herds y Schools: A Distributed Behavioral Model, en los artculos de SIGGRAPIE87, Computer Graphics, 21(4), pgs. 25-34. RHODES, M. L., et al. (1983). Computer Graphics and An Interactive Stereotactic System for CT-Aided Neurosurgery, IEEE Computer Graphics and Applications, 3(5), pgs. 31-37. RIESENFELD, Coordinates Graphics. Applications, R. F. (1981). Homogeneous and Projective Planes in Computer IEEE Computer Graphics and 1(1), pgs. 50-55.
The Detailed Semantics of Graphics Input Devices, en los artculos de SIGGRAPIT82, Computer Graphics, 16(3), pgs. 3 3 - 3 8 . RUBINE, D. (1991). Specifying Gestures by Example, en los artculos de SIGGRAPH'91, Computer Graphics, 25(4). pgs. 329-337. RUSHMEIER, II. y K. TORRANCE ( 1987). The Zonal Method for Calculating Light Intensities in the Presence of a Participating Medium, en los artculos de SIGGRAPH'S?, Computer Graphics, 21(4), pgs. 293-302. RUSHMEIER, H. E. y K. E. TORRANCE (1990). Extending the Radiosity Method to Include Specularly Retlccting and Translucent Materials, ACM Transactions on Graphics, 9(1), pgs. 1-27. SABELLA, P. (1988). A Rendering Algorithm for Visualizing 3D Scalar Fields, en los artculos de SIGGRAPH'88, Computer Graphics, 22(4). pgs. 51-58. SABIN, M. A. (1985). Contouring: The State of the Art, in Fundamental Algorithms for Computer Graphics, R. A. Earnshaw, ed.. Springer-Verlag, Berln, pgs. 411-482. SAKAGUCHI. H., S. L. KENT y T. COX (2001). The Making of Fitta/ Fantasy, The SpiritsWitlnn, Brady Games, Indianapolis, IN. SALESIN, D. y R. BARZEL ( 1993). Adjustable fools: An Object-Oriented Interaction Mclaphor, ACM lYansactions on Graphics, 12(1), pgs. 103-107. SAMET, II. y M. TAMMINEN (1985). Buitrees. CSG Trees and Time, en los artculos de SIGGRAPIF85. Computer Graphics, 19(3), pgs. 121 130. SAMET, II. y R. E. WEBBER (1985). Sorting a Collection of Polygons using Quadtrees, ACM Transactions on Graphics, 4(3), pgs. 182-222. SAMET, H. y R. E. WEBBER (1988a). Hierarchical Data Structures and Algorithms for Computer Graphics: Part I , IEEE Computer Graphics and Applications. 8(4), pgs. 5 9 - 7 5 . SAMET, H. y R. E. WEBBER (1988b). Hierarchical Data Structures and Algorithms for Computer Graphics: Part 2, IEEE Computer Graphics and Applications, 8(3). pgs. 4 8 - 6 8 .
ROBERTSON. P. K. (1988). Visualizing Color Gamuts: A User Interface for the Effective Use of Perceptual Color Spaces in Data Displays, IEEE Computer Graphics and Applications, 8(5), pgs. 50-64. ROBERTSON. G. G.. J. D. MAC KIN LAY and S. K. CARD (1991). Cone Trees: Animated 3D Visualizations of Hierarchical Information, CHI 'W.pgs. 189-194. ROGERS, D. F. y R. A. EARNSHAW. eds. (1987). Techniques for Computer Graphics, SpringerVerlag, Nueva York. ROGERS. D. F. y J. A. ADAMS (1990). Mathematical Elements for Computer McGraw-Hill, Nueva York. Graphics.
ROGERS, D. F. (1998). Procedural Elements for Computer Graphics, McGraw-Hill, Nueva York. ROSENTHAL, D. S. II., .1. C. MICHENER, G. PFAFF, R. KESSEMER y M. SABIN (1982).
Bibliografa SCHACHTER, B. J.. ed. (1983). Computer Image Generation, John Wiley & Sons, Nueva York. SCHEIELER, R. W. y J. GETTYS (I986). The X Window System, ACM Transactions on Graphics, 5(2), pgs. 79 -109. SCHOENEMAN,C, J.DORSEY, B. SM ITS, J.ARVO y D. GREENBERG (1993). Painting with Light, en los artculos de SIGGRAPH'93, Computer Graphics, pgs. 143-146. SCHRODER, P. y P. HANRAI IAN (1993). On the Form Factor Between Two Polygons, en los artculos de SlGGRAPir93. Computer Graphics, pgs. 163-164. SCHWARTZ, M. W., W. B. COWAN y J. C. BEATTY (1987). An Experimental Comparison of RGB, Y1Q, LAB. HSV y Opponent Color Models, ACM Transactions on Graphics, 6(2). pgs. 123-158. SEDERBERG, T.W. y E.GREEN WOOD (1992). A physically Based Approached lo 2-D Shape Bending, en los artculos de SIGGRAPH 92, Computer Graphics, 26(2), pgs. 25-34.
,
861
Improved A-Bufer, en los artculos de SIGG R A P H ' 9 3 , Computer Graphics, pgs. 85-92. SHIRLEY, P. ( 1990). A Ray Tracing Method for Illumination Calculation in Diffuse-Specular Scenes, Graphics interface '90, pgs. 205-212. SHIRLEY. P. (2000). Realistic Ray Tracing, A. K. Peters, Natick, MA. SHNEIDERMAN, B. (1986). Designing the User Interface, Addison-Wesley, Reading. MA. SHOEMAKE, K. (1985). Animating Rotation with Quaternion Curves, en los artculos de SIGGRAPH'85, Computer Graphics, 19(3), pgs. 245-254. SHREINER, D.. ed. (2000). OpenGL Reference Manual. Third Edition. Addison-Wesley, Reading. MA. SIBERT, J. L.,W. D. HURLEY y T.W. BLESER (1986). An Object-Oriented User Interface Management System, en los artculos de S I G G R A P i r 8 6 , Computer Graphics, 20(4), pgs. 259-268. SILLION, F. X. y C. PUECH (1989). A General Two-Pass Method Integrating Specular and Diffuse Reflection", en los artculos de SIGGRAPH'89, Computer Graphics, 23(3), pgs. 335-344. SILLION, F. X., J. R. ARVO, S. II. WESTIN y D. P. GREENBERG (1991). A Global Illumination Solution for General Reflectance Distributions)), en los artculos de SIGGRAPH'91. Computer Graphics, 25(4), pgs. 187 196. SILLION, F. X. y C. PUECH (1994). Radiosity and Global Illumination, Morgan Kaufmann. San Francisco. CA. SIMS. K. (1990). Particlc Animation and Rendering Using Data Parallel Computation, en los artculos de SIGGRAPH'90, Computer Graphics, 24(4). pgs. 405-413. SIMS, K. (1991). Artificial Evolution for Computer Graphics, en los artculos de SIGGRAPH'91, Computer Graphics, 25(4). pgs. 319-328. SMITI I, A. R. ( 1978). Color Gamut Transform Pairs, en los artculos de SIGGRAPH'78. Computer Graphics, 12(3), pgs, 12-19, SMITH. A. R. (1979). Tini Fili, en los artculos de SIGGRAPH'79, Computer Graphics, 13(2), pgs. 276-283.
SIDERBERG, T.W., P. GAO, GWANG y H.MtJ (1993). 2D Shape Blending: An Intrinsic Solution to the Vertex Path Problem, en los artculos de SIGGRAPH'93, Computer Graphics, pgs. 15-18. SEGAL, M. (1990). Using Tolerances to Guarantee Valid Polyhedral Modeling Results, en los artculos de SIGGRAPH'90, Computer Graphics, 24(4), pgs. 105-114. SEGAL. M., C. KOROBKIN. R. V A N WIDENFELT. J. FORAN y P. IIAEBERL1 (1992). Fast Shadows and Lighting Effects Using Texture Mapping, en los artculos de SIGGRAPH '92, Computer Graphics. 26(2), pgs. 249-252. SELM AN, D. (2002). Java 3D Programming, Manning Publications, Greenwich, CT. SEQUIN, C. H. y E. K. SMYRL(1989). Parameterized Ray-Tracing, en los artculos de SIGGRAPIFX9, Computer Graphics, 23(3), pgs. 307-314. SHERR, S. (1993). Electronic Displays, John Wiley & Sons, Nueva York. SHILLING A. y W. STRASSER (1993). EXACT: Algorithm and Hardware Architecture for an
862
Hibliografa ( 1990). A Critical Evaluation of PEX, IEEE Computer Graphics and Applications, 10(6). pgs. 65-75. SUTHERLAND. 1. E. (1963). Sketchpad: A Man-Machine Graphical Communication System, AF1PS Spring Joint Computer Conference, 23, pgs. 329-346. SUTHERLAND, I. E. y G W. Hodgman (1974). Reentran! Polygon Clipping". Communications of the ACM, 17(1), pgs. 32-42. SUTHERLAND, I. E., R. F. SPROULL y R. SCHUMACHER (1974). A Characterization o f f e n Hidden Surface Algorithms". ACM Computing Surveys, 6( 1 ), pgs. 1-55.
SWEZEY, R. W. E. G DAVIS (1983). A Case Study of Human Factors Guidelines in Computer Graphics, IEEE Computer Graphics
SMITH, A. R. (1984). Plas, Fractals y Formal Languages, en los artculos de SIGGRAP F84. Computer Graphics, 18(3), pgs. 1 10. SMITH. A. R. (1987). Planar 2-Pass Texture Mapping and Warping, en los artculos de SK GR A PH'87, Computer Graphics, 21(4), pgs. 263-272. SMITS, B. E., J. R. ARVO y D. H. SALESIN (1992). An Importance-Driven Radiosity Algorithm, en los artculos de SIGGRAP F92, Computer Graphics, 26(2), pgs. 273-282. SNYDER, .1. M. y J.T. KAJ1YA (1992). Generative Modeling: A Symbolic System for Geometric Modeling. en los artculos de SICiGRAPH'92, Computer Graphics, 26(2). pgs. 369-378. SNYDER, J. M., A. R. WOODBURY, K. FLEISCHER, B CURRIN y A. II. BARR (1993). Inlerval Methods Ibi Multi-Poinl ( ollisions between Time-Dependent Curved Surfaces, en los artculos de SIGGRAP 1*93, Computer Graphics, pgs. 321-334. SOW1/RAL, IL, K. RUSH FORTH y M. DEERING (2000). The Java 3D API Specification, Second Edition, Addison-Wesley, Reading. MA. SPROULL, R. F. e I. E. SUTHERLAND (1968). A Clipping Divider, AFIPS Fall Joint Computer Conference. STAM. J. y E. FlUME (1993). Turbulent Wind Fields for Gaseous Phenomena", en los artculos de SIGGRAPIF93, Computer Graphics, pgs. 369-376. STETTNER, A. y D. P. GREENBERG ( I W l . Computer Graphics Visualization Tor Acoustic Simulation, en los artculos de SIGGRAP F89. Computer Graphics, 23(3). pgs. l>5-2()(>. STRASSMANN, S. (1986). Ilairy Brushes, en los artculos de SIGGRAPH'86. Computer Graphics, 20(4), pgs. 225 232. STRAUSS, P. S. y R. CAREY (1992). An ObjectOriented 3D Graphics Toolkit, en los artculos de SIGGRAP1F92, Computer Graphics. 26(2). pgs. 341-349. STROTHOTTE. T. y S. SCHLECHTWEG (2002). Non-Pbotorealistu Computer Graphics: Modeling, Rendering, and Animation, Morgan Kaufmann. San Francisco. CA.
1
Rendering, en los artculos de SIGGRAPtF92, Computer Graphics, 26(2), pgs. 211 220. TANNAS, JR., L. E., ed. (1985). Flat-Panel Displays and CRTs, Van Nostrand Reinhold. Nueva York.
TAUBMAN, D. M. MARCELLIN (2()()\). JPEG 2000: Image-Comfuvssion Fundamentals, Standards, and Practice, Kluwer Academic Publishers. Norwell. MA. TELLER, S. P. IIANRAHAN ( 1993). Global Visibility Algorithms for Illumination Computa tions", en los artculos de SIGGRAPI93. Computer Graphics, pgs. 239-246.
TERZOPOULOS, D., .1. PLATT, A. II. BARR, et al. (1987). Elastically Deformable Models, en los artculos de SIGGRAPH'87, Computer Graphics. 21(4), pgs. 205-214. THALMANN.N.M.and D.THALMANN( 1985). Computer Animation: Theoty and Practice, Springer-Verlag, Tokyo. TI IALMANN. D.. ed. (1990). Scientific \t\uatization and Graphics Simulation, John Wiley & Sons, Chichester, Inglaterra.
THIBAULT, W. . . F. NAYLOR (1987). Set Operations on Polyhedra using Binary Space Partitioning Trees. en los artculos de SIG-
Bibliografa THOMAS. II. y W. LKFKON (1997). Disney's Art of Animation from Mickey Mouse to Hercules, Hyperion Press, Nueva York. THOMAS, F., O. JOHNSON y C. JOHNSTON (1995). The Illusion of Life: Disney Animation, Hyperion Press, Nueva York. TOR BERG, I, G. (1987). A Parallel Processor Architecture for Graphics Arithmetic Operations)), en los artculos de SIGGRAPH'87, Computer Graphics, 21(4), pgs. 197-204. TORRANCE, K. E. y E. M. SPARROW (1967). Theory for Off-Specular Reflection from Roughened Surfaces. Journal of the Optical Society of America, 57(9), pgs. 1105-1114. TRAVIS, D. (1991). Effective Color Displays, Academic Press, Londres. TUFTE, E. R. (1990). Envisioning Information, Graphics Press, Cheshire, CN. TUFTE, E. R. (1997). Usual Explanations: images and Quantities, Evidence and Narrative, Graphics Press, Cheshire, CN. TUFTE, E. R. (2001). The Visual Display f Quantitative Information, Second Edition, Graphics Press, Cheshire, CN. TURKOWSKI, K. (1982). Antialiasing Through the Use of Coordinate Transformations)), ACM Transactions on Graphics, 1(3), pgs. 215-234. UPSON, C. y M. KEELER (1988). VBUFFER: Visible Volume Rendering)), en los artculos de SIGGRAPIF88, Computer Graphics, 22(4), pgs. 59-64. UPSON, C, et al. (1989). The Application Visualization System: A Computational Environment for Scientific Visualization)), IEEE Computer Graphics and Applications, 9(4), pgs. 30-42. UPSTILL, S. (1989). The Render Man Companion, Addison-Wesley, Reading, MA. VAN W1JK, J. J. (1991). Spot Noise-Texture Synthesis for Data Visualization)), en los artculos de SIGGRAPH'91, Computer Graphics, 25(4), pgs. 309-318. VEENSTRA, J. y N. AHUJA (1988). Une Drawings of Octree-Represented Objects)), ACM Transactions on Graphics, 7(1), pgs. 61-75. VELHO, L. y J. D. M. GOMES (1991). Digital Halftoning with Space-Filling Curves, en los artculos de SIGGRAP1F91, Computer Graphics, 25(4), pgs. 81-90.
863
VON HERZEN, B., A. H. BARR y H. R. ZATZ (1990). Gomtrie Collisions for TimeDependent Parametric Surfaces, en los artculos de SIGGRAPir90, Computer Graphics, 24 (4), pgs. 39-48. WALLACE, V. L. (1976). The Semantics of Graphic Input Devices, en los artculos de SIG(iRAPIF76, Computer Graphics, 10(1), pgs. 61 -65. WALLACE, J. R., K. A. ELMQUIST y E. A. HAINES (1989). A Ray-Tracing Algorithm for Progressive Racliosity, en los artculos de SIGGRAPH'89, Computer Graphics, 23(3), pgs. 315-324. WALSH, A. E. y D. GEHRINGER (2002). Java 3D, Prentice-Hall, Upper Saddle River, NJ. WANGER, L. R., J. A. FERWERDA y D. P. GREENBERG ( 1992). Perceiving Spatial Relationships in Computer-Generated Images, IEEE Computer Graphics and Applications, 12(3). pgs. 44 -58. WARN, D. R. (1983). Lighting Controls for Synthetic Images, en los artculos de SIGGRAPH '83, Computer Graphics, 17(3), pgs. 13-21. WATT, A. (1989). Fundamentals of ThreeDimensional Computer Graphics, AddisonWesley, Wokingham, Inglaterra. WATT,M. (1990). Light-Water Interaction Using Backward Beam Tracing, en los artculos de S1GGRAPIE90, Computer Graphics, 24(4), pgs. 377 -386. WATT, A. y M. WATT (1992). Advanced Animation and Rendering Techniques, AddisonWesley, Wokingham, Inglaterra. WEGHORST, IL, G. HOOPER y D. P. GREENBERG (1984). Improved Computational Methods for Ray Tracing, ACM Transactions on Graphics, 3(1), pgs. 52 -69. WEIL. J. (1986). The Synthesis of Cloth Objects, en los artculos de SIGGRAPH 86, Computer Graphics, 20(4), pgs. 49-54. WEILER, K. y P. ATHERTON (1977). HiddenSurface Removal Using Polygon Area Sorting", en los artculos de SIGGRAPH'77, Computer Graphics, 11(2), pgs. 214-222. WEILER, K. (1980). Polygon Comparison Using a Graph Reprsentation, en los artculos de
1
864
Bibliografa
SIGGRAPH'80, Computer Graphics, 14(3), pgs. 10-18. WEINBERG, R. (1978) Computer Graphics in Support of Space-Shuttle Simulation, en los artculos de S1GGRAPIF78, Computer Graphics, 12(3), pgs. 82 86. WELCH, T. (1984). A Technique for HighPerformance Dala Compression, IEEE Computer, 17(6), pgs. 8-19. WERNECKE, J. (1994). The Inventor Mentor, Addison-Wesley, Reading, MA. WESTIN, S. II., J. R. ARVO y K. E. TORRANCE (1992). Predicting Reflectance Functions from Complex Surfaces, en los artculos de SIGGRAPH'92, Computer Graphics. 26(2), pgs. 255-264. WESTOVER, L. (1990). Footprint Evaluation for Volume Rendering)), en los artculos de SIGGRAPH'90, Computer Graphics, 24(4), pgs. 367-376. WHITTED, T. (1980). An Improved Illumination Model for Shaded Display, Communications o f the A C M i 23(6), pgs. 343-349. WHITTED, T. y D. M. WEIMER (1982). A Software Testbed for the Development of 3D Raster Graphics Systems, ACM Transactions on Graphics, 1(1), pgs. 4 3 - 5 8 . WHITTED, T. (1983). Antialiased Line Drawing Using Brush Extrusin, en los artculos de S1GGRAPH 83, Computer Graphics, 17(3), pgs. 151-156.
,
SIGGRAPH'90, Computer Graphics, 24(4), pgs. 235-242. WITKIN, A. y W. WELCH (1990). Fast Animation and Control of Nonrigid Structures)), en los artculos de SIGGRAPH'90, Computer Graphics, 24(4), pgs. 243-252. WITKIN, A. y M. KASS (1991). ReactionDifluson Textures, en los artculos de SIGGRAPH"9I, Computer Graphics, 25(4), pgs. 299-308. WOLFRAM, S. (1984) Computer Software in Science and Mathematics)), Scientific American, 251(3), 188-203. WOLFRAM, S. (1991). Mathematics AddisonWesley. Reading, MA. WOO, A., P. P O U L I N y A . FOURNIER (1990). A Survey of Shadow Algorithms)), IEEE Computer Graphics and Applications, 10(6), pgs. 13-32. WOO M., J. NEIDER, T. DAVIS y D. SHREINER (1999). OpenGL Programming Guide, Third Edition, Addison-Wesley, Reading, MA. WRIGHT, W. E. (1990). Parallelization of Bresenham's Line and Circle Algorithms)), IEEE Computer Graphics and Applications, 10(5), pgs. 6 0 - 6 7 . WU, X. (1991). An Efficient Antialiasing Technique)), en los artculos de SIGGRAPH'SM, Computer Graphics, 25(4), pgs. 143-152. WYSZECKI, G. y W. S. STILES (1982). Color Science, John Wiley & Sons, Nueva York. WYV1LL, G, B. WYV1LL y C. MCPHEETERS (1987). Solid Texturing of Soft Objects, IEEE Computer Graphics and Applications, 7( 12), pgs. 20-26. YA EG ER, L., C. UPSON y R. MYERS (1986). Combining Physical and Visual Simulation: Creation of the Planet Jupiter for the Film 'WM- , en los artculos de SIGGRAPH'86, Computer Graphics, 20(4), pgs. 85-94. YAGEL, R., D. COHEN y A. KAUFMAN (1992). Discrete Ray Tracing)), IEEE Computer Graphics and Applications, 12(5), pgs. 19-28. YAMAGUCH1, K.,T. L. KUN11 y F. FUJIMURA (1984). Octree-Related Data Structures and Algorithms)), IEEE Computer Graphics and Applications, 4(1), pgs. 53-59.
WILHELMS, J. (1987). Toward Automatic Motion Control, IEEE Computer Graphics and Applications, 7(4), pgs. 11-22. WILHELMS, J. y A. VAN GELDER (1991). A Coherent Projection Approach for Direct Volume Rendering)), en los artculos de S1GGRAPW9\, Computer Graphics, 25(4), pgs. 275-284. WILHELMS, J. y A. VAN GELDER (1992). Octrees for Faster lsosurface Generation, ACM Transactions on Graphics, 11(3), pgs. 201-227. WILLIAMS, L. (1983). Pyramidal Parametrics, en los artculos de SIGGRAPH'83, Computer Graphics, 17(3), pgs. 1-11. WILLIAMS, L. (1990), Performance-Driven Facial Animation, en los artculos de
Bibliografa
865
YESSIOS, C. I. (1979). Computer Drafting of Stones, Wood, Plant y Ground Materials, en los artculos de SIGGRAPH'79, Computer Graphics, 13(2), pgs. 190-198. YOUNG, D. A. (1990). The X Window SystemProgramming and Applications with Xt, OSF/Motif Edition, Prentice- Hall, Englewood Cliffs, NJ. ZELEZNICK, R. C, et al. (1991). An ObjectOriented Framework for die Integration of Interactive Animation Techniques, en los artculos de SIGGRAPH'91, Computer Graphics, 25(4), pgs. 105-112. ZELTZER, D. (1982). Motor Control Techniques for Figure Animation)), IEEE Computer Graphics and Applications, 2(9), pgs. 53-60.
ZHANG,Y. y R. E.WEBBER(1993). Space Diffusion:An Improved Parallel Halftoning Technique Using Space-Filling Curves, en los artculos de SIGGRAPH'93, Computer Graphics, pgs. 305-312. ZIV, J. y A. LEMPEL ( 1977). A Universal Algorithm lor Sequential Data Compression, IEEE Transactions on Information Theory, 23(3), pgs. 337 343. ZIV. J. y A. LEMPEL (1978). Compression of Individual Sequences via Variable-Rate Coding, IEEE Transactions on Information Theory, 24(5), pgs. 530-536.
Indice
4 conexiones, mtodo de relleno. 208 8 conexiones, mtodo de relleno, 208
A
Absolutas, coordenadas, 87 Absoluto, valor (nmero imaginario), 826 Aceleracin gravitatoria, 121-2 Acelerador: nodo (TRC), 36 tensin (TRC), 36 Adobe Photoshop, formato, 804 AGL (Apple GL), 75 Almbrico: algoritmos de visibilidad, 566-8 imgenes, 127-8 mtodos de variacin de la intensidad eo la profundidad, 356-7 Algoritmo basado en diccionario, 795 Algoritmo de Bresenham: crculo, 105 6 lnea, 96-100 Algoritmo de hfer de profundidad (deteccin de visibilidad), 549-52 Algoritmo de difusin de errores, 612-3 de puntos, 613 Algoritmo de inundacin-relleno, 211 Algoritmo de los cubos en marcha (vase Isosuperficies) Algoritmo de ordenacin de profundidad, 556-8 Algoritmo de sustitucin, 795 Algoritmo de visibilidad por subdivisin de rea, 559-62 Algoritmo del pintor (ordenacin de profundidad). 556 Algoritmo lineal de relleno suave, 200-2
Algoritmos de dibujo de lneas. 92-102 Bresenham, 96 100 DDA, 94-95 especificacin de valores del bfer de imagen, 102-3 mtodos paralelos, 100102 poli linea*. 100 Algoritmos de lnea de barrido: deteccin de superficies visibles, 554-6 generacin de elipse, 113-20 generacin de un crculo, 106-11 mtodos de relleno de contomos curvos, 207 propiedades de coherencia, 203 relleno de polgonos, 202-6 relleno de polgonos convexos, 206 segmentos lineales, 92-103 Algoritmos de recorte, 322 bidimensional, 323-48 cdigo exterior, 324 cdigos de regin, 324, 402-3 coordenadas homogneas, 402-3 curvas, 346. 407-8 de lneas de Cyrus-Beck, 330 de lneas de Liang-Barsky, 330-3 de lneas de Nichol-Lee-Nichol, 333-5 de polgonos de Liang-Barsky, 345 de polgonos de Sutherlandllodgman, 338-43 de polgonos de Weiler-Atherton, 343-5 mtodos paralelos, 338-9 mtodos paramlricos, 330-1 poliedros, 406-8 polgonos. 336-46, 406-7
polgonos cncavos, 343-5 puntos, 323, 403 recorte de lneas de CohenSulherland, 324-9 segmentos lineales, 323-36, 404-7 texto, 347-8 tridimensional, 401 9 Algoritmos de relleno de rea: antialiasing, 226 X reas de contorno curvo, 207 reas de contorno irregular. 207-11 mtodo de inundacin-relleno, 211 mtodo de las 4 conexiones, 208 mtodo de las 8 conexiones, 208 mtodo de lnea de barrido, 202-6 mtodo de relleno de contorno, 207-10 mtodos paralelos, 204-5 mezcla de color. 200-2 mosaico, 200 patrones de relleno, 199-200 polgonos, 202-6 polgonos convexos, 206 relleno cuadriculado, 200 relleno suave, 200 relleno tintado, 200 Algoritmos de relleno de contomo: regin con 4 conexiones, 208 regin con 8 conexiones, 208 Algoritmos del punto medio: generacin de crculos, 106-11 generacin de elipses. 113-20 Algoritmos generadores de crculos, 104-11, 120-3 Bresenham, 105-6 del punto medio, 106- 11 Algoritmos paralelos: generacin de curvas, 124
868
ndice
Algoritmos paralelos (cont) relleno de reas, 204-5 visuali/acin de lneas, 100-102 A lias ing, 221 Alineacin (texto), 220 Alta definicin, monitor de vdeo, 38 American National Standards Institute(ANSI), 73, 803 Amplitud de onda dominante. 737 Analizador diferencial digital (DDA), algoritmo de lneas, 94-95 Angstrom, 736 ngulo: campo de visin, 387-9 de incidencia (luz), 585 6 direccin, 815 fase, 767-8 reflexin especular, 588 refraccin, 598, 622 rotacin, 240 ngulo de excentrieidad, 113 ngulo interior (polgono), 129 ngulo slido, 814 Animacin, 252-3, 755 aceleraciones, 764-7 anticipacin, 759 aplicaciones, 6, 7, 26, 28-31 cinemtica, 761, 768-9, 770-1 cinemtica inversa, 768-9, 770-1 compresin y expansin, 759 definiciones de objetos, 758 descripcin de escenas, 760 dinmica, 768-9 dinmica inversa, 768-9 dirigida por objetivos, 768 diseo, 757-9 doble bfer, 756-7 efectos panormicos, 365 en tiempo real, 52-53, 755 errores de redodendo y de aproximacin, 252-3, 772 especificacin de acciones, 760 especificacin de movimiento, 767-9 especificacin directa de movimiento, 767-8 fsica, 761,768-9 fotograma a fotograma, 755
fotograma clave, 758 fotogramas intermedios, 758 funciones, 760 grados de libertad de un cuerpo rgido, 760-1 guin. 758 lenguajes, 760-1 mediante tabla de colores, 757 mtodos de barrido, 757 morfismo, 27-28, 31, 762-4 movimiento peridico submuestreado, 770- I movimientos peridicos, 771-2 personajes articuladas, 769-71 rotacional, 252-3, 771-2 seguimiento, 760 segn la ley del movimiento de Newton, 768-9 sistema basado en fotogramas clave, 760, 761 7 sistema de scripts, 761 sistema parametri/ado, 761 $ Kochunek-Bartels, 444
submuestreada, 770-1 tasas de muestreo, 771-2
tcnicas tradicionales de dibujos animados, 759-60 lemporizacin, 759 transformaciones de tabla de color. 757 variacin del centro de atencin, 760 velocidad de imagen, 756-7 velocidad de imagen irregular, 757 Animacin por computadora, 755-75 (vase tambin Animacin) ANS (American National Standards Institute), 73, 803 Anriatiasingy 221 (vase tambin Muestreo) fases de pxel, 221, 225 nitrado, 224 frecuencia de muestreo de Nyquist, 221 fronteras de un rea, 226-8 fronteras de una superficie, 226-8 funcin de filtro gausiana, 225-6 intervalo de Nyquist muestreo, 221
mapa de texturas, 652-3 mscara de ponderacin, 223 mtodo de Pitteway-Watkinson, 227-8 muestreo de un rea. 221, 224 muestreo eslocstico. 634-5 postfiltrado. 221 prefiltrado. 221 segmentos de lneas, 221-5 superficie de ponderacin, 224-5 supermuestreo, 221 trazado de rayos, 632-3 API (Application prograniming interface), 70 Aplicaciones, 3 33 (vase tambin Aplicaciones grficas) de entretenimiento, 28-31 de formacin, 19-23 Aplicaciones grficas: agricultura. 14, 18 animaciones, 6, 7, 27, 28-31 anuncios. 7, 25-28 arquitectura, 9 10 arte, 23-28 (vase tambin Arte por computadora) astronoma, 12, 31 CAD, 5 10 CAM, 7 ciencias fsicas, 12-19, 31 diseo. 5 10 diseo de oficinas, 9-10 edicin, 23, 25, 27 educacin, 19-23 entrenamiento, 19-23 entretenimiento, 28-31 fabricacin, 7 geologa, 31 grficas y diagramas, 3-5 ingeniera, 5-8 interfaces grficas de usuario, 32-33 matemticas, 12-13,25-27 medicina, 31-32 modelado, 5-10, 12-19 negocios, 3,5, 12, 18, 27-28 procesamiento de imgenes, 31-32 realidad virtual, 10-11 simulaciones, 6-7, 10-11, 12-23
ndice simuladores, 19-23 simuladores de vuelo, 19-22 visualizacin cientfica, 12-19 Apple GL (AGL), 75 Aproximacin por tramos (sp/ine), 123,432 rbol binario de particionamiento en el espacio, 492, 558-9 {vase tambin BSP, rbol) rbol cuaternario, 489 rbol octal, 489-92 elemento de volumen, 491 generacin, 489-92 mtodos de deteccin de visibilidad, 492, 562-3 operaciones CSG, 492 voxel, 491 Archivo de barrido en bruto, 791 Archivo de imgenes, 791 (vase tambin Formatos de archivo grfico) configuraciones, 791-2 mtodos de compresin, 793-801 mtodos de reduccin de color, 792-3 principales formatos, 801-5 Archivo vectorial, 42 Archivos de cabecera para OpenGL, 76 rea rellena, 127 atributos, 199-202 entorno curvo, 207-11 interior, 132-4 operaciones lgicas, 200--1 polgono, 128-39 regla del nmero de vueltas distinto de cero, 132-4 regla par-impar, 132 Arista (polgono), 128 efectos de costura, 214 indicador (OpenGL), 214-6 vector, 129-30 Aristas activas, lista de, 205 Arrastre, 696 Arte por computadora, 23-28, 62- 3, 191 Asistido por computadora: ciruga, 31 -32 diseo (CAD), 5 educacin y formacin, 19-23 fabricacin (CAM), 7-9 proyecto y diseo (CADD), 5 Atenuacin angular de la intensidad (fuente luminosa), 581-3 Atenuacin radial de la intensidad (fuente luminosa), 579-80 Atributos de marcador, 220
869
B
Bandas de mach, 617 barrido: animaciones, 757 archivo (bfer), 39 fuente, 153 operaciones, 38-41, 50-54 Barrido TC (Tomografa computerizada), 31 Barrido de textura, 652-3 Barrido en orden de imagen (mapeado de textura), 652-3 Barrido en orden de pxel (textura), 652-3 Base: normal, 819-20 ortogonal, 819-20 ortonormal, 819-20 vectores de coordenadas, 818-9 Base normal, 819-20 ticia-spline, 465-6 condiciones de continuidad, 465-7 peridica cbica, 466 Bzier: conversiones de -splines, 469-70 curva cerrada, 450-1 curva cbica, 451-3 curvas, 445-54 funciones de mezcla, 445-6 matriz, 453 propiedades, 450 superficies, 454 tcnicas de diseo, 450-1 Big endian, 791 Bitblt (transferencia de bloques de bits), 265 Bitmap, 40, 148 (vase tambin Bfer de imagen)
BMP. 805 Brillo (luz), 737 BSP: algoritmo de visibilidad, 559-60 rbol, 492 B-spline: abierto, 461-4 control local, 454-6 conversiones de Bzier, 469-70 cuadrtica, 458-9 cbica, 460-1 curvas, 454-64 frmulas de recursin de Cox-deBoor, 456 funciones de mezcla, 456,461 matriz, 461 no uniforme, 464 no uniforme racional (NURB), 467-9 parmetro de grado, 455 parmetro de tensin. 461 peridica, 457-64 propiedades, 454-5,456-7 racional, 467-9 superficies, 464-5 uniforme, 457-4 vector de nudo, 456 Bfer: A, algoritmo, 553-4 auxiliar, 151-2 color, 39, 150-1 (vase tambin Bfer de refresco) derecho, 150-1 de profundidad, 150-1, 549 de refresco, 39 frontal, 150-1, 772 izquierdo, 150-1 luminoso (trazado de rayos), 628-30 patrn, 150-1, 187 trasero, 150-1, 772 z (bfer de profundidad), 549 Bfer de imagen. 39, 86 clculos de direccin, 102-3 comando getPixcl, 87 comando setPixel, 87 operaciones de barrido, 38-41 planos de bits, 40
870
ndice
38. 86 {com.)
Can de electrones, 36
(vase tam-
Centroide (polgono), 836-7 CG API (computer-graphics application programming interface), 70 C(iM (computer-graphics metafile), 803 C I K (International Commission on Illumination), 739 Cierre de superficie (radiosidad), 640-1 Cilindricas, coordenadas. 812-3, 820-1 Cinemtica, 761,768-9, 770-1
c
Cabeceras (archivos de imagen), 791 C A P (computer-aided design), 5 (.'ADD (computer-aided drafting and design), 5 Caja de botones, 58, 59 Clculos de masa (CSG), 488-9 Clculos de volumen (CSG). 488-9 C A M (computer-aided manufacturing), 7-9 Cmara: crculo de confusin, 632 ecuacin de la lente fina, 631 efectos de enfoque, 630-2 efectos de objetivo, 634-5 modelo de visualization, 355-6, 360-1 nmero f, 63 I parmetros (modelo de iluminacin), 602 profundidad de campo, 632 Cambio de escala: bidimensional, 242 4, 246 composicin, 248 diferencial, 242 direcciones generales de camhio de escala, 250-1 factores, 242, 284-5 inverso, 246-7, 287 mtodos de barrido, 265 no uniforme (diferencial), 242 parmetros (factores), 242, 284 5 posicin fija, 242, 284-5 representacin matricial. 246, 284-5 tridimensional. 284 7 uniforme, 242 Cambio del centro de atencin (animacin), 760 C a m p o de gravedad, 698 9 Candela (fuente luminosa estndar), 739-40
luminosas) brillo, 737 caractersticas psicolgicas, 737 codificacin (visualizacin de datos), 529 complementario, 738 conceptos intuitivos, 738-9 consideraciones de seleccin, 751 cromaticidad, 737 espectral, 735 6, 740-1
Indice
espectro (c l ptromagnt i co), 735 6 gama, 738 iluminante C, 740 luminaneia, 596-7, 740, 744 mezcla. 78-79, 185-6 modelos de iluminacin, 594 6 percepcin, 737 primario, 738 pureza, 737, 742 puro, 737. 739 real, sisiema, 44 saturacin, 737 sombras, 734 tintas. 739 tonalidades, 739 tono, 737 Columna: nmero, 86 vector (matriz), 82!-2 G'ommission Internationale de rclairage(CIE), 739 Componentes nemticos de cristal lquido, 45-46 Compresin con prdidas, 794 de archivos, tcnicas, 793-801 sin prdidas, 794 y expansin (animacin), 759 Computadora cliente, 69 Concatenacin (matriz), 247 Continuidad de orden cero: geomtrica, 434-5 paramtrica, 434 Continuidad de primer orden: geomtrica, 435 paramtrica, 434 Continuidad de segundo orden geomtrica, 435 paramtrica, 434 ejes, 812-3 esfricas, 813, 821 homogneas. 89, 245 locales (maneado de imagen), 658-9 locales (modelado), 71, 784-5 maestras, 71 modelado. 71-72, 785 normalizadas, 71-72 ortogonales, 812-3 polares, 788-89, 813^1 posicin actual. 87 proyeccin normalizada, 361, 370-2. 379, 392-5
871
regla de la m a n o derecha, 71,811 regia de la mano izquierda, 812-3 relativas, 87 seleccin, 692 transformacin, 267-9, 291-2 universales, 71-72 visualizacin, 71-72 Coordenadas de visualizacin: tridimensionales, 307, 308, 809 regla de la mano derecha, 812-3 tridimensionales, 355-6, 811 uvn, 363-4 Copo de nieve (fracial), 496-7 Correccin gamma, 604-5 Correspondencia de lenguaje, 74 Cosenos directores, 815 Costura (huecos en las aristas de los polgonos), 214 Cox-delioor, frmulas de recursin, 456 Cramer, regla de, 839 ( S( i , mtodos. 486-9 (vase tam-
(spline),
armazn, 432, 457-8 divisin de polgonos, 131-2 polgono, 129, 206 Coordenadas: absolutas, 87 cartesianas, 51, 71-72, 809, 811 cilindricas, 812-3. 820 1 curvilneas, 812-3 de dispositivo. 71 de pantalla, 71, 86-87, 395, 809, 812 de superficie, 812-3 de textura. 650 de un pxel (cuadricula de pantalla), 86-87, 124-5
bin Geometra slida constructiva) Cuadrcula: carcter, 53, 153 en construccin interactiva de imgenes, 696 Cuaternio, 827-8 construcciones Iractales, 519 inverso, 827-8 mdulo, 827-8 multiplicacin. 827-8 multiplicacin por un escalar, 827-8
(vase tambin
872
ndice
Cuaternio, 827-8 (cont.) parte escalar, 827-8 parte vectorial, 827-8 representacin mediante par ordenado, 827-8 rotaciones, 280-4 suma, 827-8 trminos imaginarios, 826-7 Cubo unitario (volumen de visualizacin), 370-2, 378-9, 392-5 Cuerpo: no rgido, 526-9 personaje. 217 Cuerpo rgido: grados de libertad, 760-1 transformacin, 238-9, 241, 253 4 Cursor de mano (digitali/ador), 62 Curva: algoritmos paralelos, 124 aproximacin mediante lneas rectas, 121 atributos, 193-5 B-spiine, 454-64 caracola, 165-68 cardioide, 165-68 circulo, 104-11, 120-3 consideraciones de simetra, 104, 113,121 construccin por tramos, 123, 432, 435 cuatro hojas, 165-68 de ajuste, 437 de respuesta del monitor, 604-5 elipse, 111-20, 120-3 espiral, 165-68 fraetal, 492-3, 497-9, 507-21 hiprbola, 121-2 Koch( fraetal), 497-8 parbola, 121-2 polinmica, 123 {vase tambin Curva spline) recorte, 346 representaciones paramlricas. 121, 123 secciones cnicas, 120-3 supercudrica, 422-4 tres hojas, 165-68 Curva spline, 123,431-69
Bzier, 445-54 B-spiine, 454-64 cardinal, 441-4 Catmull-Rom, 441-2 condiciones de continuidad, 434 condiciones de contorno, 435 continuidad geomtrica, 434-5 continuidad paramtrica, 434 control local, 454-5, 456 conversiones, 469-70 de visualization, 470-4 funciones base, 435, 436 funciones de mezcla, 435. 436 graft) de control, 433 hermtica, 438-41 interpolacin, 432 interpolacin cbica, 437-44 Kochanek-Bartels, 444 matriz base, 436 natural, 438 NURB, 467 Overhauser, 441-2 parmetro de continuidad, 444-5 parmetro de desplazamiento. 444-5, 454. 466 parmetro de tensin, 444-5 polgono caracterstico, 433 polgono de control, 433 puntos de control. 432 racional, 467 9 representacin matricial, 435 vector de nudo, 456 Curvas cudricas, 420-2 Curvilneas, coordenadas, 812-3 Cyrus-Beck, recorte de lineas de, 330
D
B&tbs de entrada grfica, 6X9 Datos en bruto, 791 DDA, algoritmo de lineas, 94-95 Deflexin: (vase tambin Tubo de rayos catdicos) bobinas, 36, 37 corriente, 37 magntica (TRO, 37
placas, 37, 38 Del, 830 al cuadrado, 832 Delta-delta, IRC de mscara de sombra, 42 Dentado, 92 (vase tambin Antialiasing) Derivada parcial. 829-30 Descarga de gas, pantallas, 44 Descomposicin LU, 840 Desenfoque de movimiento, 635-7 Despiece, 359 Desplazamiento del punto medio (fraetal), 504 6 Detalles de superficies, 647-59 caras poligonales, 650 mapcado de entorno, 646 mapeado de relieve, 656 8 mapeado de texturas, 650-6 mapcado del sistema de referencia, 658 9 texturado proccdimental, 655-6 Deteccin de lneas visibles, 566-8 (vase tambin Variacin de la intensidad con la profundidad) Deteccin de superficies visibles, 358, 547-68 algoritmo del pintor (ordenacin de profundidad), 556 clasificacin de algoritmos, 547-8 comparacin de algoritmos, 564-5 eliminacin de caras ocultas. 548-9 grficas de contomo de superficie, 566 mtodo de lneas de barrido. 554-6 mtodo de ordenacin de la profundidad, 556-8 mtodo de proyeccin de rayos. 563^1 mtodo de subdivisin del rea. 559-62 mtodo del rbol BSP, 559-60 mtodo del bfer A, 553-4 mtodo del bfer de profundidad. 549-52 mtodo del espacio de imagen, 547 mtodos almbricos, 566-8
ndice
mtodos de rbol octal, 492, 562-3 mtodos del espacio de objetos, 547 superficies curvas, 565-6 variacin de la intensidad con la profundidad, 567-8 Determinacin de raices mediante falsa posicin, 842 Determinacin de raices por biseccin, 841 Determinante, 823-4 Diagrama cromtico, 740-1 colores complementarios, 741 gamas de colores, 741 iluminante C, 740 linea prpura, 740 longitud de onda dominante, 741-2 pureza, 742 Diagramas de contorno, 530 2 Diagrama de tiempos, 5 Dibujo de grficas, 3-5, 160-65 Diodo emisor de luz (LED), 44 Direccional: derivada, 831 fuente luminosa, 580 Dispositivo, coordenadas de, 71 Dispositivos de entrada: caja de botones, 58, 59 clasificacin lgica, 689-94 conmutadores, 58 de trazo, 690 diales, 58, 59 digitalizador, 62-64 digitalizadores snicos tridimensionales, 63 dispositivo de cadena, 690 dispositivo de eleccin, 690-2 dispositivo de seleccin, 690, 692-4 dispositivo de trazo, 690 dispositivo evaluador, 690-1 dispositivo localizador, 690 cleciroguante, 61 escner, 64 Ecuacin de una lente fina, 631
873
E
Ecuacin punto-pendiente de una lnea, 92-93 Ecuaciones diferenciales ordinarias, 844-5 parciales, 845-6 Educacin y formacin, aplicaciones, 19-23 Efectos atmosfricos (modelo de iluminacin), 601 Efectos de ampliacin o reduccin, 306 Efectos de iluminacin de superfi-
joystick, 61
lpiz ptico, 66 lgicos, 689-94 panel tctil, 64-66 ratn Z, 60 ratn, 59-60 sistemas de voz. 67
(vase tam-
spacebail, 60-61
tableta grfica, 61-63 teclado, 58
irackba, 60-61
Dispositivos de impresin, 67-69 Distancia: punto a linea. 692-4 trayectoria de trazado de rayos. 622-3 Divergencia: operador, 832 teorema, 835 Divisin de polgonos cncavos mtodo vectorial, 130-1 mtodos rotaciones, 130-1 Divisin de polgonos convexos, 131-2 Doble bfer, 52-53, 756-7 Doble refraccin. 598
electromagntico, 63
pluma, 61-63 precisin, 63 resolucin, 63 snico, 63 tridimensional, 63 Dimensin, 818-9 de similaridad (fractal), 495-6 eueldea. 492-3, 4 % fraccional, 492-3, 495-6 fractal, 492-3, 494-7 recuadro, 495-6 topolgica, 495-6 Dinmica, 768 -9 (vase tambin Animacin)
874
ndice
Factor de rellectividad (radiosidad), 640-1 Factores de forma (radiosidad), 640-1 Fakespaee Pinch, electroguantes, 50 Filamento ( T R O , 36 Filtro: mtodos fractales. 795 P C X , 805 PICT, 804 PNCi, 803-4 reduccin de color de corte medio, 793 reduccin de color por popularidad, 792-3 reduccin de color uniforme, 792 representacin geomtrica, 792 SPIFF, 802-3 larga, 805 tcnicas de compresin de archivos, 793-801 T G A , 805 TIFF, 803 transformacin de coseno inverso, 799-800 X B M , 804 X P M , 804 Formatos hbridos. 792 Fsforo, 36 Fotograma: animacin, 755 rea de pantalla, 39 velocidad, 756-7 Fotogramas clave (animacin), 758 Fotogramas intermedios (animacin), 758 Fotn, 37, 638-9 Fractal: autoafines, 494 auto-elevacin al cuadrado, 494, 507-21 auto-inversos, 494, 521 auto-similares, 494, 497-9 caractersticas, 492-3 caractersticas de auto-similaridad, 492-3 caractersticas del terreno, 505-7 clasificacin, 494 conjunto de Julia, 508 conjunto de Mandelbrot, 513-9 conjunto invariante, 494 construcciones afines, 501-4 construcciones geomtricas, 497-501 copo de nieve, 496-7 curva de Koch, 496-7
cono, 225-6 funcin, 224 gausiano, 225-6 recuadro, 225-6 Fsico: animaciones, 761, 768-9 modelado, 526-9 Fluctuacin, 634 5 Focos, 580 Forma funcional explcita, 828-9 implcita, 828-9 Forma polar (nmero complejo), 826-7 Formatos de archivo grfico: Adobe Photoshop, 804 algoritmo de diccionario, 795 algoritmo de sustitucin, 795 archivo de barrido, 791 archivo de barrido en bruto, 791 big endian, 791 B M P , 805 cabecera, 791 C G M , 803 codificacin aritmtica, 798-9 codificacin Hulfman, 795-8 codificacin L Z W , 794-5 codificacin por coseno discreto, 799-801 codificacin por longitud de recorrido, 794 compresin con prdidas, 794 compresin sin prdidas, 794 configuraciones, 791-2
Esfera:
clculos de interseccin con rayos, 623-5 ecuaciones, 420, 829-30 Esfricas, coordenadas, 813-4, 821 Espacio riemaniano, 820-1 Especificacin de movimiento, 767 Espectro de frecuencias (electromagntico), 735-6 Espejo vari focal, 47 Espejo vibratorio, 47 Espiral, 165-68 Estacin de trabajo grfica, 54-58 Estado: mquina, 179 parmetros, 180 sistema, 179 variables, 180 Estndares software, 73-74 Estercoradian, 814
(vase tambin
datos en bruto, 791 formato hbrido, 792 GIF, 805 JF1F, 802-3 JPEG, 801-3 hule endian, 79]
F
Factor de opacidad, 600
frutice
curva de Peano, 496 9 desplazamiento del punto medio, 504-6 dimensin, 492-7 dimensin de HausdorflBesicovitch, 495-6 dimensin de recuadro, 495-6 dimensin de similaridad, 495-6 dimensin fraceional, 492-3, 495 6 espacio de Peano, 498-9 estadsticamente auto-similar, 494. 499 501 generador, 496-7 iniciador, 496-7 mtodos de desplazamiento aleatorio del punto medio, 500, 504 6 mtodos de inversin, 519 21 mtodos de recubrimiento de recuadros, 495-6 mtodos de recubrimiento topolgici). 496 mtodos de subdivisin, 494-6 movimiento browniano, 501-4 movimienlo browniano fraceional. |0l-4 procedimientos de generacin, 494 representacin mediante cuaternios. 519 superficies de control, 506-7 frecuencia dominante, 737 Fresnel, leyes de la refraccin, 588 Fnistum, 384 5, 386-92 f-stop, 631 ftp (file-transfer protocol), 70 Fuente, 153 letra > cach, 150-1 de barrido, 153 de contorno. 1 53 de trazos, 153 legible. 153 mapa de bits, 53, 153 monoespaciada, 153 proporcional. 153, 217 sans-serif, 153 scrif, 153 Fuente luminosa, 578-83 atenuacin angular de la intensidad, 581-3 atenuacin radial de la intensidad, 579-80 brillo, 737 candela, 740 compleja, 582-3, 635 direccional, 580 distribucin de energa, 737 energa radiante, 638 9 flujo radiante. 638-9 foco, 580 frecuencia dominante, 737 infinitamente distante, 579 intensidad, 182, 638 9 longitud de onda dominante, 737 luminancia, 183, 596-7. 740, 744 parmetros de pantalla, 582-3 potencia radiante, 638-9 puntual, 578 radiancia espectral, 638-9 radiosidad, 638 9, 640-1 vector de direccin, 586-7 Warn, modelo de. 582-3 Funcin de densidad (objeto sin Corma), 429-31 Funcin de perturbacin (mapcado de relieve). 656 Funcin de relieve. 656 Funciones base, 435 (vase Funciones de mezcla) Funciones de ajuste de color. 738 I-unciones de atenuacin (luz). 579-80, 581-3 Funciones de entrada, 73, 694-5 realimentacin de eco, 695 retrollamada, 81, 695 Funciones de mezcla Bzier, 445-6 eliminacin, 839 funcin de densidad (relieve), 429-31 ("uncin de filtro, 225-6 teorema, 834-5 Ciauss-Seidel. mtodo, 840
875
Generacin de sptines:
mtodo de diferencias finitas. 471-2 mtodo de I lomer, 470-1 mtodos de subdivisin, 472-4 Generador (fracial), 496-7 Generador de congruencia lineal, 843-4 Generador de nmeros aleatorios, 843-4 Geometra de objetos, 125-7 Geometra slida constructiva (CSG), 486-9 clculos de masa, 488-9 clculos de volumen, 488-9 mtodos de rbol octal, 492 mtodos de proyeccin de rayos, 486-9 plano de partida, 488 Geomtrico: continuidad (spline), 434-5 modelo, 779 primitivas, 85 (vase tambin
tambin
Primitivas de salida grfica) reglas de produccin, 521-4 representaciones (archivos de imagen). 792 tablas (polgono), 135-6
tambin
Transformaciones)
(icstor de ventana, 32 gctPixel, procedimiento, 87 GIFF, 805 G K S (Graphical Kemcl System), 73 GL (Graphics Library), 73 Glifo, 536 G L U (OpenGL Utility), 75 funcin de direccin de visualizacin, 396-7 funcin de ventana de recorte
[spline), 435
G
G a m a (color), 738 Gauss: distribucin, 38
876
G L U (OpenGL Ulility)
(iradientc (grad), operador. 830-1 Grados de libertad, 760-1 Grfica: de barras. 3-5. 162-163 de sectores, 3-5, 163 de liempos, 5 tridimensional, 3-5 Grficas de contomo superficial, 566 Grficas y diagramas, 3 5, 160-65
tamao de punto, 38 Hercio, 40 Hiprbola, 121-2 HLS, modelo de color, 750-1 Homogneas, coordenadas, 89, 245 Hooke, ley de, 526-7 llorner. mtodo de faetorizacin de polinomios, 470-1
funciones de ajuste, 4845 funciones de curvas 480-2 funciones de superficie B-spline, 482-4 funciones para superficies cudricas, 425-8 ventana de visualizacin, 78-79 G L U T (OpenGL Uliliry Toolkil). 76 creacin de submens, 7 2 0 3 funcin de cambio de tamao de la ventana de visualizacin, 158-61,317 funcin de creacin de mens. 717-9 funcin de cajas de botones, 711 funcin de cursor de pantalla, 318-9 funcin de superficie cbica (tetera), 425 funcin de tetera, 425 funcin inactiva, 319, 772 funciones de atributo de carcter, 220 funciones de caracteres. 155 funciones de consulta, 316-7, 320, 720-1 funciones de dial, 711 funciones de modificacin de mens, 723-4 funciones de ratn. 700-5, 705-9 funciones de spaceball, 710 funciones de tableta, 710 funciones de teclado, 705-9 funciones para poliedros regulares, 416-9 funciones para superficies cudricas, 424-5 gestin de mltiples mens, 720 gestin de ventanas de visualizacin. 76-78, 78-79, 158-61, 315-20 men actual. 720 (il.X (extensin O p e n G L al sistema X window), 75 Gouraud, representacin superficial, 614-7 Grad al cuadrado. 832
I
Iconos, 33 de aplicacin, 724-5 de comando, 724-5 Iluminante C, 740 Imgenes de tono continuo, 605-6
(vase tambin
H
parmetro, 89 I lausdorff-Besicovitch, dimensin, 495-6 Haz de electrones:
(vase tambin
interpolacin (representacin de Gouraud), 614-7 matriz (mapeado de entorno), 646 niveles (sistema), 603 Interfaz grfica de usuario: coherencia, 726 componentes, 724-7
Tubo de rayos catdicos) convergencia, 37 deflexin electrosttica, 37, 38 deflexin magntica, 36, 37 enfoque, 37 intensidad, 37
ndice
dilogo con el usuario, 724 diseo, 724-7 facilidades de ayuda, 725-6 iconos, 724-5 mens, 724-5 minimi/.aein de la memorizacin, 726 modelo del usuario, 724 mltiples niveles de experiencia. 725-6 realimenlacin, 726-7 tratamiento de errores, 726 ventanas, 724-5 Interfa/ I B M OS/2 para O p e n G L (P(iL), 75 Interfaz Windows para O p e n G L ( W G L ) , 75 International Standards Organi/ation (ISO), 73, 74, 803 Inversa: barrido (mapeado de textura), 652 cinemtica, 768-9, 770-1 cuaternio. 827-8 dinmica, 768-9 matriz, 824 transformacin coseno. 799-800 transformaciones geomtricas, 246 ISO (International Standards Organization). 73, 74, 803 Isolfneas, 530-2 Isosuperfcies, 530-2 Lambert, ley del coseno, 583-4 Lpiz (digitalizador), 61 Lpiz ptico, 66 L C D (pantalla de cristal lquido), 45-47 de matriz activa, 46-47 de matriz pasiva, 47 L E D (diodo emisor de luz), 46 Liang-Barsky, recorte: lneas bidimensionales, 330-3 polgonos, 345 Lnea: antialiasing, 221-5 atributos, 188-92 ecuacin punto-pendiente, 92-93 ecuaciones, 93 extremos, 189 opciones de pincel y pluma. 191-2 representacin paramtrica, 323, 330,380-1 variaciones de intensidad, 225-6 Lnea base (carcter), 217 Lnea de barrido, 39 entrelazado, 40 Lnea digilalizada en escalera, 92 Linca escalonada, 92 Lnea inferior (carcter), 217 Linea prpura (en diagrama cromtico), 740 Lnea superior (carcter), 217 Lincas de campo, 534 Lineas de (lujo, 534 Lneas punteadas, generacin, 190-1 Lista de aristas: activas, 205-6 en tablas de polgonos, 135-6 ordenadas. 204-5 Little endian, 791 Locales, coordenadas, 71, 784-5 Longitud de onda (luz), 735 LLJ, descomposicin, 840 Luminancia, 183, 596-7, 740, 744 Koch, curva (copo de nieve fraetal), 496-7 Kochanek-Hartis, spline, 444 Luz: banda de frecuencias. 735 blanca, 736, 737 brillo, 737 color espectral, 735 cromaticidad, 737 diagrama cromtico, 740-1 de fondo (ambiente), 583-4
877
espectro electromagntico, 735-6 frecuencia, 38, 735 iluminante C, 740 longitud de onda, 735 luminancia, 183, 596-7, 740, 744 perodo, 735 propiedades, 735-7 pureza, 737 tono, 737 velocidad, 736 L Z W , codificacin, 794-5
M
MacPaint, formato, 804 Maestras, coordenadas, 71, 785 Malla (polgono), 129, 141-5,416 cuadriltera, 143-5,416 triangular, 141-3, 416 Mandelbrot, conjunto, 513-9 Mapeado de entorno, 646 de fotones, 646-7 de patrones, 650
(vase tambin
Mapeado de texturas) de reflexin, 646 de relieve, 656-8 del sistema de referencia, 658-9 ventana a visor, 306, 310-3 Mapeado de texturas: barrido en orden de imagen, 652-3 barrido en orden de pixel, 652-3 barrido inverso, 652-3 bidimensional (superficie), 651-5 coordenada r, 654-5 coordenada . v , 650-1, 654-5 coordenada /, 651, 654-5 coordenadas, 650-1 espacio, 650-1
J
JFIF, 802-3 Joystick: isomlrico, 61 mvil, 61 sensible a la presin (isomlrico), 61 JPEG, 801-3 Julia, conjunto, 508
Modelos
L
Lado (polgono), 128
(vase tam-
bin
Modelos de iluminacin)
878
tndi
Mapeado de texturas: ( c o n / . ) patrones de reduccin, 655 proeedimental, 655-6 slido, 654-5 tcxel, 650-1 tridimensional (volumen), 654-5 unidimensional (lineal), 650-1 Marcador (carcter), 153 4 Mscara, 148, 199 de pixeles, 148 de ponderacin del pxel, 223 de sombra. 42-43 Material elstico (objeto no rgido), 526-9 opaco, 597 transparente, 597 traslcido, 597 Matriz, 821-4 alealorizacin, 611 base ( s p l i n e ) , 436 Bzier, 453 -spline, 461
Mtodo vectorial (divisin de polgonos), 130-1 Mtodos de banda elstica, 696 Mtodos de compresin (archivos de imagen), 793-801 Mtodos de desplazamiento aleatorio del punto medio, 504-6 Mtodos de dibujo, 695-9 Mtodos de divisin de polgonos rotacional, 130 I Mtodos de partieionamiento del espacio (trazado de rayos): adaptativo, 627 bfer de luz, 628-30 haces de rayos, 628 30, 631 uniforme, 627 Mtodos de posicioiamiento (interactivos), 695 Mtodos de pseudocolor, 529 Mtodos de subdivisin: rbol BSP. 4 2, 559-60 rbol octal, 489-92. 562-3 generacin de fractalcs, 494-6 generacin de s p l i n e s , 472-4 trazado de rayos adaptativo, 632-3 trazado de rayos uniforme, 627 Mtodos del espacio de imagen (deteccin de visibilidad), 547 Mtodos interactivos de entrada. 689-94 Mtodos numricos: ajuste de dalos por mnimos cuadrados, 846-7 algoritmo de Runge-Kutta, 844 descomposicin LlI, 840 determinacin de raz, 841-2 diferencias finitas, 845-6 ecuaciones diferenciales ordinarias, 844-5 ecuaciones diferenciales parciales, 845-6 ecuaciones no lineales, 841-2 eliminacin gausiana, 839 evaluaciones de integral, 842-3 generador de nmeros aleatorios, 843 4 mtodo de biseccin, 841 mtodo de Euler. 844
l
mtodo de Gauss-Seidel, 840 mtodo de la falsa posicin, 842 mtodo de Newton-Raphson. 841 mtodos de Monte ( . ' a r l o , 843 problemas de valor de contorno, 844 problemas de valor inicial, 844 regla de C'ramer, 839 regla de Simpson, 842 regla del trapezoide. 842 sistemas de ecuaciones lineales, 839-40 Mnimos cuadrados, ajuste de datos. 846-7 Mip m a p (patrn de reduccin de texturas), 655 Modelado: conceptos bsicos, 779-82 coordenadas. 71, 784 5 coordenadas locales, 784 5 coordenadas maestras, 785 de mdulos, 781 fsico, 526-9 geomtrico, 779-80 instancia, 779 jerarquas de smbolos, 781-2 jerrquico, 237, 784-7 paquetes, 782-4 representaciones, 779-81 smbolos, 779 tejidos, 528 transformaciones, 71 -72, 237, 785-7 Modelado slido: geometra slida constructiva. 486-9 representaciones de barrido, 485-6 Modelo bsico de iluminacin. 586-97 Modelo de color, 738 aditivo, 740, 743 C M Y , 745-7 C M Y K . 746 conversin H S V - R G B . 749-50 conversin R G B - C M Y , 746 conversin R G B - Y I Q , 745 diagrama cromtico, 740-1 funciones de ajuste de color, 738
cambio de escala, 246, 284-5 caracterizacin de s p l i n e s (base), 436 cardinal, 441 2 columna, 821-2 concatenacin, 251-2, 823 cuadrada, 821-2 de entorno. 646 determinante. 823-4 de vrtices (OpenGL), 146 7 fila, 821 2 hermtica, 439 40 identidad, 824 inclinacin, 263-4, 290-1 inversa, 824 multiplicacin escalar, 822 3 multiplicacin, 823 no singular. 824 reflexin, 260-2, 290 rotacin, 246, 272-4, 279-80, 281-2 singular. 824 suma, 822 transposicin, 823 traslacin, 245-6, 270 Mens, 717-24 Metaarchivo, 792
ndice HLS, 750-1 HSB (igual que HSV) USV, 747-8 primarios, 738 primarios CI estndar, 739-40 primarios CI, 739-40 RGB, 42-44, 180-1,742-4 sustractivo (CMY), 745-7 teora de los tres estmulos de la visin, 742 valores de cromatieidad, 740 valores XYZ normalizados, 740 XYZ, 739 40 YC C ,145 YIQ, 745 YUV, 745 Modelo de metabolas, 430-1 Modelo de objetos suaves, 430 I Modelos de iluminacin, 577 ngulo de incidencia, 585-6 ngulo de reflexin especular, 588 ngulo de refraccin, 598 atenuacin angular de la intensidad, 581-3 atenuacin radial de la intensidad, 579-80
r h
879
ndice de refraccin, 598 Lamben, ley del coseno, 585 ley de Snell, 598 luminancia, 596-7 luz ambiente (de fondo), 584-5 luz de fondo, 583^t material opaco, 597 material traslcido, 597 modelo bsico, 563-97 modelo de Phong, 588-93 mltiples fuentes luminosas, 592 parmetros de cmara, 602 radiosidad. 638-45 reflector ideal difuso, 585 reflector lambertiano, 585 reflexin difusa, 583-4, 584-8 reflexin especular, 583-4, 588-92 reflexiones combinadas difusaespecular, 592 sombras, 601-2 transmisin difusa, 598 transparencia, 597, 600 vector de la fuente luminosa, 586-7 vector de reflexin especular. 588 vector de transmisin, 599-600 vector del observador, 588 vector del punto medio, 590-2 Warn, fuente luminosa, 582-3 Modos de entrada, 694-5 por mueslreo, 694 por solicitud, 694 Mdulo, 781 Mdulo (complejo), 826 Monitor, 35 (vase tambin Monitor de vdeo) Monitor compuesto, 43 Monitor de vdeo, 35-58 (vase tambin Tubo de rayos catdicos) alta definicin, 38 barrido, 38-41 barrido aleatorio, 41-42 caligrfico, 41 color completo, 44 color real, 44 compuesto, 44 descarga de gas, 44 diseo de un TRC, 3 5 ^ 1
coelleientes de reflexin. 585-88 coeficiente de reflexin ambiente, 586-7 coeficiente de reflexin difusa. 584-88 coeficiente de reflexin especular, 588-9 coeficiente de transparencia, 600 componentes de iluminacin RGB, 594-6 consideraciones de color, 594-6 efectos atmosfricos, 601 efectos de iluminacin de superficie, 583-4 efectos de refraccin, 598-9 emisiones superficiales, 592-3 exponente de reflexin especular, 588-9 factor de opacidad, 600 focos, 580 Fresnel, leyes de la reflexin, 588-9 fuentes luminosas, 578-83
electro!uminisecnte, 44-46 clectroluminiscenle de pelcula fina, 44 emisivo, 44 estaciones de trabajo, 54 estereoscpico, 47-50 LCD (pantalla de cristal lquido), 45-46 LED (diodo emisor de luz), 44 45 matriz activa, 46-47 matriz pasiva, 47 multi-panel, 54-58 no emisivo, 44 pantalla de plasma, 44, 45 pantalla de gran tamao, 54-58 pantalla plana. 44-47 resolucin, 38 RGB, 42-44 servidor grfico, 69 TRC color, 42-44 TRC de almacenamiento, 36 TRC de refresco, 36-41 tridimensional, 47 vectorial, 41 Monitor en color: (vase tambin Monitor de vdeo) compuesto, 44 delta-delta, 44 en lnea, 43 mscara de sombra, 42-44 penetracin de haz, 42 RGB, 42-44 sistema de color completo, 44 sistema de color real, 44 Monitores grficos, 35 58 {vase tambin Monitor de vdeo) Monte Cario, mtodos, 843 Morfismo, 27-28, 31, 762-4 Mosaico de superficies, 199-200 Movimiento browniano, 501-3 fracciona!, 501-4 Movimiento rgido, 253-4 Movimientos de animacin peridicos, 771-2 Muelle: constante, 526-7 red (cuerpo no rgido), 526-7 Muestreo: (vase tambin Antaliasing)
880
ndice
Mucstrco
(cont.)
imaginario puro, 825 longitud de un vector, 826 mdulo, 826 operaciones aritmticas, 825, 826 parte imaginaria, 824 parte real, 824 races, 827 representacin mediante par ordenado, 824 representacin polar, 826-7 valor absoluto, 826 Nmero de linea de barrido, 86 Nmero de vueltas, 132 Nmero f, 631 Nmero imaginario, 825 puro, 825 N U R B (Nonuniform rational
bfer de refresco predeterminado, 150-1 bfer de refresco, 78 79 bfer de seleccin, 711 bfer derecho, 150-1 bfer frontal, 150-1 bfer izquierdo, 150-1 bfer trasero, 150-1 bferes, 150-1 bferes de color, 78-79, 150-1, 187 clculos de iluminacin de caras traseras, 663-4 coeficiente alpha, 183, 78 coeficientes de atenuacin radial de la intensidad, 661 color de destino, 185 color de la fuente, 185 colores de la fuente luminosa, 660 constantes simblicas, 7475 coordenadas de textura, 669-70, 672-3, 673^* coordenadas de textura homog-
adaptativo, 632 de rea, 221.224, 632 de lincas, 93, 220-3 de un segmento de lnea, 93, 220-3 estocstico, 634-5 frecuencia de Nyquist, 221 intervalo de Nyquist, 221 mscaras de ponderacin, 223 ponderado, 223 postfltrado, 221 pretlltrado, 221 supermuestreo, 221 velocidad (animacin). 771-2 Multum in parvo (mip map). 655
N
Nabia, 829-30 al cuadrado, 832 National Televisin System Committee fNTSC), 604, 743, 744 N C S A (National Center for Supercompuling Applications), 70 N C S A C A V E , 16, 688 Newton, segunda ley del movimiento, 768-9 Newton-Raphson, determinacin de races, 841 Nicholl-Eee-Nicholl, recorte de lineas de, 333-5 Niveles cunticos de energa, 37 Niveles de intensidad del sistema, 603 Normalizado: coordenadas, 307 coordenadas de proyeccin, 361, 370-2, 379, 392-5 cuadrado, 311-3 visor, 310-1 volmenes de visualizacin, 370-2, 379, 392-4
B-spline),
Nyquist:
467-9
O
Objeto: componente de imagen, 156 no rgido (flexible), 526-9 opaco, 597 rgido, 768-9 Objeto grfico, 128 estndar, 128, 416 Objetos sin forma, 429-31 Open Inventor, 74 OpenGL: GLU) A G L (interfaz Apple), 75 Architecture Review Board, 73-74 archivos de cabecera, 76 biblioteca bsica, 74-75 biblioteca de ncleo, 74-75 bibliotecas relacionadas ( G L U T y
nea, 679-80 coordenadas homogneas, 89 copia de patrones de textura, 675-6 curvas de recorte, 484-5 denominacin de patrones de texturas, 676-7 doble bfer, 150-1, 772-5 efectos atmosfricos, 665 espacio de texturas bidimensional (volumen), 672-3 espacio de texturas tridimensional (volumen), 673-4 espacio de texturas unidimensional (lineal), 669-72 estados de textura actual, 676-7 focos, 661 -2 fuente luminosa infinitamente distante, 659-60 fuente luminosa local. 659-60 fuentes de luminosas direccionales (focos), 661-2 funcin de cara frontal, 216 funcin de mapa de bits, 148-50 funcin de mapa de pxeles, 150-1
GLU), 75
bordes de texturas, 668-9, 678-9 bfer auxiliar, 151-2 bfer de acumulacin, 187 bfer de color frontal-izquierdo, 150-1 bfer de patrones, 150-1, 187 bfer de profundidad, 150-1, 187
(vase tam-
bin
Recorte)
N T S C (National Televisin System Committee), 604, 743, 744 Nmero complejo: conjugado, 826 frmula de Euler, 826-7
ndice
funcin de matriz de bler de seleccin, 711-2 funcin de proyeccin en perspectiva general, 398 -9 funcin de proyeccin en perspectiva simtrica, 398 funcin de proyeccin ortogonal, 78-79, 397 funcin de superficie cbica (tetera), 425 funcin de variacin de la intensidad con la profundidad, 571 funcin de ventana de recorte. 314-5.396-7 funcin de visor, 315, 399 funciones de antialiasing, 228 funciones de aproximacin de (unciones de fuentes luminosas puntuales, 659-63 funciones de iluminacin, 659-67 funciones de lneas, 91-92 funciones de matriz de pxeles, 148-53 funciones de men, 717-24 grupos de atributos, 229 30
881
identificadores de seleccin, 711 indicadores de aristas de polgonos, 214-6 interfaz Apple (AGL), 75 interfaz de sistema X W i n d o w (GLX), 75 interfaz I H M / O S (PGL), 75 listas de interpolacin de vectores normales, 667-8 listas de visualizacin, 156-8, 787 matrices de color, 186-7 matrices de coordenadas de textura, 676 matrices de vrtices, 145-8, 667-8 matriz actual, 294 matriz entrelazada, 186 matriz modelview, 293-4
{vase tambin G L U T )
funciones de pila de nombres, 712-3 funciones de proyeccin en perspectiva. 398-9 funciones de puntos, 88-90 funciones de relleno de reas poligonales, 139-45,416 funciones de representacin de superficies, 667-8 funciones de respuesta a la visualizaron, 81 funciones de superficie 482-4 funciones de superficie de Bzier, 477-80 funciones de tetera, 425 funciones de textura lineal, 669-72 funciones de textura, 213, 668-80 funciones de texturas de superficies, 672 3 funciones de texturas volumtricas, 673-4 funciones de transformacin geomtricas, 292-9 funciones de transparencia, 666 funciones de visualizacin bidimensional, 78-79, 314-22 funciones de visualizacin tridimensional, 396401 funciones para poliedros, 416-9 funciones para poliedros regulares, 416-9 funciones para superficies cudricas, 424 5, 425-8
splines, 474-85
funciones de atribulo de reas de relleno, 211-6 funciones de atributo de reas poligonales de relleno, 211-6 funciones de atributo de caracteres, 22 funciones de atributo de lneas, 196-8 funciones de atributo de puntos, 195-6 funciones de bfer de profundidad, 568-71 funciones de caracteres, 155 funciones de color, 183-8 funciones de composicin de imgenes, 185 funciones de consulta. 229 funciones de curva
B-sp/ine
mtodos almbricos, 214-6 mtodos de relleno por interpolacin, 213 mtodos de visibilidad almbrica, 570-1 mezcla de color, 78-79, 185, 666 mip maps, 677-8 modelado jerrquico, 787 modelo de iluminacin, 665 modo de color, 293-4 m o d o de ndice de colores, 184-5 m o d o de proyeccin, 78-79, 293-4, 314 m o d o de realimentacin, 711-2 m o d o de representacin predeterminado, 199, 666-7 m o d o de seleccin, 711 m o d o de textura, 293-4 m o d o de visualizacin de color, 183 modos de representacin, 667-8 modos R G B y R G B A , 183-8 nombres de texturas, 676-7 opciones de color de texturas, 674 opciones de mapeado de texturas, 674-5 opciones de textura, 680 operaciones de barrido, 151 2 operaciones de seleccin, 711-7
B-spline, 480
funciones de curva de Bzier, 474-7 funciones de curvas, 103-4 funciones de deleccin de visibilidad, 568-71 funciones de eliminacin de caras traseras, 569 funciones de eliminacin de polgonos (eliminacin de caras ocultas), 569 funciones de entrada interactiva, 699-724 GLUT)
(vase tam-
bin G L U T ; G L U )
gestin de ventanas de visualiza-
[vase tambin
(vase tambin G L U )
882
ndice
O p e n G L (con/.)
Operaciones de semitonos, 668 parmetros de iluminacin,
subconjunto de procesamiento de imgenes, 185 subpatrones de textura, 677 texturado automtico, 679 texturas proxy, 679 tipos de datos, 74-75 tipos de fuentes luminosas, 660 transformaciones de barrido, 266 transformaciones de proyeccin ortogonal, 397 Utility(GLU), 75 UtilityToolkil(GLUT), 75 variables de estado, 180 vector de posicin del observador. 396 7 vectores unitarios normales a la superficie, 667-8 ventana de seleccin, 712-3 W G L (interfaz Windows). 75 Operaciones de seleccin en O p e n G L , 711-7 Operaciones lgicas, 200-1 Operador laplaciano. 831-2 Operadores diferenciales, 829 32 direccional, 831 divergencia, 832 gradiente, 830-1, 831 I,aplace, 831 2 ordinario. 829-30 parcial, 830 rotacional, 832 Orden (continuidad de curvas
electroluminiscente, 44 eleciroluminiscenles de pelcula fina, 44 emisiva (emisor), 44 muhipanel, 54-58 no emisiva (no emisor), 44 procesador de, 53-54 vectorial, 41 Pantalla de barrido (monitor), 38-41 aleatorio, 41-42 bitmap, 40 bfer de color, 39 bfer de imagen. 39 bfer de refresco, 39 color, 40 entrelazado, 40 escala de grises, 40 imagen, 39 lnea de barrido, 39 monocromo, 40 pixel, 39 pixmap, 40 planos de bit. 40 profundidad, 40 relacin de aspecto, 39 resolucin, 39 retorno de haz, 40 retrazado horizontal, 40 rctrazado vertical, 40 velocidad de refresco, 40 41 Pantalla, coordenadas de bidimensional, 51-53, 86-87. 809 tridimensional, 87, 395,812 Pantallas (control de iluminacin), 582-3 Pantallas de panel plano. 44 47 de cristal lquido (LCD), 45-47 de descarga de gas, 44 diodo emisor de luz (LEP), 44-45 clectroluminiscenle de pelcula fina. 44 emisiva, 44 matriz activa, 46-47 matriz pasiva, 47 no emisiva, 44 plasma, 44-45 Parbola, 121-2 Parmetro beta, 464-5
659-67
parmetros de iluminacin ambiente (fondo), 662-3 parmetros de iluminacin de fondo, 662-3 parmetros de iluminacin de superficies, 662-5 parmetros de reflexin especular, 662-3 parmetros globales de iluminacin, 662-3 patrones de reduccin de texturas, 677 8 patrones de textura reducidos, 677 8 PGL(intcrfaz I B M OS/2 Prsenla! ion Manage), 75 pila de atributos, 230 pila de atributos de cliente, 230 pila de atributos de servidor, 230 pila de nombres. 711-2 pilas de matrices, 295-6 plano de recorte lejano, 396-7 plano de recorte prximo, 396-7 planos de recorte, 396-7, 409-10 planos de recorte opcional, 409 posicin de barrido actual, 148 primitivas, 78 79 procedimientos de animacin, 772-5 programa de ejemplo introductorio, 80 propiedades de la fuente luminosa, 659 proxy de textura, 679 rampa de colores, 228 reiniciali/acin de texturas, 675 6 representacin de superficies de intensidad constante, 667-8 representacin de superficies por el mtodo de (iouraud, 667-8 representacin plana de superficies, 667-8 sintaxis bsica, 74-75 sistema de referencia bidimensional, 88
sp/ine), 434-5
Ortogonales, coordenadas, 812-3 (verhauser, sptinc, 441 -2
P
Paneles tctiles, 64-66 acstico, 66 LEE)* 64
ptico, 64
resistivo, 64-66 Pantalla caligrfica (vectorial). 41 de cristal lquido (LCD), 45-47 de panel de plasma, 44 de trazo (vectorial). 41
Indice
de continuidad, 444-5 Pipclinc de visualizacin: bidimensional, 305-7 tridimensional, 360-1 Pirmide de visin (proyeccin en perspectiva), 383 Pittcway-VValkins, antialiasing, 227-8 Pixblt (transferencia de bloques de pxelcs), 265 Placel, 39 Pixel, coordenadas del, 86-87, 124-5 Pixmap, 40, 148 Planck, constante, 638-9 Planificacin de tareas, 5 Plano: de partida (trazado de rayos), 488 cara anterior, 137-8 cara posterior, 137-8 coeficientes, 136-8 complejo, 824 ecuaciones, 136-8 frontal (recorte), 370 lejano (recorte). 370-2 parmetros, 136-8 posterior (recorte). 370 prximo (recorte), 370-2 recorte, 370-2, 407-9 vector normal, 138-9 Plano de visualizacin, 356. 361, 362 posicin. 362 vector normal, 362 ventana de recorte, 370, 377-8 Planos de bits (sistema de barrido), 40 Planos de recorte, 361 orientaciones arbitrarias. 407-9 prximo y lejano, 370-2 PNG, 803-^ Polares, coordenadas, 788-89. 813^1 Poliedros, 416 intersecciones en trazado de rayos, 625-6 propiedades, 838 Polgono, 129 de relleno) ngulo convexo, 131-2 ngulo interior, 129 rea, 836 arista, 128 atributos, 199-200 cara frontal, 137-8 cara posterior. 137-8 caracterstico, 433 centroide, 836-7 clasificaciones, 129 convexo, 129 de control, 433 degenerado, 129
883
de desplazamiento {spline),
444-5,454, 466
divisin de polgonos cncavos, 130-1 divisin de polgonos convexos, 131-2 ecuaciones del plano, 136-8 efectos de costura, 214 estndar, 128 indicador de arista (OpenGL), 214-6 interseccin con rayos, 625-6 lado, 128 l i s t a de aristas activas, 205-6 malla. 128 mtodos de relleno, 199-206
tambin Plano)
vector de la arista. 129 30 vector normal. 138-9 vrtices, 128 Polgono cncavo, 129 divisin, 130 1 identificacin, 129-30 recorte, 343-5 l'olilnea. 91, I6(M2 algoritmos de visualizacin, 100 unin en bisel, 190
884
ndice
Polilfnea, 91, 160-62 (cont.) unin en punta, 190 unin redondeada, 190 Polimarcador, 153-4, 160-62 Polinomios de Hernstein, 445-6 Ponderacin: mscara (pixel), 223 superficie, 224-5 Posicin actual, 87 Posicin actual de barrido (OpenGL), 148 Postfiltrado, 221 Amialiasing) Precisin (atributo de texto), 220 Prefiltrado, 221 Amialiasing) Presentation Manager, interfaz con O p e n G L (PGL), 75 Primitivas de salida grfica, 72, 85 rea de relleno, 124-39 carcter, 153-4 crculo. 104 II elipse, 111-20 mapa de bits, 148 mapas de pixel, 148 marcador, 153-4 matrices de pixel, 148 poli lnea, 91, 160-62 poiimarcador, 153-4, 160-62 polinomio, 123 punto, 86-87 seccin cnica, 120-3 segmento lineal, 92-102
Proyeccin: axonomtrica, 369 caballera, 376 cabinet, 376 centro, 380 frustum, 384-5, 386-92 isomtrica, 369 plano, 356, 549 punto de referencia, 380 vector (oblicua), 376-7 volumen de visualizacin, 370-2,
matriz, 392-3 matriz de inclinacin, 391 Proyeccin ortogonal: axonomtrica, 369 coordenadas de proyeccin, 369 elevaciones, 368 isomtrica, 369 matriz de transformacin de normalizacin, 373 transformacin de normalizacin, 370-2 volumen de visualizacin, 370-2 volumen de visualizacin normalizado, 372 vista plana, 368 Proyeccin paralela, 356, 368 axonomtrica, 369 caballera, 376 cabinet, 376 ejes principales, 369 isomtrica, 369 oblicua, 374-9 ortogonal, 368-73 transformacin de inclinacin, 374-6 transformacin de normalizacin, 372-3, 379 vector, 376-7 vista de elevacin, 368 vista superior, 368 volumen de visualizacin, 370-2, 377-8 Proyeccin paralela oblicua: coordenadas, 374 en dibujo y diseo, 374 6 matriz de transformacin, 377-8 proyeccin caballera, 376 proyeccin cabinet, 376 transformacin de normalizacin, 379 vector, 376 7 volumen de visualizacin, 377-8 Puesta en fase de los pixeles, 221, 225 Punto: atributos, 188 de foco (elipse), 111-2 de fuga principal, 383 de fuga, 383
(vase tambin
377-8, 383-5 Proyeccin de rayos deteccin de superficies visibles, 563-4 geometra slida constructiva, 486-9 Proyeccin en perspectiva, 356, 368, 379-80 ngulo del campo visual, 387-9 casos especiales, 381-3 centro, 380 cono de visin, 383 coordenadas de transformacin normalizadas, 393 5 coordenadas, 381-3 de dos puntos, 383 de tres puntos, 383 de un punto, 383 frustum, 384-5, 386-92 frustum oblicuo, 390-2 frustum simtrico, 386-90 matriz, 385-6,392 5 matriz de inclinacin, 391 matriz de transformacin normalizada, 394-5 matriz de transformacin oblicua, 392-3 pirmide de visin, 383 punto de fuga principal, 383 punto de referencia, 380 puntos de fuga, 383 representacin en coordenadas homogneas, 385-6, 393-4 volumen de visualizacin normalizada, 392-4 volumen de visualizacin, 383-5 Proyeccin en perspectiva oblicua: frustum, 390-2
(vase tambin
sp/ine, 123
texto, 153-4 Primitivas para matrices de pixeles, 148 Problema del valor de contomo, 844 Problema del valor inicial, 844 Procedimiento registrado, 80 Procesamiento de imgenes, 31-32 Producto escalar (vectores), 816-7 Producto vectorial (vectores), 817-8 Profundidad (bfer de imagen), 40 Profundidad de campo, 632 Programas de dibujo, 23-26 Propiedades de coherencia, 203 Protocolo de transferencia de archivos (ftp), 70
Indice
885
de pivole (rotacin), 240 de referencia (proyeccin en perspectiva), 380 de referencia de visuali/acin, 380 en el espacio de coordenadas, 814 fijo (cambio de escala), 242, 284-5 observado, 362 3 propiedades, 814 recorte, 323 Pureza (luz), 737
Recorte de rea, 336-46 Recorte de lnea: bidimensional, 323-36 Cohcn-Sulherland, 324-9 Cyrus-Beck, 330 Liang-Barsky, 330-3 Nichol-Lee-Nichol, 333-5 tridimensional, 4047 ventana de recorte no lineal, 335 ventana de recorte no rectangular, 335 Recorte de polgonos: bidimensionales, 336-46 mtodos paralelos, 338-9 Sutherland-Hodgman, 338-43 tridimensionales, 406 -8 Weiler-Atherton, 343-5 Recorte de superficies, 406-8 Recuadro: de entrada de dial, 58, 59 dimensin, 495-6 filtro, 225-6 recubrimiento (fractal), 495-6 Redes grficas, 69 Reduccin de color: de corte medio, 793 por popularidad, 792-3 uniforme, 792 Refinamiento progresivo (radiosidad), 643-5 Reflectividad, 585 Retlector: difuso ideal. 585, 639-40 lamberliano, 585, 639-40 perfecto, 585, 639-40 Reflexin (luz): ngulo de incidencia, 585-6 coeficientes, 584-88, 588-9 difusa, 584-88 especular (modelo de Phong), 588-92 lambertiana, 585 leyes de Fresnel, 588-9 rayo, 620 vector del punto medio, 590-2 Reflexin especular, 5 8 3 4 , 588-92 ngulo, 588 coeficiente, 588-9 exponente, 588-9
leyes de Fresnel, 588-9 modelo de Phong, 588-93 vector, 588 vector del punto medio, 590-2 Refraccin: ngulo, 598 coeficiente de transparencia, 600 difusa, 597 doble, 598 ndice, 598 ley de Snell, 598 rayo, 598-9, 620 vector, 599-600 Refresco: archivo de visualizaein, 42
R
Radiancia espectral, 638-9 Radiante: energa (radiancia), 638-9 exitancia, 638-9 flujo, 638-9, 639 40 intensidad, 638-9, 639-40 potencia, 638-9 transferencia de energa, 640-3 Radiosidad (exitancia radiante), 638^5 cierre superficial, 640 1 ecuacin, 640- 1 factor de reflectividad, 640-1 factores de forma, 640-1 modelo bsico, 638-43 refinamiento progresivo, 643-5 semicubo, 642-3 semiesfera, 639-40 Races: de nmeros complejos, 826-7 ecuaciones no lineales, 841-2 Ratn, 59-60 Z, 60 Rayo de sombra, 622 Rayo del pxel, 618-619 Rayo secundario, 620 Rayos catdicos, 36 Realidad artificial virtual) Realidad virtual: aplicaciones, 10-11 lenguaje de modelado ( V R M L ) , 70 sistemas, 47-50, 62-63 Realimentacin de eco, 695
(vase tambin
(vase Realidad
(spline superficial),
464
436, 454,
886
ndice
Retorno (haz de electrones), 40 RKYLS, 553 RGB: coordenadas cromticas. 743 modelo de color. 42-44, 180-1. 742^1 monitor, 44 (vase tambin Monitor de vdeo) Rotacin: ngulo, 240 bidimensional, 240-2, 245-6, 254 5 composicin, 248 construccin de matrices, 254-5 de los ejes de coordenadas, 272-4 eje de coordenadas, 272-4 eje de, 240 eje espacial general, 274-80 eje*. 273 eje y, 274 eje z. 272-3 en las animaciones, 252-3, 771 -2 inversa, 246-7, 274 mtodos de barrido, 265 mtodos de euaternios, 280 4 punto de pivote, 240 representacin matricial, 246 tridimensional, 271-84 vector del eje, 275-6 Rotacional, operador, 832 Ruido (tramado), 611 Runga-Kutta. algoritmo, 844
828-9
Representaciones parametricas. 829 crculo, 104-11.829-32 curva. 828-9 elipse, 113 elipsoide, 421 esfera, 420, 829-32 parbola, 121 segmento lineal, 323-4, 330, 380-1
spline,
123,434,435, 436
superficie. 829-32 toro, 422 Resaltado (mtodo de seleccin). 693 Resolucin: aproximaciones de semitono, 608-9 dispositivo de visuali/acin, 38 Resolucin de ecuaciones integrales: aproximaciones mediante rectngulo, 842 3 mtodos de Monte Cario, 843 regla de Simpson, 842 regla del trapezoide, 842 Resolucin de ecuaciones lineales: descomposicin l . t J , 840 eliminacin gausiana. 839 Gauss-Scidel, 840 regla de Cramer. 839 Resolucin de ecuaciones no lineales, 842-3 Resolucin de sistemas de ecuaciones, 839-40 Retrazado horizontal, 40 Rctrazado vertical, 40 Restricciones (dibujo interactivo), 696
s
Sans-serif. tipo de letra, 153 Saturacin (luz), 737 Secciones cnicas, 120-3 Segmento (subseccin de imagen), 156 Segmento de lnea dirigido (vector). 814 Seguimiento (animacin), 760 Seleccin: coordenadas, 692 dispositivo de entrada. 690, 692-4 distancia, 692-4 objeto, 692-4 resaltado, 693 ventana, 693
splines, 431-73
ndice
Semicubo (radiosidad), 642 3 Semiesfera (radiosidad), 639-40 Semitono: aleatorizacin. 610-3 aproximaciones, 607-10 mtodos de color. 610 patrones, 607 Serif, tipo de letra, 153 Servidor grfico. 69 setPixel, procedimiento, 87 SIGGRAPII (Special Inierest Group in Graphics), 70 Smbolo: instancia, 779 jerarquas. 7812 modelado, 779 Simetra crculo, 104 elipse, 113 en los algoritmos de dibujo decurvas, 121 Simpson. regla de. 842 Simulaciones, 6-7, 10-11, 12-23 Simuladores, 19-23 de vuelo, 19-22 Sistema de color completo, 44 Sistema de animacin parametrizado, 761 por scripl, 761 Sistema de barrido, 50-54 codificacin de celdas, 53 codificacin de longitud de recorrido, 54 controlador de pantalla, 50-51 controlador de vdeo, 51-53 controlador grfica, 53 conversin de barrido, 53 coprocesador de pantalla, 53 procesador de pantalla, 53-54 Sistema de enfoque ( T R C ) 37
t
887
C G API, 70 correspondencia de lenguaje, 74 estndares, 73-74 funciones bsicas. 72-73 G K S , 73-74 G L , 70, 73 Open Inventor. 74, 75 operaciones de control, 73 PIIIGS, 73 PH1GS+, 73 pipeline de visualizacin, 71-72 Rcndcrman, 74 representaciones de coordenadas, 70-72 tridimensional, 73 V R M L , 70, 74 Sombra, 635, 637 Sombras (color), 739 Sombras: modelado, 601-2 penumbra, 635, 637 sombra, 635, 637 Sombreado
m o d o de entrada, 694 Supercudrica. 422 4 Superelipse, 422-4 Superelipsoide. 423 Superficie: circundante, 560 cudrica, 420-2 curva de ajuste, 437 detalle, 647-49 exterior, 560 fractal, 498-9, 50O-I, 504-6, 519 interior. 560 plana, 416 ponderacin, 224-5 representacin explcita. 828-9 representacin implcita, 828-9 representacin no paramtrica, 828-9 representacin paramtrica, 829 sin forma, 429-31 solapada. 560 supercudrica, 422-4 iluteselada, 128 Superficie curva, 420-2, 436, 530-2
(vase Modelos de
B-spline, 464-5
cudrica, 420-2 curva de ajuste. 468-9 elipsoide, 420-1 esfera, 420 grficas de contorno, 530-2 isosuperficic, 530-2 ponderacin. 224-5
representacin [vase
Representacin de superficies) representacin no paramtrica, 828-9 representacin paramtrica, 829 representaciones explcitas, 828-9 representaciones implcitas, 828-9
B-spline, 460-1
interpolacin, 437-44 natural. 438
Sistema de fotogramas clave, 760, 762-7 Sistemas de entrada de voz, 67 Sistemas de pantalla grande, 54 58 Sistemas de partculas, 524-5 Snell, ley de, 598 Software grfico: OpenGL) bidimensional, 73
(vase tambin
888
ndice
Superficie spline, 432,436 (cont.) Ber, 454 tt-sptine, 464-5 representacin mediante producto cartesiano, 436 visualizacin, 470-4 Supermucsireo, 221, 632 Sutherland-Hodgman, recorte de polgonos, 338-43
T
TAC (Tomografia axial computerizada), 31 labias: de atributos polgono), 135-6 de aristas, 135-6, 204-5, 205-6 de aristas ordenadas, 204-5 de coras de la superficie, 135 6 de consulta de vdeo, 604 de sustitucin, 181-2, 604 de sustitucin de colores, 181-2 de vrtices (polgono), 135-6 geomtrica, 135-6 Tableta, 62-63 (vase tambin Digitalizador) de datos, 62 grfica, 62-63 Tamao en puntos (carcter), 217 larga, 805 TCP/IP, 69-70 Teclado, 58 Tcnicas de construccin interactiva de imgenes, 695-9 arrastre, 696 cam po de gravedad, 698-9 cuadrculas, 696 dibujo, 699 mtodos de banda elstica, 696 posicionamiento, 695 restricciones, 696 Temporizacin (animacin), 759 Tensor. 818 contraccin, 536 dimensin, 818 mtrico, 821 propiedades de transformacin, 818 rango, 818 visualizacin de datos, 535-6
Teoremas diferenciales, 833-5 Teora de los tres estmulos de la visin, 742 Terminacin cuadrada saliente, 190 de linca redondeada, 189 plana, 189 Terreno (fractal), 505-7 Teselado de superficies, 128 Test interior-exterior: planos espaciales, 137-9 regla del nmero de vueltas distinto de cero para polgonos, 132-4 regla par-impar para polgonos, 132 Tetera. 425 Texel, 650-1 Texto: {vase tambin Carcter) alineacin, 220 atributos, 217-20 precisin, 220 recorte, 347-8 trayectoria, 218-9 Textura slida, 654-5 TGA, 805 TIFF, 803 Tintes (color), 739 Tipo de letra, 153 (vase tambin Fuente) legible, 153 Tomografia, 31 axial computerizada (TAC), 31 computerizada (TC), 31 emisiva de posicin (TEP), 31 Tonalidades (color), 739 Tono, 737 Topolgico dimensin, 495-6 recubrimiento (fractal), 496 Toro, 421-2 Traekball, 60-61 Tramado. 610 aleatorio (ruido), 611 matriz, 611 mtodo de difusin de errores, 612-3 mtodo de difusin de puntos, 613
mtodo de tramado ordenado, 611 ordenado. 611 ruido, 611 Transferencia de bloques, 265 Transformacin: afn, 292 cambio de escala, 242-4, 248 compuestas, 247-59, 287-9 conmutativa, 251-2 cuerpo rgido, 238-9, 2 5 3 ^ de barrido, 265-6 de coordenadas universales a coordenadas de visualizacin, 71,307, 308, 361, 366-7 de la estacin de trabajo, 313 de ventana a visor, 306, 310-3 de visor, 395 eficiencia de clculo, 252-3 geomtrica bidimensional, 238-69 geomtrica tridimensional, 270-1 geomtrica, 73, 237 geomtricas bsicas, 238-44 inversa, 246-7 mtodos de barrido. 265-6 modelado, 73, 237 no conmutativa. 251-2 representacin matricial, 244-65, 270-91 rotacin, 240-2, 246, 271-84 sistema de coordenadas, 267-9, 291-2 traslacin, 238^10, 245-6, 270-1 Transformacin de inclinacin, 263-4 bidimensional, 263-4 direccin r, 263-4 direccin y, 264 direccin z, 290-1 eje, 263-4, 290-1 en proyecciones en perspectiva oblicuas, 391-2 en proyecciones paralelas oblicuas, 374-6 matriz, 263-4, 290-1 parmetros, 263-4, 264, 290-1 tridimensional, 290-1 Transformacin de normalizacin: bidimensional, 310-3 proyeccin en perspectiva, 393-4
ndice
889
proyeccin ortogonal, 370 2 Transformacin de proyeccin: axonomtriea, 369 caballera, 376 cabinet, 376 ejes principales, 369 isomtrica, 369 ortogonal, 368-73 ortogrfica, 368 paralela, 356, 368, 368-79 paralela oblicua, 374-9 perspectiva, 356, 368, 379-95 perspectiva oblicua, 390-2 perspectiva simtrica, 386-90 1 ransformacin de reflexin, 260-3 bidimensional. 260-3 eje, 260, 290 mtodos de barrido, 266-7 plano, 290 tridimensional, 290 Transformacin de visualizacin, 73
proyeccin en perspectiva simtrica, 386-90 proyeccin ortogonal, 368-73 proyeccin paralela oblicua, 374-9 proyeccin paralela, 368 9 proyecciones, 356 punto de vista, 362 transformacin de coordenadas universales a coordenadas de visualizacin, 308, 366-7 transformacin de estacin de trabajo, 313 transformacin de visor, 395 tridimensional, 355-60 vector de visualizacin vertical, 362 ventana de recorte, 305, 307-9 ventana de visualizacin, 305 visualizacin normalizado, 310-1 volumen de visualizacin normalizado, 372, 379, 392^4 volumen de visualizacin, 361 Transmisin especular (refraccin), 598
clculos de interseccin con superficies, 623-30 cdigos, 634-5 de distribucin, 634-5 desenfoque de movimiento, 635-7 ecuacin del rayo, 622 C Ice los de enfoque de cmara, 630-2 efectos del objetivo de la cmara, 634-5 en el modelo de radiosidad, 643 5 llucluacin, 634-5 fuente de luz compleja, 635 haces, 628-30, 631 intersecciones con la esfera, 623-5 intersecciones con poliedros, 625-6 mtodo del bfer de luz, 628-30 mueslreo adaplativo, 632 muestren estocstico, 634-5 rayo de sombra, 622 rayo del ojo (rayo del pixel), 618-619 rayo del pixel (primario), 618-619 rayo luminoso invertido, 620 rayo reflejado, 620 rayo refractado, 620, 622 rayos distribuidos, 634-8 rayos secundarios, 620 recorrido de celdas, 627-8 subdivisin adaptativa, 627 subdivisin del espacio, 627-8 subdivisin uniforme, 627 supermuestreo, 632 trazado de conos, 633 vector de la trayectoria, 621-2 vector de transmisin, 622 volmenes de contomo, 626 Trazadora de plumillas, 68, 69 Trazo descendente (carcter), 217 Tubo de rayos catdicos (TRC), 35
(vase tambin
401 10
Proyeccin)
bidimensional, 306 coordenadas de pantalla, 51-53, 86-87, 395, 809 coordenadas de proyeccin normalizadas, 361, 372, 379, 392-5 coordenadas normalizadas, 307 coordenadas uvn, 363-4 cuadrado normalizado, 311-3 efectos de pantalla dividida, 313, 320-2 frustum, 384 5, 386-92 parmetros de la cmara, 355, 360-1 pipeline. 305-7, 360-1 plano de proyeccin, 356, 361, 362 plano de recorte lejano, 370-2 plano de recorte prximo, 370-2 plano de visualizacin, 356, 361-2 planos de recorte, 361 proyeccin en perspectiva, 379-95 proyeccin en perspectiva oblicua. 3 W - 2
antialiasing, 632-3
rbol, 620
890
ndice
Tubo de rayos catdicos, (cont.) color, 42-44 componentes, 36-38 deflexin del haz, 37 enfoque, 37 filamento, 36 fsforo, 36 intensidad del haz, 37 mscara de sombra, 42-43 mscara de sombra delta-delta, 43 mscara de sombra en lnea, 43 penetracin del haz, 42 persistencia, 38 rejilla de control, 37 relacin de aspecto, 39 resolucin, 38 RGB, 42 44 tamao de punto, 38 tensin de aceleracin, 36 velocidad de refresco, 36
cosenos directores, 815 de desplazamiento, 238 (vase tambin Traslacin) de eje (rotacin), 275-6 de nudos, 456 de posicin, 818-9 de transmisin (refraccin), 599600 de trayectoria (trazado de rayos), 621-2 del observador (modelo de iluminacin), 588 del punto medio, 590-2 dimensin, 818 en la representacin de cuaternios, 827-8 espacio vectorial, 819-20 tila (matriz), 821-2 fuente luminosa, 586-7 mdulo (longitud), 815 multiplicacin por un escalar, 816 normal a la superficie, 138-9, 656, 658, 830-1 operaciones, 816-7 producto, 817-8 producto escalar, 816-7 producto vectorial, 817-8 propiedades, 814-6 proyeccin paralela oblicua, 376-7 punto medio, 590-2 reflexin especular, 588 suma, 816 transmisin (refraccin), 599-600 traslacin, 238 vertical (carcter), 218 visualizacin de dalos, 532-5 Vector base, 819 20 (vase tambin Base) ortogonal, 819 20 ortonormal, 819-20 Vector normal: interpolacin (representacin superficial de Phong), 617 plano de visualizacin, 362 promedio (malla poligonal), 614 superficie curva, 656, 658, 830 I superficie de un plano, 138-9 Vector vertical de visualizacin:
bidimensonal, 308 tridimensional, 363 Vectores de los ejes de coordenadas (base), 819-20 Velocidad de la luz, 736 Ventana, 305 (vase tambin Ventana de recorte; Ventana de visualizacin; Transformacin de visualizacin; Visor) Ventana de recorte, 305, 370, 377-8 efectos de ampliacin, 306 efectos panormicos, 306 en coordenadas de visualizacin, 308 en coordenadas universales, 308-9 mapcado de visor, 310-1 no lineal, 335-6, 346 no rectangular, 335, 345 Ventana de visualizacin, gestin, 305 Vrtice (polgono), 128 Visiocasco, I I , 47-50, 360 (vase tambin Realidad virtual) Visin (leona de los tres estmulos). 742 Visor, 305 (vase tambin Ventana de recorte) en coordenadas de pantalla, 311 3 normalizado, 310-1 tridimensional, 361 (vase tambin Volumen de visualizacin) Vista de elevacin, 368 Vista superior, 368 Vistas en seccin, 359 Visualizacin: archivo, 42 ampliacin y reduccin, 298-9 aplicaciones, 12-19 bidimensional, 305-14 cientfica, 12, 529 (vase tambin Visualizacin de datos) comrolador, 50-51 coprocesador, 53 dispositivos, 35-58 (vase tambin Monitores de vdeo; Procesadores de visualizacin) despieces y secciones transversales, 359
Unidad imaginaria, 825 Unin, polilneas en bisel, 190 en punta, 190 redondeada, 190 Universales, coordenadas, 71-72 URL (Uniform Resource Locator), 69-70 Usuario: dilogo, 724 facilidades de ayuda, 725-6 interfaz, 724 {vase tambin Interfaz grfica de usuario) modelo, 724 uvn, sistema de coordenadas, 363-4
y
Valores cromticos, 737, 741, 742 Variable: dependiente, 828-9 independiente, 828-9 Variacin de intensidad con la profundidad, 356-7 Vector: ngulos directores, 815 arista, 129-30 columna (matriz), 821-2
(vase tambin
w
Warn, modelo (fuente luminosa), 582-3 Weilcr-Atherton, recorte de polgonos, 343-5 W G L (interfaz Windows a O p e n G L ) . 75 World Wide Web, 69-70
Visuali/acin de datos) panormica, 306 programa de, 42 tridimensional, 71-72, 355-60, 362 96 ventana, 32, 305 Visuali/acin de datos: aplicaciones, 12-19 campos escalares, 529-33 campos multivariables, 536 campos tensoriales. 535-6 campos vectoriales, 532-5 escalares, 529-33 glifos, 536 grficas de contomo, 530-2 isolincas, 530-2 isosuperficies, 530-2 lneas de campo, 534 lneas de flujo, 534 mtodos de codificacin de color, 529 multivariados, 536 representacin de volmenes, 530-2, 532-4 Visualizacin de polgonos: bandas de mach, 6 1 7 Gouraud, 614-7 intensidad constante, 614 interpolacin de intensidad, 614-7 interpolacin de vectores normales, 617 Phong, 617 Phong rpido, 617-8 plano, 614 Volumen de visualizacin paralele pipdico, 371, 377-8, 390, 393-4 rectangular, 371 Volumen de visualizacin, 361 cubo unitario, 370-2, 378-9, 392-5 normalizado, 372-3, 379, 392-5 proyeccin en perspectiva, 383-92 proyeccin paralela, 370-2, 370-2 Vxel, 491
X
X B M , 804 X P M , 804 X W i n d o w System, 75 X Y Z , modelo de color. 739-40
Y
YC C , modelo de color, 745
r h
antialiasing, 228 9
comprobacin de profundidad, 569-70 curvas de Bzier, 474 5 eliminacin de polgonos, 568-9 estilos de lnea, 196-7
gllndex, 183-4 gllntcrleavedArrays, 186-7 gllndexPointer, 187-8 gilnitNames, 712-3 gllsList, 156-7 gllsTexture, 677-8 glLight, 658 9 gILightModel, 662 4 gILineStipple, 196-7 gILinc Width, 195-6 glListBasc, 157-8 gILoadldentity, 88, 293-4, 314 glLoadMatrix, 293^4
estilos de relleno. 212-3 fuente luminosa, 659 60 mezcla de color, 152-3, 184-5 normalizacin de vectores, 667-8
glClear, 78-9, 569-70 semitonos (tramado), 668-9 gKIearColor. 76 7. 187-8, 315-6 superficies de Bzier, 477-8 glClearDcpth, 569 70 lexlurado, 668 9, 671-2, 673-4 gK'learlndex, 187 8, 315-6 variacin de la intensidad con la glClipPlanc, 409-10 profundidad, 571 glColor, 78-9, 183-4 glColorPointer, 186 7 glCopyPixels, 152-3, 266-7 glCopyTexlmage, 675-6 glCopyTexSublmage, 675-6 CulIFace. 568-9 glFnableClientSlate: indicadores de aristas, 215 6
glLoadName, 712-3 gILogicOp, 152-3 matrices de colores. 185-6 matrices de coordenadas de textugIMap: ra, 675-6 curva de Bzier, 474-5 matrices de vrtices, 145-7 superficie de B/ier, 477-8 normales a la superficie, 667-8 glMapGrid: gILnd, 88-89 gIRndIJst, 155-6, 787 glEvalCoord; curva de Bzier, 474-5 superficie de Bzier, 477-8 giEvalMesh: curva de Bzier, 477 superficie de Bzier, 478-9 gINewLisl. 155 6. 787 curva de Bzier, 477 superfcie de Bzier. 478-9 gIMaterial, 664-5 gIMatrixMode, 78-9, 88, 294-5, 314, 396 gIMultMatrix, 294-5
glDeleteLists, 158-9 glDeleteTextures. 676 7 glDepthFunc, 569-70 glDepthMask, 570-1, 666-7 glDcpthRange, 569-70 glDisable. 184-5, 196-7,212-3, 409-10, 474-5, 568-9 glDisableClientStale, 147-8 glOrawBufier. 151 2,266-7
glOrtho, 397
glTexImage2D, 671-2 glTcxImagc3D, 673-4 glTexParamcfcr. 669-70, 672-6, 678-9 glTexSublmage, 677-8 glTranslale, 293
gIPixelStorc, 149-50 glPixel/oom, 267 8 gIPoimSize, 195-6 glPolygonMode, 214-6, 570 I glPolygonOOset, 214-5 glPolygonSlipple, 212-3 gIPopAttrib, 229-30 gIPopMatrix, 295-6 glPopName, 712-3 glPushAltrib, 229-30
Funciones d el ab i b l i o t e c a GLU
gluBegint'urve, 480-1 gluBeginSurface, 481-2 gluBeginTrim, 483-4 gluBuild*MipmapLevels, 678 9 gluBuild*Mipuuips, 678-9 gluNewNurbsRenderer, 480-2 gluCylinder, 426-7 gluNewQuadrio, 425 6 gluNurbsCallback, 483-4 gluDeleteNLirbsRenderer, 480-1 gluDeleteQuadric, 426-7 gluDisk, 426 7 gluNurbsCallbaekData, 483^4 gluNurbsCurve, 480 1 gluNurbsProperty, 481-2. 482-3 gluNurbsSurface. 481 2 gluFndt'urve, 480-1 gluFndSurface, 481-2 gluEndTrim, 483-4 glu()rtho2D, 79, 88,314-5 gUiPartialDisk, 426-7 glul oadSamplingMatriccs, 483^1 gluLookAt, 397 gluQuadricCallback.427 8 gluQuadricDrawStyle, 425-6 gluQuadricNormals, 427-8 gluQuadricOrientation, 426 7 gluQuadricTexture, 679 gluSphere, 425-6 gkKielNurbsProperty, 482-3 gluPcrspective, 398-9 gluPickMatrix, 712-3 gluPwlCurvc, 483-4
Funciones d el ab i b l i o t e c a GLUT
glutAddMeiuil'jitry, 717-8 glutAddSubMenu, 720-1 glutAttachMenu, 717-8 glutDestroyWindow. 316-7 glutetacliMenu, 7 2 3 ^ gluiDeviceCet, 710 glulDialsFunc, 711 glutBilmapCharacier, 155 gluiBullonBoxFune, 711 glull-ullScreen, 316-7 glutCreateMenu, 717 glutCreateSuhWindow. 318 9 glutCreateWindow, 76-7, 3 1 5-6 glulGct, 320 glutGctMenu, 720-1 gluKiet Window, 316-7 glutDestroyMenu, 720 glutllideWindow. 318 9 glutMainLoop, 76-7, 319-20 glulKeyboardFunc, 705 glulDisplayFunc, 76 7, 319-20 glutini!, 76 7, 314-5 glullnilDisplayMode, 76 7, 182-3, 315-6, 568-9, 772 glutlnitWindowPosition, 76-7, 315-6 glutini!WindowSize, 76-7, 315-6 glut leoni fy Window, 317-8 glutldleFune. 319-20, 772