Está en la página 1de 921

IIIII

IIIIIII

IIIIIIIIIIIIIIIIIII

IIIII

III

IIII

IIIIIIIIIIIIIIIIIIIIII
IIIIIII

IIIII

et/h

IIII

.n

M. Pauline Baker pertenece al Departamento de Informtica y a la Escuela


de Informtica de la Universidad de Indiana-Universidad Purdue. La Dra.
Baker es una eminente cientfica y dirige el Laboratorio de Tecnologa Ubicua
para Visualizacin y Espacios Interactivos, colaborando con diversos grupos de
investigacin en la utilizacin de la infografa y de la realidad virtual para la
exploracin de datos cientficos. Anteriormente, la Dra. Baker era Directora
asociada de entornos de visualizacin y entornos virtuales en NCSA (National
Center for Supercomputer Applications), Universidad de Illinois.

li b r o sit

Acerca de los autores


Donald Hearn se incorpor a la Facultad de Informtica de la Universidad
de Illinois en Urbana-Champaign en 1985. El Dr. Hearn ha impartido un
amplio rango de cursos sobre grficos por computadora, visualizacin
cientfica, ciencias de la computacin, matemticas y ciencia aplicada.
Asimismo, ha dirigido numerosos proyectos de investigacin y ha publicado
diversos artculos tcnicos en estas reas.

w.

Novedades principales
Proporciona explicaciones completas y exhaustivas de la biblioteca bsica
de programacin grfica OpenGL y de las bibliotecas auxiliares GLU y
GLUT.
Incluye un amplio conjunto de ms de 100 ejemplos de programacin para
ilustrar el uso de las funciones OpenGL.
Presenta ejemplos de programacin en C11, con ms de 20 programas
C11 completos.
Combina la explicacin de los mtodos infogrficos tridimensionales y
bidimensionales.
Incluye los ms recientes avances en las tcnicas y aplicaciones infogrficas.

Incluye:
w

En esta tercera edicin se presentan los principios bsicos de diseo,


utilizacin y comprensin de los sistemas y aplicaciones infogrficos, junto con
numerosos ejemplos de programacin en OpenGL. Se analizan en profundidad
los componentes tanto hardware como software de los sistemas grficos,
utilizndose un enfoque integrado para relacionar los temas de grficos
bidimensionales y tridimensionales. Sin presuponer ningn conocimiento
previo del lector en el tema de grficos por computadora, los autores
presentan los conceptos fundamentales y los utilizan para mostrar cmo crear
todo tipo de imgenes, desde simples dibujos lineales hasta escenas
fotorrealistas altamente complejas.

earn

IIII

LibroSite es una pgina


web asociada al libro,
con una gran variedad
de recursos y material
adicional tanto para los
profesores como para
estudiantes. Apoyos a la
docencia, ejercicios de
autocontrol, enlaces
relacionados, material
de investigacin, etc.,
hacen de LibroSite el
complemento
acadmico perfecto
para este libro.

Grficos por computadora con OpenGL

3 ed.

3 edicin

Grficos por computadora


con OpenGL
www.librosite.net/hearn

Hearn
Baker

Donald Hearn
M. Pauline Baker
www.pearsoneducacion.com

AA_00A_PRINCIPIOS_HEARN.qxd

11/10/2005

11:11

Pgina II

AA_00A_PRINCIPIOS_HEARN.qxd

11/10/2005

11:11

Pgina I

Grficos por computadora


con OpenGL

AA_00A_PRINCIPIOS_HEARN.qxd

11/10/2005

11:11

Pgina II

AA_00A_PRINCIPIOS_HEARN.qxd

11/10/2005

11:11

Pgina III

Grficos por computadora


con OpenGL
Tercera edicin

DONALD HEARN
M. PAULINE BAKER
Indiana University - Purdue University

Traduccin
Vuelapluma

Madrid Mxico Santa Fe de Bogot Buenos Aires Caracas Lima


Montevideo San Juan San Jos Santiago So Paulo White Plains

AA_00A_PRINCIPIOS_HEARN.qxd

11/10/2005

11:11

Pgina II

AA_00A_PRINCIPIOS_HEARN.qxd

11/10/2005

11:11

Pgina IV

Datos de catalogacin bibliogrfica


GRFICOS POR COMPUTADORA CON OPENGL
DONALD HEARN; M. PAULINE BAKER
Pearson Educacin S.A., Madrid, 2006
ISBN-10: 84-205-3980-5
ISBN-13: 978-84-832-2708-4
Materia: Informtica, 681.3
Formato: 195 x 250 mm.

Pginas: 918

Todos los derechos reservados.


Queda prohibida, salvo excepcin prevista en la Ley, cualquier forma de reproduccin,
distribucin, comunicacin pblica y transformacin de esta obra sin contar con
autorizacin de los titulares de propiedad intelectual. La infraccin de los derechos
mencionados puede ser constitutiva de delito contra la propiedad intelectual
(arts. 270 y sgts. Cdigo Penal).
DERECHOS RESERVADOS
2006 por PEARSON EDUCACIN S.A.
Ribera del Loira, 28
28042 Madrid
Grficos por computadora con OpenGL
DONALD HEARN; M. PAULINE BAKER
ISBN-10: 84-205-3980-5
ISBN-13: 978-84-205-3980-5
Depsito Legal:
Authorized translation from the English language edition, entitled COMPUTER GRAPHICS
WITH OPENGL, 3rd Edition by HEARN, DONALD; BAKER, M. PAULINE, published by
Pearson Education, Inc, publishing as Prentice Hall, Copyright 2004
Equipo editorial
Editor: Miguel Martn-Romo
Tcnico editorial: Marta Caicoya
Equipo de produccin
Director: Jos A. Clares
Tcnico: Mara Alvear
Diseo de cubierta: Equipo de diseo de Pearson Educacin S.A.
Impreso por:
IMPRESO EN ESPAA - PRINTED IN SPAIN
Este libro ha sido impreso con papel y tintas ecolgicos

AA_00_DEDICATORIA_HEARN_1P.qxd

09/10/2005

13:23

Pgina v

A nuestra gente
Dwight, Rose, Jay y Millie

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:22

Pgina vii

Contenido
Prefacio

Introduccin a los grficos por


computadora

1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10

Grficos y diagramas
Diseo asistido por computadora
Entornos de realidad virtual
Visualizacin de datos
Educacin y formacin
Arte por computadora
Entretenimiento
Procesamiento de imgenes
Interfaz grfica de usuario
Resumen
Referencias

3
5
10
12
19
23
28
31
32
33
33

Introduccin a los sistemas


grficos

34

2.1

Dispositivos de visualizacin de vdeo 35


Tubos de refresco de rayos catdicos
35
Pantallas por barrido de lneas
38
Pantallas de barrido aleatorio
41
Monitores TRC de color
42
Pantallas planas
44
Dispositivos de visualizacin
tridimensional
47
Sistemas estereoscpicos y de realidad
virtual
47
Sistema de barrido de lneas
50
Controlador de vdeo
51
Procesador de pantalla de lneas de
barrido
53
Estaciones de trabajo grficas y
sistemas de visualizacin
54
Dispaositivos de entrada
58
Teclados, cajas de botones y botones
de seleccin
58

2.2

2.3
2.4

xix
2

2.5
2.6
2.7
2.8

2.9

2.10

3
3.1

Ratones
Trackballs y spaceballs
Joysticks
Guantes de datos
Digitalizadores
Escneres de imagen
Paneles tactiles
Lapiceros pticos
Sistemas de voz
Dispositivos de copia impresa
Redes grficas
Grficos en Internet
Software grfico
Representaciones con coordenadas
Funciones grficas
Estndares de software
Otros paquetes grficos
Introduccin a OpenGL
Sintaxis bsica de OpenGL
Bibliotecas relacionadas
Archivos de cabecera
Gestin de la ventana de visualizacin
empleando GLUT
Un programa OpenGL completo
Resumen
Referencias
Ejercicios

59
60
61
61
62
64
64
66
67
67
69
69
70
70
72
73
74
74
74
75
76

Primitivas grficas

84

Sistemas de coordenadas de referencia


Coordenadas de pantalla
Especificaciones absolutas y relativas
de coordenadas
3.2 Especificacin de un sistema
bidimensional de referencia
universal en OpenGL

76
78
81
82
82

86
86
87

88

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

viii

09/10/2005

13:23

Pgina viii

Contenido

3.3
3.4
3.5

3.6
3.7
3.8
3.9

3.10

3.11

3.12
3.13

3.14
3.15

Funciones de punto en OpenGL


Funciones OpenGL para lneas
Algoritmos de dibujo de lneas
Ecuaciones de las lneas
Algoritmo DDA
Algoritmo de Bresenham para dibujo
de lneas
Visualizacin de polilneas
Algoritmos paralelos de dibujo de
lneas
Almacenamiento de los valores en el
bfer de imagen
Funciones OpenGL para curvas
Algoritmos para generacin de
crculos
Propiedades de los crculos
Algoritmo del punto medio para
crculos
Algoritmos de generacin de elipses
Propiedades de las elipses
Algoritmo del punto medio para la
elipse
Otras curvas
Secciones cnicas
Polinomios y curvas de tipo spline
Algoritmos paralelos para curvas
Direccionamiento de pxeles y
geometra de los objetos
Coordenadas de cuadrcula de
pantalla
Mantenimiento de las propiedades
geomtricas de los objetos
visualizados
Primitivas de reas rellenas
reas de relleno poligonales
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

88
91
92
92
94
96
100
100
102
103
104
104
106
111
111
113
120
121
123
124
124

3.16 Funciones OpenGL de relleno de


reas poligonales
3.17 Matrices de vrtices OpenGL
3.18 Primitivas de matrices de pxeles
3.19 Funciones OpenGL para matrices de
pxeles
Funcin de mapa de bits de OpenGL
Funcin OpenGL para mapas de
pxeles
Operaciones OpenGL de manipulacin de bferes
3.20 Primitivas de caracteres
3.21 Funciones OpenGL de caracteres
3.22 Particionamiento de imgenes
3.23 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
3.24 Funcin OpenGL de redimensionamiento de la ventana de visualizacin
3.25 Resumen
Programas de ejemplo
Referencias
Ejercicios

Atributos de las primitivas


grficas

4.1
4.2

Variable de estado de OpenGL


Color es escala de grises
Las componentes de color RGB
Tablas de color
Escala de grises
Otros parmetros de color
Funciones de color de OpenGL
Los modos de color RGB y RGBA de
OpenGL
Modo de color indexado de OpenGL
Fundido de color en OpenGL
Matrices de color en OpenGL
Otras funciones de color en OpenGL
Atributos de los puntos
Atributos de las lneas

139
145
148
148
148
150
151
153
155
156
156
156
157
158
158
161
165
173
174
178

124

125
127
128
129
129
130

4.3

131
132
135
136
138

4.4
4.5

180
180
180
181
182
182
183
183
184
185
186
187
188
188

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:23

Pgina ix

Contenido

El grosor de las lneas


Estilo de las lneas
Opciones de plumilla y brocha
4.6 Atributos de las curvas
4.7 Funciones OpenGL para los atributos
de los puntos
4.8 Funciones OpenGL para los atributos
de las lneas
Funcin de grosor de lnea de
OpenGL
La funcin de estilo de lnea de
OpenGL
Otros efectos de lnea de OpenGL
4.9 Atributos de relleno de reas
Estilos de relleno
Relleno de regiones con fundido de
color
4.10 Algoritmo general de relleno de
polgonos mediante lneas de barrido
4.11 Relleno de polgonos convexos
mediante lneas de barrido
4.12 Relleno de regiones con lmites curvos
mediante lneas de barrido
4.13 Mtodos de relleno de reas con
lmites irregulares
Algoritmo de relleno por contorno
Algoritmo de relleno por inundacin
4.14 Funciones OpenGL para atributos de
relleno de reas
Funcin de relleno con patrn de
OpenGL
Patrones de textura e interpolacin de
OpenGL
Mtodos OpenGL para modelos
almbricos
La funcin de cara frontal de OpenGL
4.15 Atributos de los caracteres
4.16 Funciones OpenGL para los atributos
de caracteres
4.17 Suavizado
Supermuestreo de segmentos de lnea
recta
Mscaras de ponderacin de
subpxeles
Muestreo por rea de segmentos de
lnea recta

188
190
191
193
195
196
196
196
198
199
199

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 Funciones OpenGL de suavizado
4.19 Funciones de consulta de OpenGL
4.20 Grupos de atributos de OpenGL
4.21 Resumen
Referencias
Ejercicios

Transformaciones
geomtricas

5.1

Transformaciones geomtricas
bidimensionales bsicas
Traslaciones bidimensionales
Rotaciones bidimensionales
Cambio de escala bidimensional
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

200

202
206

5.2

207
207
207
211
211
212
213
214
216
217
220
220
222
223
224

5.3
5.4

224
225
225
226
228
229
229
230
233
233
236
238
238
240
242
244
245
245
246
246
246
247
248
248
248
249
249
250
251

252

ix

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:23

Pgina x

Contenido

Transformacin bidimensional de
slido-rgido
Construccin de matrices de rotacin
bidimensionales
Ejemplo de programacin de matrices
bidimensionales compuestas
5.5 Otras transformaciones
bidimensionales
Reflexin
Inclinar
5.6 Mtodos de rasterizacin para
transformaciones geomtricas
5.7 Transformaciones de rasterizacin en
OpenGL
5.8 Transformaciones entre sistemas de
coordenadas bidimensionales
5.9 Transformaciones geomtricas en
un espacio tridimensional
5.10 Traslaciones tridimensionales
5.11 Rotaciones tridimensionales
Rotaciones de ejes de coordenadas
tridimensionales
Rotaciones tridimensionales generales
Mtodos de cuaternios para
rotaciones tridimensionales
5.12 Cambio de escala tridimensional
5.13 Transformaciones compuestas
tridimensionales
5.14 Otras transformaciones
tridimensionales
Reflexiones tridimensionales
Inclinaciones tridimensionales
5.15 Transformaciones entre sistemas de
coordenadas tridimensionales
5.16 Transformaciones afines
5.17 Funciones de transformaciones
geomtricas en OpenGL
Transformaciones bsicas en OpenGL
Operaciones con matrices en OpenGL
Pilas de matrices en OpenGL
Ejemplos de programas de
transformaciones geomtricas
OpenGL
5.18 Resumen
Referencias
Ejercicios

253

Visualizacin
bidimensional

254

6.1

255

6.2

Pipeline de visualizacin
bidimensional
305
La ventana de recorte
307
Ventana de recorte en coordenadas
de visualizacin
308
Ventana de recorte en coordenadas
universales
308
Normalizacin y transformaciones
de visor
309
Mapeo de la ventana de recorte en
un visor normalizado
310
Mapeo de la ventana de recorte a un
cuadrado normalizado
311
Visualizacin de cadenas de caracteres 313
Efectos de divisin de pantalla y
mltiples dispositivos de salida
313
Funciones de visualizacin bidimensional de OpenGL
314
Modo de proyeccin de OpenGL
314
Funcin de ventana de recorte de
GLU
314
Funcin de visor de OpenGL
315
Creacin de una ventana de
visualizacin con GLUT
315
Establecimiento del modo y del color
de la ventana de visualizacin
con GLUT
316
Identificador de la ventana de
visualizacin con GLUT
316
Borrado de una ventana de
visualizacin con GLUT
316
Ventana de visualizacin actual
con GLUT
317
Reposicionamiento y cambio de
tamao de una ventana de
visualizacin con GLUT
317
Gestin de mltiples ventanas de
visualizacin con GLUT
317
Subventanas de GLUT
318
Seleccin de la forma del cursor de
pantalla en una ventana de
visualizacin
318
Visualizacin de objetos grficos en
una ventana de visualizacin de GLUT 319

260
260
263

6.3

265

266

267
270
270
271

6.4

272
274

280
284

287

290
290
290
291
292
292
293
293
295

296
299
301
301

304

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:23

Pgina xi

Contenido

Ejecucin del programa de aplicacin


Otras funciones de GLUT
Ejemplo de programa de visualizacin
bidimensional en OpenGL
6.5 Algoritmos de recorte
6.6 Recorte de puntos bidimensionales
6.7 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 polgonales 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

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

319
319
320
322
323
323
324
330
333
335
335
336
338
343

345

345
346
347
349
352
352

354

355
355
356
356
358
358
359

Visualizacin tridimensional y
estereoscpica
360
7.2 Pipeline de visualizacin
tridimensional
360
7.3 Parmetros de coordenadas de
visualizacin tridimensional
362
Vector normal del plano de
visualizacin
362
El vector vertical
363
Sistema de referencia de coordenadas
de visualizacin uvn
363
Generacin de efectos de visualizacin
tridimensionales
364
7.4 Transformacin de coordenadas
universales a coordenadas de
visualizacin
366
7.5 Transformaciones de proyeccin
368
7.6 Proyecciones ortogonales
368
Proyecciones ortogonales
axonomtricas e isomtricas
369
Coordenadas de proyeccin ortogonal 369
Ventana de recorte y volumen de
visualizacin de proyeccin ortogonal 370
Transformacin de normalizacin
para una proyeccin ortogonal
372
7.7 Proyecciones paralelas oblicuas
374
Proyecciones paralelas oblicuas en
diseo
374
Perspectivas caballera y cabinet
376
Vector de proyeccin paralela oblicua 376
Ventana de recorte y volumen de
visualizacin de proyeccin paralela
oblicua
377
Matriz de transformacin para
proyeccin paralela oblicua
378
Transformacin de normalizacin
para una proyeccin paralela oblicua 379
7.8 Proyecciones en perspectiva
379
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
383
Volumen de visualizacin para
proyeccin en perspectiva
383

xi

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

xii

09/10/2005

8.1
8.2

Pgina xii

Contenido

Matriz de transformacin para la


proyeccin en perspectiva
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
Recorte en coordenadas homogneas
tridimensionales
Cdigos de regin tridimensional
Recorte tridimensional de puntos y
lneas
Recorte de polgonos tridimensionales
Recorte de curvas tridimensionales
Planos de recorte arbitrarios
7.12 Planos de recorte ocpionales en
OpenGL
7.13 Resumen
Referencias
Ejercicios

13:23

Representaciones de objetos
tridimensionales

385
386
390

392
395
396
396
397
398
398
399
399
401
402
402
403
406
407
407
409
410
412
412

414

Poliedros
416
Funciones para poliedros en OpenGL 416
Funciones de reas de relleno de
polgonos en OpenGL
416

Funciones para poliedros regulares


de GLUT
Ejemplo de programa de poliedros
con GLUT
8.3 Superficies curvadas
8.4 Superficies cudricas
Esfera
Elipsoide
Toro
8.5 Supercudricas
Superelipse
Superelipsoide
8.6 Funciones OpenGL para superficies
cudricas y superficies cbicas
Funciones para superficies cudricas
de GLUT
Funcin de GLUT para la generacin
de una tetera con una superficie
cbica
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 Obejtos din forma (blobby)
8.8 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
Ecuaciones de las curvas de Bzier
Ejemplo de un programa de
generacin de curvas de Bzier
Propiedades de las curvas de Bzier

416
418
420
420
420 .
421
421
422
422
423
424
424

425
425

428
429
431
432
434
434
435
436
437
437
438
438
441
444
445
445
446
450

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:23

Pgina xiii

Contenido

Tcnicas de diseo utilizando curvas


de Bzier
Curvas de Bzier cbicas
8.11 Superficies de Bzier
8.12 Curvas con splines B
Ecuaciones de una curva con splines B
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 Superficies con splines B
8.14 Splines Beta
Condiciones de continuidad de los
splines Beta
Representacin matricial de splines
beta cbicos y peridicos
8.15 Splines racionales
8.16 Conversin entre representaciones de
splines
8.17 Visualizacin de curvas y superficies
con splines
Regla de Horner
Clculos de diferencias hacia adelante
Mtodos de subdivisin
8.18 Funciones OpenGL de aproximacin
con splines
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 Representaciones de barrido
8.20 Mtodos de geometra constructiva
de slidos
8.21 rboles octales
8.22 rboles BSP
8.23 Mtodos de geometra fractal

450
451
454
454
454
457
460
461
464
464
465
465
466
467
469
470
470
471
472
474
474
477

Procedimientos para generacin de


fractales
Clasificacin de fractales
Dimensin fractal
Construccin geomtrica de fractales
deterministas autosimilares
Construccin geomtrica de fractales
estadsticamente autosimilares
Mtodos de construccin de fractales
afines
Mtodos de desplazamiento aleatorio
del punto medio
Control de la topografa del terreno
Fractales autocuadrticos
Fractales autoinversos
8.24 Gramticas de formas y otros
mtodos procedimentales
8.25 Sistemas de partculas
8.26 Modelado basado en las caractersticas fsicas
8.27 Visualizacin de conjuntos de datos
Representaciones visuales de campos
escalares
Representaciones visuales de campos
vectoriales
Representaciones visuales de campos
de tensores
Representaciones visuales de campos
de datos multivariantes
8.28 Resumen
Referencias
Ejercicios

Mtodos de deteccin de
superficies visibles

9.1

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 barrido
Mtodo de orientacin de la
profundidad
Mtodo del rbol BSP
Mtodo de la subdivisin de reas

480
482
484
485
486
489
492
492

9.2
9.3
9.4
9.5
9.6
9.7
9.8

xiii

493
494
494
497
499
501
504
506
507
519
521
524
526
529
529
533
535
536
537
540
542
546

547
548
549
553
554
556
558
559

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

xiv

09/10/2005

13:23

Contenido

9.9 Mtodos de rboles octales


562
9.10 Mtodo de proyeccin de rayos
563
9.11 Comparacin de los mtodos de
deteccin de visibilidad
564
9.12 Superficies curvas
565
Representacin de superficies curvas
565
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
Funciones OpenGL de eliminacin
de polgonos
569
Funciones OpenGL de gestin del
bfer de profundidad
569
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

10

Pgina xiv

Modelos de iluminacin y
mtodos de representacin
superficial

10.1 Fuentes luminosas


Fuentes luminosas puntuales
Fuentes luminosas infinitamente
distantes
Atenuacin radial de la intensidad
Fuentes de luz direccionales y efectos
de foco
Atenuacin angular de la intensidad
Fuentes luminosas complejas y el
modelo de Warn
10.2 Efectos de iluminacin superficial
10.3 Modelos bsicos de iluminacin
Luz ambiente
Reflexin difusa

576
578
578
579
579
580
581
582
583
584
584
584

Reflexin especular y modelo de


Phong
Reflexiones difusa y especular
combinadas
Reflexiones especular y difusa para
mltiples fuentes luminosas
Emisin de luz superficial
Modelo bsico de iluminacin con focos y con atenuacin de la intensidad
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 Efectos atmosfricos
10.6 Sombras
10.7 Parmetros de la cmara
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
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
Clculos de interseccin entre rayos y
superficie
Intersecciones entre rayos y esferas

588
592
592
592
594
594
596
596
597
597
598
600
601
601
602
602
603
604
605
606
607
610
613
614
614
617
617
618
620
622
623

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:23

Pgina xv

Contenido

Intersecciones entre rayos y poliedros


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
10.12 Modelo de iluminacin de radiosidad
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
10.15 Adicin de detalles a las superficies
10.16 Modelado de los detalles superficiales
mediante polgonos
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
Especificacin de la posicin y el tipo
de una fuente luminosa en OpenGL
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

625
626
626
630
632
634
638
638
639
643
646
646
647
650
650
650
651
654
655
655
656
658
659
659
659
660

661
661
662
664
665
665
666

Funciones de representacin
superficial OpenGL
Operaciones de semitonos en
OpenGL
10.21 Funciones de texturas en OpenGL
Funciones OpenGL para texturas
lineales
Funciones OpenGL para texturas
superficiales
Funciones OpenGL para texturas
volumtricas
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
Subpatrones de textura en OpenGL
Patrones de reduccin de texturas en
OpenGL
Bordes de texturas en OpenGL
Texturas proxy en OpenGL
Texturado automtico de superficies
cudricas
Coordenadas de textura homogneas
Opciones adicionales para texturas en
OpenGL
10.22 Resumen
Referencias
Ejercicios

11

Mtodos interactivos de
entrada e interfaces
grficas de usuario

11.1 Datos de entrada grficos


11.2 Clasificacin lgica de los dispositivos
de entrada
Dispositivos localizadores
Dispositivos de trazo
Dispositivos de cadena de caracteres

xv

667
668
668
669
672
673
674
674
675
675
676
676
677
677
678
679
679
679
680
680
683
684

688
689
689
690
690
690

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

xvi

09/10/2005

13:23

Pgina xvi

Contenido

11.3

11.4

11.5
11.6

11.7

11.8

Dispositivos evaluadores
Dispositivos de eleccin
Dispositivos de seleccin
Funciones de entrada para datos
grficos
Modos de entrada
Realimentacin mediante eco
Funciones de retrollamada
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
Entornos de realidad virtual
Funciones OpenGL para dispositivos
de entrada interactiva
Funciones de ratn GLUT
Funciones de teclado GLUT
Funciones GLUT para tabletas
grficas
Funciones GLUT para una spaceball
Funciones GLUT para cajas de
botones
Funciones GLUT para diales
Operaciones de seleccin en OpenGL
Funciones de men OpenGL
Creacin de un men GLUT
Creacin y gestin de mltiples
mens GLUT
Creacin de submens GLUT
Modificacin de los mens GLUT
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
Cancelacin de acciones y tratamiento
de errores

690
691
692
694
694
695
695
695
695
696
696
696
696
698
699
699
700
700
705
710
710
711
711
711
717
717
720
720
723
724
724
724
725
726
726
726

Realimentacin
11.9 Resumen
Referencias
Ejercicios

12

Modelos y aplicaciones
del color

12.1

12.2

12.3

Propiedades de la luz
El espectro electromagntico
Caractersticas psicolgicas del color
Modelos de color
Colores primarios
Conceptos intuitivos del color
Primarios estndar y diagrama
cromtico
El modelo de color XYZ
Valores XYZ normalizados
Diagrama cromtico de la CIE
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 YCrCb
Los modelos de color CMY y CMYK
Los parmetros CMY
Transformaciones entre los espacios
de color CMY y RGB
El modelo de color HSV
Los parmetros HSV
Seleccin de sombras, tintas y
tonalidades
Transformaciones entre los espacios
de color HSV y RGB
El modelo de color HLS
Seleccin y aplicaciones del color
Resumen
Referencias
Ejercicios

12.4
12.5

12.6

12.7

12.8
12.9
12.10

726
727
730
730
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

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

09/10/2005

13:23

Pgina xvii

Contenido

13

Animacin por computadora

754

13.1 Mtodos de barrido para las


animaciones por computadora
Doble bfer
Generacin de animaciones mediante
operaciones de barrido
13.2 Diseo de secuencias de animacin
13.3 Tcnicas tradicionales de animacin
13.4 Funciones generales de animacin
por computadora
13.5 Lenguajes de animacin por computadora
13.6 Sistemas de forogramas clave
Morfismo
Simulacin de aceleraciones
13.7 Especificaciones de movimientos
Especificacin directa del movimiento
Sistemas dirigidos por objetivos
Cinemtica y dinmica
13.8 Animacin de figuras articuladas
13.9 Movimientos peridicos
13.10 Procedimientos de animacin en
OpenGL
13.11 Resumen
Referencias
Ejercicios

14

Modelado jerrquico

14.1

14.2
14.3

Conceptos bsicos de modelado


Representaciones de los sistemas
Jerarquas de smbolos
Paquetes de modelado
Mtodos generales de modelado
jerrquico
Coordenadas locales
Transformaciones de modelado
Creacin de estructuras jerrquicas
Modelado jerrquico mediante listas
de visualizacin OpenGL
Resumen
Referencias
Ejercicios

14.4
14.5

756
756
757
757
759
760
760
761
762
764
767
767
768
768
769
771
772
775
776
777

778
779
779
781
782
784
784
785
785
787
787
788
788

15

Formatos de archivos
grficos

15.1 Configuraciones de archivos de


imagen
15.2 Mtodos de reduccin de color
Reduccin uniforme de color
Reduccin de color por popularidad
Reduccin de color de corte medio
15.3 Tcnicas de compresin de archivos
Codificacin de longitud de recorrido
Codificacin LZW
Otros mtodos de compresin
mediante reconocimiento de patrones
Codificacin Huffman
Codificacin aritmtica
Trasformada discreta del coseno
15.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 y XPM: X Window System
Pixmap Format
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
15.5 Resumen
Referencias
Ejercicios

Matemticas para grficos


por computadora

A.1

Sistemas de coordenadas

xvii

790

791
792
792
792
793
793
794
794
795
795
798
799
801
801
803
803
803

804
804
804
804
805
805
805
805
805
806
806

809
809

AA_01_CONTENIDO_HEARN_1P_2columnas.qxd

xviii

09/10/2005

13:23

Pgina xviii

Contenido

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
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 Tensores
A.4 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
Inversa de una matriz
A.6 Nmeros complejos
Aritmtica compleja bsica
Unidad imaginaria
Conjugado complejo y mdulo de un
nmero complejo
Divisin compleja
Representacin en coordenadas
polares de un nmero complejo
A.7 Cuaternios
A.8 Representaciones no paramtricas
A.9 Representaciones paramtricas
A.10 Operadores diferenciales
Operador gradiente

809
809
810
811
812
812
814
814
814
814
816
816
817
818
818

A.11

A.12

A.13
A.14

819
820
820
821

822
822
823
823
824
824
825
825
826
826
826
827
828
829
829
830

Derivada direccional
831
Forma general del operador gradiente 831
Operador de Laplace
831
Operador divergencia
832
Operador rotacional
832
Teoremas de transformacin
integrales
833
Teorema de Stokes
833
Teorema de Green para una
superficie plana
833
Teorema de divergencia
835
Ecuaciones de transformacin
de Green
835
rea y centroide de un polgono
835
rea de un polgono
836
Centroide de un polgono
836
Clculo de las propiedades de los
poliedros
838
Mtodos numricos
839
Resolucin de sistemas de ecuaciones
lineales
839
Determinacin de races de ecuaciones
no lineales
841
Evaluacin de integrales
842
Resolucin de ecuaciones
diferenciales ordinarias
844
Resolucin de ecuaciones
diferenciales parciales
845
Mtodos de ajuste de curvas por
mnimos cuadrados para conjuntos
de datos
846
Bibliografa

849

ndice

867

ndice de funciones OpenGL

893

AA_02_PREFACIO_HEARN_1P.qxd

09/10/2005

13:24

Pgina xix

Prefacio
La infografa, es decir, los 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 infografa 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.

Caractersticas de la tercera edicin


El material de esta tercera edicin ha evolucionado a partir de una serie de notas utilizadas en diversos cursos que hemos impartido a lo largo de los aos, incluyendo cursos de introduccin a la infografa, infografa
avanzada, visualizacin cientfica, temas especiales y cursos de proyecto. Cuando escribimos la primera edicin de este libro, muchos aplicaciones y muchos cursos sobre grficos slo trataban con mtodos bidimensionales, as que decidimos separar las explicaciones relativas a las tcnicas grficas bidimensionales y
tridimensionales. En la primera parte del libro se proporcionaba una slida base sobre los procedimientos
infogrficos bidimensionales, mientras que los mtodos tridimensionales se analizaban en la segunda mitad.
Ahora, sin embargo, las aplicaciones grficas tridimensionales resultan comunes y muchos cursos introductorios a la infografa tratan principalmente con mtodos tridimensionales o introducen los grficos tridimensionales en una etapa relativamente temprana. Por tanto, una de las principales caractersticas de esta tercera
edicin es la integracin de los temas relativos a grficos tridimensionales y bidimensionales.
Tambin hemos ampliado el tratamiento de la mayora de los temas para incluir anlisis de desarrollos
recientes y nuevas aplicaciones. Los temas generales que se cubren en esta tercera edicin incluyen: componentes hardware y software actuales de los sistemas grficos, geometra fractal, trazado de rayos, splines,
modelos de iluminacin, representacin de superficies, iluminacin por computadora, realidad virtual, implementaciones paralelas de algoritmos grficos, antialiasing, supercudricas, rboles BSP, sistemas de partculas, modelado fsico, visualizacin cientfica, radiosidad, mapeado de relieve y morfismo. Algunas de las
principales reas de ampliacin son la animacin, las representaciones de objetos, la pipeline de visualizacin tridimensional, los modelos de iluminacin, las tcnicas de representacin superficial y el mapeado de
texturas.
Otro cambio importante en esta tercera edicin es la introduccin del conjunto de rutinas grficas
OpenGL, que ahora se utiliza ampliamente y que est disponible en la mayora de los sistemas informticos.

AA_02_PREFACIO_HEARN_1P.qxd

xx

09/10/2005

13:24

Pgina 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 bibliotecas 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 cilndricas, 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 mens y submens y las tcnicas de animacin. Adems, se proporcionan ms
de 100 fragmentos de programas C/OpenGL 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.

Estructuraciones sugeridas para el curso


Para un curso de un semestre, puede elegirse un subconjunto de temas que traten acerca de los mtodos bidimensionales o de una combinacin de mtodos bidimensionales y tridimensionales, dependiendo de las necesidades de cada curso concreto. Un curso de dos semestres puede cubrir los conceptos grficos bsicos y los
algoritmos en el primer semestre y los mtodos tridimensionales avanzados en el segundo. Para el lector autodidacta, los captulos iniciales pueden usarse para comprender los conceptos grficos, suplementando estos
conceptos con temas seleccionados de los captulos posteriores.
En los primeros cursos universitarios, puede organizarse un curso de introduccin a la infografa utilizando materiales seleccionados de los Captulos 2 a 6, 11 y 13. Pueden elegirse las adecuadas secciones de estos
captulos para cubrir nicamente los mtodos bidimensionales, o bien pueden aadirse temas relativos a los
grficos tridimensionales extrados de estos captulos, junto con determinado materiales de los Captulos 7 y
10. Otros temas, como las representaciones fractales, las curvas splines, el mapeado de texturas, los mtodos
basados en bfer de profundidad o los modelos de color, pueden introducirse en un primer curso sobre infografa. Para los cursos universitarios posteriores de carcter introductorio, puede hacerse ms nfasis en la
visualizacin tridimensional, el modelado tridimensional, los modelos de iluminacin y los mtodos de representacin de superficies. En general, sin embargo, una secuencia de dos semestres constituye un mejor marco

AA_02_PREFACIO_HEARN_1P.qxd

09/10/2005

13:24

Pgina xxi

Prefacio

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 prerrequisito, centrando esos curso en una o dos reas seleccionadas como por ejemplo tcnicas de visualizacin, geometra fractal, mtodos basados en splines, trazado de rayos, radiosidad y
animacin por computadora.
El Captulo 1 ilustra la diversidad de aplicaciones infogrficas 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
sistemas 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 grficos 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 otras formas, y queramos de forma expresa disculparnos con todas aquellas personas a las que nos
hayamos olvidado de mencionar. Damos nuestro agradecimiento a Ed Angel, Norman Badler, Phillip Barry,
Brian Barsky, Hedley Bond, Bart Braden, Lara Burton, Robert Burton, Greg Chwelos, John Cross, Steve
Cunningham, John DeCatrel, Victor Duvaneko, Gary Eerkes, Parris Egbert, Tony Faustini, Thomas Foley,
Thomas Frank, Don Gillies, Andrew Glassner, Jack Goldfeather, Georges Grinstein, Eric Haines, Robert
Herbst, Larry Hodges, CarolHubbard, Eng-Kiat Koh,MikeKrogh, Michael Laszlo, Suzanne Lea, Michael
May, Nelson Max, David McAllister, Jeffrey McConnell, Gary McDonald, C. L. Morgan, Greg Nielson,
James Oliver, Lee-Hian Quek, Laurence Rainville, Paul Ross, David Salomon, Gnther Schrack, Steven
Shafer, Cliff Shaffer, Pete Shirley, Carol Smith, Stephanie Smullen, Jeff Spears,WilliamTaffe,WaiWanTsang,
Spencer Thomas, Sam Uselton, David Wen, Bill 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 Holm 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

AA_02_PREFACIO_HEARN_1P.qxd

xxii

09/10/2005

13:24

Pgina xxii

Prefacio

OBrien, Patricia Burns, Kathy Ewing y David Abel; agradecemos de verdad su valiosa ayuda y su cuidada
atencin al detalle.

Advertencia al 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.

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 1

Grficos por computadora


con OpenGL

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 2

CAPTULO 1

Introduccin a los grficos


por computadora

Una escena de una pelcula de dibujos animados generada por computadora


de Saguaro-Entertainer. (Cortesa de SOFTIMAGE, Inc.)

Cap01_HEARN_1P.qxd

1.1
1.2
1.3
1.4
1.5

27/09/2005

13:53

Pgina 3

Grficos y diagramas
Diseo asistido por computadora
Entornos de realidad virtual
Visualizacin de datos
Educacin y formacin

1.6
1.7
1.8
1.9
1.10

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
sectores. Aunque 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, formacion 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.

1.1 GRFICOS Y DIAGRAMAS


Las primeras aplicaciones de los grficos por computadora fueron para visualizar grficos de datos que, frecuentemente, se imprimian con impresoras de caracteres. Todava la representacin grfica de datos es una de
las aplicaciones ms comunes, pero hoy podemos generar fcilmente grficos que muestren complejas relaciones entre datos para realizar informes escritos o para presentarlos mediante diapositivas, transparencias o
animaciones en video. Los grficos y los diagramas se usan comnmente para realizar resmenes financieros,
estadsticos, matemticos, cientficos, de ingeniera y econmicos, para realizar informes de investigacin,
resmenes de gestin, boletines de informacin al consumidor y otros tipos de publicaciones. Hay disponibles una gran variedad de paquetes grficos y de dispositivos para estaciones de trabajo, as como servicios
comerciales para convertir imgenes generadas en la pantalla de una computadora en pelculas, diapositivas
o transparencias para presentaciones o para guardar en archivos. Ejemplos tpicos de visualizacin de datos
son los diagramas lineales, de barras, los diagramas de tarta, grficos de superficie, diagramas de contorno y
otras muchas representaciones en las que se muestran las relaciones entre mltiples parmetros en espacios
de dos, tres o ms dimensiones.
Las Figuras 1.1 y 1.2 muestran ejemplos de representaciones de datos en dos dimensiones. Estas dos figuras presentan ejemplos bsicos de grficos lineales, diagramas de barras y diagramas de tarta. En este ltimo
podemos ver cmo se resalta la informacin desplazando radialmente las diferentes secciones produciendo un
diagrama de tarta en explosin.
Los diagramas y grficos tridimensionales se usan para mostrar informacin adicional, aunque algunas
veces simplemente se usan para causar efecto, dando mayor dramatismo y haciendo ms atractivas las presentaciones de relaciones entre datos. La Figura 1.3 muestra un diagrama de barras 3D combinado con informacin geogrfica. La Figura 1.4 proporciona ejemplos de grficos trimensionales con efectos dramticos.

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 4

CAPTULO 1 Introduccin a los grficos por computadora

Otro ejemplo de graficos de datos 3D 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 1.6 muestra un diagrama de tiempos para la planificacin de tareas. Los diagramas de tiempo y
los grafos de planificacin de tareas se usan para la direccin de proyectos y para monitorizar y ordenar en el
tiempo el progreso de los mismos.

FIGURA 1.1. Ejemplos de grficos por computadora


utilizados en diversas reas. (Cortesa de DICOMED Corporation.)

FIGURA 1.2. Grficos bidimensionales de lnea, diagramas de barras y diagramas de tarta. (Cortesa de
UNIRAS, INC.)

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 efecto dramtico. (Reimpreso con permiso de ISSCO Graphics,
San Diego, California.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 5

1.2 Diseo asistido por computadora

FIGURA 1.5. Representacin de contornos bidimensionales en un plano de tierra, con un campo de potencial. (Reimpreso con permiso de ISSCO 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)

1.2 DISEO ASISTIDO POR COMPUTADORA


Uno de los mayores usos de los grficos por computadora se encuentra en los procesos de diseo, particularmente en arquitectura e ingeniera, aunque ahora muchos productos se disean por computadora.
Generalmente, se conoce como (CAD, Computer Aided Design, diseo asistido por computadora) o CADD
(Computer Aided Drafting and Design). Estos mtodos se emplean rutinariamente en el diseo de edificios,
automviles, aeronaves, barcos, naves espaciales, computadoras, telas, electrodomsticos y muchos otros productos.
En algunas aplicaciones de diseo, los objetos se visualizan primero en su modelo almbrico mostrando
su forma general y sus caractersticas internas. El modelo almbrico permite a los diseadores ver rpidamente los efectos de los ajustes interactivos que se hacen en las formas sin esperar a que la superficie completa
de los objetos est completamente generada. Las Figuras 1.7 y 1.8 proporcionan ejemplos de modelos almbricos en aplicaciones de diseo.

FIGURA 1.7. Modelo almbrico con cdigo de colores de


ensamblado de una rueda de automvil. (Cortesa de Evans
y Sutherland.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 6

CAPTULO 1 Introduccin a los grficos por computadora

(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.)

(a)

(b)

FIGURA 1.9. Estaciones de trabajo CAD con mltiples ventanas. (Cortesa de Intergraph Corporation.)

Los paquetes de software CAD suelen proporcionar al diseador un entorno 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 posicionadas en el plano y unidas automticamente entre s 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.

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 7

1.2 Diseo asistido por computadora

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 luz 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.)

(a)

FIGURA 1.11. Simulacin del comportamiento de un vehculo al cambiar de carril. (Cortesa de Evans & Sutherland
y Mechanical Dynamics, Inc.)

(b)

FIGURA 1.12. Presentaciones realistas de diseos de ingeniera. (Cortesa de (a) Intergraph Corporation (b) Evans &
Sutherland.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 8

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.13. Mediante software grfico se aplican efectos 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
Laser 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.)

FIGURA 1.15. Esquema CAD


de arquitectura para el diseo
de un edificio. (Cortesa de
Precision Visuals, Inc Boulder,
Colorado.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 9

1.2 Diseo asistido por computadora

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.
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 que 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.

(a)

(b)

FIGURA 1.16. Presentaciones realistas tridimensionales de diseos de edificios. (a) Una perspectiva a nivel de calle del
proyecto de un centro de negocios. (Cortesa de Skidmore, Owings & Merrill). (b) Visualizacin arquitectnica de un
atrio creado para una animacin por computadora por Marialine Prieur, Lyon, Francia. (Cortesa de Thomson Digital
Image, Inc)

FIGURA 1.17. Un pasillo de un hotel que proporciona la sensacin de movimiento mediante el posicionamiento 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 habitacin.(Cortesa de Skidmore, Owings & Merrill.)

Cap01_HEARN_1P.qxd

10

27/09/2005

13:53

Pgina 10

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.18. Patrn de alfombra oriental creado con


mtodos de diseo con grficos por computadora.
(Cortesa de la Lexidata Corporation).

1.3 ENTORNOS DE REALIDAD VIRTUAL


Una aplicacin ms reciente de los grficos por computadora es la creacin de los entornos de realidad virtual en los que el usuario puede interactuar con los objetos en una escena tridimensional. Dispositivos hardware especializados proporcionan efectos de visin tridimensional y permiten al usuario tomar los objetos de
la escena. Los entornos de realidad virtual animados se usan frecuentemente para formar a los operadores de
equipo pesado o para analizar la efectividad de diferentes configuraciones de cabina y localizaciones de control. Mientras el operador del tractor de la Figura 1.19 manipula los controles, el equipo de la cabeza presenta una visin estereoscpica (Figura 1.20) de la pala delantera o del cazo trasero, como si el operador estuviera
en el asiento del tractor. Esto permite al diseador explorar varias posiciones para la pala o el cazo trasero que
pudieran entorpecer la visin del operador, lo que puede tenerse en cuenta para el diseo global del tractor.
La Figura 1.21 muestra una vista compuesta con un ngulo de visin amplio desde el asiento del tractor, visualizada en un monitor estndar de video en lugar de una escena tridimensional virtual. La Figura 1.22 muestra
una vista del tractor que puede visualizarse en una ventana separada o en otro monitor.

FIGURA 1.19. Prcticas con un


tractor en un entorno de realidad
virtual. Cuando 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 for Supercomputing Applications, Universidad de Illinois en
Urbana-Champaign y Caterpillar,
Inc.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 11

1.3 Entornos de realidad virtual

11

FIGURA 1.20. Una vista en el visiocasco del cazo


trasero presentada al operador del tractor en un
entorno 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 de gran angular en un monitor estndar.
(Cortesa de National Center for Supercomputing
Applications, Universidad de Illinois en UrbanaChampaign 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
interactuar con los objetos de diferentes maneras. Los diseos arquitectnicos pueden examinarse mediante
un paseo 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.

Cap01_HEARN_1P.qxd

12

27/09/2005

13:53

Pgina 12

CAPTULO 1 Introduccin a los grficos por computadora

1.4 VISUALIZACIN DE DATOS


La generacin de representaciones grficas de conjuntos de datos o procesos de naturaleza cientfica, de ingeniera o de medicina es otra nueva aplicacin de los grficos por computadora. Generalmente, esto se conoce
como visualizacin cientfica. Y el trmino visualizacin de negocios se usa para conjuntos de datos relacionados con el comercio, la industria y otras reas no cientficas.
Investigadores, analistas y dems, frecuentemente necesitan tratar con grandes cantidades de informacin
o estudiar el comportamiento de procesos de elevada complejidad. Las simulaciones numricas por computadora, por ejemplo, normalmente, producen grandes cantidades de archivos de datos que contienen miles o
incluso millones de valores. De modo similar, las cmaras de un satlite u otras fuentes de grabacin acumulan archivos de datos ms rpido de lo que pueden ser interpretados. Rastrear estos grandes conjuntos de
nmeros para determinar tendencias y relaciones es un proceso tedioso y totalmente inefectivo. Sin embargo,
si los datos se convierten a una formato grfico, las tendencias y relaciones aparecen inmediatamente. La
Figura 1.23 muestra un ejemplo de un gran conjunto de valores que han sido convertidos en una visualizacin
codificada mediante colores de alturas relativas sobre un plano de tierra. Una vez que hemos representado los
valores de densidad en esta forma, podemos ver el patrn global de los datos.

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 de 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.
Prueitt, 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)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 13

1.4 Visualizacin de datos

13

Existen muchas clases distintas de conjuntos de datos, por lo que los esquemas de visualizacin 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 datos.
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 fractales usando cuaternios. En la Figura 1.27 se muestra una estructura topolgica.
Los cientficos estn desarrollando mtodos para la visualizacin de datos 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 vdeo de dos dimensiones,
con cdigo de colores. El objeto se gener utilizando cuaternios y procedimientos cuadrticos de fractales, con un octante subtrazado para mostrar
la complejidad del conjunto de Julia. (Cortesa de John C. Hart, Departamento de Ciencias de la Computacin, Universidad de Illinois, UrbanaChampaign.)

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 eucldeo tridimensional. (Cortesa de George Francis, Departamento de
Matemticas y del National Center for Supercomputing Applications, Universidad de Illinois, Urbana-Champaign. 1993.)

Cap01_HEARN_1P.qxd

14

27/09/2005

13:53

Pgina 14

CAPTULO 1 Introduccin a los grficos por computadora

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 Hultquist y
Eric Raible, NASA Ames. (Cortesa de Sam
Uselton, Nasa Ames Research Center.)

FIGURA 1.30. Modelo numrico de las corrientes de aire dentro de una tormenta. (Cortesa de
Bob 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 fluyendo 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 fluido 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.

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 15

1.4 Visualizacin de datos

15

FIGURA 1.31. Modelo numrico de la superficie


de una tormenta.(Cortesa de Bob Wilhelmsom,
Departamento de Ciencias Atmosfricas y del
National Center for Supercomputing Applications, Universidad de Illinois, UrbanaChampaign.)

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. (Cortesa del National Center for Supercomputing
Applications, Universidad de Illinois, Urbana-Champaign.)

FIGURA 1.33. Simulacin de la dinmica de un


fluido, 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-Hian Quek,
John Eickemeyer y Jeffery Tan. (Cortesa de
Information Technology Institute, Republica de
Singapur.)

Cap01_HEARN_1P.qxd

16

27/09/2005

13:53

Pgina 16

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.34. Software cortador de secciones, mostrando valores con cdigo de colores sobre las secciones
transversales de un conjunto de datos. (Cortesa de
Spyglass, Inc.)

FIGURA 1.35. Visualizacin de la estructura de una protena creada por Jay Siegel y Kim Baldridge, SDSC.
(Cortesa de Stephanie Sides, Supercomputer Center de
San Diego.)

FIGURA 1.36. Cientfico interactuando con vistas esteroscpicas de estructuras moleculares dentro de un entorno de realidad virtual, llamado CAVE, caverna. (Cortesa de William Sherman y de National Center for Supercomputing
Applications, Universidad de Illinois, Urbana-Champaign.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 17

1.4 Visualizacin de datos

17

FIGURA 1.37. Imagen de un par esteroscpico, que muestra la visualizacin de suelo ocenico, obtenida de las imgenes
de un satlite, creada por David Sandwell y Chris Small, Institucin Scripps de la Oceanografa y Jim Mcleod, SDSC.
(Cortesa de Stephanie Sides, San Diego Supercomputer Center.)

FIGURA 1.38. Simulacin de los efectos de los incendios en los pozos petrolferos de Kuwait, desarrollada por Gary
Glatzmeier, Chuck Hanson y Paul Hinker. (Cortesa de Mike Krogh, Advanced Computing Laboratory en Los Alamos
National Laboratory.)

Cap01_HEARN_1P.qxd

18

27/09/2005

13:53

Pgina 18

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.39. Visualizacin de la contaminacin sobre la superficie de la tierra diseada por Tom Palmer, Cray Research
Inc. /NCSC, Chris Landreth, NCSC, and Dave Bock, NCSC. El contaminante SO4 se representa con color azul, la precipitacin de la lluvia cida es un color plano en el mapa de la superficie, y la concentracin de lluvia se representa como
cilindros huecos. (Cortesa del Supercomputing Center/ MCNC de Carolina del Norte.)

FIGURA 1.40. Un marco de la animacin que muestra


el crecimiento de una mazorca de maz. (Cortesa de
National Center for Supercomputing Applications,
Universidad de Illinois, Urbana-Champaign.)

FIGURA 1.41. Visualizacin de la reconstruccin de


las ruinas del Caon del Chaco en Arizona. (Cortesa
de Melvin L. Prueitt, Los Alamos National Laboratory.
Datos proporcionados por Stephen H. Lekson.)

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 19

1.5 Educacin y formacin

19

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, Republica 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.)

1.5 EDUCACIN Y FORMACIN


Los modelos generados por computadora de sistemas fsicos, financieros, polticos, sociales, econmicos y
otros se usan frecuentemente como ayudas para la educacin. Modelos de procesos fsicos, psicolgicos, tendencias de la poblacin, equipamiento, como el diagrama codificado de colores (en escala de grises en la imagen) de la Figura 1.43, puede ayudar a los alumnos a comprender la operacin de un sistema.
En algunas aplicaciones de formacin se necesitan equipos especiales de hardware. Ejemplos de este tipo
de sistemas son los simuladores para las sesiones prcticas de formacin de capitanes de barco, pilotos de
aeronaves, operadores de maquinaria pesada, personal del control de trfico areo. Algunos simuladores no
tienen pantallas de video, como por ejemplo, un simulador de vuelo con slo un panel instrumental de vuelo.
Pero la mayora de los simuladores proporcionan pantallas para mostrar visualizaciones del entorno exterior.
Dos ejemplos de grandes simuladores con sistemas internos de visualizacin se muestran en las Figuras 1.44
y 1.45. Otro tipo de sistemas de visualizacin lo tenemos en las Figuras 1.46(b) y(c). En este caso, se monta
una pantalla de visualizacin enfrente del simulador y proyectores en color muestran la escena del vuelo en
paneles de pantallas. La Figura 1.47 muestra la zona que puede estar situada detrs de la cabina del piloto del
simulador de vuelo. El teclado lo usa el instructor para introducir parmetros que afectan al funcionamiento
del avin o al entorno, as mismo se visualiza el camino de la aeronave y otros datos en los monitores durante la sesin de formacin o prueba.

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. )

Cap01_HEARN_1P.qxd

20

27/09/2005

13:53

Pgina 20

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.44. Gran simulador de vuelo cerrado


con sistema visual a todo color y seis grados de
libertad en su movimiento. (Cortesa de Frasca
Internacional.)

FIGURA 1.45. Simulador de tanque 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

Cap01_HEARN_1P.qxd

27/09/2005

13:53

Pgina 21

1.5 Educacin y formacin

21

pueden ser usados como sistemas de entrenamiento, se utilizan comnmente para estudiar el comportamiento de los conductores ante situaciones crticas. Las reacciones del conductor en diversas condiciones de trfico pueden ser utilizadas como base para disear un vehculo maximizando la seguridad en el trfico.

(a)

(b)

(c)

FIGURA 1.46. Interior de la cabina (a) de un simulador de vuelo con control dual y sistema visual exterior en color completo (b) y (c) para un simulador pequeo de vuelo. (Cortesa de Frasca International.)

FIGURA 1.47. El rea del instructor detrs de la


cabina de un simulador pequeo de vuelo. El equipo permite al instructor monitorizar las condiciones
de vuelo y establecer los parmetros del avin y del
entorno. (Cortesa de Frasca International.)

Cap01_HEARN_1P.qxd

22

27/09/2005

13:53

Pgina 22

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.48. Imgenes de un simulador de vuelo. (Cortesa de Evans & Sutherland.)

FIGURA 1.49. Imgenes generadas para un simulador naval. (Cortesa de Evans & Sutherland.)

FIGURA 1.50. Imgenes de una lanzadera espacial. (Cortesa de Mediatech y GE Aerospace.)

Cap01_HEARN_1P.qxd

27/09/2005

13:54

Pgina 23

1.6 Arte por computadora

(a)

23

(b)

FIGURA 1.51. Interior del simulador de una automvil (a), una vista de una escena de calle (b) puede presentarse al conductor. (Cortesa de Evans & Sutherland.)

1.6 ARTE POR COMPUTADORA


Tanto el arte puro como el comercial hacen uso de los mtodos de los grficos por computadora. Los artistas
tienen disponibles una variedad de mtodos y herramientas, incluyendo hardware especializado, paquetes de
software comercial (como Lumena), programas de matemtica simblica (como Mathematica), paquetes
CAD, software de escritorio para publicacin y sistemas de animacin que proporcionan capacidades para
disear formas de objetos y especificar sus movimientos.
La Figura 1.52 proporciona una representacin figurada del uso de un programa de dibujo (paint brush)
que permite al artista pintar cuadros o dibujos en la pantalla de un monitor de vdeo. En realidad, el dibujo
se pinta electrnicamente en una tableta grfica digitalizadora utilizando una pluma, que puede simular diferentes golpes de pincel, grosores de pincel y colores. Utilizado un programa de dibujo, un diseador de comics
cre los personajes de la Figura 1.53 quienes parecen estar muy ocupados en la creacin de si mismos.

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)

Cap01_HEARN_1P.qxd

24

27/09/2005

13:54

Pgina 24

CAPTULO 1 Introduccin a los grficos por computadora

(a)

(b)

FIGURA 1.53. Demostraciones en comic de un artista creando un dibujo con un sistema paintbrush. 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 sobreimpuestos en la famosa pintura de Thomas Nast de San Nicols, la cual fue introducida
en el sistema a travs de una cmara de video. (Cortesa de Gould Inc., Imaging & Graphics Division 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 escaneadas.
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, mapeo 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 Mathematica, 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 rela-

FIGURA 1.54. Cuadro parecido a un Van Gogh creado por la artista grfica Elizabeth O'Rourke con
una pluma inalmbrica sensible a la presin.
(Cortesa de Wacom Technology Corporation.)

Cap01_HEARN_1P.qxd

27/09/2005

13:54

Pgina 25

1.6 Arte por computadora

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. El 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 Gallery.
1991 Trukenbrod, The School
of the Art Institute of Chicago.)

FIGURA 1.57. De una serie llamada Esferas de influencia,


esta pintura electrnica titulada
Whigmalaree fue creada con
una combinacin de mtodos
utilizando una tableta grfica,
modelado tridimensional, mapeado de texturas y una serie de
transformaciones geomtricas.
(Cortesa de la Williams Gallery.
1992 Wynne Ragland, Jr.)

Cap01_HEARN_1P.qxd

26

27/09/2005

13:54

Pgina 26

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.58. Produccin de


arte 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 Roman Verostko,
Minneapolis College of Art &
Design..)

FIGURA 1.59. Esta creacin de


Andrew Hanson est basada en
una visualizacin del ltimo teorema de Fermat, xn + yn = zn ,
n = 5. Departamento de Ciencias
de la Computacin de la Universidad de Indiana. La imagen fue
renderizada con Mathematica y
Software Wavefront. (Cortesa
de la Williams Gallery. 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 artes 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.

Cap01_HEARN_1P.qxd

27/09/2005

13:54

Pgina 27

1.6 Arte por computadora

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,
Vanderbilt University.)

FIGURA 1.61. Estacin 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 (morfing), donde un
objeto se transforma (metamorfiza) en otro. Este 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.

Cap01_HEARN_1P.qxd

28

27/09/2005

13:54

Pgina 28

CAPTULO 1 Introduccin a los grficos por computadora

(a)

(b)

(c)

FIGURA 1.63. Publicidad de productos mediante imgenes generadas por computadora. (Cortesa de (a) Audrey Fleisher
y (b) y (c) de SOFTIMAGE, Inc.)

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, toda la pelcula est generada mediante renderizacin 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 Space Nine. 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 de la pelcula Star Trek la furia del Khan. Los mtodos de renderizado se aplican a los modelos

FIGURA 1.64. Escena grfica de la serie de TV Deep Space Nine. (Cortesa of Rhythm & Hues Studios.)

Cap01_HEARN_1P.qxd

27/09/2005

13:54

Pgina 29

1.7 Entretenimiento

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 Taisei
Corporation (Tokio, Japn) y renderizado con el software TDI. (Cortesa de Thomson Digital Image, Inc.)

(a)

29

FIGURA 1.66. Grficos generados para la pelcula de Paramount Pictures Star Trek la furia
del Khan. (Cortesa de Evans and Sutherland.)

(b)

FIGURA 1.67. Escenas de pelcula generadas por computadora: (a) El sueo de Red, (Cortesa de Pixar) Copyright
Pixar 1987. (b) Knickknack, (Cortesa de Pixar. Copyright Pixar 1989.)

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
1.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 Within en la que se emplean estas tcnicas fotorrealistas para simular de manera cercana la apariencia de un actor humano.

Cap01_HEARN_1P.qxd

30

27/09/2005

13:54

Pgina 30

CAPTULO 1 Introduccin a los grficos por computadora

FIGURA 1.68. Una escena de la pelcula Final 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.)

(a)

(b)

(a)

(b)

(d)

(c)

(c)

(e)

FIGURA 1.69. Ejemplos de morfismo en el vdeo de David Byrne She is mad. Cortesa de David Byrne, Index Video,
y Pacific Data 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

Cap01_HEARN_1P.qxd

27/09/2005

13:54

Pgina 31

1.8 Procesamiento de imgenes

31

una persona en un objeto o viceversa (morfismo). Un ejemplo de morfismo lo tenemos en la secuencia de


escenas de la Figura 1.69 producidas para el vdeo de David Byrne, She is mad.

1.8 PROCESAMIENTO DE IMGENES


La modificacin o interpretacin de imgenes existentes, como fotografas o cmaras de TV es conocida como
procesamiento de imgenes. Aunque los mtodos empleados en los grficos por computadora y el procesado de imgenes se solapan, las dos reas estn dedicadas a operaciones fundamentales diferentes. En los grficos por computadora, la computadora se utiliza para crear una imagen. Por otra parte las tcnicas de procesamiento de imgenes se utilizan para mejorar la calidad de un dibujo, analizar las imgenes o reconocer
patrones visuales para aplicaciones robotizadas. Sin embargo, los mtodos de procesamiento de imgenes se
utilizan frecuentemente en los grficos por computadora, y los mtodos de los grficos por computadora se
aplican tambin en el procesamiento de imgenes.
Por lo general, antes de procesar una imagen o una fotografa, primero se almacena en un archivo de imagen. Entonces es cuando se pueden aplicar los mtodos digitales de reorganizacin de las partes de la imagen,
para resaltar separaciones de color, o mejorar la calidad del sombreado. En la Figura 1.70 se da un ejemplo
de los mtodos de procesamiento de imagen para el realce de la calidad de una imagen. Estas tcnicas se usan
de manera amplia en las aplicaciones de arte comercial que se implican en el retoque y reestructuracin de
secciones de fotografas y otras obras artsticas. Tcnicas similares se utilizan para analizar las fotografas de
la tierra tomadas por un satlite y las grabaciones de distribuciones de estrellas en las galaxias hechas por un
telescopio.
Las aplicaciones mdicas tambin hacen uso de las tcnicas de procesamiento de imgenes para el realce
de tomografas y simulaciones en operaciones quirrgicas. La tomografa es un tipo de fotografa de rayos X
que permite mostrar vistas de secciones transversales de sistemas fisiolgicos. Tomografa Computerizada
por Rayos X (TC), Tomografa Emisiva de Posicin (TEP) y Tomografa Axial Computerizada (TAC) utilizan
mtodos computacionales para reconstruir secciones cruzadas a partir de datos digitales. Estas tcnicas se utilizan para monitorizar funciones internas y mostrar secciones durante las intervenciones quirrgicas. Otras
tcnicas de imgenes mdicas incluyen ultrasonidos y escneres mdicos nucleares. Con los ultrasonidos, se
usan ondas de sonido de alta frecuencia en lugar de rayos X para generar los datos digitales.

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 Laboratory.)

Cap01_HEARN_1P.qxd

32

27/09/2005

13:54

Pgina 32

CAPTULO 1 Introduccin a los grficos por computadora

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. (Cortesa de Dave Bock, Supercomputing Center/MCNC de Carolina del Norte.)

FIGURA 1.72. Imagen de un par estereoscpico mostrando los huesos de una mano humana, renderizado
por Inmo Yoon, D. E. Thompson y W. N. Waggenspack, Jr., LSU, de un conjunto de datos obtenidos a
partir de tomografas CT por Rehabilitation Research,
GWLNHDC. Estas imgenes muestran un posible
camino para la reconstruccin quirurgica de un tendn.
(Cortesa de IMRLAB, Mechanical 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.

1.9 INTERFAZ GRFICA DE USUARIO


Hoy da es muy comn que las aplicaciones software se proporcionen con interfaces grficas de usuario (GUI)
(Grafic User Interface). Un componente principal en una interfaz grfica es un gestor de ventanas que permita al usuario visualizar mltiples reas rectangulares de la pantalla, llamadas ventanas de visualizacin. Cada
rea de visualizacin en la pantalla contiene un proceso diferente, mostrando informacin grfica o de otro
tipo pudiendo ser los mtodos para activar una de estas ventanas variados. Si usamos un dispositivo apuntador interactivo, como un ratn, podemos en algunos sistemas, activar una ventana posicionando el cursor de
la pantalla dentro del rea mostrada por sta presionando el botn izquierdo del ratn. Con otros sistemas tendremos que hacer clic con el ratn en la barra de ttulo en la parte superior de la ventana.
Las interfaces tambin presentan mens e iconos para la seleccin de una ventana, una opcin de proceso
o el valor de un parmetro. Un icono es un smbolo grfico frecuentemente diseado para sugerir la opcin

Cap01_HEARN_1P.qxd

27/09/2005

13:54

Pgina 33

Referencias

33

FIGURA 1.73. Interfaz grfica de usuario, mostrando multiples ventanas, mens e iconos. (Cortesa
de Image-In Corporation.)

que representa. La ventaja de los iconos es que necesitan menos espacio en la pantalla que la correspondiente descripcin textual y puede ser entendido de una manera ms rpida si se ha diseado adecuadamente.
Una ventana de visualizacin 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 interfaz grfica 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 visualizacin de datos, CAD, 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,
as 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), Garner y Nelson (1983), Grotch (1983) ), Tufte (1983 y 1990),
Wolfram (1984), Huitric y Nahas (1985), Glassner (1989), y Hearn and Baker (1991). Los mtodos grficos
para la visualizacin de la msica se dan en Mitroo, Herman, y Badler (1979). Disertaciones sobre diseo y
fabricacin asistidas por computadora (CAD/CAM) en varias industrias se presentan en Pao (1984). Las tcnicas grficas para simuladores de vuelo se presentan en Schachter (1983). Fu y Rosenfeld (1984) expone
sobre la simulacin de visin, y Weinberg (1978) da cuenta de simulacin del transbordador espacial. Los
iconos grficos y los conceptos simblicos se presentan en Lodding (1983) y en Loomis, et al. (1983). Para
obtener informacin adicional sobre aplicaciones mdicas vase Hawrylyshyn, Tasker y Organ (1977);
Preston, Fagan, Huang y Pryor (1984); y Rhodes, et al. (1983).

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 34

CAPTULO 2

Introduccin a los
sistemas grficos

Un sistema de representacin de grficos por computadora dotado de una pantalla panormica y curvada, y su panel de
control. (Cortesa de Silicon Graphics, Inc y Tridimension Systems. 2003 SGI. Todos los derechos reservados.)

Cap02_HEARN_1P.qxd

2.1
2.2
2.3
2.4
2.5

27/09/2005

19:28

Pgina 35

Dispositivos de visualizacin de vdeo


Sistemas de barrido de lneas
Estaciones de trabajo grficas y sistemas de
visualizacin
Dispositivos de entrada
Dispositivos de copia impresa

2.6

Redes grficas

2.7

Grficos en Internet

2.8

Software grfico

2.9

Introduccin a OpenGL

2.10

Resumen

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
todos 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.

2.1 DISPOSITIVOS DE VISUALIZACIN DE VDEO


Por lo general, el dispositivo principal de salida en un sistema grfico es un monitor de vdeo (Figura 2.1). El
funcionamiento de la mayor parte de los monitores de vdeo se basa en el diseo estndar de tubo de rayos
catdicos o TRC (CRT, Cathode Ray Tube), pero existen otras diversas tecnologas, por lo que con el tiempo pueden llegar a predominar los monitores de estado slido.

Tubos de refresco de rayos catdicos


La Figura 2.2 ilustra el funcionamiento bsico de un TRC. Un haz de electrones (rayos catdicos), emitido
por un can de electrones, pasa a travs de sistemas de enfoque y deflexin que dirigen el haz hacia posiciones especficas de la pantalla revestida de fsforo. Entonces el fsforo emite un pequeo punto de luz en cada

FIGURA 2.1. Una estacin de trabajo para grficos por


computadora. (Cortesa de Silicon Graphics, Inc., Why
Not Films, and 525 Post Production. 2003 SGI.
Todos los derechos reservados.)

Cap02_HEARN_1P.qxd

36

27/09/2005

19:28

Pgina 36

CAPTULO 2 Introduccin a los sistemas grficos

Sistema de
enfoque

Base

Patillas del
conector

Bobinas de
deflexin magntica

Pantalla
fosforescente

Haz de
electrones

Can de
electrones

FIGURA 2.2. Diseo bsico de un TRC de deflexin magntica.

Ctodo

Trayectoria
del haz de
electrones

nodo de
enfoque

Filamento
de
calentamiento
Rejilla
de control

nodo de
aceleracin

FIGURA 2.3. Funcionamiento de un can de electrones con nodo de aceleracin.

posicin alcanzada por el haz de electrones. Puesto que la luz 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 TRC. 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. Este 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 y una
rejilla de control (Figura 2.3). El calor se suministra al ctodo dirigiendo una corriente a travs de una bobina de cable, llamada el filamento, dentro de la estructura cilndrica del ctodo. Esto causa el desprendimiento de los electrones de la superficie del ctodo caliente. En el vaco, dentro de la cubierta del TRC, 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 TRC 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 y el sistema de enfoque se encuentren dentro en la misma 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

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 37

2.1 Dispositivos de visualizacin de vdeo

37

fsforo depende del nmero de electrones que chocan con la pantalla, el brillo de un 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 Captulo 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 s 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 vara 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 externos 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 habitualmente
con bobinas de deflexin 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 deflexin que es perpendicular tanto a la
direccin del campo magntico como a la direccin del trayecto del haz de electrones. La deflexin horizontal se logra con un par de bobinas, y la deflexin vertical con el otro par. Los niveles de deflexin apropiados
se alcanzan al ajustar la corriente que atraviesa las bobinas. Cuando se emplea deflexin electrosttica, se
montan dos pares de placas paralelas dentro de la carcasa del TRC. Un par de placas se monta horizontalmente para controlar la deflexin vertical, y el otro par se monta verticalmente para controlar la deflexin 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

Base

Patillas del
conector

Sistema
de enfoque

Caon de
electrones

Placas
verticales
de deflexin

Placas
horizontales
de deflexin

FIGURA 2.4. Deflexin electrosttica de un haz de electrones en un TRC.

Pantalla
fosforescente

Haz de
electrones

Cap02_HEARN_1P.qxd

38

27/09/2005

19:28

Pgina 38

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.5. Distribucin de intensidad de un punto


de fsforo iluminado en una pantalla de 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 regresar a 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 todos 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 todos 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 pantalla. 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 como resolucin. Una definicin ms precisa de resolucin es el nmero de puntos por centmetro que se pueden dibujar horizontal y verticalmente, 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 60% 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 alta calidad es 1280 por 1024, aunque hay disponibles resoluciones mayores en muchos
sistemas. Los sistemas de alta resolucin se suelen denominar sistemas de alta definicin. El tamao fsico de
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.

Pantallas por barrido de lneas


La clase ms comn de monitor grfico que utiliza un TRC es la pantalla por barrido de lneas y est basada en la tecnologa de la televisin. En un sistema de barrido de lneas, el haz de electrones recorre la panta-

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 39

2.1 Dispositivos de visualizacin de vdeo

39

FIGURA 2.7. Un sistema de barrido de lneas muestra un objeto como un conjunto de puntos discretos a lo largo de cada
lnea de barrido.

lla, una fila 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 lnea 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 la 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 pel (formas
abreviadas de picture element; elemento de imagen). Dado que el bfer de refresco se emplea 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 lneas.
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 aspec-

Cap02_HEARN_1P.qxd

40

27/09/2005

19:28

Pgina 40

CAPTULO 2 Introduccin a los sistemas grficos

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. Similarmente, 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 pxel para ajustar la intensidad de los puntos de pantalla. Un bit de valor 1, 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 megabytes 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 habitualmente 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 vdeo, 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 80 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, habitualmente, 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 lnea de barrido, el haz de electrones vuelve al lado izquierdo de la pantalla para comenzar a mostrar la siguiente lnea 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 801 a 601 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 lneas (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

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 41

2.1 Dispositivos de visualizacin de vdeo

41

FIGURA 2.8. Entrelazado de las lneas de barrido en un monitor de barrido. En primer lugar, se muestran los puntos de las
lneas de barrido con numeracin par (lnea continua); y despus se muestran todos los puntos de las lneas 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
1
realizar en 60 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.

Pantallas de barrido aleatorio


Cuando un monitor de TRC funciona como pantalla de barrido aleatorio, dispone de un haz de electrones
dirigido exclusivamente a las partes de la pantalla donde se muestra una imagen. Las imgenes se generan a
base de lneas; el haz de electrones traza las lneas componentes una tras otra. Por este motivo, los monitores
de barrido aleatorio se denominan tambin pantallas vectoriales (o pantallas de escritura de impacto o
pantallas caligrficas). Las lneas componentes de una imagen se pueden dibujar y refrescar en los monitores

FIGURA 2.9. Un sistema de barrido aleatorio dibuja las lneas componentes de un objeto especfico en cualquier orden
que se especifique.

Cap02_HEARN_1P.qxd

42

27/09/2005

19:28

Pgina 42

CAPTULO 2 Introduccin a los sistemas grficos

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 lnea 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 lneas, 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 lneas ms suaves, ya que el haz del TRC sigue la trayectoria de la lnea. 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.

Monitores TRC de color


Un monitor TRC muestra imgenes en color empleando una combinacin de fsforos que emiten luz de diferentes colores. Las luces emitidas por los diferentes fsforos se funden para formar un nico color percibido,
el cual depende del conjunto particular de fsforos que se hayan excitado.
Un mtodo para representar imgenes en color en la pantalla consiste en cubrir la pantalla con capas de
fsforos de diferente color. El color emitido depende de la penetracin del haz de electrones en las capas de
fsforo. Esta tcnica, llamada mtodo de penetracin del haz, se suele utilizar slo con dos capas de fsforo: roja y verde. Un haz de electrones lentos excita slo la capa roja exterior, sin embargo, un haz de electrones rpidos penetra a travs de la capa roja y excita la capa interior verde. Con velocidades intermedias del
haz se emiten combinaciones de luz roja y verde para mostrar dos colores adicionales como naranja y amarillo. La velocidad de los electrones y, por tanto, el color de la pantalla en cualquier punto se ajusta mediante
la tensin de aceleracin del haz. La penetracin del haz fue un mtodo barato para producir color, pero slo
permite un nmero limitado de colores, y la calidad de la imagen no es tan buena como con otros mtodos.
Los mtodos de la mscara de sombra se utilizan habitualmente en sistemas de barrido con rastreo (televisiones en color incluidas), ya que producen una ms amplia gama de colores que el mtodo de penetracin
del haz. Esta tcnica se basa en el modo con el que parece que percibimos los colores como combinaciones
de las componentes roja, verde y azul, y se llama modelo de color RGB. Por tanto, un TRC de mscara de
sombra emplea tres puntos de color de fsforo en cada pxel. Un punto de fsforo emite luz roja, otro emite
luz verde y el tercero emite luz azul. Este tipo de TRC posee tres caones de electrones, uno para cada punto
de color y una rejilla de mscara de sombra justo detrs de la pantalla recubierta de fsforo. La luz emitida
desde los tres fsforos se convierte en un pequeo punto de color en cada pxel, ya que nuestros ojos tienden
a fundir la luz emitida desde los tres puntos en un color compuesto. La Figura 2.10 muestra el mtodo deltadelta de la mscara de sombra, que se utiliza habitualmente en los sistemas de TRC de color. Los tres haces
de electrones se deflectan y enfocan como un grupo en la mscara de sombra, la cual contiene una serie de
agujeros alineados con los patrones de puntos de fsforo. Cuando los tres haces pasan a travs de un agujero
de la mscara de sombra, activan un tringulo de puntos, el cual aparece como un pequeo punto de color en
la pantalla. Los puntos de fsforo en los tringulos se disponen de modo que cada haz de electrones pueda

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 43

2.1 Dispositivos de visualizacin de vdeo

43

Seccin
de una
mscara de sombra

Caones
de electrones

B (azul)
G (verde)
R(rojo)

Rojo
Verde Azul

Tringulo
amplificado
de puntos de
fsforo

Pantalla

FIGURA 2.10. Funcionamiento de un TRC delta-delta de mscara de sombra. Tres caones de electrones, alineados con
los patrones triangulares de puntos 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 lnea en la cual los tres caones de electrones, y los correspondientes puntos de color rojo-verde-azul, se encuentran alineados a lo largo de una lnea de
barrido en lugar de en un patrn triangular. Esta disposicin en lnea de los caones de electrones es ms fcil
de mantener alineada y, habitualmente, 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 tres 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 el
color cian cuando los puntos azul y 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 vdeojuegos se han diseado para utilizarlos con una televisin en color y un
modulador de RF (radio-frecuencia). El propsito del modulador RF 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 televisor toma esta seal procedente del modulador de RF, extrae 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 RF y de la circuitera 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.

Cap02_HEARN_1P.qxd

44

27/09/2005

19:28

Pgina 44

CAPTULO 2 Introduccin a los sistemas grficos

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 pxel 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 podran 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 finas 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 de 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 elctrica en luz. Como ejemplos de pantallas emisivas se pueden citar las pantallas de plasma, las pantallas electroluminiscentes de pelcula fina 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 y se deflectan 90 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 ms importante de una pantalla plana no emisiva es el dispositivo de cristal lquido.
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 habitualmente 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 pxeles se
debe al campo elctrico de los conductores. La Figura 2.12 muestra una pantalla de plasma de alta definicin.
Una desventaja de las pantallas de plasma fue que eran estrictamente dispositivos monocromos, pero en la
actualidad existen pantallas de plasma con capacidades multicolor.
Las pantallas electroluminiscentes de pelcula fina 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 electroluminiscentes 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

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 45

2.1 Dispositivos de visualizacin de vdeo

45

en el caso del refresco de la lnea de barrido de un TRC, la informacin se lee del bfer de refresco y se transforma en niveles de tensin que se aplican a los diodos para producir patrones de luz 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

Gas
Placa de vidrio

Placa de vidrio

FIGURA 2.11. Diseo bsico de un dispositivo de pantalla de plasma.

Conductores

Placa
de vidrio

Fsforo

FIGURA 2.12. Una pantalla de plasma con una


resolucin de 2048 por 2048 y una diagonal de
pantalla de 1,5 m. (Cortesa de Photonics Systems.)

Placa
de vidrio

FIGURA 2.13. Diseo bsico de un dispositivo de pantalla


electroluminiscente de pelcula fina.

Cap02_HEARN_1P.qxd

46

27/09/2005

19:28

Pgina 46

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.14. Una calculadora de


mano con una pantalla LCD. (Cortesa de Texas Instruments.)

FIGURA 2.15. El efecto de luz retorcida se emplea en el diseo de la mayor


parte de los dispositivos de pantalla de cristal lquido.

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 cristal lquido hace referencia al hecho de que en estos compuestos las molculas estn dispuestas segn una estructura cristalina, a pesar de que fluyen como en un lquido. Las pantallas planas utilizan habitualmente compuestos de cristal lquido 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 el 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 filas horizontales, y en la otra
placa se han dispuesto dichos conductores en columnas verticales. Cada interseccin de dos conductores
determina un pxel. 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 pxel, 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 de 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 externas. Los colores se
pueden mostrar mediante el empleo de diferentes materiales o tintes y mediante la colocacin de una triada

Cap02_HEARN_1P.qxd

27/09/2005

19:28

Pgina 47

2.1 Dispositivos de visualizacin de vdeo

47

de pxeles de color en cada posicin de la pantalla. Otro mtodo para construir los LCD consiste en colocar
un transistor en cada pxel, empleando tecnologa de transistores de pelcula fina. Los transistores se emplean para ajustar la tensin de los pxeles y para prevenir que la carga se fugue de manera gradual de las celdas
de cristal lquido. Estos dispositivos se denominan pantallas de matriz activa.

Dispositivos de visualizacin tridimensional


Se han ideado monitores grficos para mostrar escenas tridimensionales que emplean una tcnica que refleja
una imagen de un monitor de TRC desde un espejo flexible y que vibra (Figura 2.16). Conforme el espejo
varifocal vibra, cambia su distancia focal. Estas vibraciones estn sincronizadas con la representacin de un
objeto en un monitor de TRC, para que cada punto del objeto sea reflejado desde el espejo hacia la posicin
espacial correspondiente a la distancia de ese punto, desde una localizacin de visionado especfica. Esto permite caminar alrededor de un objeto o una escena y verlo desde diferentes lados.
La Figura 2.17 muestra el sistema SpaceGraph de Genisco, el cual emplea una espejo vibrante para proyectar objetos tridimensionales en un volumen de 25 cm por 25 cm por 25 cm. Este sistema tambin es capaz
de mostrar rebanadas bidimensionales transversales de objetos seleccionados a diferentes profundidades.
Tales sistemas se han utilizado en aplicaciones para analizar los datos procedentes de ultrasonografa y dispositivos de rastreo CAT, en aplicaciones geolgicas para analizar datos topolgicos y ssmicos, en aplicaciones
de diseo en las que estn involucrados objetos slidos y en simulaciones tridimensionales de sistemas tales
como molculas y de terreno.
Imagen
3D proyectada
Sistema de
ajuste y control
Espejo
flexible
vibratorio

TRC

Visor

FIGURA 2.16. Funcionamiento de un


sistema de pantalla tridimensional que
emplea un espejo vibrante que cambia
su distancia focal para ajustarse a las
profundidades de los puntos de una
escena.

Sistemas estereoscpicos y de realidad virtual


Mostrar vistas estereoscpicas de un objeto es otra tcnica para representar un objeto tridimensional. Este
mtodo no produce imgenes realmente tridimensionales, pero proporciona un efecto tridimensional mediante la presentacin de una vista diferente a cada ojo de un observador, para que parezca que las escenas poseen profundidad (Figura 2.18).
Para obtener una proyeccin estereoscpica, debemos obtener dos vistas de una escena generadas con las
direcciones de visualizacin desde la posicin de cada ojo (izquierda y derecha) hacia la escena. Podemos
construir las dos vistas como escenas generadas por computadora con diferentes puntos de vista, o podemos
utilizar un par de cmaras estreo para fotografiar un objeto o una escena. Cuando miramos simultneamente a la vista izquierda con el ojo izquierdo y a la vista derecha con el ojo derecho, las dos imgenes se funden
en una nica imagen y percibimos una escena con profundidad. La Figura 2.19 muestra dos vistas de una esce-

Cap02_HEARN_1P.qxd

48

27/09/2005

19:28

Pgina 48

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.17. El SpaceGraph, sistema grfico interactivo que muestra objetos en tres dimensiones empleando un espejo
flexible y vibrante. (Cortesa de Genisco Computers Corporation.)

FIGURA 2.18. Visionado simulado de una proyeccin estereoscpica. (Cortesa de StereoGraphics Corporation.)

na generada por computadora para proyeccin estereoscpica. Para incrementar la comodidad en la visualizacin, 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 alternos de refresco. La pantalla se ve a travs de unas gafas, con cada lente diseada

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 49

2.1 Dispositivos de visualizacin de vdeo

49

para actuar como un obturador rpido, el cual est sincronizado para impedir la visin de una de las imgenes. La Figura 2.20 muestra un par de gafas 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

FIGURA 2.19. Un par de imgenes estereoscpicas.

FIGURA 2.20. Gafas para visualizacin


de una escena estereoscpica y un emisor para sincronizacin por infrarrojos.

FIGURA 2.21. Casco utilizado en sistemas de realidad virtual. (Cortesa de


Virtual Research.)

Cap02_HEARN_1P.qxd

50

27/09/2005

19:29

Pgina 50

CAPTULO 2 Introduccin a los sistemas grficos

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 cabeza 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 virtual 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 datos (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. El dispositivo de seguimiento est
situado encima del monitor de vdeo 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.

2.2 SISTEMAS DE BARRIDO DE LNEAS


Los sistemas interactivos grficos de barrido emplean habitualmente varias unidades de procesamiento.
Adems de la unidad central de procesamiento, o UCP, un procesador de propsito especfico, llamado controlador de vdeo o controlador de pantalla, se emplea para controlar el funcionamiento del dispositivo de
pantalla. En la Figura 2.24 se muestra la organizacin de un sistema de barrido simple. En ste, el bfer de

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 51

2.2 Sistemas de barrido de lneas

CPU

Memoria
del sistema

Controlador
de vdeo

51

Monitor

Bus del sistema

Dispositivos de E/S

FIGURA 2.24. Arquitectura de un sistema grfico simple de barrido.

imagen se puede colocar en cualquier parte del sistema de memoria, y el controlador de vdeo accede al bfer
de imagen para refrescar la pantalla. Adems del controlador de vdeo, los sistemas de barrido ms sofisticados emplean otros procesadores tales como procesadores y aceleradores para implementar diversas operaciones grficas.

Controlador de vdeo
La Figura 2.25 muestra la organizacin utilizada habitualmente 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 xmax a lo largo de la pantalla, de izquierda a derecha, y valores enteros de y que varan desde 0 hasta ymax, 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.

CPU

Memoria
del sistema

Bfer de
imagen

Controlador
de vdeo

Monitor

Bus del sistema

Dispositivos de E/S

FIGURA 2.25. Arquitectura de un sistema de barrido con una porcin fija del sistema de memoria reservada para el bfer
de imagen.

Cap02_HEARN_1P.qxd

52

27/09/2005

19:29

Pgina 52

CAPTULO 2 Introduccin a los sistemas grficos

Generador de
lneas de barrido

Registro
x

Tensiones horizontal
y vertical de deflexin

Registro
y

Direccin de memoria

Registro
de pxeles

Intensidad

Bfer de imagen

FIGURA 2.26. Ejes cartesianos


de referencia con origen en la
esquina inferior izquierda de un
monitor de vdeo.

FIGURA 2.27. Funciones de refresco de un controlador bsico de


vdeo.

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 pxeles de la
pantalla. Inicialmente, se establece el valor del registro x en 0 y el registro y con el valor de la lnea superior
de barrido. Se obtiene el contenido del bfer de imagen en esta posicin de pxel y se utiliza para establecer
la intensidad del haz del TRC. Entonces el registro x 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 pxel a lo largo de la
lnea superior de barrido. Despus de que se ha procesado el ltimo pxel de las lnea superior de barrido, se
establece el valor del registro x en 0 y el registro y con el valor de la siguiente lnea de barrido, situada debajo de la lnea superior de barrido de la pantalla. Entonces se procesan los pxeles a lo largo de esta lnea de
barrido y el procedimiento se repite para cada sucesiva lnea de barrido. Despus de procesar todos los pxeles a lo largo de la lnea inferior de barrido, el controlador de vdeo 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 pxeles, los controladores de vdeo pueden obtener mltiples valores de pxel del bfer de refresco en cada pasada. Las mltiples intensidades de los
pxeles se almacenan en registros separados y se utilizan para controlar la intensidad del haz del TRC para un
grupo de pxeles adyacentes. Cuando se ha procesado este grupo de pxeles, 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 pxeles 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 pxeles 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-

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 53

2.2 Sistemas de barrido de lneas

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 controladores de vdeo consiste en la transformacin de bloques
de pxeles, 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.

Procesador de pantalla de lneas de barrido


La Figura 2.28 muestra un modo de organizar los componentes de un sistema de barrido que contiene un procesador de pantalla independiente, denominado a veces controlador grfico o coprocesador de pantalla.
El propsito del procesador de pantalla es liberar a la UCP de las tareas grficas. Adems de la memoria del
sistema, se puede disponer de una zona de memoria independiente para el procesador de pantalla.
Una tarea importante del procesador de pantalla consiste en digitalizar una imagen, procedente de un programa de aplicacin para transformarla en un conjunto de valores de pxeles para almacenarla en el bfer de
cuadro. Este proceso de digitalizacin se conoce como conversin de barrido. Las rdenes grficas que especifican lneas rectas y otros objetos geomtricos sufren una conversin de barrido en un conjunto de puntos
discretos que se corresponde con las posiciones de los pxeles de la pantalla. La conversin de barrido de un
segmento de lnea recta, por ejemplo, significa que tenemos que localizar las posiciones de los pxeles ms
cercanos a la trayectoria de la lnea y almacenar el color para cada posicin en el bfer de imagen. Se utilizan otros mtodos similares para convertir mediante barrido otros objetos de una imagen. Los caracteres se
pueden definir con rejillas rectangulares de pxeles, como en la Figura 2.29, o se pueden definir mediante sus
lneas de contorno, como en la Figura 2.30. El tamao de la matriz utilizada en la cuadrcula de los caracteres puede variar desde, aproximadamente, 5 por 7 hasta 9 por 12 o ms en el caso de pantallas de calidad superior. Una cuadrcula de un carcter se muestra mediante la superposicin del patrn de la rejilla rectangular
en el bfer de imagen en unas coordenadas especficas. Cuando los caracteres se definen mediante sus contornos se realiza la conversin de barrido de las formas en el bfer de imagen mediante la localizacin de las
posiciones de los pxeles ms cercanos al contorno.

Memoria del
procesador
de pantalla

CPU

Procesador
de pantalla

Bfer de
imagen

Controlador
de vdeo

Memoria
del sistema

Bus del sistema

Dispositivos de E/S

FIGURA 2.28. Arquitectura de un sistema grfico de barrido con un procesador de pantalla.

Monitor

Cap02_HEARN_1P.qxd

54

27/09/2005

19:29

Pgina 54

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.29. Un carcter indefinido como una rejilla


rectangular de las posiciones de sus pxeles.

FIGURA 2.30. Un carcter definido como un contorno.

Los procesadores de pantalla tambin se disean para realizar otras funciones adicionales. Dentro de
estas funciones se incluye la generacin de varios estilos de lnea (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 lnea 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 especficar el
nmero de pxeles 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 pxeles 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 VISUALIZACIN


La mayor parte de los monitores grficos en la actualidad funcionan como pantallas de barrido de lneas y se
utilizan habitualmente tanto los sistemas de TRC como las pantallas planas. Estaciones de trabajo grficas en
el rango desde pequeas computadoras de propsito general hasta instalaciones con varios monitores, a menudo disponen de pantallas de visualizacin muy grandes. En las computadoras personales, las resoluciones de
las pantallas varan desde, aproximadamente, 640 por 480 hasta 1280 por 1024, y la longitud de la diagonal
de pantalla desde 12 pulgadas hasta ms de 21 pulgadas. La mayora de los sistemas de propsito general de
hoy da poseen considerables capacidades de color, y muchos son sistemas de color total. En las estaciones de
trabajo diseadas especficamente para aplicaciones grficas, la resolucin de la pantalla puede variar desde
1280 por 1024 hasta, aproximadamente, 1600 por 1200, con una diagonal habitual de pantalla de 18 pulgadas
o ms. Tambin se pueden obtener estaciones de trabajo comerciales con una gran variedad de dispositivos
para aplicaciones especficas. La Figura 2.31 muestra las caractersticas de un tipo de estacin de trabajo para
un artista.

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 55

2.3 Estaciones de trabajo grficas y sistemas de visualizacin

55

Los sistemas grficos de alta definicin, con resoluciones de hasta 2560 por 2048, se utilizan habitualmente para la generacin de imgenes mdicas, el 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 reas 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.
(Cortesa de DICOMED Corporation.)

FIGURA 2.32. Un monitor grfico de alta resolucin


(2048 por 2048). (Cortesa de BarcoView.)

FIGURA 2.33. El SGI Reality Center 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 conjunto de datos anatmicos y
dibujados con volumen. (Cortesa de Silicon
Graphics, Inc. y el catedrtico Charles Taylor de la
Universidad de Stanford. 2003 SGI. Todos los derechos reservados.)

Cap02_HEARN_1P.qxd

56

27/09/2005

19:29

Pgina 56

CAPTULO 2 Introduccin a los sistemas grficos

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 multipanel 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. 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-

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 57

Estaciones de trabajo grficas y sistemas de visualizacin

57

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 panelado 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 SGI. Todos los 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. 2003 SGI. Todos los derechos reservados.)

Cap02_HEARN_1P.qxd

58

27/09/2005

19:29

Pgina 58

CAPTULO 2 Introduccin a los sistemas grficos

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 NASA. 2003 SGI. Todos los derechos reservados.)

2.4 DISPOSITIVOS DE ENTRADA


Las estaciones de trabajo grficas pueden utilizar diversos dispositivos para la entrada de datos. La mayora
de los sistemas disponen de un teclado y uno o ms dispositivos adicionales diseados especficamente para
poder realizar entradas interactivas. Entre estos dispositivos se incluyen el ratn, trackball, spaceball y las
palancas de mando (joystick). Otros dispositivos de entrada, que se utilizan en aplicaciones particulares son
los digitalizadores, las ruedas de seleccin (dials), las cajas de botones, los guantes de datos, los paneles tctiles, los escneres de imagen y los sistemas de voz.

Teclados, cajas de botones y botones de seleccin


Un teclado alfanumrico de un sistema grfico se utiliza primordialmente como dispositivo de entrada de
cadenas de texto, para ejecutar determinados comandos y seleccionar opciones de men. El teclado es un dispositivo eficiente para introducir datos no grficos como etiquetas de imgenes asociadas a una pantalla grfica. Los teclados tambin pueden estar provistos de caractersticas que faciliten la entrada de coordenadas de
pantalla, selecciones de mens o funciones grficas.
Habitualmente, en los teclados de propsito general hay disponibles teclas de cursor y teclas de funcin.
Las teclas de funcin permiten a los usuarios seleccionar operaciones de uso habitual con la pulsacin de una
nica tecla y las teclas del cursor permiten seleccionar un objeto o una posicin situando el cursor de pantalla. Un teclado puede tambin contener otras clases de dispositivos de posicionamiento del cursor, tales como
un trackball o una palanca de mando, junto con un pequeo teclado numrico para introducir rpidamente
datos numricos. Adems de estas caractersticas, algunas teclados se han diseado ergonmicamente (Figura
2.40) con el fin de proporcionar elementos que alivien la fatiga del usuario.
En tareas especializadas, la entrada en aplicaciones grficas puede proceder de un conjunto de botones,
botones de seleccin, o interruptores que seleccionan valores u operaciones grficas personalizadas. La Figura
2.41 muestra un ejemplo de una caja de botones y un conjunto de ruedas de seleccin. Los botones y los
interruptores se utilizan habitualmente para funciones de entrada predefinidas, y las ruedas de seleccin para
introducir valores escalares. Los valores numricos que se encuentran dentro de unos lmites definidos se
seleccionan mediante rotaciones de las ruedas de seleccin. Para medir la rotacin de una rueda de seleccin
se utiliza un potencimetro, el cual se convierte en el correspondiente valor numrico.

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 59

2.4 Dispositivos de entrada

59

FIGURA 2.40. Teclado diseado ergonmicamente y dotado de reposamuecas separable. La inclinacin de cada parte del
teclado se puede ajustar de forma separada. Al lado del teclado se muestra un ratn de un nico botn, que dispone de un
cable para conectarlo a la computadora. (Cortesa de Apple Computer, Inc.)

(a)

(b)

FIGURA 2.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 detecta 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

Cap02_HEARN_1P.qxd

60

27/09/2005

19:29

Pgina 60

CAPTULO 2 Introduccin a los sistemas grficos

dispone de uno, dos, tres o cuatro 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 parte 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 trackball de dos dimensiones, que proporciona seis grados de libertad. A diferencia del trackball, 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. (Cortesa de Multipoint Technology Corporation.)

FIGURA 2.43. Un joystick mvil. (Cortesa de CalComp Group, Sanders Associates, Inc.)

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 61

2.4 Dispositivos de entrada

61

miden la cantidad de presin aplicada al spaceball para proporcionar los datos de entrada para definir el posicionamiento espacial y la orientacin a medida que se empuja y tira de la bola en varias direcciones. Los spaceballs se utilizan para el posicionamiento tridimensional y en las operaciones de seleccin en sistemas de
realidad virtual, modelado, animacin, CAD y otras aplicaciones.

Joysticks
Un 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 los joysticks, tales como el mostrado en la Figura 2.43, 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 entrada 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 tirn 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 detecta 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.44. Una escena de realidad virtual


mostrada en un monitor de vdeo bidimensional,
con entrada de datos procedentes de un guante de
datos y un spaceball. (Cortesa de The Computer
Graphics Center, Darmstadt, Alemania.)

Cap02_HEARN_1P.qxd

62

27/09/2005

19:29

Pgina 62

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.45. La tableta de escritorio SummaSketch


III con diecisis botones y cursor manual. (Cortesa
de Summagraphics Corporation.)

FIGURA 2.46. La tableta Microgrid III con diecisis


botones y cursor manual, diseada para digitalizar
grandes dibujos. (Cortesa de Summagraphics Corporation.)

FIGURA 2.47. La tableta de escritorio NotePad con


pluma. (Cortesa de CalComp Digitizer Division, una
divisin de CalComp, Inc.)

Digitalizadores
Un 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 curva 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-

Cap02_HEARN_1P.qxd

27/09/2005

19:29

Pgina 63

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 digitalizacin 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 tarda 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 artistas, 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.)

Cap02_HEARN_1P.qxd

64

27/09/2005

19:29

Pgina 64

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.50. Un escner de mano que se puede utilizar


para introducir texto o imgenes grficas. (Cortesa de
Thunderware, 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 interna 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 tactiles
Como su propio nombre indica, los paneles tactiles permiten visualizar objetos o posiciones de pantalla que
se pueden seleccionar con el toque de un dedo. Una aplicacin habitual de los paneles tactiles 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 tactiles 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

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 65

2.4 Dispositivos de entrada

65

FIGURA 2.51. Escneres de escritorio: (a) escner de tambor y (b) escner de superficie plana. (Cortesa de Aztek, Inc.,
Lago Forest, California.)

FIGURA 2.52. Un escner de gran formato. (Cortesa de


Aztek, Inc., Lago Forest, California.)

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 LED estn espaciados una distancia muy

Cap02_HEARN_1P.qxd

66

27/09/2005

19:30

Pgina 66

CAPTULO 2 Introduccin a los sistemas grficos

FIGURA 2.54. Paneles tactiles resistivos de superposicin. (Cortesa de Elo TouchSystems, Inc.)

FIGURA 2.55. Un lpiz ptico con un botn. (Cortesa


de Interactive Computer Products.)

pequea, es posible interrumpir dos haces verticales y dos horizontales de forma 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 toque 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.

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 67

2.5 Dispositivos de copia impresa

67

FIGURA 2.56. Un sistema de reconocimiento de voz


(Cortesa de Threshold Technology, Inc.)

Sistemas de voz
Los reconocedores de voz 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 que 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.

2.5 DISPOSITIVOS DE COPIA IMPRESA


Podemos obtener una copia impresa de nuestras imgenes en varios formatos. Para realizar presentaciones o
archivar, podemos enviar archivos de imagen a dispositivos a una empresa con servicio de reprografa que
producir transparencias, diapositivas de 35 mm, o pelculas. Tambin podemos pasar nuestras imgenes a
papel enviando la salida grfica a una impresora o un trazador.
La calidad de las imgenes obtenidas mediante un dispositivo de salida depende del tamao del punto y
del nmero de puntos por pulgada, o lneas por pulgada, que se pueden mostrar. Para producir patrones ms
suaves, las impresoras de mayor calidad cambian las posiciones de los puntos para que los puntos adyacentes
se superpongan.
La salida en las impresoras se produce o por mtodos de impacto o sin l. Las impresoras de impacto presionan los caracteres formados contra una cinta impregnada con tinta sobre un papel. Una impresora de lnea
es un ejemplo de dispositivo de impacto, en la que los caracteres estn montados sobre bandas, cadenas, tambores, o ruedas. Las impresoras y los trazadores que no son de impacto utilizan tcnicas basadas en lser,
inyectores de tinta, mtodos electrostticos y mtodos electrotrmicos para obtener imgenes sobre el papel.
Las impresoras de impacto de caracteres, habitualmente, disponen de una cabeza de impresin de matriz
de puntos que contiene una matriz rectangular de agujas de alambre que sobresalen, en las que el nmero de
agujas depende de la calidad de la impresora. Los caracteres individuales o los patrones grficos se obtienen
al retraer ciertas agujas para que las agujas restantes formen el patrn que se tiene que imprimir. La Figura
2.57 muestra una imagen impresa con una impresora de matriz de puntos.
En un dispositivo lser, un haz lser crea una distribucin de carga sobre un tambor rotante recubierto con
un material fotoelctrico, como el selenio. El tner se aplica al tambor y luego se transfiere al papel. Los mtodos de inyeccin de tinta producen la salida mediante el empleo de chorros a presin de tinta, dispuestos en

Cap02_HEARN_1P.qxd

68

27/09/2005

19:30

Pgina 68

CAPTULO 2 Introduccin a los sistemas grficos

filas horizontales a lo largo del rollo de papel enrollado en un tambor. El 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 electrotrmica. 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 lnea 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 o 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.58 se muestra un ejemplo de trazador de plumillas de sobremesa y superficie
plana. En la Figura 2.59 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
variar para producir zonas claras y
zonas oscuras. (Cortesa de Apple
Computer, Inc.)

FIGURA 2.58. Un trazador de escritorio con plumillas con una resolucin de 0,025 mm. (Cortesa de
Summagraphics Corporation.)

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 69

2.7 Grficos en Internet

69

FIGURA 2.59. Trazador de plumillas con alimentador de rodillo


y de gran tamao que dispone de un cargador automtico de 8
plumillas multicolores y de una resolucin de 0,0127 mm.
(Cortesa de Summagraphics Corporation.)

2.6 REDES GRFICAS


Hasta el momento, hemos considerado principalmente aplicaciones grficas en sistemas aislados y con un
nico usuario. Sin embargo, los entornos multiusuario y las redes de computadores son en la actualidad elementos comunes en muchas aplicaciones grficas. Varios recursos, tales como procesadores, impresoras, trazadores y archivos de datos se pueden distribuir en la red y se pueden compartir entr mltiples usuarios.
Un monitor grfico de una red se denomina generalmente servidor grfico, o simplemente servidor. El
monitor a menudo incluye dispositivos de entrada tales como un teclado y un ratn o un trackball. En este
caso, el sistema puede proporcionar entrada, as como puede funcionar como servidor de salida. La computadoar de la red que ejecuta un programa de aplicacin de grficos se llama el cliente y la salida del programa
se muestra en el servidor. Una estacin de trabajo que incluye procesadores, as como un monitor y dispositivos de entrada, puede funcionar como servidor y como cliente.
Cuando el funcionamiento es en red, una computadora cliente transmite las instrucciones para mostrar una
imagen al monitor (servidor). Habitualmente, esta labor se lleva a cabo acumulando las instrucciones en
paquetes antes de transmitirlas, en lugar de enviar las instrucciones grficas individuales una a una por la red.
Por tanto, los paquetes de software grfico a menudo tambin disponen de comandos relacionados con la
transmisin de paquetes, as como comandos para la creacin de imgenes.

2.7 GRFICOS EN INTERNET


Una gran cantidad del desarrollo grfico se est realizando en la actualidad en Internet, que es una red global de redes de computadoras. Las computadoras en Internet se comunican mediante el protocolo TCP/IP
(Transmission Control Protocol/Internet Protocol). Adems, la World Wide Web proporciona un sistema de
hipertexto que permite a los usuarios localizar y ver documentos que pueden contener texto, grficos y sonidos. Los recursos, tales como los archivos grficos, se identifican mediante un localizador de recursos uniforme (Uniform Resource Locator, URL). Cada URL, denominado a veces localizador de recursos universal,
contiene dos partes: (1) el protocolo de transferencia del documento y (2) el servidor que contiene el docu-

Cap02_HEARN_1P.qxd

70

27/09/2005

19:30

Pgina 70

CAPTULO 2 Introduccin a los sistemas grficos

mento y, opcionalmente, la localizacin (directorio) en el servidor. Por ejemplo, el URL http://www.siggraph.org indica un documento que se debe transferir utilizando el protocolo de transferencia de hipertexto
(hypertext transfer protocol; http) y que el servidor es www.siggraph.org, el cual es la pgina principal del
grupo SIGGRAPH (Special Interest Group in Graphics) de la Association for Computing Machinery. Otro
tipo habitual de URL comienza por ftp://. 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 Markup Language). El
desarrollo del HTML 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 estuvieran 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.8.

2.8 SOFTWARE GRFICO


Existen dos grandes grupos de software para grficos por computadora: paquetes de propsito especfico y
paquetes de programacin general. Los paquetes de propsito especfico se disean para quienes no saben
programar y quieran generar imgenes, grficas o diagramas en algn rea de aplicacin sin preocuparse por
los procedimientos grficos necesarios para producir las imgenes. La interfaz de un paquete de propsito
especfico es habitualmente un conjunto de mens, permite a los usuarios comunicarse con los programas con
sus propios trminos. Como ejemplos de tales aplicaciones se pueden citar los programas de pintura para artistas y varios sistemas CAD (Computer Aided Design; diseo asistido por computador) para arquitectura,
empresas, mdicos e ingeniera. En cambio, un paquete de programacin general proporciona una biblioteca
de funciones grficas que se pueden utilizar en lenguajes de programacin tales como C, C, Java o
Fortran. Entre las funciones bsicas de una biblioteca grfica tpica se incluyen aqullas para especificar componentes de la imagen (lneas rectas, polgonos, esferas y otros objetos), establecer el color, seleccionar vistas de una escena y aplicar rotaciones u otras transformaciones. Algunos ejemplos de paquetes de
programacin grfica general son los siguientes: GL (Graphics Library; biblioteca grfica), OpenGL, VRML
(Virtual-Reality Modelling Language; lenguje para el modelado de realidad virtual), Java 2D y Java 3D. Un
conjunto de funciones grficas se denomina a menudo interfaz de programacin de aplicaciones para grficos
por computadora (computer-graphics application programming interface; CG API), porque la biblioteca
proporciona una interfaz software entre un lenguaje de programacin (tal como C) y el hardware. Por
tanto, cuando escribimos un programa de aplicacin en C, las subrutinas grficas permiten construir y
mostrar una imagen en un dispositivo de salida.

Representaciones con coordenadas


Para generar una imagen empleando un paquete de programacin, lo primero que necesitamos es proporcionar las descripciones geomtricas de los objetos que se han de mostrar. Estas descripciones determinan las
posiciones y las formas de los objetos. Por ejemplo, una caja se especifica mediante las posiciones de sus
esquinas (vrtices), y una esfera se define con la posicin de su centro y su radio. Con pocas excepciones, los
paquetes para grficos generales requieren que las descripciones geomtricas se especifiquen en un sistema
de referencia de coordenadas cartesianas estndar (Apndice A). Si los valores de las coordenadas de una imagen se proporcionan en cualquier otro sistema de referencia (esfrico, hiperblico, etc.), se deben convertir en

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 71

2.8 Software grfico

71

coordenadas cartesianas antes de que se puedan utilizar como entrada del paquete de grficos. Algunos paquetes diseados para aplicaciones especficas 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 individuales en posiciones y orientaciones especificadas en las coordenadas del sistema de coordenadas universales. A modo de ejemplo, podriamos 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 o entero, sin tener en cuenta las restricciones de un dispositivo de salida concreto. En algunas escenas, podriamos querer especificar la geometra de los objetos en
fracciones de pie, mientras que en otras aplicaciones podriamos querer emplear milmetros, kilmetros, o aos
luz.
Despus de haber especificado todas las partes 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
o ms dispositivos de salida. Este proceso se denomina pipeline de visualizacin. En 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 bidimensional 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 1 y 1 o dentro del rango de valores desde 0 a 1, 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 partes de la imagen fuera de los
lmites de la vista 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 de 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 xy (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 objetos tridimensionales. En esta figura, una posicin inicial en coordenadas de modelado (xmc, ymc,
zmc) se transforma en coordenadas universales, despus en coordenadas de visualizacin y proyeccin, luego
en coordenadas normalizadas a izquierdas y, finalmente, en la posicin en coordenadas del dispositivo mediante la secuencia:

Cap02_HEARN_1P.qxd

72

27/09/2005

19:30

Pgina 72

CAPTULO 2 Introduccin a los sistemas grficos

Coordenadas de visualizacin
y proyeccin
1
1

Coordenadas
de modelado

Coordenadas
universales

Coordenadas
normalizadas

Monitor de vdeo

Trazador

Otra salida
Coordenadas
del dispositivo

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 mediante la pipeline de visualizacin en
coordenadas de visualizacin y proyeccin, y despus en coordenadas normalizadas. 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.

(xmc, ymc, zmc) (xwc, ywc, zwc) (xvc, yvc, zvc) (xpc, ypc, zpc)
(xnc, ync, znc) (xdc, ydc)
Las coordenadas de dispositivo (xdc, ydc) son enteros dentro del rango (0,0) a (xmax, ymax) para un dispositivo concreto. Adems de las posiciones bidimensionales (xdc, ydc) de la superficie de visualizacin, 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.

Funciones grficas
Un paquete grfico de propsito general proporciona a los usuarios una gran variedad de funciones para la
creacin y manipulacin de imgenes. Estas subrutinas se pueden clasificar segn multitud de criterios, tales
como estar relacionadas con la salida de grficos, la entrada, los atributos, las transformaciones, visualizacin,
subdivisin de imgenes, o control general.
Las partes bsicas para la construccin de imgenes lo constiuyen lo que se denomina primitivas de salida grfica. Dentro de ellas estn incluidas las cadenas de caracteres y las entidades geomtricas, tales como
los puntos, las lneas rectas, las lneas curvas, los rellenos con color (habitualmente polgonos), y las formas
que se definen mediante matrices de puntos con color. Algunos paquetes grficos proporcionan adicionalmente 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 atributo describe cmo se mostrar una primitiva concreta. Dentro de stos se incluyen las especificaciones de color, de estilos de lnea, 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 para construir una escena en la que

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 73

2.8 Software grfico

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
subrutinas 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 visualizacin 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 vista se debe mostrar. Hay disponibles otras subrutinas para la gestin del rea de visualizacin 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 varias clases de dispositivos de entrada, entre los que se
incluyen un ratn, una tableta o un joystick. Las funciones de entrada se utilizan para controlar y 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 partes componentes con un nombre. Se puede disponer de otras subrutinas 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 inicializar parmetros. Podemos agrupar las funciones para llevar a cabo
estas 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 software se puede trasladar fcilmente de un sistema hardware a otro y usar en
diferentes implemantaciones 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 (Graphical Kernel System) en 1984. Este 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 ANSI (American National Standards Intitute).
Aunque GKS 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 (Programmers Hierarchical Interactive Graphics Standard), el cual es una extensin de GKS. PHIGS 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 PHIGS, para proporcionar capacidades de representacin de superficies tridimensionales no disponibles en PHIGS.
Cuando se desarrollaron los paquetes GKS y PHIGS, las estaciones de trabajo grficas de Silicon
Graphics, Inc. (SGI) llegaron a ser cada vez ms populares. Estas estaciones de trabajo estaban dotadas de un
conjunto de su rutinas llamado GL (Graphics Library), que muy pronto lleg a ser un paquete ampliamente utilizado en la comunidad grfica. Por tanto, GL se convirti en un estndar grfico de facto. 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 90 se desarroll OpenGL, una
versin de GL independiente del hardware. En la actualidad, la organizacin OpenGL Architecture Review
Board mantiene y actualiza este paquete. Esta organizacin es un consorcio de representantes de muchas
compaas y organizaciones grficas. OpenGL est diseado especialmente para el procesamiento deficiente

Cap02_HEARN_1P.qxd

74

27/09/2005

19:30

Pgina 74

CAPTULO 2 Introduccin a los sistemas grficos

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.

Otros paquetes grficos


Se han desarrollado otras muchas bibliotecas de programacin para grficos por computadora. Algunas proporcionan subrutinas grficas generales, y otras tienen como objetivo aplicaciones especficas o aspectos particulares de los grficos por computadora, tales como la animacin, la realidad virtual o los grficos en Internet.
El paquete Open Inventor proporciona un conjunto de subrutinas orientadas a objetos para describir una
escena que se debe mostrar mediante llamadas a OpenGL. El lenguaje VRML (Virtual-Reality Modeling Language), que comenz como un subconjunto de Open Inventor, permite establecer modelos tridimensionales
de mundos virtuales en Internet. Tambin podemos construir imgenes en Internet utilizando bibliotecas grficas desarrolladas para el lenguaje Java. Con Java 2D, podemos crear escenas bidimensionales dentro de
applets de Java, por ejemplo. Mientras que con Java 3D podemos generar imgenes tridimensionales en
Internet. Con Renderman Interface de Pixar Corporation, podemos generar escenas empleando una gran
variedad de modelos de iluminacin. Finalmente, las bibliotecas grficas se proporcionan a menudo en otros
tipos de sistemas, tales como Mathematica, MatLab y Maple.

2.9 INTRODUCCIN A Open GL


En OpenGL se proporciona una biblioteca bsica de funciones para especificar primitivas grficas, atributos,
transformaciones geomtricas, transformaciones de visualizacin y muchas otras operaciones. Como indicamos en la seccin anterior, est diseada para ser independiente del hardware, por tanto, muchas operaciones,
tales como las subrutinas de entrada y salida, no estn incluidas en la biblioteca bsica. Sin embargo, las
subrutinas de entrada y salida y muchas funciones adicionales estn disponibles en bibliotecas auxiliares que
se han desarrollado para programas OpenGL.

Sintaxis bsica de OpenGL


Los nombres de las funciones de la biblioteca bsica de OpenGL (tambin llamada de biblioteca del ncleo
de OpenGL) utilizan como prefijo gl, y cada palabra que forma parte del nombre de una funcin tiene su
primera letra en mayscula. Los siguientes ejemplos ilustran este convenio de denominacin.
glBegin,

glClear,

glCopyPixels,

glPolygonMode

Algunas funciones requieren que a uno (o ms) de sus argumentos se les asigne una constante simblica
al especificar, por ejemplo, un nombre de parmetro, un valor para un parmetro, o un modo particular. Todas

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 75

2.9 Introduccin a OpenGL

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,

GL_POLYGON,

GL_AMBIENT_AND_DIFFUSE

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 especificacin 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 identificador
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 explctamente 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 visualizacin y proyeccin, descripcin de objetos complejos mediante lneas y aproximaciones poligonales, visualizacin de cudricas y splines B 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 (GLX, OpenGL Extension to the
X Window System) proporciona un conjunto de subrutinas que utilizan como prefijo las letras glX. Los sistemas Apple pueden utilizar la interfaz para operaciones de gestin de ventanas Apple GL (AGL). Los nombres de las funciones en esta biblioteca utilizan como prefijo agl. En los sistemas que utilizan Microsoft
Windows, las subrutinas de WGL proporcionan una interfaz 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 pgl 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 glut. 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:

Cap02_HEARN_1P.qxd

76

27/09/2005

19:30

Pgina 76

CAPTULO 2 Introduccin a los sistemas grficos


http://reality.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 windows.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
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>

Sin embargo, si utilizamos GLUT para gestionar las operaciones de gestin de ventanas, no necesitaremos
incluir gl.h y glu.h porque GLUT garantiza que estos archivos se incluirn correctamente. Por tanto, podemos reemplazar los archivos de cabecera de OpenGL y GLU por
#include <GL/glut.h>

Tambin podramos incluir gl.h y glu.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,
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

Con el nuevo estndar ISO/ANSI para C, estos archivos de cabecera se denominan cstudio,
cstdlib y cmath.

Gestin de la ventana de visualizacin empleando GLUT


Para comenzar, podemos considerar un nmero mnimo y simplificado de operaciones para mostrar una imagen. Ya que estamos empleando la utilidad GLUT (OpenGL Utility Toolkit), nuestro primer paso consiste en
inicializar GLUT. Esta funcin de inicializacin podra tambin procesar argumentos cualesquiera de la lnea
de comandos, pero no necesitaremos utilizar estos parmetros en nuestro primer ejemplo de programa.
Realizamos la inicializacin de GLUT con la siguiente lnea
glutInit (&argc, argv);

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 programa de ejemplo con 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
glutDisplayFunc, 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 lineSegment.
Entonces la siguiente llamada a funcin pasa la descripcin del segmento a la ventana de visualizacin.
glutDisplayFunc (lineSegment);

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 77

2.9 Introduccin a OpenGL

77

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 ( );

Esta funcin debe ser la ltima en nuestro programa. sta 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 glutInitWindowPosition 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.
glutInitWindowPosition (50, 100);

Anlogamente, la funcin glutInitWindowSize 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
glutInitWindowSize (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 glutInitDisplayMode. 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.
glutInitDisplayMode (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 funPant
50

alla

100

Un p

rogra

Ventana
de
visualizacin

ma O

de v

penG

deo

L eje

mplo

300
400

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.

Cap02_HEARN_1P.qxd

78

27/09/2005

19:30

Pgina 78

CAPTULO 2 Introduccin a los sistemas grficos

cin 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.

Un programa OpenGL completo


Todava hay que realizar algunas tareas antes de que tengamos todas las partes necesarias para un programa
completo. En la ventana de visualizacin, podemos elegir un color de fondo. Y necesitamos construir un procedimiento que contenga las funciones apropiadas de OpenGL para la imagen que queremos mostrar en pantalla.
Mediante el empleo de valores de color RGB, establecemos que el color de la ventana de visualizacin sea
blanco, como en la Figura 2.61, con la funcin de OpenGL
glClearColor (1.0, 1.0, 1.0, 0.0);

Los tres primeros argumentos de esta funcin establecen cada una de las componentes de color roja, verde,
y azul en el valor de 1.0. 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,
obtendriamos algn nivel de gris. El cuarto parmetro de la funcin glClearColor se denomina el valor alfa
del color especificado. Un uso del valor alfa es el parmetro de fundido (blending). Cuando activamos las
operaciones de fundido de OpenGL, los valores alfa 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 irrelevante en nuestros primeros programas de ejemplo. Por ahora, establecemos
simplemente el valor alfa en 0.0.
Aunque la orden glClearColor 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 GL_COLOR_BUFFER_BIT es una constante simblica que especifica 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
glClearColor. (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 3f de la funcin glColor indica que especificamos las tres componentes de color RGB mediante el empleo de valores en punto flotante (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 (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 79

2.9 Introduccin a OpenGL

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 visualizacin. Cualquier cosa fuera de este rango de coordenadas no se
visualizar. Por tanto, la funcin de GLU gluOrtho2D establece que el sistema de coordenadas de referencia dentro de la ventana de visualizacin deber tener las coordenadas (0.0, 0.0) en la esquina inferior izquierda de la ventana de visualizacin y (200,0, 150,0) en la esquina superior izquierda de la ventana. Ya que slo
describimos un objeto bidimensional, el nico efecto que tiene la proyeccin ortogonal es pegar nuestra
imagen en la ventana de visualizacin definida anteriormente. Por ahora, utilizaremos un rectngulo de coordenadas universales con la misma relacin de aspecto que la ventana de visualizacin, 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 visualizacin.
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 Captulo 3, presentaremos una explicacin detallada de estas
funciones y de otras funciones de OpenGL para la generacin de primitivas grficas.
glBegin (GL_LINES);
glVertex2i (180, 15);
glVertex2i (10, 145);
glEnd ( );

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 init. Nuestra descripcin geomtrica de la imagen que queremos visualizar est en el procedimiento lineSegment , que es el procedimiento que ser referenciado por la funcin de GLUT
glutDisplayFunc. Y el procedimiento main contiene las funciones de GLUT que configuran la ventana de
visualizacin y que muestran nuestro segmento en la pantalla. La Figura 2.62 muestra la ventana de visualizacin y el segmento rojo (gris en la figura) generado por este programa.

FIGURA 2.62. La ventana de visualizacin y el segmento generados por el programa de ejemplo.

Cap02_HEARN_1P.qxd

80

27/09/2005

19:30

Pgina 80

CAPTULO 2 Introduccin a los sistemas grficos

#include <GL/glut.h>

// (u otras lneas, dependiendo del sistema que usemos

void init (void)


{
glClearColor (1.0, 1.0, 1.0, 0.0);

// Establece el color de la ventana de


// visualizacin en blanco.

glMatrixMode (GL_PROJECTION);
// Establece los parmetros de proyeccin.
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void lineSegment (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 0.0, 0.0);

// Borra la ventana de visualizacin.


// Establece el color del segmento de
// lnea en rojo.

glBegin (GL_LINES);
glVertex2i (180, 15);// Especifica la geometra del segmento de lnea.
glVertex2i (10, 145);
glEnd ( );
glFlush ( );

// Procesa todas las subrutinas de OpenGL tan rpidamente


// como sea posible.

}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

// Inicializa GLUT.
// Establece el modo de
// visualizacin.
glutInitWindowPosition (50, 100);
// Establece la posicin de la esquina
// superior izquierda de la ventana de visualizacin.
glutInitWindowPosition (50, 100);
// Establece la posicin de la esquina
// superior izquierda de la ventana de visualizacin.
glutInitWindowSize (400, 300);
// Establece el ancho y la altura de la
// ventana de visualizacin.
glutCreateWindow (An Example OpenGL Program); // Crea la ventana de
// visualizacin.
init ( );
// Ejecuta el procedimiento de inicializacin.
glutDisplayFunc (lineSegment);
// Enva los grficos a la ventana de
// visualizacin.
glutMainLoop ( );
// Muestra todo y espera.

Al final del procedimiento lineSegment hay una funcin, glflush, 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 glFlush fuerza a que todos estos bferes se vacen y que las funciones de OpenGL se procesen.

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 81

2.10 Resumen

81

El procedimiento lineSegment que hemos creado para describir nuestra imagen se denomina funcin de
respuesta a la visualizacin (display callback function). Este procedimiento lo registra glutDisplayFunc
como la 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 bfer 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, spaceballs, 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 ANSI son GKS
3D 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-

Cap02_HEARN_1P.qxd

82

27/09/2005

19:30

Pgina 82

CAPTULO 2 Introduccin a los sistemas grficos

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 controladores 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 Shreiner
(2000). Open Inventor se explora en Wernecke (1994). McCarthy y Descartes (1998) se pueden consultar para
estudios de VRML. Se puede encontrar una presentacin de RenderMan en Upstill (1989). En Knudsen
(1999), Hardy (2000), y Horstman y Cornell (2001) se muestran ejemplos de programacin con Java 2D. La
programacin de grficos empleando Java 3D se explora en Sowizral, Rushforth y Deering (2000); Palmer
(2001); Selman (2002); y Walsh y Gehringer (2002).
Para informacin sobre PHIGS y PHIGS, vase Howard, Hewitt, Hubbold y Wyrwas (1991); Hopgood
y Duce (1991); Gaskins (1992); y Blake (1993). Informacin acerca del estndar GKS bidimensional y la evolucin de los estndares grficos se encuentra disponible en Hopgood, Duce, Gallop y Sutcliffe (1983).
Enderle, Kansy y Pfaff (1984) es una cita bibliogrfica adicional para GKS.

EJERCICIOS
2.1

Enumere las caractersticas de funcionamiento de las siguientes tecnologas de pantalla: sistemas de barrido, sistemas de refresco vectorial, pantallas de plasma y pantallas de cristal lquido (LCD).

2.2

Enumere algunas aplicaciones apropiadas para cada tecnologa de pantalla del Ejercicio 2.1.

2.3

Determine la resolucin (pxeles por centmetro) en las direcciones x e y 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.

Cap02_HEARN_1P.qxd

27/09/2005

19:30

Pgina 83

Ejercicios

83

2.4

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?

2.5

Suponga un sistema de barrido RGB que debe ser diseado empleando una pantalla de 8 pulgadas por 10 pulgadas con una resolucin de 100 pxeles 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?

2.6

Cunto tiempo ser necesario para cargar un bfer de imagen de 640 por 480 de 12 bits por pxel, si se pueden
transferir 105 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?

2.7

Suponga que dispone de una computadora con palabras de 32 bits y una tasa 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 (dot per inch; puntos por pulgada) con un tamao de pgina de 8 1/2 pulgadas por 11 pulgadas?

2.8

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?

2.9

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 l280 por 1024 y la relacin de aspecto es 1, cul es el dimetro de
cada punto de pantalla?

2.10

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?

2.11

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
thoriz, y un tiempo de retrazado vertical de tvert. Cul es la fraccin del tiempo total de refresco por cuadro que se
consume en retrazar el haz de electrones?

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?

2.13

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?

2.14

Compare las ventajas y las desventajas de un monitor tridimensional que utiliza un espejo varifocal frente a un
sistema estereoscpico.

2.15

Enumere los diferentes componentes de entrada y salida que se utilizan habitualmente en sistemas de realidad virtual. Explique tambin cmo los usuarios interactan con la escena virtual mostrada con diferentes dispositivos
de salida, tales como los monitores bidimensionales y los monitores estereoscpicos.

2.16

Explique cmo los sistemas de realidad virtual se pueden utilizar en aplicaciones de diseo. Qu otras aplicaciones tienen los sistemas de realidad virtual?

2.17

Enumere algunas aplicaciones de las pantallas panormicas.

2.18

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.

2.19

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).

2.20

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?

2.21

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.

2.22

Explique qu significa el trmino funcin de respuesta de visualizacin de OpenGL.

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 84

CAPTULO 3

Primitivas grficas

Una escena del vdeo 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.)

CAP03_HEARN_1P.qxd

3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13

27/09/2005

20:04

Pgina 85

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
Algoritmos de generacin de elipses
Otras curvas
Algoritmos paralelos para curvas
Direccionamiento de pxeles y geometra de
los objetos

3.14

Primitivas de reas rellenas

3.15

reas de relleno poligonales

3.16

Funciones OpenGL para relleno de reas


poligonales

3.17

Matrices de vrtices OpenGL

3.18

Primitivas de matrices de pxeles

3.19

Funciones OpenGL para matrices de pxeles

3.20

Primitivas de caracteres

3.21

Funciones OpenGL de caracteres

3.22

Particionamiento de imgenes

3.23

Listas de visualizacin de OpenGL

3.24

Funciones OpenGL de redimensionamiento


de la ventana de visualizacin

3.25

Resumen

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 paquete grfico que se utilizan para describir los distintos componentes de la imagen se denominan primitivas grficas o simplemente primitivas. Las primitivas grficas que describen la geometra de los objetos se denominan normalmente primitivas geomtricas.
Las primitivas geomtricas ms simples son las que indican posiciones de puntos y segmentos de lneas rectas. Entre las primitivas geomtricas adicionales que un paquete grfico puede incluir estn los crculos y otras
secciones cnicas, las superficies cudricas, las superficies y curvas de tipo spline y las reas coloreadas poligonales. Y la mayora de los sistemas 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-

CAP03_HEARN_1P.qxd

86

27/09/2005

20:04

Pgina 86

CAPTULO 3 Primitivas grficas

na aplicacin especial. Las investigaciones realizadas en el campo de la infografa estn continuamente descubriendo tcnicas de implementacin nuevas 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.

3.1 SISTEMAS DE COORDENADAS DE REFERENCIA


Para describir una imagen, primero es necesario seleccionar un sistema de coordenadas cartesianas adecuado,
denominado sistema de coordenadas de referencia del mundo, que puede ser bidimensional o tridimensional.
Despus se describen los objetos de la imagen proporcionando sus especificaciones geomtricas en trminos
de la posicin dentro de las coordenadas del mundo. Por ejemplo, definimos un segmento de lnea recta proporcionando la posicin de los dos puntos extremos, mientras que un polgono se especifica proporcionando
el conjunto de posiciones de sus vrtices. Estas coordenadas se almacenan en la descripcin de la escena, junto
con otras informaciones acerca de los objetos, como por ejemplo su color y su extensin de coordenadas,
que son los valores x, y y z mximos y mnimos para cada objeto. Un conjunto de coordenadas de extensin
tambin se denomina recuadro de contorno del objeto. Para una figura bidimensional, las coordenadas de
extensin se denominan a veces rectngulo de contorno. A continuacin, los objetos se visualizan pasando
la informacin de la escena a las rutinas de visualizacin, que identifican las superficies visibles y asignan los
objetos a sus correspondientes posiciones en el monitor de vdeo. El proceso de conversin de lneas almacena la informacin sobre la escena, como por ejemplo los valores de color, en las apropiadas ubicaciones dentro del bfer de imagen, y los objetos de la escena se muestran en el dispositivo de salida.

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 lnea de exploracin (el valor y) y el nmero de columna (el
valor x) dentro de una lnea 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 entero, ymax, en la parte inferior de la pantalla, mientras que las posiciones de pxel dentro de cada lnea de exploracin se numeran desde 0 a xmax, 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 rutinas de visualizacin a posiciones de pxel
enteras dentro del bfer de imagen.
Los algoritmos de lneas 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 ese 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.13 consideraremos otros
esquemas alternativos de direccionamiento de pxeles). Una vez identificadas las posiciones de los pxeles
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

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 87

3.1 Sistemas de coordenadas de referencia

87

5
4
3
2
1
0
0

FIGURA 3.1. Posiciones de pxel referenciadas con respecto a la esquina inferior izquierda de un rea de la pantalla.
setPixel (x, y);

Este procedimiento almacena el valor actual de color dentro del bfer de imagen, en la posicin entera (x,
y), 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 pxel. 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);

En esta funcin, el parmetro color recibe un valor entero que se corresponde con los cdigos RGB combinados almacenados para el pxel especificado en la posicin (x, y).
Aunque slo necesitamos los valores de color en las posiciones (x, 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.

Especificaciones absolutas y relativas de coordenadas


Hasta ahora, las referencias de coordenadas de las que hemos hablado son las que se denominan valores de
coordenadas absolutas. Esto quiere decir que los valores especificados son las posiciones reales dentro del
sistema de coordenadas que se est utilizando.
Sin embargo, algunos paquetes grficos tambin permiten especificar las posiciones utilizando coordenadas relativas. Este mtodo resulta til para diversas aplicaciones grficas, como por ejemplo para generar
imgenes con trazadores de tinta, para sistemas de dibujo artstico y para paquetes grficos para aplicaciones
de autoedicin e impresin. Tomando este enfoque, podemos especificar una posicin de coordenadas en
forma de un desplazamiento a partir de la ltima posicin a la que se hubiera hecho referencia (denominada
posicin actual). Por ejemplo, si la ubicacin (3, 8) es la ltima posicin a la que se ha hecho referencia dentro de un programa de aplicacin, una especificacin de coordenadas relativas (2, 1) se corresponde con una
posicin absoluta (5, 7). Por tanto, se utiliza una funcin adicional para establecer una posicin actual antes
de poder especificar ninguna coordenada para las funciones primitivas. Para describir un objeto, como por
ejemplo una serie de segmentos de lnea conectados, necesitaremos entonces proporcionar nicamente una
secuencia de coordenadas relativas (desplazamientos) despus de haber establecido una posicin inicial.
Dentro de un sistema grfico, pueden proporcionarse opciones que permitan especificar las ubicaciones utilizando coordenadas relativas o absolutas. En las secciones que siguen, vamos a suponer que todas las coordenadas se especifican como referencias absolutas, a menos que se indique explcitamente lo contrario.

CAP03_HEARN_1P.qxd

88

27/09/2005

20:04

Pgina 88

CAPTULO 3 Primitivas grficas

3.2 ESPECIFICACIN DE UN SISTEMA BIDIMENSIONAL DE REFERENCIA


UNIVERSAL EN O pen GL
En nuestro primer ejemplo de programa (Seccin 2.9), presentamos el comando gluOrtho2D, 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 gluOrtho2D 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 la 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:
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (xmin, xmax, ymin, ymax);

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 gluOrtho2D. 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 contrario, 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 gluOrtho2D.

3.3 FUNCIONES DE PUNTO EN Open GL


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 glVertex
debe situarse entre una funcin glBegin y una funcin glEnd. El argumento de la funcin glBegin se utiliza para identificar el tipo de primitiva grfica que hay que visualizar, mientras que glEnd no toma ningn
argumento. Para dibujar puntos, el argumento de la funcin glBegin es la constante simblica GL_POINTS.
As, la manera de especificar en OpenGL la posicin de un punto es
glBegin (GL_POINTS);
glVertex* ( );
glEnd ( );

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 89

3.3 Funciones de punto en OpenGL

Pant

alla d

89

e vd

eo

Ventana de
visualizacin

ymax

ymin
xmin
xmax

FIGURA 3.2. Lmites de las coordenadas


del mundo para una ventana de visualizacin especificada mediante la funcin
gluOrtho2D.

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 glVertex para
especificar coordenadas para las posiciones de los puntos. De esta forma, se utiliza 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 en OpenGL pueden proporcionarse en dos, tres o cuatro dimensiones. Se utiliza un valor
de sufijo de 2, 3 o 4 en la funcin glVertex 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 de 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 bidimensional como un caso especial del tridimensional, cualquier valor de coordenadas (x, y) es equivalente a
(x, y, 0) con h  1.
Tambin es necesario indicar el tipo de dato que se est usando para los valores numricos que especifican las coordenadas. Esto se hace con un segundo cdigo de sufijo en la funcin glVertex. Los cdigos de
sufijo para especificar el tipo de datos numricos son i (integer), s (short), f (float) y d (double). Finalmente,
los valores de las coordenadas pueden enumerarse explcitamente en la funcin glVertex, 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);
glVertex2i (50, 100);
glVertex2i (75, 150);
glVertex2i (100, 200);
glEnd ( );

Alternativamente, podramos especificar las coordenadas de los puntos anteriores mediante matrices,
como en:

CAP03_HEARN_1P.qxd

90

27/09/2005

20:04

Pgina 90

CAPTULO 3 Primitivas grficas


y
200
150
100
50

50

100

150

FIGURA 3.3. Visualizacin de tres puntos generados con glBegin (GL_POINTS).


int point1 [ ] = {50, 100};
int point2 [ ] = {75, 150};
int point3 [ ] = {100, 200};

e invocar a las funciones OpenGL de dibujo de los tres puntos de la forma siguiente:
glBegin (GL_POINTS);
glVertex2iv (point1);
glVertex2iv (point2);
glVertex2iv (point3);
glEnd ( );

He aqu 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);
glVertex3f (-78.05, 909.72, 14.60);
glVertex3f (261.91, -5200.67, 188.33);
glEnd ( );

Tambin podramos definir una clase o estructura (struct) C para especificar puntos en varias
dimensiones. Por ejemplo:
class wcPt2D {
public:
GLfloat x, y;
};

Utilizando esta definicin de clase, podramos especificar un punto en coordenadas bidimensionales universales mediante las instrucciones:
wcPt2D pointPos;
pointPos.x = 120.75;
pointPos.y = 45.30;
glBegin (GL_POINTS);
glVertex2f (pointPos.x, pointPos.y);
glEnd ( );

Y podemos emplear las funciones OpenGL de dibujo de puntos dentro de un procedimiento C para
implementar el comando setPixel.

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 91

3.4 Funciones OpenGL para lneas

91

3.4 FUNCIONES OpenGL PARA LNEAS


Los paquetes grficos proporcionan normalmente una funcin para especificar uno o ms segmentos de lnea
rectos, donde cada segmento de lnea est definido por las coordenadas de los dos extremos. En OpenGL,
podemos seleccionar la posicin de las coordenadas de uno de los extremos utilizando la funcin glVertex,
al igual que hicimos para el caso de un punto. Y tambin podemos encerrar una lista de funciones glVertex
entre la pareja de comandos glBegin/glEnd. Pero ahora vamos a emplear una constante simblica como
argumento para la funcin glBegin con el fin de que esta funcin interprete una lista de posiciones como las
coordenadas de los extremos de una serie de segmentos lineales. Hay tres constantes simblicas en OpenGL
que podemos usar para especificar cmo debe conectarse una lista de vrtices para formar un conjunto de segmentos de lnea rectos. De manera predeterminada, cada una de esas constantes simblicas muestra lneas
blancas continuas.
Para generar un conjunto de segmentos de lnea rectos entre pares sucesivos de puntos de una lista, se utiliza la constante de lnea primitiva GL_LINES. En general, esto da como resultado un conjunto de lneas no
conectadas, a menos que repitamos algunos de los puntos. Si slo se especifica un nico punto, no se visualizar nada; asimismo, si el nmero de puntos es impar, el ltimo de esos nmeros no ser procesado. Por
ejemplo, si tenemos cinco coordenadas de puntos, etiquetadas como p1 a p5, y cada uno de los puntos est
representado como una matriz bidimensional, el siguiente cdigo generara el grfico que se muestra en la
Figura 3.4(a).
glBegin (GL_LINES);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glEnd ( );

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 GL_LINE_STRIP, lo que se obtiene es una polilnea. En este caso, el
grfico es una secuencia de segmentos de lnea conectados que van desde el primer punto de la 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

p1

p2

p4
(a)

p3

p1

p5

p2

p4
(b)

p1

p5

p2

p4
(c)

FIGURA 3.4. Segmentos de lnea que pueden visualizarse en OpenGL utilizando una lista de cinco vrtices. (a) Un conjunto de lneas 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.

CAP03_HEARN_1P.qxd

92

27/09/2005

20:04

Pgina 92

CAPTULO 3 Primitivas grficas


glBegin (GL_LINE_STRIP);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glEnd ( );

La tercera primitiva de lnea OpenGL es GL_LINE_LOOP, que genera una polilnea cerrada. Se aade una
lnea adicional a la secuencia de lneas del ejemplo anterior, de modo que se conecta el ltimo vrtice de la
polilnea con el primero. La Figura 3.4(c) muestra el grfico correspondiente a nuestra lista de puntos cuando se selecciona esta opcin para el trazado de lneas.
glBegin (GL_LINE_LOOP);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glEnd ( );

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
lnea OpenGL.

3.5 ALGORITMOS DE DIBUJO DE LNEAS


Un segmento de lnea recta dentro de una escena est definido por las coordenadas de los dos extremos del
segmento. Para mostrar la lnea en un monitor digital, el sistema grfico debe primero proyectar las coordenadas de los extremos para obtener coordenadas de pantalla de valor entero y determinar las posiciones de
pxel ms prximas a lo largo de la lnea que conecta los dos extremos. Entonces, se cargar en el bfer de
imagen el color correspondiente a la lnea en las coordenadas de pxel apropiadas. Al leer los datos del bfer
de imagen, la controladora de vdeo dibujar los pxeles en pantalla. Este proceso lo que hace es digitalizar
la lnea para obtener un conjunto de posiciones enteras discretas que, en general, nicamente sirve como
aproximacin del verdadero trayecto seguido por la lnea. Una posicin de lnea calculada como (10.48,
20.51), por ejemplo, se convierte a la posicin de pxel (10, 21). Este redondeo de los valores de las coordenadas para obtener enteros hace que todas las lneas (excepto las horizontales y las verticales) se dibujen con
una apariencia escalonada, como puede verse en la Figura 3.5. La forma escalonada caracterstica de las lneas digitalizadas es particularmente apreciable en los sistemas de baja resolucin, pudindose mejorar un
poco su apariencia si se utiliza un monitor de resolucin ms alta. Otras tcnicas ms efectivas para suavizar la lnea digitalizada se basan en ajustar las intensidades de los pxeles a lo largo del trayecto de la lnea
(Seccin 4.17).

Ecuaciones de las lneas


Para determinar las posiciones de los pxeles a lo largo de un trayecto de lnea recta se utilizan las propiedades geomtricas de la lnea. La ecuacin punto-pendiente cartesiana para una lnea recta es:
y = mx +b

(3.1)

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 93

3.5 Algoritmos de dibujo de lneas

93

yend

y0

x0

FIGURA 3.5. Efecto de escalonamiento que se produce


cuando se genera una lnea mediante una serie de posiciones de pxel.

xend

FIGURA 3.6. Trayecto lineal entre dos vrtices


(x0, y0) y (xend, yend).

siendo m la pendiente de la lnea y b el punto de interseccin con el eje y. Puesto que los dos extremos del
segmento de lnea tienen las coordenadas (x0, y0) y (xend, yend), 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:
m=

yend y0
xend x0

b = y0 m x0

(3.2)
(3.3)

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 x a lo largo de una lnea, podemos calcular el correspondiente intervalo vertical y a partir de la Ecuacin 3.2, de la forma siguiente:

y = m x

(3.4)

De forma similar, podemos obtener el intervalo x correspondiente a un valor y especificado mediante la


frmula:

x=

y
m

(3.5)

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| < 1, x puede definirse de
forma proporcional a una pequea tensin de deflexin horizontal, y entonces la correspondiente deflexin
vertical ser proporcional al valor de y calculada a partir de la Ecuacin 3.4. Para las lneas cuyas pendientes tienen un mdulo |m| > 1, puede asignar a y un valor proporcional a una pequea tensin de deflexin
vertical, con lo que la correspondiente tensin de deflexin horizontal ser proporcional a x, que se calcula
a partir de la Ecuacin 3.5. Para las lneas con m  1, x  y 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.

CAP03_HEARN_1P.qxd

94

27/09/2005

20:04

Pgina 94

CAPTULO 3 Primitivas grficas

yend

y0

FIGURA 3.7. Segmento de lnea recta con cinco posiciones de muestreo a lo


largo del eje x entre x0 y xend.

x0

xend

Algoritmo DDA
El algoritmo de anlisis diferencial digital (DDA, Digital Differential Analizer) es un algoritmo de digitalizacin de lneas basado en calcular y o x 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, muestreemos a intervalos unitarios segn el eje de las x ( x  1) y calculamos
los valores sucesivos de y como:
(3.6)
y k +1 = y k + m
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 lneas con una pendiente positiva superior a 1.5, invertimos los papeles x e y, es decir, muestreamos a intervalos unitarios de y ( y  1) y calculamos los valores de x consecutivos mediante:
x k +1 = x k +

1
m

(3.7)

En este caso, cada valor de x calculado se redondea a la posicin de pxel ms cercana en la lnea de exploracin y 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 hasta 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 x  1 y
y k +1 = y k m

(3.8)

o (cuando la pendiente sea superior a 1) tendremos y  1 con


x k +1 = x k

1
m

(3.9)

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 x  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 x  1 y obtendremos los valores y utilizando la Ecuacin 3.8. Para una pendiente negativa con valor absoluto superior a 1,
usaremos y  1 y la Ecuacin 3.9 o y  1 y la Ecuacin 3.7.

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 95

3.5 Algoritmos de dibujo de lneas

95

Este 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 steps. Partiendo de la posicin (x0, y0), determinemos el desplazamiento
requerido en cada paso para generar el siguiente pxel de la lnea. Este proceso se ejecuta en bucle un nmero de veces igual a steps. Si el mdulo de dx es superior al mdulo de dy y x0 es inferior a xEnd, los valores de los incrementos en las direcciones x e y son 1 y m, respectivamente. Si el cambio mayor se realiza en
la direccin x, pero x0 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 y y un incremento (o decremento) para x igual a m1 .
#include <stdlib.h>
#include <math.h>
inline int round (const float a) { return int (a + 0.5); }
void lineDDA (int x0, int y0, int xEnd, int yEnd)
{
int dx = xEnd - x0, dy = yEnd - y0, steps, k;
float xIncrement, yIncrement, x = x0, y = y0;
if (fabs (dx) > fabs (dy))
steps = fabs (dx);
else
steps = fabs (dy);
xIncrement = float (dx) / float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k < steps; k++) {
x += xIncrement;
y += yIncrement;
setPixel (round (x), round (y));
}
}

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 m y m1
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 m1 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.

CAP03_HEARN_1P.qxd

96

27/09/2005

20:04

Pgina 96

CAPTULO 3 Primitivas grficas

Trayecto lineal
especificado

13

50
Trayecto lineal
especificado

12
49
11
48
10

50
10

11

12

51

52

53

13

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.

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.

Algoritmo de Bresenham para dibujo de lneas


En esta seccin, vamos a presentar un algoritmo preciso y eficiente para la generacin de lneas digitalizadas;
este algoritmo, inventado por Bresenham, utiliza slo clculos enteros para determinar los incrementos.
Adems, el algoritmo de Bresenham para dibujo de lneas puede adaptarse para dibujar crculos y otras lneas. Las Figuras 3.8 y 3.9 muestran sendas secciones de una pantalla en las que tenemos que dibujar dos segmentos lineales. El eje vertical muestra las posiciones de las lneas de exploracin, mientras que el eje
horizontal identifica las columnas de pxeles. Muestreando a intervalos unitarios segn el eje x en estos ejemplos, necesitamos decidir cul de las dos posibles posiciones de pxel est ms prxima al trayecto lineal en
cada paso de muestreo. Comenzando a partir del extremo izquierdo mostrado en la Figura 3.8, necesitamos
determinar en la siguiente posicin de muestreo si debemos dibujar el pxel correspondiente a la posicin (11,
11) o el de la posicin (11, 12). De forma similar, la Figura 3.9 muestra un trayecto lineal con pendiente negativa que comienza a partir del extremo izquierdo situado en la posicin de pxel (50, 50). En este caso, debemos seleccionar como siguiente posicin de pxel las coordenadas (51, 50) o (51, 49)? Estas preguntas se
responden con el algoritmo de Bresenham comprobando el signo de un parmetro entero cuyo valor es proporcional a la diferencia entre las separaciones verticales de las dos posiciones de pxel con respecto al trayecto lineal.
Para ilustrar el algoritmo de Bresenham, vamos primero a analizar el proceso de digitalizacin de lneas
con pendiente positiva inferior a 1.0. Las posiciones de pxel a lo largo de un trayecto lineal se determinan
entonces muestreando a intervalos unitarios segn el eje x. Comenzando a partir del extremo izquierdo (x0,
y0) de una lnea dada, vamos recorriendo cada una de las sucesivas columnas (posicin x) y dibujando el pxel
cuyo valor y sea ms prximo al trayecto lineal. La Figura 3.10 ilustra el paso k-simo de este proceso.
Suponga que hemos determinado que hay que dibujar el pxel situado en (xk, yk); entonces tendremos que decidir qu pxel dibujar en la columna xk1  xk  1. Las dos opciones existentes son los pxeles de las posiciones (xk  1, yk) y (xk  1, yk  1).
En la posicin de muestreo xk  1, etiquetamos las separaciones verticales de los pxeles con respecto al
trayecto lineal matemtico con los nombres dlower y dupper (Figura 3.11). La coordenada y de la lnea matemtica en la columna de pxel xk  1 se calcula como:
y = m( xk + 1) + b

(3.10)

Entonces:
dlower = y yk
= m( xk + 1) + b yk

(3.11)

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 97

3.5 Algoritmos de dibujo de lneas

97

yk 3
yk 2

y  mx  b

yk 1

yk  1
y

yk

yk
xk

d upper
dlower
xk  1

xk  1 xk 2 xk 3

FIGURA 3.10. Una seccin de la pantalla que muestra


un pxel de la columna xk correspondiente a la lnea de
exploracin yk y que hay que dibujar como parte del trayecto de un segmento lineal con pendiente 0 < m < 1.

FIGURA 3.11. Distancias verticales entre las posiciones de los pxeles y la coordenada y de la lnea, en la
posicin de muestre xk  1.

y
dupper = ( yk + 1) y
= yk + 1 m( xk + 1) b

(3.12)

Para determinar cul de los dos pxeles 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:
dlower dupper = 2 m( xk + 1) 2 yk + 2b 1

(3.13)

Podemos obtener un parmetro de decisin pk para el paso k-simo del algoritmo de digitalizacin de lneas reordenando la Ecuacin 3.13 para que slo haya que realizar clculos enteros. Podemos hacer esto realizando la sustitucin m  y/x, donde y y x son las separaciones vertical y horizontal entre los dos
extremos de la lnea, y definiendo el parmetro de decisin como
pk = x(dlower dupper ) = 2 y xk 2 x yk + c

(3.14)

El signo de pk es igual al de dlower  dupper, porque x > 0 en nuestro ejemplo. El parmetro c es constante y tiene el valor 2y  x(2b  1), que es independiente de la posicin del pxel y se eliminar en los clculos recursivos de pk. Si el pxel de yk est ms prximo al trayecto lineal que el pxel de yk  1 (es decir,
dlower < dupper), entonces el parmetro de decisin pk 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 x o y.
Por tanto, podemos obtener los valores de los sucesivos parmetros de decisin utilizando clculos enteros
incrementales. En el paso k  1, el parmetro de decisin se evala a partir de la Ecuacin 3.14 como:
pk +1 = 2 y xk +1 2 x yk +1 + c
Pero si restamos la Ecuacin 3.14 de sta ltima ecuacin, tendremos:
pk +1 pk = 2 y( xk +1 xk ) 2 x( yk +1 yk )
Y como xk1  xk  1, nos queda:
pk +1 = pk + 2 y 2 x( yk +1 yk )
donde el trmino yk1  yk es 0 o 1, dependiendo del signo del parmetro pk.

(3.15)

CAP03_HEARN_1P.qxd

98

27/09/2005

20:04

Pgina 98

CAPTULO 3 Primitivas grficas

Este clculo recursivo de los parmetros de decisin se realiza en cada posicin entera x comenzando por
el extremo izquierdo de la lnea. El primer parmetro, p0, se evala a partir de la Ecuacin 3.14 en la posicin
inicial de pxel (x0, y0) y con m igual a y/x:
(3.16)
p0 = 2 y x
Resumimos el algoritmo de Bresenham para lneas con una pendiente positiva inferior a 1 en el siguiente
recuadro. Las constantes 2y y 2y  2x se calculan una nica vez para cada lnea que hay que digitalizar,
por lo que las operaciones aritmticas slo requieren sumas y restas enteras de estas dos constantes.

Algoritmo de Bresenham para dibujo de lneas con | m | < 1.0


1. Introducir los dos extremos de la lnea y almacenar el extremo izquierdo en (x0, y0).
2. Configurar el color para la posicin (x0, y0) del bfer del imagen, es decir, dibujar el primer punto.
3. Calcular las constantes x, y, 2y y 2y  2x, y obtener el valor inicial del parmetro de decisin, que ser
p0  2y  x
4. Para cada xk a lo largo de la lnea, comenzando en k  0, realizar la siguiente comprobacin. Si
pk < 0, el siguiente punto que hay que dibujar ser (xk  1, yk) y
pk1  pk  2y
En caso contrario, el siguiente punto que habr que dibujar es (xk  1, yk  1) y
pk1  pk  2y  2x
5. Realizar el Paso 4 x 1 veces.

Ejemplo 3.1 Dibujo de lneas mediante el algoritmo de Bresenham


Para ilustrar el algoritmo, vamos a digitalizar la lnea definida por los vrtices (20, 10) y (30, 18). Esta
lnea tiene una pendiente de 0,8, con:
x = 10, y = 8
El parmetro de decisin inicial tiene el valor:
p0 = 2 y x = 6

y los incrementos para calcular los sucesivos parmetros de decisin son:


2 y = 16,

2 y 2 x = 4

Dibujamos el punto inicial (x0, y0)  (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:
k

pk

(xk1, yk1)

pk

(xk1, yk1)

pk

(xk1, yk1)

(21, 11)

10

(25, 14)

2

(28, 16)

(22, 12)

(26, 15)

14

(29, 17)

2

(23, 12)

(27, 16)

10

(30, 18)

14

(24, 13)

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 99

3.5 Algoritmos de dibujo de lneas

99

18

15

10
20 21 22

25

30

FIGURA 3.12. Posiciones de 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 lneal.
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.
#include <stdlib.h>
#include <math.h>
/* Algoritmo de dibujo de lneas de Bresenham para |m| < 1.0. */
void lineBres (int x0, int y0, int xEnd, int yEnd)
{
int
int
int
int

dx = fabs (xEnd - x0), dy = fabs(yEnd - y0);


p = 2 * dy - dx;
twoDy = 2 * dy, twoDyMinusDx = 2 * (dy - dx);
x, y;

/* Determinar qu extremo usar como posicin inicial. */


if (x0 > xEnd) {
x = xEnd;
y = yEnd;
xEnd = x0;
}
else {
x = x0;
y = y0;
}
setPixel (x, y);
while (x < xEnd) {
x++;
if (p < 0)
p += twoDy;

CAP03_HEARN_1P.qxd

100

27/09/2005

20:04

Pgina 100

CAPTULO 3 Primitivas grficas

else {
y++;
p += twoDyMinusDx;
}
setPixel (x, y);
}
}

El algoritmo 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
de 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 pixel superior (o inferior) de los dos candidatos cuando las dos
separaciones verticales con respecto al trayecto de la lnea sean iguales (dlower  dupper). Para 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 (y  0), las lneas verticales (x  0) y las lneas diagonales (|x|  |y|) pueden cargarse directamente en el bfer de imagen sin necesidad de procesarlas mediante el algoritmo de dibujo de lneas.

Visualizacin de polilneas
La implementacin de un procedimiento de dibujo de polilneas se realiza invocando n  1 veces un algoritmo de dibujo de lneas, con el fin de visualizar las lneas que conectan los n 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 bfer 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.

3.6 ALGORITMOS PARALELOS DE DIBUJO DE LNEAS


Los algoritmos de generacin de lneas que hemos presentado hasta ahora determinan las posiciones de los
pxeles de manera secuencial. Utilizando procesamiento en paralelo, podemos calcular mltiples posiciones
de pxel simultneamente a lo largo del trayecto de lnea, dividiendo los clculos entre los diversos procesadores disponibles. Una tcnica para resolver el problema del particionamiento consiste en adaptar un algoritmo secuencial existente con el fin de aprovechar la existencia de mltiples procesadores. Alternativamente,
podemos examinar otras formas de realizar el procesamiento que permitan calcular eficientemente en paralelo las posiciones de los pxeles. Una consideracin importante que hay que tener presente a la hora de desarrollar un algoritmo paralelo es que hay que equilibrar la carga de procesamiento entre todos los procesadores
disponibles.
Si tenemos np procesadores, podemos implementar un algoritmo paralelo de dibujo de lneas por el mtodo de Bresenham subdividiendo el trayecto lineal en np particiones y generando simultneamente los segmentos lineales correspondientes a cada uno de estos subintervalos. Para una lnea con pendiente 0 < m < 1.0 y

CAP03_HEARN_1P.qxd

27/09/2005

20:04

Pgina 101

3.6 Algoritmos paralelos de dibujo de lneas

101

un extremo izquierdo con coordenadas (x0, y0), particionaremos la lnea a lo largo de la direccin x positiva.
La distancia entre las posiciones x iniciales de las particiones adyacentes puede calcularse como:

x p =

x + n p 1
np

(3.17)

donde x es la anchura de la lnea y el valor xp de anchura de la particin se calcula empleando una divisin
entera. Si numeramos las particiones y los procesadores como 0, 1, 2, hasta np  1, podemos calcular la coordenada x inicial de la particin k-sima mediante la frmula:
xk = x0 + k x p

(3.18)

Como ejemplo si tenemos np  4 procesadores con x  15, la anchura de las particiones ser 4 y los
valores x iniciales de las particiones sern x0, x0  4, x0  8 y x0  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 y
y el valor inicial del parmetro de decisin para cada particin. El cambio yp en la particin y para cada particin se calcula a partir de la pendiente n de la lnea y de la anchura xp de la particin:
y p = mx p

(3.19)

Para la particin k-sima, la coordenada y inicial ser entonces


yk = y0 + round(k y p )

(3.20)

El parmetro de decisin inicial para el algoritmo de Bresenham al principio del subintervalo k-simo se
obtiene a partir de la Ecuacin 3.14:
pk = (k x p )(2 y) round(k y p )(2 x ) + 2 y x

(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 (xk, yk). Los
clculos en coma flotante pueden reducirse a operaciones aritmticas enteras utilizando los valores iniciales
yk y pk pero sustituyendo m  y/x y reordenando los trminos. Podemos ampliar el algoritmo paralelo de
Bresenham para una lnea con pendiente superior a 1.0 particionando la lnea 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 lmites de las extensiones de coordenadas de la lnea y calculando las distancias de los pxeles con respecto al trayecto lineal. El nmero de pxeles dentro del recuadro de contorno de una lnea es x y (Figura 3.13). La
distancia perpendicular d entre la lnea de la Figura 3.13 y un pxel de coordenadas (x, y) se obtiene mediante la frmula:
(3.22)
d = Ax + By + C
donde
A=

y
longitudlnea

CAP03_HEARN_1P.qxd

102

27/09/2005

20:04

Pgina 102

CAPTULO 3 Primitivas grficas

yend

y

y0

FIGURA 3.13. Recuadro de contorno para una lnea con separaciones x y y


entre los dos extremos.

B=

x
longitudlnea

C=

x0 y y0 x
longitudlnea

x

x0

xend

con
longitudlnea = x 2 + y 2
Una vez evaluadas las constantes A, B y C para la lnea, cada procesador debe realizar dos multiplicaciones y dos sumas para calcular la distancia d del pxel. El pxel ser dibujado si d es inferior a un parmetro
determinado que especifique el grosor de la lnea.
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 lnea. Cada procesador calcular entonces la
interseccin de la lnea con la fila horizontal o columna vertical de pxeles que se le han asignado. Para una
lnea con pendiente |m| < 1.0, cada procesador simplemente despeja el valor de y en la ecuacin de la lnea a
partir de un valor de columna x. Para una lnea con pendiente de magnitud superior a 1.0, cada procesador
despeja x 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 secuenciales, pueden realizarse de manera eficiente utilizando mltiples procesadores.

3.7 ALMACENAMIENTO DE LOS VALORES EN EL BFER DE IMAGEN


El paso final en los procedimientos de implementacin relativos a los segmentos lineales y a otros objetos
consiste en establecer unos valores de color en el bfer de imagen. Puesto que los algoritmos de digitalizacin generan posiciones de pxel a intervalos unitarios sucesivos, tambin se pueden utilizar operaciones
incrementales para acceder de manera eficiente al bfer de imagen en cada paso del proceso de digitalizacin.
Como ejemplo especfico, suponga que accedemos a la matriz del bfer de imagen por orden ascendente
de filas y que las posiciones de pxel estn etiquetadas desde (0, 0) en la esquina inferior izquierda de la pantalla hasta (xmax, ymax) en la esquina superior derecha (Figura 3.14). Para un sistema monocromo (un bit por
pxel), la direccin de bit en el bfer de imagen para la posicin de pxel (x, y) se calcula como:
addr( x, y) = addr(0, 0) + y( xmax + 1) + x

(3.23)

Si nos movemos a lo largo de una lnea de exploracin, podemos calcular la direccin en el bfer de imagen para el pxel (x  1, y) como el siguiente desplazamiento a partir de la direccin correspondiente a la posicin (x, y):

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 103

3.8 Funciones OpenGL para curvas

103

ymax

(0, 0) (1, 0) (2, 0)

(x, y)
0

(xmax, 0)

addr (0, 0)
0

(xmax, ymax)

(0, 1)
addr (x, y)

xmax
Pantalla

Bfer de imagen

FIGURA 3.14. Posiciones en pantalla de los pxeles almacenados linealmente en orden ascendente de filas dentro del bfer
de imagen.

addr( x + 1, y) = addr( x, y) + 1

(3.24)

Si nos movemos en diagonal hasta la siguiente lnea de exploracin a partir de (x, y), tendremos la direccin del bfer de imagen correspondiente a (x  1, y  1) sin ms que aplicar la frmula:
addr( x + 1, y + 1) = addr( x, y) + xmax + 2

(3.25)

donde la constante xmax  2 se precalcula una nica vez para todos los segmentos de lnea. Podemos obtener
clculos incrementales 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 pxel, los clculos de las direcciones del bfer de imagen incluirn la anchura de los pxeles (nmero de bits), adems de la ubicacin del pxel en pantalla.

3.8 FUNCIONES OpenG L PARA CURVAS


Las rutinas para generar curvas bsicas, como crculos y elipses, no estn incluidas como funciones primitivas en la biblioteca OpenGL bsica. Pero esta biblioteca s que contiene funciones para dibujar splines de
Bzier, que son polinomios que se definen mediante un conjunto de puntos discreto. Y la utilidad OpenGL
(GLU, OpenGL Utility) tiene rutinas para cudricas tridimensionales, como esferas y cilindros, adems de
rutinas para generar B-splines racionales, que son una clase genrica de splines en la que estn incluidas las
curvas de Bzier, ms simples. Utilizando B-splines racionales, podemos dibujar crculos, elipses y otras cudricas bidimensionales. Adems, se incluyen rutinas en el conjunto de herramientas de GLU (GLUT, OpenGL
Utility Toolkit) que podemos utilizar para mostrar algunas cudricas tridimensionales, como esferas y conos,
y algunas otras formas geomtricas. Sin embargo, todas estas rutinas son bastante ms complejas que las primitivas bsicas que estamos presentando en este captulo, por lo que dejaremos el anlisis de este grupo de
funciones para el Captulo 8.
Otro mtodo que podemos utilizar para generar la grfica de una curva simple consiste en aproximarla utilizando una polilnea. Basta con localizar un conjunto de puntos a lo largo del trayecto de la curva y conectar
dichos puntos mediante segmentos de lnea recta. Cuantas ms secciones lineales incluyamos en la polilnea,
ms suave ser la apariencia de la curva. Como ejemplo, la Figura 3.15 muestra varias grficas de polilneas
que podran utilizarse para aproximar un segmento circular.
Una tercera alternativa consiste en escribir nuestras propias funciones de generacin de curvas basndonos en los algoritmos presentados en las siguientes secciones. Hablaremos primero de algunos mtodos efi

CAP03_HEARN_1P.qxd

104

27/09/2005

20:05

Pgina 104

CAPTULO 3 Primitivas grficas

(a)

(b)

(c)

FIGURA 3.15. 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.

3.9 ALGORITMOS PARA GENERACIN DE CRCULOS


Puesto que el crculo es un componente muy frecuentemente utilizado en dibujos y grficas, muchos paquetes grficos incluyen un procedimiento para generar crculos completos o arcos circulares. Asimismo, en ocasiones hay disponible una funcin genrica en las bibliotecas grficas para mostrar diversos tipos de curvas,
incluyendo crculos y elipses.

Propiedades de los crculos


Un crculo (Figura 3.16) se define como el conjunto de puntos que se encuentran a una distancia determinada r con respecto a una posicin central (xc, yc). Para cualquier punto (x, y) del crculo, esta relacin de distancia se expresa mediante el teorema de Pitgoras en coordenadas cartesianas:
( x xc )2 + ( y yc )2 = r 2

(3.26)

Podemos utilizar esta ecuacin para calcular la posicin de los puntos sobre una circunferencia, recorriendo el eje x en pasos unitarios desde xc r a xc  r y calculando los correspondientes valores y en cada posicin mediante la frmula:
(3.27)
y = yc r 2 ( xc x )2
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 x e y (recorriendo los
valores y y calculando los valores x) 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.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 105

3.9 Algoritmos para generacin de crculos

105

(x, y)
r
yc

xc

FIGURA 3.16. Crculo con centro en (xc, yc) y radio r.

FIGURA 3.17. Parte superior de un crculo dibujada


mediante la Ecuacin 3.27 y con (xc, yc)  (0, 0).

Otra forma de eliminar el espaciado desigual mostrado en la Figura 3.17 consiste en calcular los puntos
de la circunferencia utilizando las coordenadas polares r y (Figura 3.16). Si expresamos la ecuacin de la
circunferencia en forma paramtrica polar, obtenemos la pareja de ecuaciones:
x = xc + r cos
y = yc + r sin

(3.28)

Cuando se genera una grfica con estas ecuaciones utilizando un paso angular fijo, se dibujar un crculo
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 valor 1r . 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 crculo 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 x 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 x. Podemos llevar este razonamiento un paso ms all y observar que tambin existe simetra entre los octantes. 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 octantes. Estas condiciones de simetra se ilustran en la Figura 3.18, en la que un punto en
la posicin (x, y) sobre un sector de un octavo de crculo se hace corresponder con los otros siete puntos del
crculo situados en los restantes octantes del plano x. 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 x  y. La pendiente de la curva en este octante tiene una magnitud
igual o inferior a 1.0. Para x  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 incrementales 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.

CAP03_HEARN_1P.qxd

106

27/09/2005

20:05

Pgina 106

CAPTULO 3 Primitivas grficas

(y, x)

(y, x)

(x, y)
45

FIGURA 3.18. Simetra de un crculo. El clculo de un punto (x, y) del crculo en


uno de los octantes nos da los puntos del crculo que se muestran para los otros
siete octantes.

(x, y)

(x, y)
(y, x)

(x, y)

(y, 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 lo que hara falta calcular races cuadradas para hallar
las distancias de los pxeles con respecto a la trayectoria circular. El algoritmo de Bresenham para crculos 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.

Algoritmo del punto medio para crculos


Como en el ejemplo de digitalizacin de lneas, muestreamos a intervalos unitarios y determinados la posicin de pxel ms prxima a la trayectoria circular especificada. Para un radio r dado y unas coordenadas del
centro de valor (xc, yc), podemos primero ejecutar el algoritmo para calcular las posiciones de los pxeles alrededor de una trayectoria circular centrada en el origen de coordenadas (0, 0). Despus, movemos cada posicin calculada (x, y) a la posicin de pantalla adecuada sumando xc a x e yc a y. A lo largo de la seccin circular
que va desde x  0 a x  y en el primer cuadrante, la pendiente de la curva vara desde 0 a 1.0. Por tanto,
podemos tomar pasos unitarios en la direccin x positiva a lo largo de este octante y utilizar un parmetro de
decisin para determinar cul de las dos posibles posiciones de pxel en cada columna est ms cerca verticalmente a la trayectoria circular. Las posiciones en los otros siete octantes se obtienen entonces por simetra.
Para aplicar el mtodo del punto medio, definimos una funcin circular como:
fcirc ( x, y) = x 2 + y 2 r 2

(3.29)

Cualquier punto (x, y) en la frontera del crculo de radio r satisfar la ecuacin fcirc(x, y)  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 crculo, el valor de la funcin ser positivo. En resumen, la posicin relativa de cualquier punto
(x, y) puede determinarse comprobando el signo de la funcin generadora del crculo:
< 0, si ( x, y) se encuentra dentro del crculo

fcirc ( x, y) = 0, si ( x, y) se encuentra sobre la circunferencia


> 0, si ( x, y) se encuentra fuera del crculo

(3.30)

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

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 107

3.9 Algoritmos para generacin de crculos

x2  y2  r 2  0

yk
yk  1

107

Punto medio

xk

xk  1 xk  2

FIGURA 3.19. Punto medio entre los dos pxeles candidatos para la posicin de
muestreo xk  1 a lo largo de una trayectoria circular.

decisin en el algoritmo del punto medio, y podemos determinar los clculos incrementales necesarios para
esta funcin, como hicimos con el algoritmo de generacin de lneas.
La Figura 3.19 muestra el punto medio entre los dos pxeles candidatos para la posicin de muestreo xk 
1. Suponiendo que acabemos de dibujar el pxel (xk, yk), necesitaremos a continuacin determinar si el pxel
en la posicin (xk  1, yk) se encuentra ms cerca o ms lejos del crculo que el situado en la posicin (xk 
1, yk  1). Nuestro parmetro de decisin ser la Ecuacin 3.29 de generacin del crculo, evaluado en el
punto medio entre estos dos pxeles:
1
pk = fcirc xk + 1, yk
2

(3.31)
2

1
= ( xk + 1)2 + yk r 2
2

Si pk < 0, este punto medio se encontrar en el interior del crculo y el pxel situado en la lnea de exploracin yk estar ms cerca de la frontera del crculo. En caso contrario, el punto intermedio se encuentra fuera
del crculo o sobre la misma circunferencia, y seleccionaremos el pxel correspondiente a la lnea de exploracin yk  1.
Los sucesivos parmetros de decisin se obtienen utilizando clculos incrementales. Podemos obtener una
frmula recursiva para el siguiente parmetro de decisin evaluando la funcin circular en la posicin de
muestreo xk  1  xk  2:
1
pk +1 = fcirc xk +1 + 1, yk +1
2

1
= [( xk + 1) + 1]2 + yk +1 r 2
2

o
pk +1 = pk + 2( xk + 1) + ( yk2+1 yk2 ) ( yk +1 yk ) + 1

(3.32)

donde yk1 es yk o yk  1, dependiendo del signo de pk.


Los incrementos para obtener pk1 son 2xk1  1 (si pk es negativo) o 2xk1  1  2yk1. La evaluacin
de los trminos 2xk1 y 2yk1 tambin puede hacerse incrementalmente mediante las frmulas:
2 x k +1 = 2 x k + 2
2 y k +1 = 2 y k 2
En la posicin inicial (0, r), estos dos trminos tienen los valores 0 y 2r, respectivamente. Cada valor sucesivo para el trmino 2xk1 se obtiene sumando 2 al valor anterior y cada valor sucesivo del trmino 2yk1 se
obtiene restando 2 al valor anterior.

CAP03_HEARN_1P.qxd

108

27/09/2005

20:05

Pgina 108

CAPTULO 3 Primitivas grficas

El parmetro de decisin inicial se obtiene evaluando la funcin de generacin del crculo en la posicin
inicial (x0, y0)  (0, r):
1
p0 = fcirc 1, r
2

1
= 1 + r r 2
2

o
p0 =

5
r
4

(3.33)

Si el radio r est especificado como un valor entero, podemos simplemente redondear p0 de la forma
siguiente:
p0 = 1 r (para r entero)
dado que todos los incrementos son enteros.
Como en el algoritmo de lneas de Bresenham, el mtodo del punto medio calcula las posiciones de los
pxeles 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.

Algoritmo del punto medio para generacin de crculos


1. Introducir el radio r y el centro del crculo (xc, yc) y luego establecer las coordenadas para el primer punto de la circunferencia de un crculo centrado en el origen mediante la frmula:
(xc, yc )  (0, r)
2. Calcular el valor inicial del parmetro de decisin como
5
r
4
3. Para cada posicin xk, comenzando en k  0, realizar la siguiente comprobacin. Si pk < 0, el
siguiente punto a lo largo de un crculo centrado en (0,0) ser (xk1, yk) y,
p0 =

pk +1 = pk + 2 xk +1 + 1
En caso contrario, el siguiente punto del crculo ser (xk  1, yk  1) y,
pk +1 = pk + 2 xk +1 + 1 2 yk +1
donde 2xk1  2xk y 2yk1  2yk  2.
4. Determinar los puntos simtricos en los otros siete octantes.
5. Mover cada posicin de pxel (x, y) calculada hasta la trayectoria circular centrada en (xc, yc) y
dibujar los valores de coordenadas:
x = x + xc ,
6. Repetir los Pasos 3 a 5 hasta que x y.

y = y + yc

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 109

3.9 Algoritmos para generacin de crculos

109

Ejemplo 3.2 Dibujo de un crculo mediante el algoritmo del punto medio.


Dado un crculo de radio r  10, vamos a ilustrar el algoritmo del punto medio para generacin de crculos determinando las posiciones a lo largo del octante del crculo situado en el primer cuadrante,
entre x  0 y x  y. El valor inicial del parmetro de decisin es:
p0 = 1 r = 9
Para el crculo centrado en el origen de coordenadas, el punto inicial es (x0, y0)  (0, 10) y los trminos de incremento iniciales para el clculo de los parmetros de decisin son:
2 x0 = 0,

2 y0 = 20

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

pk

(xk1, yk1)

2xk1

2yk1

9

(1, 10)

20

6

(2, 10)

20

1

(3, 10)

20

(4, 9)

18

3

(5, 9)

10

18

(6, 8)

12

16

(7, 7)

14

14

En la Figura 3.20 se muestra una grfica de las posiciones de pxel generadas en el primer cuadrante.
yx

y
10
9
8
7
6
5
4
3
2
1
0
0

9 10

FIGURA 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.

CAP03_HEARN_1P.qxd

110

27/09/2005

20:05

Pgina 110

CAPTULO 3 Primitivas grficas

El siguiente segmento de cdigo ilustra los procedimientos que podran emplearse para implementar el
algoritmo del punto medio para generacin de crculos. Al procedimiento circleMidpoint 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 octante de la trayectoria circular y se pasa dicha posicin al procedimiento
circlePlotPoints. Este procedimiento almacena el color correspondiente al crculo en el bfer de imagen
para todas las posiciones simtricas dentro del crculo, efectuando llamadas repetidas a las rutina setPixel,
que est implementada con las funciones de dibujo de puntos de OpenGL.

#include <GL/glut.h>
class screenPt
{
private:
GLint x, y;
public:
/* Constructor predeterminado: inicializa las coordenadas a (0, 0). */
screenPt ( ) {
x = y = 0;
}
void setCoords (GLint xCoordValue, GLint yCoordValue) {
x = xCoordValue;
y = yCoordValue;
}
GLint getx ( ) const {
return x;
}
GLint gety ( ) const {
return y;
}
void incrementx ( ) {
x++;
}
void decrementy ( ) {
y;
}
};
void setPixel (GLint xCoord, GLint yCoord)
{
glBegin (GL_POINTS);
glVertex2i (xCoord, yCoord);
glEnd ( );
}
void circleMidpoint (GLint xc, GLint yc, GLint radius)
{
screenPt circPt;

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 111

3.10 Algoritmos de generacin de elipses

GLint p = 1 - radius;

111

// Valor inicial para el parmetro de punto medio.

circPt.setCoords (0, radius); // Establecer coordenadas para


// punto superior del crculo.
void circlePlotPoints (GLint, GLint, screenPt);
/* Dibujar el punto inicial en cada cuadrante del crculo. */
circlePlotPoints (xc, yc, circPt);
/* Calcular el siguiente punto y dibujarlo en cada octante. */
while (circPt.getx ( ) < circPt.gety ( )) {
circPt.incrementx ( );
if (p < 0)
p += 2 * circPt.getx ( ) + 1;
else {
circPt.decrementy ( );
p += 2 * (circPt.getx ( ) - circPt.gety ( )) + 1;
}
circlePlotPoints (xc, yc, circPt);
}
}
void circlePlotPoints (GLint xc, GLint
{
setPixel (xc + circPt.getx ( ), yc
setPixel (xc - circPt.getx ( ), yc
setPixel (xc + circPt.getx ( ), yc
setPixel (xc - circPt.getx ( ), yc
setPixel (xc + circPt.gety ( ), yc
setPixel (xc - circPt.gety ( ), yc
setPixel (xc + circPt.gety ( ), yc
setPixel (xc - circPt.gety ( ), yc
}

yc, screenPt circPt)


+
+
+
+
-

circPt.gety
circPt.gety
circPt.gety
circPt.gety
circPt.getx
circPt.getx
circPt.getx
circPt.getx

(
(
(
(
(
(
(
(

));
));
));
));
));
));
));
));

3.10 ALGORITMOS DE GENERACIN DE ELIPSES


En trminos simples, una elipse es un crculo alargado. Tambin podemos escribir una elipse como un crculo modificado cuyo radio vara desde un valor mximo en una direccin hasta un valor mnimo en la direccin perpendicular. Los segmentos de lnea recta trazados en el interior de la elipse en estas dos direcciones
perpendiculares se denominan eje mayor y menor de la elipse.

Propiedades de las elipses


Puede darse una definicin precisa de una elipse en trminos de la distancia desde cualquier punto de la elipse a dos posiciones fijas, denominadas focos de la elipse. La suma de estas dos distancias es constante para
todos los puntos de la elipse (Figura 3.21). Si etiquetamos como d1 y d2 las distancias a los dos focos desde
cualquier punto P  (x, y) de la elipse, la ecuacin general de la elipse puede escribirse:

CAP03_HEARN_1P.qxd

112

27/09/2005

20:05

Pgina 112

CAPTULO 3 Primitivas grficas


y
y

d1
F1
yc

P = (x, y)
F2

ry
rx

d2

xc

FIGURA 3.22. Elipse centrada en (xc, yc) con semieje


mayor rx y semieje menor ry.

FIGURA 3.21. Elipse generada con los focos F1 y F2.

d1 + d2 = constante

(3.34)

Expresando las distancias d1 y d2 en trminos de las coordenadas de los focos F1  (x1, y1) y F2  (x2,
y2), tendremos:
(3.35)
( x x1 )2 + ( y y1 )2 + ( x x2 )2 + ( y y2 )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
Ax 2 + By 2 + Cxy + Dx + Ey + F = 0

(3.36)

donde los coeficientes A, B, C, D, E y 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 lnea 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 los
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 x e y. El parmetro rx de este ejemplo indica el semieje mayor, mientras que el parmetro ry 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 rx y ry, de la forma
siguiente:
x xc y yc

+
rx ry
2

= 1

(3.37)

Utilizando las coordenadas polares r y , podemos tambin describir la elipse en su posicin estndar con
las ecuaciones paramtricas:
x = xc + rx cos
(3.38)
y = yc + ry sin

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 113

3.10 Algoritmos de generacin de elipses

r  rx

(x, y)

113

(x, y)
ry

yc

rx
(x, y)
xc

(x, y)

FIGURA 3.23. El crculo circunscrito y el ngulo de


excentricidad para una elipse con rx > ry.

FIGURA 3.24. Simetra de una elipse. El clculo de un


punto (x, y) en un cuadrante nos da los puntos de la
elipse que se muestran para los otros tres cuadrantes.

El ngulo , denominado ngulo de excentricidad de la elipse, se mide a lo largo del permetro de un crculo circunscrito. Si rx > ry, el radio del crculo circunscrito es r  rx (Figura 3.23). En caso contrario, el crculo circunscrito tiene como radio r  ry.
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 octantes 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).

Algoritmo del punto medio para la elipse


La tcnica que vamos a utilizar es similar a la que hemos empleado para visualizar el crculo digitalizado.
Dados los parmetros rx, ry y (xc, yc), determinamos las posiciones (x, y) de la curva para una elipse en posicin estndar centrada en el origen y luego desplazamos todos los puntos utilizando un desplazamiento constante, de modo que la elipse est centrada en (xc, yc). Si queremos tambin mostrar la elipse en posicin no
estndar, podemos rotarla alrededor de su centro con el fin de reorientar los ejes mayor y menor en las direcciones deseadas. Pero por el momento, vamos a considerar nicamente la visualizacin de elipses en posicin
estndar. Hablaremos de los mtodos generales para transformar las orientaciones y posiciones de los objetos
en el Captulo 5.
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 rx < ry.
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.
Las regiones 1 y 2 (Figura 3.25) pueden procesarse de diversas formas. Podemos empezar en la posicin
(0, ry) 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 (rx, 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, ry) y a recorrer la trayectoria de la elipse en el sentido
de las agujas del reloj para todo el primer cuadrante.
Podemos definir una funcin de la elipse a partir de la Ecuacin 3.37 con (xc, yc)  (0, 0), de la forma
siguiente:

CAP03_HEARN_1P.qxd

114

27/09/2005

20:05

Pgina 114

CAPTULO 3 Primitivas grficas


y
Pendiente  1
ry

ry2x2  rx2y2  rx2ry2  0

Regin
1
Regin
2

yk

rx

yk  1

punto medio

xk

FIGURA 3.25. Regiones de procesamiento para la elipse. En la regin 1, la magnitud de la pendiente de la


elipse es inferior a 1.0; en la regin 2, la magnitud de
la pendiente es superior a 1.0.

xk  1

FIGURA 3.26. Punto medio entre los pxeles candidatos para la posicin de muestreo xk  1 a lo largo de
una trayectoria elptica.

felipse ( x, y) = ry2 x 2 + rx2 y 2 rx2 ry2

(3.39)

< 0, si ( x, y) est dentro de la elipse

felipse ( x, y) = 0, si ( x, y) est sobre la elipse


> 0, si ( x, y) est fuera de la elipse

(3.40)

que tiene las siguientes propiedades:

As, la funcin de la elipse felipse(x, y) se puede utilizar como parmetro de decisin para el algoritmo del
punto medio. En cada posicin de muestreo, 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, ry), tomamos pasos unitarios en la direccin x hasta que alcanzamos la frontera entre
las regiones 1 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:

2ry2 x
dy
= 2
dx
2rx y

(3.41)

En la frontera entre la regin 1 y la regin 2, dy/dx  1.0 y,


2ry2 x = 2rx2 y
Por tanto, habremos salido de la regin 1 cuando:
(3.42)

2ry2 x 2rx2 y

La Figura 3.26 muestra el punto medio entre los dos pxeles candidatos en la posicin de muestreo xk 
1, dentro de la primera regin. Suponiendo que hayamos seleccionado la posicin (xk, yk) 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:
2

1
1
p1k = felipse xk + 1, yk = ry2 ( xk + 1)2 + rx2 yk rx2 ry2
2
2

(3.43)

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 115

3.10 Algoritmos de generacin de elipses

115

Si p1k < 0, el punto medio estar dentro de la elipse y el pxel de la lnea de exploracin yk estar ms prximo a la frontera de la elipse. En caso contrario, el punto medio est fuera de la elipse o sobre ella y seleccionaremos el pxel situado en la lnea de exploracin yk  1.
En la siguiente posicin de muestreo (xk1  1  xk  2), el parmetro de decisin para la regin 1 se
evala como:
1
p1k +1 = felipse xk +1 + 1, yk +1
2

1
= ry2 [( xk + 1) + 1]2 + rx2 yk +1 rx2 ry2
2

o
2
2

1
1
p1k +1 = p1k + 2ry2 ( xk + 1) + ry2 + rx2 yk +1 yk
2
2

(3.44)

donde yk1 puede ser yk o yk  1, dependiendo del signo de p1k.


Los parmetros de decisin se incrementan de la forma siguiente:
2ry2 xk +1 + ry2 ,

incremento =
2r 2 x + r 2 2r 2 y ,
x k +1
y k +1 y

si p1k < 0
si p1k 0

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 2ry2 x y 2rx2 y pueden obtenerse incrementalmente. En la posicin inicial (0, ry), estos dos trminos tienen como valor:
2ry2 x = 0

(3.45)

2r y = 2r r
2
x

2
x y

(3.46)
2ry2 al

valor actual del


A medida que se incrementan x e y, los valores actualizados se obtienen sumando
trmino de incremento de la Ecuacin 3.45 y restando 2rx2 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 (x0, y0)  (0, ry):
1
p10 = felipse 1, ry
2

1
= ry2 + rx2 ry rx2 ry2
2

o
1
p10 = ry2 rx2 ry + rx2
4

(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:

CAP03_HEARN_1P.qxd

116

27/09/2005

20:05

Pgina 116

CAPTULO 3 Primitivas grficas


ry2x2  rx2y2  rx2ry2  0
yk
yk  1

FIGURA 3.27. Punto medio entre pxeles candidatos en la posicin de muestreo


yk  1 a lo largo de una trayectoria elptica.

punto medio
xk

xk  1 xk  2

1
p2 k = felipse xk + , yk 1
2

1
= ry2 xk + + rx2 ( yk 1)2 rx2 ry2
2

(3.48)

Si p2k > 0, el punto medio se encontrar fuera de la elipse y seleccionaremos el pxel correspondiente a
xk. Si p2k 0, el punto medio estar sobre la elipse o dentro de ella y seleccionaremos la posicin de pxel
xk1.
Para determinar la relacin entre parmetros de decisin sucesivos dentro de la regin 2, evaluamos la funcin de la elipse en el siguiente punto de muestreo yk1  1  yk  2:
1
p2 k +1 = fellipse xk +1 + , yk +1 1
2

1
= ry2 xk +1 + + rx2 [(yyk 1) 1]2 rx2 ry2
2

(3.49)

o
2
2

1
1
p2 k +1 = p2 k 2rx2 ( yk 1) + rx2 + ry2 xk +1 + xk +
2
2

(3.50)

donde xk1 vale xk o xk  1, dependiendo del signo de p2k.


Cuando entramos en la regin 2, se toma como posicin inicial (x0, y0) la ltima posicin seleccionada en
la regin 1, y el parmetro de decisin inicial en la regin 2 ser entonces:
1
p2 0 = felipse x0 + , y0 1
2

1
= ry2 x0 + + rx2 ( y0 1)2 rx2 ry2
2

(3.51)

Para simplificar el clculo de p20, podemos seleccionar las posiciones de los pxeles en sentido contrario
a las agujas del reloj, comenzando en (rx, 0). Los pasos unitarios se tomaran entonces en la direccin y positiva, hasta alcanzar la ltima posicin seleccionada en la regin 1.
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 pxeles 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 aplica-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 117

3.10 Algoritmos de generacin de elipses

117

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 rx, ry y el centro de la elipse en coordenadas de pantalla enteras, slo hacen falta
clculos incrementales enteros para determinar los valores de los parmetros de decisin en el algoritmo del
punto medio para generacin de elipses. Los incrementos rx2 , ry2 , 2rx2 y 2ry2 se evalan una nica vez al principio del procedimiento. En el siguiente resumen, se en umeran los pasos para dibujar una elipse utilizando el
algoritmo del punto medio.

Algoritmo del punto medio para generacin de una elipse


1. Introducir rx, ry y el centro de la elipse (xc, yc) y obtener el primer punto sobre una elipse centrada en el origen, de la forma siguiente:
( x0 , y0 ) = (0, ry )
2. Calcular el valor inicial del parmetro de decisin en la regin 1 mediante la frmula
1
p10 = ry2 rx2 ry + rx2
4
3. En cada posicin xk dentro de la regin 1, comenzando en k  0, realizar la siguiente comprobacin. Si p1k < 0, el siguiente punto a lo largo de la elipse centrada en (0, 0) es (xk1, yk) y,
p1k +1 = p1k + 2ry2 xk +1 + ry2
En caso contrario, el siguiente punto a lo largo de la elipse ser (xk  1, yk  1) y,
p1k +1 = p1k + 2ry2 xk +1 2rx2 yk +1 + ry2
con
2ry2 xk +1 = 2ry2 xk + 2ry2 ,

2rx2 yk +1 = 2rx2 yk + 2rx2

debiendo continuar este proceso hasta que 2ry2 x 2rx2 y .


4. Calcular el valor inicial del parmetro de decisin en la regin 2 mediante la frmula:
2

1
p2 0 = ry2 x0 + + rx2 ( y0 1)2 rx2 ry2
2

donde (x0, y0) es la ltima posicin calculada para la regin 1.


5. En cada posicin yk de la regin 2, comenzando en k  0, realizar la siguiente comprobacin. Si
p2k > 0, el siguiente punto a lo largo de la elipse centrada en (0, 0) ser (xk, yk  1) y,
p2 k +1 = p2 k 2rx2 yk +1 + rx2
En caso contrario, el siguiente punto a lo largo de la elipse ser (xk  1, yk  1) y,
p2 k +1 = p2 k + 2ry2 xk +1 2rx2 yk +1 + rx2

CAP03_HEARN_1P.qxd

118

27/09/2005

20:05

Pgina 118

CAPTULO 3 Primitivas grficas

utilizando los mismos clculos incrementales para x e y que en la regin 1. Este proceso debe continuar hasta que y  0.
6. Para ambas regiones, determinar los puntos simtricos en los otros tres cuadrantes.
7. Mover cada posicin de pxel (x, y) calculada a la trayectoria elptica centrada en (xc, yc) y dibujar los valores de coordenadas:
x = x + xc ,

y = y + yc

Ejemplo 3.3 Dibujo de una elipse mediante el algoritmo del punto medio
Dados los parmetros de entrada para la elipse rx  8 y ry  6, vamos a ilustrar los pasos del algoritmo del punto medio para el clculo de la elipse determinando las posiciones digitalizadas a lo largo del
trayecto elptico en el primer cuadrante. Los valores e incrementos iniciales para los clculos del parmetro de decisin son:
2ry2 x = 0

(con incremento 2ry2 = 72)

2rx2 y = 2rx2 ry

(con incremento 2rx2 = 128)

Para la regin 1, el punto inicial para la elipse centrada en el origen ser (x0, y0)  (0, 6) y el valor
inicial del parmetro de decisin ser:
1
p10 = ry2 rx2 ry + rx2 = 332
4
La tabla siguiente muestra los valores sucesivos del parmetro de decisin para el punto medio y
las posiciones de los pxeles a lo largo de la elipse.
2ry2xk1

2rx2yk1

(1, 6)

72

768

(2, 6)

144

768

44

(3, 6)

216

768

208

(4, 5)

288

640

108

(5, 5)

360

640

288

(6, 4)

432

512

244

(7, 3)

504

384

p1k

(xk1, yk1)

332

224

2
3

Ahora salimos de la regin 1, ya que 2ry2 x > 2rx2 y .


Para la regin 2, el punto inicial es (x0, y0)  (7, 3) y el parmetro de decisin inicial es:
1
p2 0 = felipse 7 + , 2 = 151
2

Las posiciones restantes a lo largo del trayecto elptico en el primer cuadrante se pueden calcular
entonces como:

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 119

3.10 Algoritmos de generacin de elipses

(xk1, yk1)

2ry2xk1

2rx2yk1

151

(8, 2)

576

256

233

(8, 1)

576

128

745

(8, 0)

p1k

119

6
5
4
3
2
1
0
0

FIGURA 3.28. Posiciones de los pxeles a lo largo de un trayecto


elptico centrado en el origen con rx  8 y ry  6, utilizando el
algoritmo del punto medio para calcular las ubicaciones dentro
del primer cuadrante.

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
ellipseMidpoint los parmetros de la elipse Rx, Ry, xCenter e yCenter. Entonces se calculan las posiciones a lo largo de la curva en el primer cuadrante y dichas posiciones se pasan al procedimiento
ellipsePlotPoints. Se utilizan consideraciones de simetra para obtener las posiciones de la elipse en los
otros tres cuadrantes, y la rutina setPixel asigna el color de la elipse a las posiciones del bfer de imagen
correspondientes a estas posiciones de pantalla.
inline int round (const float a) { return int (a + 0.5); }
/* El siguiente procedimiento acepta valores que definen el centro
* de la elipse y sus semiejes mayor y menor, calculando las
* posiciones de la elipse mediante el algoritmo del punto medio.
*/
void ellipseMidpoint (int xCenter, int yCenter, int Rx, int Ry)
{
int Rx2 = Rx * Rx;
int Ry2 = Ry * Ry;
int twoRx2 = 2 * Rx2;
int twoRy2 = 2 * Ry2;
int p;
int x = 0;
int y = Ry;
int px = 0;
int py = twoRx2 * y;
void ellipsePlotPoints (int, int, int, int);
/*

Dibujar el punto inicial en cada cuadrante. */

CAP03_HEARN_1P.qxd

120

27/09/2005

20:05

Pgina 120

CAPTULO 3 Primitivas grficas

ellipsePlotPoints (xCenter, yCenter, x, y);


/* Regin 1 */
p = round (Ry2 - (Rx2 * Ry) + (0.25 * Rx2));
while (px < py) {
x++;
px += twoRy2;
if (p < 0)
p += Ry2 + px;
else {
y;
py -= twoRx2;
p += Ry2 + px - py;
}
ellipsePlotPoints (xCenter, yCenter, x, y);
}
/* Regin 2 */
p = round (Ry2 * (x+0.5) * (x+0.5) + Rx2 * (y-1) * (y-1) - Rx2 * Ry2);
while (y > 0) {
y;
py -= twoRx2;
if (p > 0)
p += Rx2 - py;
else {
x++;
px += twoRy2;
p += Rx2 - py + px;
}
ellipsePlotPoints (xCenter, yCenter, x, y);
}
}
void ellipsePlotPoints
{
setPixel (xCenter +
setPixel (xCenter setPixel (xCenter +
setPixel (xCenter }

(int xCenter, int yCenter, int x, int y);


x,
x,
x,
x,

yCenter
yCenter
yCenter
yCenter

+
+
-

y);
y);
y);
y);

3.11 OTRAS CURVAS


Hay diversas funciones generadoras de curvas que resultan tiles para modelar objetos, para especificar trayectos de animacin, para dibujar grficas de funciones y de datos y para otras aplicaciones grficas. Entre
las curvas ms comunes encontramos la cnicas, las funciones trigonomtricas y exponenciales, las distribuciones de probabilidad, los polinomios generales y las funciones de tipo spline. Pueden generarse grficas de
estas curvas con mtodos similares a los que hemos explicado para las funciones circulares y elpticas.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 121

3.11 Otras curvas

121

Podemos obtener las posiciones a lo largo de los trayectos curvos directamente a partir de las ecuaciones
explcitas y  f(x), o mediante ecuaciones paramtricas. Alternativamente, podemos aplicar el mtodo incremental del punto medio para dibujar las curvas descritas mediante funciones implcitas f(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 equiespaciadas a lo largo del trayecto curvo, posiciones que utilizaremos para definir los extremos de los segmentos lineales. Tambin podemos generar posiciones equiespaciadas a partir de una ecuacin explcita
seleccionando la variable independiente de acuerdo con la pendiente de la curva. Cuando la pendiente de y 
f(x) tenga una magnitud inferior a 1, seleccionaremos x como variable independiente y calcularemos los valores y para incrementos iguales de x. Para obtener un espaciado igual cuando la pendiente tenga una magnitud
superior a 1, utilizaremos la funcin inversa, x  f1(y) y calcularemos los valores de x para pasos constantes de y.
Para generar una grfica de un conjunto de valores de datos 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 datos 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.

Secciones cnicas
En general, podemos describir una seccin cnica (o cnica) mediante la ecuacin de segundo grado:
Ax 2 + By 2 + Cxy + Dx + Ey + F = 0

(3.52)

donde los valores de los parmetros A, B, C, D, 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 B2  4AC:
< 0, genera una elipse (o crculo)

B 4 AC = 0, genera una parbola


> 0, genera una hiprbola

(3.53)

Por ejemplo, obtenemos la ecuacin del crculo 3.26 cuando A  B  1, C  0, D  2xc, E  2yc y
F = xc2 + yc2 r 2 . La Ecuacin 3.52 tambin describe las cnicas degeneradas: puntos y lneas rectas.
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:

CAP03_HEARN_1P.qxd

122

27/09/2005

20:05

Pgina 122

CAPTULO 3 Primitivas grficas


y

y0
1

2
x
x0

FIGURA 3.29. Un arco circular centrado en el origen,


definido mediante el ngulo inicial 1, el ngulo final
2 y el radio r.

FIGURA 3.30. Trayecto parablico de un objeto arrojado en un campo gravitatorio descendente, con posicin
inicial (x0, y0).

y = y0 + a( x x0 )2 + b( x x0 )

(3.54)

con constantes a y b determinadas por la velocidad inicial v0 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 t, medido en segundos a partir del punto inicial de
proyeccin:
(3.55)
x = x0 + v x 0 t
1
y = y0 + vy 0 t gt 2
2

Aqu, vx0 y vy0 son las componentes iniciales de la velocidad y el valor de g cerca de la superficie de la
Tierra es aproximadamente de 980 cm/sec2. 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 o 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:
2

x y
= 1
rx ry
2

(3.56)

donde x rx para la rama izquierda y x rx para la rama derecha. Puesto que esta ecuacin difiere de la
Ecuacin 3.39 para una elipse estndar nicamente en el signo correspondiente a los trminos x2 e y2, 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:
x = x0 + v x 0 v y 0 / g
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 los lados del eje de simetra de las trayectorias hiperblicas

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 123

3.11 Otras curvas

123

y
ry
y r x
x
Rama
izquierda
rx

Rama
derecha

ry

ry

rx

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: (1) 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.

Polinomios y curvas de tipo spline


Una funcin polinmica de grado n en x se define como:
n

y = ak x k
k =0

= a0 + a1 x + + an 1 x n 1 + an x n

(3.57)

donde n es un entero no negativo y los valores ak son constantes, con an 0. Se obtiene una curva cuadrtica cuando n  2, un polinomio cbico cuando n  3, una curva cudrica cuando n  4, etc. Y en el caso de
n  1 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 datos.
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 x 0 + a x 1u + a x 2 u 2 + a x 3 u 3
y = a y 0 + a y 1u + a y 2 u 2 + a y 3 u 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.

CAP03_HEARN_1P.qxd

124

27/09/2005

20:05

Pgina 124

CAPTULO 3 Primitivas grficas

3.12 ALGORITMOS PARALELOS PARA CURVAS


Los mtodos para aprovechar el paralelismos en la generacin de curvas son similares a los que se emplean a
la hora de visualizar segmentos de lnea recta. Podemos adaptar un algoritmo secuencial realizando una particin de la curva y asignando procesadores a los distintos segmentos, o podemos desarrollar otros mtodos y
asignar los procesadores a una serie de particiones de la pantalla.
Un mtodo paralelo del punto medio para la visualizacin de crculos consiste en dividir el arco circular
comprendido entre 45 y 90 en una serie de subarcos de igual tamao y asignar un procesador distinto a cada
subarco. Como en el algoritmo paralelo de Bresenham para generacin de lneas, necesitaremos realizar los
clculos para determinar el valor y y el parmetro de decisin pk iniciales para cada procesador. Entonces se
calcularn las posiciones de pxel para cada subarco y las posiciones en los otros octantes del crculo pueden
obtenerse por simetra. De forma similar, el mtodo paralelo del punto medio para la generacin de elipses
dividir el arco elptico del primer cuadrante en una serie de subarcos iguales y los asignar a un conjunto de
procesadores independientes. De nuevo, las posiciones de los pxeles en los otros cuadrantes se determinar
por simetra. Un esquema de particionamiento de pantalla para los crculos y las elipses consiste en asignar
cada lnea de exploracin que cruza la curva a un procesador distinto. En este caso, cada procesador utiliza la
ecuacin del crculo o de la elipse para calcular las coordenadas de interseccin con la curva.
Para la visualizacin de arcos elpticos u otras curvas, podemos simplemente utilizar el mtodo de particionamiento segn lneas de exploracin. Cada procesador utilizar la ecuacin de la curva para localizar las
intersecciones que se producen para su lnea de exploracin asignada. Asignando procesadores a los pxeles
individuales, cada procesador calculara la distancia (o la distancia al cuadrado) desde la curva a su pxel asignado. Si la distancia calculada es inferior a un cierto valor predefinido, se dibujar el pxel.

3.13 DIRECCIONAMIENTO DE PXELES Y GEOMETRA DE LOS OBJETOS


Al hablar de los algoritmos de digitalizacin para la visualizacin de primitivas grficas, hemos asumido que
las coordenadas del bfer de imagen hacan referencia al centro de cada posicin de pxel en la pantalla.
Vamos a considerar ahora los efectos de diferentes esquemas de direccionamiento y un mtodo alternativo de
direccionamiento de pxeles utilizados por algunos paquetes grficos, incluido OpenGL.
La descripcin de un objeto que se introduce en un programa grfico est expresada en trminos de posiciones precisas definidas mediante coordenadas universales, posiciones que son puntos matemticos infinitesimalmente pequeos. Pero cuando el objeto se digitaliza para almacenarlo en el bfer de imagen, la
descripcin de entrada se transforma en coordenadas de pxeles que hacen referencia a reas de pantalla finitas, con lo que la imagen digitalizada que se visualiza puede no corresponderse exactamente con las dimensiones relativas del objeto de entrada. Si resulta importante preservar la geometra especificada de los objetos,
podemos tratar de compensar esa traduccin de los puntos matemticos de entrada a reas de pxel finitas.
Una forma de hacer esto consiste simplemente en ajustar las dimensiones de los pxeles de los objetos visualizados para que se correspondan con las dimensiones indicadas en la descripcin matemtica original de la
escena. Por ejemplo, si se especifica que un rectngulo tiene una anchura de 40 cm, podemos ajustar la visualizacin en pantalla para que el rectngulo tenga una anchura de 40 pxeles, donde la anchura de cada pxel
representa un centmetro. Otro mtodo consistira en asignar las coordenadas universales a posiciones de pantalla intermedias entre los pxeles, para alinear las fronteras de los objetos con las fronteras de los pxeles, en
lugar de con los centros de los pxeles.

Coordenadas de cuadrcula de pantalla


La Figura 3.33 muestra una seccin de la pantalla con una serie de lneas de cuadrcula que marcan las fronteras entre los pxeles, estando los pxeles separados por una distancia unitaria. En este esquema, cada posicin de pantalla se especifica mediante la pareja de valores enteros que identifican una interseccin de la

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 125

3.13 Direccionamiento de pxeles y geometra de los objetos

125

5
7
4

6
5

4
2

3
2

1
0

1
0

FIGURA 3.33. Seccin inferior izquierda de un rea de


pantalla en la que las coordenadas se referencian
mediante la interseccin de lneas de la cuadrcula.

FIGURA 3.34. Pxel iluminado en la posicin (4, 5).

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 cuadrcula. Por ejemplo, el trayecto lineal matemtico para una polilnea que tuviera los vrtices definidos mediante las coordenadas (0, 0), (5, 2) y (1, 4) sera como la mostrada en la Figura 3.35.
Utilizando las coordenadas de cuadrcula de pantalla, podemos identificar el 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 (x  1, y  1). Este mtodo de direccionamiento de pxeles tiene varias ventajas: evita que las
fronteras de los pxeles estn definidas mediante valores semienteros, 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.

Mantenimiento de las propiedades geomtricas de los objetos visualizados


Cuando transformamos las descripciones geomtricas de los objetos en representaciones mediante pxeles, lo
que hacemos es transformar puntos matemticos y lneas en una serie de reas de pantalla finitas. Si queremos mantener para un objeto las medidas geomtricas originales especificadas mediante las coordenadas de
entrada, tenemos que tener en cuenta el tamao finito de los pxeles a la hora de transformar la definicin del
objeto en una imagen en pantalla.
La Figura 3.36 muestra la lnea dibujada en el ejemplo de aplicacin del algoritmo de Bresenham de la
Seccin 3.5. Interpretando los dos extremos de la lnea (20, 10) y (30, 18) como posiciones precisas de puntos de la cuadrcula, vemos que la lnea no debe ir ms all de la posicin (30, 18) de la cuadrcula. Si dibujramos el pxel con coordenadas de pantalla (30, 18), como en el ejemplo proporcionado en la Seccin 3.5,
estaramos mostrando una lnea que abarcara once unidades horizontales y 9 unidades verticales. Sin embargo, para la lnea matemtica, x  10 y y  8. Si direccionamos los pxeles mediante las posiciones de sus
centros, podemos ajustar la longitud de la lnea mostrada omitiendo uno de los pxeles de los extremos, sin
embargo, si consideramos que las coordenadas de pantalla estn direccionando las fronteras de los pxeles,
como se muestra en la Figura 3.36, dibujaremos la lnea utilizando nicamente aquellos pxeles que estn
dentro del trayecto lineal, es decir, nicamente aquellos pxeles que estn comprendidos entre los dos puntos extremos de la lnea. En nuestro ejemplo, dibujaramos el pxel de la izquierda en la posicin (20, 10) y el
pxel de ms a la derecha en la posicin (29, 17). Esto hace que se muestre una lnea con la misma medida
geomtrica que la lnea matemtica que va de (20, 10) a (30, 18).

CAP03_HEARN_1P.qxd

126

27/09/2005

20:05

Pgina 126

CAPTULO 3 Primitivas grficas

18
17

16
15

14
2

13
12

11
0

10
20 21 22 23 24 25 26 27 28 29 30

FIGURA 3.36. Trayectoria lineal y visualizacin


correspondiente de los pxeles para las coordenadas
(20, 10) y (30, 18) de sendos puntos extremos definidos mediante las lneas de la cuadrcula.

FIGURA 3.35. Trayecto formado por dos segmentos de


lnea conectados entre posiciones de pantalla definidas
mediante una cuadrcula.

3
(a)

0
0

3
(b)

(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 visualizacin (b) que incluye las fronteras derecha y superior y con una visualizacin (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,
el rectngulo definido mediante los vrtices que se muestran en la Figura 3.37(a), expresados en coordenadas
de 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 los pxeles internos. La frontera derecha del rectngulo de entrada se encuentra en x  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 x  3, ya que los pxeles de
esta columna vertical abarcan el intervalo que va de x  3 a x  4. De forma similar, la frontera matemtica
superior del rectngulo se encuentra en y  3, as 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 11. Para
dibujar el crculo con el dimetro definido de 10, podemos modificar el algoritmo del crculo con el fin de
acortar cada lnea de exploracin y cada columna de pxeles, como en la Figura 3.39.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 127

3.14 Primitivas de reas rellenas

(y, x  1)

127

(y  1, x  1)

15

(x, y  1)

(x  1, y  1)
(0, 0)

(10, 10)

15

FIGURA 3.38. Una grfica obtenida mediante el


algoritmo del punto medio para la ecuacin del
crculo (x  10)2  (y  10)2  52, utilizando las
coordenadas de los centros de los pxeles.

(x  1, y)

(x, y)

( y, x)

(y  1, x)

FIGURA 3.39. Modificacin de la grfica del crculo de la


Figura 3.38 para mantener el dimetro del crculo 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 x en 1
unidad a lo largo de las lneas de exploracin y reduciendo los valores de la coordenada y en 1 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.

3.14 PRIMITIVAS DE REAS RELLENAS


Otro elemento til, adems de los puntos, los segmentos lineales y las curvas, para la descripcin de los componentes de una imagen son las reas rellenas con algn color homogneo o patrn. Un elemento de imagen
de este tipo se denomina normalmente rea rellena. La mayora de las veces, las reas rellenas se utilizan
para describir las superficies de los objetos slidos, pero tambin resultan tiles en diversas otras aplicaciones. Asimismo, las regiones rellenas suelen ser superficies plantas, principalmente polgonos. Pero en trminos generales hay muchos tipos de formas posibles para una regin del dibujo que podamos querer rellenar
con algn determinado color. La Figura 3.40 ilustra algunos ejemplos de reas rellenas. Por el momento,
vamos a suponer que todas las reas rellenas deben mostrarse con un color homogneo especificado. En el
Captulo 4 se hablar de otras opciones de relleno.
Aunque pueden existir reas rellenas de cualquier forma, las bibliotecas grficas no suelen soportar la
especificacin de formas de relleno arbitrarias. La mayora de las rutinas de biblioteca requieren que las reas
de relleno se especifiquen en forma de polgonos. Las rutinas grficas pueden procesar ms eficientemente los
polgonos que otros tipos de reas de relleno, porque las fronteras de los polgonos se describen mediante
ecuaciones lineales. Adems, la mayora de las superficies curvas pueden aproximarse razonablemente bien
mediante una serie de parches poligonales, de la misma forma que una lnea curva puede aproximarse mediante un conjunto de segmentos lineales. Y cuando se aplican efectos de iluminacin y procedimientos de sombreado de superficies, la superficie curva aproximada puede mostrarse con un grado de realismo bastante

CAP03_HEARN_1P.qxd

128

27/09/2005

20:05

Pgina 128

CAPTULO 3 Primitivas grficas

(a)

(b)

(c)

FIGURA 3.40. reas rellenas de color homogneo especificadas con diversas fronteras. (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 muestran 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 teselacin 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 o simplemente objetos grficos.
En 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 contornos no lineales.
En el Captulo 4 se explican otros mtodos de relleno de reas para objetos con contornos curvados.

3.15 REAS DE RELLENO POLIGONALES


Desde el punto de vista matemtico, un polgono se define como una figura plana especificada mediante un
conjunto de tres o ms puntos, denominados vrtices, que se conectan en secuencia mediante segmentos lineales, denominados bordes, o aristas del polgono. Adems, en geometra bsica, es necesario que las aristas del polgono no tengan ningn punto en comn aparte de los extremos. As, por definicin, un polgono
debe tener todos sus vrtices en un mismo plano y las aristas no pueden cruzarse. Como ejemplos de polgonos podemos citar los tringulos, los rectngulos, los octgonos y los decgonos. Algunas veces, cualquier
figura plana con un contorno de tipo polilnea cerrado se denomina tambin polgono, y si adems sus aristas
no se cortan se le denomina polgono estndar o polgono simple. Para tratar de evitar referencias ambiguas
a los objetos, utilizaremos el trmino polgono para referirnos exclusivamente a las formas planas que tienen un contorno de tipo polilnea cerrada y en el que las aristas no se cortan.
Para una aplicacin infogrfica, es posible que un conjunto designado de vrtices de un polgono no caigan exactamente en un mismo plano. Esto puede deberse a los errores de redondeo en el clculo de los valo-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 129

3.15 reas de relleno poligonales

129

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.

Clasificaciones de los polgonos


Un ngulo interior de un polgono es un ngulo dentro del contorno del polgono que est formado por dos
aristas adyacentes. Si todos los ngulos interiores de un polgono son menores o iguales que 180, el polgono es convexo. Una definicin equivalente de polgono convexo es la que dice que el interior del polgono
est completamente contenido en uno de los lados de la lnea de extensin infinita de cualquiera de sus aristas. Asimismo, si seleccionamos cualesquiera dos puntos del interior de un polgono convexo, el segmento de
lnea que une los dos puntos se encuentra tambin en el interior del polgono. Un polgono que no es convexo se denomina cncavo. La Figura 3.42 proporciona ejemplos de polgonos convexos y cncavos.
A menudo se utiliza el trmino polgono degenerado para describir un conjunto de vrtices que son colineales o en el que algunos de los vrtices son coincidentes. Los vrtices polineales generan un segmento de
lnea, mientras que los vrtices repetidos pueden generar una forma poligonal con lneas extraas, aristas solapadas o aristas de longitud 0. Algunas veces se aplica tambin el trmino polgono degenerado a una lista de
vrtices que contienen menos de tres vrtices.
Para ser robusto, un paquete grfico podra rechazar los conjuntos de vrtices degenerados o no planares,
pero esto requiere pasos de procesamiento adicionales para identificar estos problemas, por lo que los sistemas grficos suelen dejar dicho tipo de consideraciones al programador.
Los polgonos cncavos tambin presentan problemas. La implementacin de los algoritmos de rellenado
y de otras rutinas grficas es ms complicada para los polgonos cncavos, por lo que suele ser ms eficiente
partir un polgono en un conjunto de polgonos convexos antes de continuar con su procesamiento. Al igual
que sucede con otros algoritmos de preprocesamiento de polgonos, la divisin de polgonos cncavos no
suele incluirse en las bibliotecas grficas. Algunos paquetes grficos, incluyendo OpenGL, requieren que
todos los polgonos rellenos sean convexos, mientras que otros sistemas slo aceptan reas de relleno triangulares, que simplifican enormemente muchos de los algoritmos de visualizacin.

Identificacin de polgonos cncavos


Un polgono cncavo tiene al menos uno de sus ngulos interiores superior a 180. Asimismo, la extensin de
algunas aristas de un polgono cncavo se cortar con otras aristas, y algunas parejas de puntos del interior
del polgono producir un segmento de lnea que intersectar con el contorno del polgono. Por tanto, podemos utilizar cualquiera de estas caractersticas de un polgono cncavo como base para construir un algoritmo de identificacin.
Si asignamos un vector a cada arista de un polgono, podemos utilizar el producto vectorial de las aristas
adyacentes para comprobar la concavidad. Todos esos productos vectoriales tendrn el mismo signo (positi-

 180
 180

(a)

(b)

FIGURA 3.42. Un polgono convexo (a) y un


polgono cncavo (b).

CAP03_HEARN_1P.qxd

130

27/09/2005

20:05

Pgina 130

CAPTULO 3 Primitivas grficas


y
V6

(E1  E2)z  0

V5

E5

(E2  E3)z  0

E4
V4

(E3  E4)z  0
E3

E6

FIGURA 3.43. Identificacin de un polgono cncavo


mediante el clculo de los productos vectoriales de las
parejas sucesivas de vectores representativos de las
aristas.

V3

E2

(E5  E6)z  0
(E6  E1)z  0

E1
V1

(E4  E5)z  0

V2
x

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.

Divisin de los polgonos cncavos


Una vez identificado un polgono cncavo, podemos dividirlo en un conjunto de polgonos convexos. Esto
puede realizarse utilizando los vectores de las aristas y los productos vectoriales correspondientes. Alternativamente, podemos utilizar las posiciones de los vrtices en relacin con la lnea de extensin de una arista para
determinar qu vrtices se encuentran en un lado de la lnea y cules estn en el otro. Para los siguientes algoritmos, vamos a suponer que todos los polgonos se encuentran en el plano xy. Por supuesto, la posicin original de un polgono descrita en coordenadas universales puede no estar en el plano xy, pero siempre podemos
moverlo hasta ese plano utilizando los mtodos de transformacin que se explican en el Captulo 5.
Con el mtodo vectorial para dividir un polgono cncavo, primero necesitamos formar los vectores de
las aristas. Dadas dos posiciones de vrtice consecutivas, Vk y Vk1, definimos el vector de la arista que los
une de la forma siguiente:
E k = Vk +1 Vk
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
contrario 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
sera 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 lnea 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.

Ejemplo 3.4 Mtodo vectorial para la divisin de polgonos cncavos


La Figura 3.44 muestra un polgono cncavo con seis aristas. Los vectores de las aristas para este polgono pueden expresarse como:

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 131

3.15 reas de relleno poligonales

E1 = (1, 0, 0)

E 2 = (1,1, 0)

E3 = (1, 1, 0)

E 4 = (0, 2, 0)

131

E 5 = (3, 0, 0) E6 = (0, 2, 0)
donde la componente z es 0, ya que todas las aristas se encuentran en el plano xy. El producto vectorial Ej  Ek para dos vectores sucesivos es un vector perpendicular al plano xy con una componente z
igual a EjxEky  EkxEjy:
E1 E 2 = (0, 0,1)

E 2 E3 = (0, 0, 2)

E3 E 4 = (0, 0, 2)

E 4 E 5 = (0, 0, 6)

E 5 E6 = (0, 0, 6)

E6 E1 = (0, 0, 2)

Puesto que el producto vectorial E2  E3 tiene una componente z negativa, partiremos el polgono
segn la lnea correspondiente al vector E2. La ecuacin de la lnea correspondiente a esta arista tiene
una pendiente de 1 e intercepta el eje y 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.
E5

2
E6

E4

1
E2

E3

E1
0

FIGURA 3.44. Divisin de un polgono cncavo utilizando el mtodo


de los vectores.

Tambin podemos dividir un polgono cncavo utilizando un mtodo rotacional. 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 Vk se encuentre por turno 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 Vk1 se encuentre sobre el eje x. Si el siguiente vrtice, Vk2, 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.

Divisin de un polgono convexo en un conjunto de tringulos


Una vez obtenida la lista de vrtices para un polgono convexo, podemos transformarlo en un conjunto de
tringulos. Esto puede hacerse seleccionando primero cualquier secuencia de tres vrtices consecutivos y for-

CAP03_HEARN_1P.qxd

132

27/09/2005

20:05

Pgina 132

CAPTULO 3 Primitivas grficas


y

V1

FIGURA 3.45. Divisin de un polgono cncavo utilizando el mtodo rotacional. Despus de mover V2 hasta el origen de coordenadas y de rotar V3 hasta
situarlo en el eje x, vemos que V4 est por debajo del eje x, as que dividimos
el polgono segn la lnea de extensin del vector V2 V3 que es el eje x.

V2

V3

V4

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 de 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
lnea. Si el nmero de segmentos cruzados por esta lnea es impar, entonces consideramos P como un punto
interior. 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 auto-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-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 133

3.15 reas de relleno poligonales

133

A
A
D

exterior

exterior

C
G

interior

interior
E
F

E
F

Regla par-impar

Regla del nmero de vueltas distinto de cero

(a)

(b)

FIGURA 3.46. Identificacin de las regiones exterior e interior de una polilnea cerrada que contiene segmentos que se
auto-intersectan.

mentos de lnea del objeto que cruzan la lnea de referencia en cada direccin. Aadiremos un 1 al nmero de
vueltas cada vez que cortemos un segmento que cruza la lnea de derecha a izquierda y restaremos 1 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 contorno, 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 contorno
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  E para una interseccin concreta
es positiva, dicho segmento cruza de derecha a izquierda y aadiremos 1 al nmero de vueltas. En caso contrario, el segmento cruza de izquierda a derecha y restaremos 1 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 (ux, uy), entonces el vector perpendicular a u tendr componentes (ux, ux) (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 1 al nmero de vueltas. En caso contrario, la arista cruza nuestra lnea de referencia de izquierda a derecha y restaremos 1 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

CAP03_HEARN_1P.qxd

134

27/09/2005

20:05

Pgina 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 todos 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 1, 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 definida como una regin


con un nmero de vueltas superior a 1. Este 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.
Regin B
Regin A

FIGURA 3.49. Un rea de relleno definida como una regin


con un valor positivo para el nmero de vueltas. Este rea de
relleno es la diferencia, A  B, 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).

AB

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 135

3.15 reas de relleno poligonales

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 cada objeto incluye la informacin de coordenadas
que especifica la geometra de las caras poligonales y otros parmetros de la superficie como el color, la transparencia y las propiedades de reflexin de la luz. A medida que se introduce la informacin correspondiente
a cada polgono, los datos se colocan en tablas que se utilizarn en el subsiguiente procesamiento como visualizacin y manipulacin de los objetos de la escena. Estas tabas de datos de los polgonos pueden organizarse en dos grupos: tablas geomtricas y tablas de atributos. Las tablas de datos 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 reflectividad y caractersticas de textura de su superficie.
Los datos geomtricos de los objetos de una escena se pueden ordenar cmodamente en tres listas: 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 la 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 conV1

E3
E1

E6

S1
S2

E2

V3

V2

V5
E4

E5

V4
TABLA DE VRTICES

V1:
V2:
V3:
V4:
V5:

x1, y1, z1
x2, y2, z2
x3, y3, z3
x4, y4, z4
x5, y5, z5

TABLA DE
ARISTAS

E1:
E2:
E3:
E4:
E5:
E6:

V1, V2
V2, V3
V3, V1
V3, V4
V4, V5
V5, V1

TABLA DE CARAS
DE LA SUPERFICIE

S1:
S2:

E1, E2, E3
E3, E4, E5, E6

FIGURA 3.50. Representacin en tabla de los datos geomtricos para dos caras poligonales adyacentes de una superficie,
formadas por seis aristas y cinco vrtices.

CAP03_HEARN_1P.qxd

136

27/09/2005

20:05

Pgina 136

CAPTULO 3 Primitivas grficas

FIGURA 3.51. Tabla 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.

E1:
E2:
E3:
E4:
E5:
E6:

V1, V2, S1
V2, V3, S1
V3, V1, S1, S2
V3, V4, S2
V4, V5, S2
V5, V1, S2

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, sera 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 tabla 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 datos 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 (1) 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

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 137

3.15 reas de relleno poligonales

137

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:
Ax + By + Cz + D = 0

(3.59)

donde (x, y, z) es cualquier punto del plano y los coeficientes A, B, C y D (denominados parmetros del
plano) son constantes que describen las propiedades espaciales del plano. Podemos obtener los valores de A,
B, C y D resolviendo un conjunto de tres ecuaciones del plano, utilizando los valores de coordenadas de tres
puntos no colineales pertenecientes al plano. Para este propsito, podemos seleccionar tres vrtices sucesivos
de un polgono convexo, (x1, y1, z1), (x2, y2, z2) y (x3, y3, z3), en sentido contrario a las agujas del reloj y resolver el siguiente sistema de ecuaciones lineales del plano, con el fin de hallar los cocientes A/D, B/D y C/D:
( A / D) xk + ( B / D) yk + (C / D)zk = 1,

k = 1, 2, 3

(3.60)

La solucin de este sistema de ecuaciones puede obtenerse mediante determinantes utilizando la regla de
Cramer:
1 y1
A = 1 y2
1 y3
x1
C = x2
x3

z1
z2
z3

y1 1
y2 1
y3 1

x1 1 z1
B = x 2 1 z2
x3 1 z3
x1
D = x2
x3

y1
y2
y3

(3.61)
z1
z2
z3

Expandiendo los determinantes, podemos escribir los clculos necesarios para hallar los coeficientes del
plano, que tendrn la forma:
A = y1 ( z2 z3 ) + y2 ( z3 z1 ) + y3 ( z1 z2 )
B = z1 ( x2 x3 ) + z2 ( x3 x1 ) + z3 ( x1 x2 )
C = x1 ( y2 y3 ) + x2 ( y3 y1 ) + x3 ( y1 y2 )

(3.62)

D = x1 ( y2 z3 y3 z2 ) x2 ( y3 z1 y1 z3 ) x3 ( y1 z2 y2 z1 )
Estos clculos son vlidos para cualesquiera tres puntos, incluyendo aquellos para los que D  0. Cuando
se introducen las coordenadas de los vrtices y otras informaciones en la estructura de datos del polgono, pueden calcularse los valores de A, B, C y 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 subconjuntos 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 yz, asignamos al parmetro B un valor proporcional al rea de proyec-

CAP03_HEARN_1P.qxd

138

27/09/2005

20:05

Pgina 138

CAPTULO 3 Primitivas grficas

cin sobre el plano xz y asignamos al parmetro C un valor proporcional al rea de proyeccin sobre el plano
xy. Este mtodo de proyeccin se utiliza a menudo en las aplicaciones de trazado de rayos.

Caras poligonales anteriores y posteriores


Puesto que usualmente tratamos con caras poligonales que encierran un objeto interior, es necesario distinguir
entre las dos caras de cada superficie. La cara de un polgono que apunta hacia el interior del objeto se denomina cara posterior, mientras que la cara visible es la cara anterior. La identificacin de la posicin de los
puntos en el espacio con relacin a las caras anterior y posterior de un polgono es una de las tareas bsicas
que deben llevarse a cabo en muchos algoritmos grficos, como por ejemplo a la hora de determinar la visibilidad de los objetos. Todo polgono est contenido en un plano infinito que divide el espacio en dos regiones. Todo punto que no se encuentre en el plano y que est situado del lado de la cara anterior de un polgono
se considerar que est delante (o fuera) del plano y, por tanto, fuera del objeto. Cualquier punto que est del
lado de la cara posterior del polgono se encontrar detrs (o dentro) del plano. Un plano que est detrs (dentro) de todos los planos correspondientes a los polgonos de la superficie estar dentro del objeto. Es necesario tener en cuenta que esta clasificacin dentro/fuera es relativa al plano que contiene al polgono, mientras
que nuestras anteriores comprobaciones de tipo dentro/fuera utilizando las reglas par-impar o del nmero de
vueltas se referan al interior de algn tipo de contorno bidimensional.
Pueden utilizarse las ecuaciones del plano para identificar la posicin de los puntos en el espacio en relacin con las caras poligonales de un objeto. Para cualquier punto (x, y, z) que no se encuentre sobre un cierto
plano con parmetros A, B, C, D, tendremos:
Ax + By + Cz + D 0
As, podemos identificar el punto como situado delante o detrs de una superficie poligonal contenida en
dicho plano sin ms que utilizar el signo (negativo o positivo) de Ax  By  Cz  D:
si Ax  By  Cz  D < 0,

el punto (x, y, z) est detrs del plano

si Ax  By  Cz  D > 0,

el punto (x, y, z) est delante del plano

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  1 > 0, mientras que
cualquier punto que est dentro (detrs) del plano tendr un valor de la coordenada x inferior a 1.
y

N(A, B, C)
1

x
1
1

FIGURA 3.52. La superficie sombreada de este polgono del cubo unitario tiene como ecuacin del plano
x  1  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, C).

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 139

3.16 Funciones OpenGL de relleno de reas poligonales

139

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, B, 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  1, 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 x positivo. Es
decir, el vector normal apunta desde el interior hacia el exterior y es perpendicular al plano x  1.
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, V1, V2 y V3, tomadas en sentido contrario a las agujas del reloj, cuando se mira desde el exterior del objeto hacia el interior. Formando
dos vectores, uno de V1 a V2 y el segundo de V1 a V3, podemos calcular N mediante el producto vectorial:
N = (V2 V1 ) (V3 V1 )

(3.63)

Esto genera los valores para los parmetros del plano A, 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.

3.16 FUNCIONES O pen GL DE RELLENO DE REAS POLIGONALES


Con una sola excepcin, los procedimientos OpenGL para especificar polgonos rellenos son similares a los
que se utilizan para describir un punto o una polilnea. Se emplea una funcin glVertex para introducir las
coordenadas para un nico vrtice del polgono y el polgono completo se describe mediante una lista de vrtices encerrada entre una pareja de funciones glBegin/glEnd. Sin embargo, hay una funcin adicional que
podemos utilizar para mostrar un rectngulo y que tiene un formato completamente distinto.
De manera predeterminada, el interior de un polgono se muestra con un color homogneo, que estar
determinado por las configuraciones actuales de color. Como opciones (que se describen en el siguiente captulo), podemos rellenar un polgono con un patrn y mostrar las aristas del polgono mediante lneas que se
dibujan alrededor del relleno interior. Hay seis constantes simblicas diferentes que podemos utilizar como
argumento de la funcin glBegin para describir las reas de relleno poligonales. Estas seis constantes primitivas nos permiten mostrar un nico polgono rellenado, un conjunto de polgonos rellenados desconectados
o un conjunto de polgonos rellenados conectados.
En OpenGL, las reas de relleno deben especificarse como polgonos convexos. Por tanto, la lista de vrtices para un polgono rellenado deber contener al menos tres vrtices, no podrn existir aristas que se cor-

CAP03_HEARN_1P.qxd

140

27/09/2005

20:05

Pgina 140

CAPTULO 3 Primitivas grficas

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 implementaciones de OpenGL, la siguiente rutina puede ser ms eficiente que generar
un rectngulo relleno mediante especificaciones glVertex.
glRect* (x1, y1, x2, y2);

Una de las esquinas de este rectngulo se encuentra en las coordenadas (x1, y1) y la esquina opuesta en la
posicin (x2, y2). Una serie de cdigos de sufijo para glRect 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 vertex1 [ ] = {200, 100};
int vertex2 [ ] = {50, 250};
glRectiv (vertex1, vertex2);

Cuando se genera un rectngulo mediante la funcin glRect, las aristas del polgono se forman entre los
vrtices en el orden (x1, y1), (x2, y1), (x2, y2), (x1, 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
250
200
150
100
50

50

FIGURA 3.54. Un polgono con un interior complejo,


que no puede especificarse mediante una nica lista
de vrtices.

100

150

200

FIGURA 3.55. Visualizacin de un rea cuadrada rellena utilizando la funcin glRect.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 141

3.16 Funciones OpenGL de relleno de reas poligonales

141

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 glBegin, junto con una lista de comandos glVertex. Con la constante primitiva
OpenGL GL_POLYGON, 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 p1 a p6,
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);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glVertex2iv (p6);
glEnd ( );

La lista de vrtices del polgono debe contener al menos tres vrtices. En caso contrario, no se mostrar
nada en la imagen.
p6

p5

p1

p6

p4

p2

p1

p3

p4

p2

(a)
p6

p1

p6

p4

p3
(c)

p3
(b)

p5

p2

p5

p5

p1

p4

p2

p3
(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 GL_POLYGON. (b) Dos tringulos
desconectados generados con GL_TRIANGLES. (c) Cuatro tringulos conectados generados con GL_TRIANGLE_STRIP.
(d) Cuatro tringulos conectados generados con GL_TRIANGLE_FAN.

CAP03_HEARN_1P.qxd

142

27/09/2005

20:05

Pgina 142

CAPTULO 3 Primitivas grficas

Si reordenamos la lista de vrtices y cambiamos la constante primitiva del ejemplo de cdigo anterior a
GL_TRIANGLES, obtenemos dos reas de relleno triangulares separadas, las cuales se muestran en la Figura

3.56(b).
glBegin (GL_TRIANGLES);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p6);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glEnd ( );

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 GL_TRIANGLE_STRIP,
podemos mostrar el conjunto de tringulos conectados que se presenta en la Figura 3.56(c).
glBegin (GL_TRIANGLE_STRIP);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p6);
glVertex2iv (p3);
glVertex2iv (p5);
glVertex2iv (p4);
glEnd ( );

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  6 y 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 n de la lista de vrtices
en el orden n  1, n  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 n, n  1, n  2. Si n es par, los vrtices del tringulo se enumerarn en el orden
n  1, n, n  2. En el ejemplo anterior, nuestro primer tringulo (n  1) se describir como compuesto por
los vrtices (p1, 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 comparten un vrtice comn. Esta disposicin
de tringulos se obtiene utilizando la constante primitiva GL_TRIANGLE_FAN y la ordenacin original de los
seis vrtices:

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 143

3.16 Funciones OpenGL de relleno de reas poligonales

143

glBegin (GL_TRIANGLE_FAN);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glVertex2iv (p6);
glEnd ( );

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, p1) formar parte de cada uno de los tringulos de la estructura en ventilador. Si volvemos a enumerar los tringulos y los vrtices como n  1, n  2, . . . n  N  2, entonces los vrtices para el tringulo n aparecern en la tabla de polgonos en el orden 1, n  1, n  2. Por tanto, el tringulo 1 estar definido
mediante la lista de vrtices (p1, p2, p3); el tringulo 2 tendr la ordenacin de vrtices (p1, p3, p4); el tringulo 3 tendr sus vrtices especificados en el orden (p1, p4, p5) y el tringulo 4 estar descrito mediante la
ordenacin de vrtices (p1, p5, p6).
Adems de las funciones primitivas para tringulos y para la visualizacin de un polgono general,
OpenGL 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);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p3);
glVertex2iv (p4);
glVertex2iv (p5);
glVertex2iv (p6);
glVertex2iv (p7);
glVertex2iv (p8);
glEnd ( );

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_QUAD_STRIP);
glVertex2iv (p1);
glVertex2iv (p2);
glVertex2iv (p4);
glVertex2iv (p3);
glVertex2iv (p5);
glVertex2iv (p6);
glVertex2iv (p8);

CAP03_HEARN_1P.qxd

144

27/09/2005

20:05

Pgina 144

CAPTULO 3 Primitivas grficas


glVertex2iv (p7);
glEnd ( );

Se dibujar un cuadriltero 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 N vrtices, obtendremos
N
1 cuadrilteros, supuesto que N 4. Si N no es un mltiplo de cuatro, los vrtices que sobren en la lista
2
no se utilizarn. Podemos enumerar los polgonos rellenos y los vrtices de la lista como n  1, n  2, . . .,
n = N2 1 . Entonces las tabla de polgonos enumerarn los vrtices para el cuadriltero n con el orden 2n  1,
2n, 2n  2, 2n  1. 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 (p1, p2, p3, p4). El segundo cuadriltero
(n  2) tendr la ordenacin de vrtices (p4, p3, p6, p5) y la ordenacin de vrtices para el tercer cuadriltero (n  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
p8
p1

p4

p5

p6
p2

p3

p7
(a)
p8

p1
p4

p5

p6
p2

p3
(b)

p7

FIGURA 3.57. Visualizacin de cuadrilteros rellenos utilizando una lista de ocho vrtices. (a) Dos cuadrilteros no conectados generados mediante GL_QUADS. (b) Tres cuadrilteros conectados generados mediante GL_QUAD_STRIP.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 145

3.17 Matrices de vrtices OpenGL

145

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 renderizadores 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.

3.17 MATRICES DE VRTICES Open GL


Aunque los ejemplos que hemos utilizado hasta el momento contenan solamente unos pocos vrtices, describir una escena que contenga numerosos objetos puede ser mucho ms complicado. Como ilustracin, vamos
a considerar primero cmo podramos describir un nico objeto muy bsico: el cubo de lado unidad que se
muestra en la Figura 3.58, cuyas coordenadas se proporcionan como nmeros enteros con el fin de simplificar las explicaciones. Un mtodo directo para definir las coordenadas de los vrtices consistira en utilizar una
matriz de dos dimensiones, como:
GLint points [8][3] = { {0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {1, 1, 0},
{0, 0, 1}, {0, 1, 1}, {1, 0, 1}, {1, 1, 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:
typedef GLint vertex3 [3];
vertex3 pt [8] = { {0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {1, 1, 0},
{0, 0, 1}, {0, 1, 1}, {1, 0, 1}, {1, 1, 1} };

A continuacin, necesitamos definir cada una de las seis caras del objeto. Para esto, podemos hacer seis
llamadas a glBegin (GL_POLYGON) o a glBegin (GL_QUADS). En cualquiera de los casos, debemos asegurarnos 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.
void quad (GLint n1, GLint n2, GLint n3, GLint n4)
{
glBegin (GL_QUADS);
glVertex3iv (pt [n1]);
glVertex3iv (pt [n2]);
glVertex3iv (pt [n3]);
glVertex3iv (pt [n4]);
glEnd ( );
}
void cube ( )
{
quad (6, 2, 3, 7);

CAP03_HEARN_1P.qxd

146

27/09/2005

20:05

Pgina 146

CAPTULO 3 Primitivas grficas


quad (5, 1, 0, 4);
quad (7, 3, 1, 5);
quad (4, 0, 2, 6);
quad (2, 0, 1, 3);
quad (7, 5, 4, 6);
}

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:
Invocar la funcin glEnableClientState (GL_VERTEX_ARRAY) para activar la caracterstica de
matrices de vrtices de OpenGL.
(2)
Utilizar la funcin glVertexPointer para especificar la ubicacin y el formato de los datos que describen las coordenadas de los vrtices.
(3)
Visualizar la escena utilizando una rutina tal como glDrawElements, que permite procesar mltiples
primitivas con muy pocas llamadas a funcin.
Utilizando la matriz pt definida anteriormente para el cubo, implementaramos estos tres pasos tal como
se indica en el siguiente ejemplo de cdigo:
(1)

0
1
1

FIGURA 3.58. Un cubo con arista de longitud igual a 1.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 147

3.17 Matrices de vrtices OpenGL

147

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.

glEnableClientState (GL_VERTEX_ARRAY);
glVertexPointer (3, GL_INT, 0, pt);
GLubyte vertIndex [ ] = (6, 2, 3, 7, 5, 1, 0, 4, 7, 3, 1, 5,
4, 0, 2, 6, 2, 0, 1, 3, 7, 5, 4, 6);
glDrawElements (GL_QUADS, 24, GL_UNSIGNED_BYTE, vertIndex);

Con el primer comando, glEnableClientState (GL_VERTEX_ARRAY), 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 Captulo 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 glVertexPointer. El primer parmetro de glVertexPointer, que es 3 en este ejemplo, especifica el nmero de coordenadas utilizadas para la descripcin de cada vrtice. El tipo de datos 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 GL_INT. El resto de los tipos de datos se especifican mediante las constantes simblicas GL_BYTE, GL_SHORT, GL_FLOAT y GL_DOUBLE. Con el tercer parmetro indicamos el desplazamiento en bytes 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 glVertexPointer 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 vertIndex. Cada uno de estos ndices es el subndice de la matriz pt correspondiente a los valores de coordenadas del respectivo vrtice. Esta
lista de ndices se referencia como ltimo parmetro en la funcin glDrawElements y es utilizada a continuacin por la primitiva GL_QUADS, que es el primer parmetro, con el fin de mostrar el conjunto de cuadrilteros que componen el cubo. El segundo parmetro especifica el nmero de elementos de la matriz
vertIndex. 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

CAP03_HEARN_1P.qxd

148

27/09/2005

20:05

Pgina 148

CAPTULO 3 Primitivas grficas

del cubo con una nica llamada a funcin. El tercer parmetro de la funcin glDrawElements proporciona
el tipo de los valores de ndice. Puesto que nuestros ndices son enteros de pequeo tamao, hemos especificado el tipo GL_UNSIGNED_BYTE. Los otros dos tipos de ndice que pueden utilizarse son GL_UNSIGNED_
SHORT y GL_UNSIGNED_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
glDrawElements. 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.

3.18 PRIMITIVAS DE MATRICES DE PXELES


Adems de lneas rectas, polgonos, crculos y otras primitivas, los paquetes grficos suministran a menudo
rutinas para mostrar formas definidas mediante matrices rectangulares de valores de color. Podemos obtener
esa cuadrcula rectangular digitalizando (escaneando) una fotografa u otra imagen, o generando una imagen
con un programa grfico. Cada valor de color de la matriz se asigna entonces a una o ms posiciones de pxel
en la pantalla. Como hemos indicado en el Captulo 2, una matriz de pxeles con valores de color se denomina normalmente mapa de pxeles.
Los parmetros para una matriz de pxeles pueden incluir un puntero a la matriz de colores, el tamao de
la matriz y la posicin y tamao del rea de la pantalla a la que hay que aplicar los valores de color. La Figura
3.60 proporciona un ejemplo de asignacin de una matriz de colores de pxeles a un rea de la pantalla.
Otro mtodo para implementar una matriz de pxeles consiste en asignar el valor de bit 0 o el valor de bit
1 a cada elemento de la matriz. En este caso, la matriz es simplemente un mapa de bits, que tambin se denomina en ocasiones mscara y que indica si hay que asignar (o combinar) o no un cierto pxel con un color
preestablecido.

3.19 FUNCIONES O pen GL PARA MATRICES DE PXELES


Hay dos funciones de OpenGL que podemos utilizar para definir una forma o patrn especificados mediante
una matriz rectangular. Una de ellas sirve para procesar mapas de bits, mientras que la otra sirve para procesar mapas de pxeles. Asimismo, OpenGL proporciona diversas rutinas para guardar, copiar y manipular
matrices de valores de pxeles.

Funcin de mapa de bits de OpenGL


Un patrn de matriz binaria se define mediante la funcin:
glBitmap (width, height, x0, y0, xOffset, yOffset, bitShape);

Los parmetros width y height de esta funcin proporcionan el nmero de columnas y de filas, respectivamente, en la matriz bitShape. A cada elemento de bitShape se le asigna un 1 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 1 para indicar que hay que combinar un color especificado con el valor de color almacenado en dicha posicin del bfer
de refresco). Los parmetros x0 e y0 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 bitShape,
y los valores de x0 e y0 pueden ser positivos o negativos. Adems, tenemos que designar una ubicacin dentro del bfer 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 (x0, y0) en la posicin actual de visuali-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 149

3.19 Funciones OpenGL para matrices de pxeles

149

ymax

n  5 filas

ymin
m  8 columnas

xmin

xmax

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 xOffset e yOffset 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 x0, y0, xOffset e yOffset, 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:
glRasterPos* ( )

Los parmetros y cdigos de sufijos son iguales que para la funcin glVertex. 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
glRasterPos. Cualesquiera cambios de color subsiguientes no afectarn al mapa de bits.
Cada fila 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 bitShape [20] = {
0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00,
0xff, 0x80, 0x7f, 0x00, 0x3e, 0x00, 0x1c, 0x00, 0x08, 0x00};

CAP03_HEARN_1P.qxd

150

27/09/2005

20:05

Pgina 150

CAPTULO 3 Primitivas grficas

10

0  08

0  00

0  1C

0  00

0  3E

0  00

0  7F

0  00

0  FF

0  80

0  1C

0  00

0  1C

0  00

0  1C

0  00

0  1C

0  00

0  1C

0  00

12
16

FIGURA 3.61. Un patrn de bits especificado como una matriz con 10 filas y 9 columnas y almacenado en bloques de 8
bits para las 10 filas, con 16 valores de bit por cada una de ellas.
glPixelStorei (GL_UNPACK_ALIGNMENT, 1); // Establece el modo de almacenamiento
// de pxel.
glRasterPos2i (30, 40);
glBitmap (9, 10, 0.0, 0.0, 20.0, 15.0, bitShape);

Los valores de la matriz bitShape se especifican fila a fila, comenzando por la parte inferior del patrn
de cuadrcula rectangular. A continuacin, definimos el modo de almacenamiento para el mapa de bits
mediante la rutina OpenGL glPixelStorei. El valor de parmetro de 1 en esta funcin indica que hay que
alinear los valores de los datos en las fronteras de los bytes. Con glRasterPos, establecemos la posicin
actual de visualizacin en las coordenadas (30, 40). Finalmente, la funcin glBitmap especifica que el patrn
de bits se proporciona en la matriz bitShape, 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. Hemos 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.

Funcin OpenGL para mapas de pxeles


Para aplicar a un bloque del bfer de imagen un patrn definido mediante una matriz de valores de color se
utiliza la funcin:
glDrawPixels (width, height, dataFormat, dataType, pixMap);

De nuevo los parmetros width y height proporcionan las dimensiones en columnas y filas, respectivamente, de la matriz pixMap. Al parmetro dataFormat 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 GL_BLUE, o podramos especificar tres componentes de color en el orden azul,
verde, rojo mediante la constante GL_BGR. Pueden utilizarse varios otros tipos de especificaciones de color, y
en el siguiente captulo examinaremos las selecciones de color con ms detalle. Al parmetro dataType se le
asigna una constante OpenGL tal como GL_BYTE, GL_INT o GL_FLOAT, 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 glRaterPos. 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, GL_UNSIGNED_BYTE, colorShape);

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 151

3.19 Funciones OpenGL para matrices de pxeles

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 glDrawPixels. Algunos pxeles almacenan
valores de color, mientras que otros almacenan otros tipos de datos relativos a los pxeles. 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 contornos correspondientes a una escena. Podemos seleccionar uno de estos dos bferes asignando al parmetro
dataFormat de la rutina glDrawPixels los valores GL_DEPTH_COMPONENT o GL_STENCIL_INDEX. Para
estos bferes, tendramos que almacenar en la matriz de pxeles 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 pxeles mediante el siguiente comando:
glDrawBuffer (buffer);

Al 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 GL_FRONT_LEFT,
GL_FRONT_RIGHT, GL_BACK_LEFT o GL_BACK_RIGHT. Podemos seleccionar ambos bferes de primer
plano mediante GL_FRONT 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 GL_LEFT o GL_RIGHT, y podemos seleccionar todos los bferes de color disponibles mediante GL_FRONT_AND_BACK. 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.

Operaciones OpenGL de manipulacin de bferes


Adems de almacenar una matriz de valores de pxeles en un bfer, podemos extraer un bloque de valores de
un bfer o copiar el bloque en otra rea del bfer. Tambin podemos realizar otros varias tipos de operaciones sobre una matriz de pxeles. En general, utilizamos el trmino operacin de manipulacin de bfer u
operacin de rasterizacin. Para describir cualquier funcin que procese de alguna manera una matriz de
pxeles. Una operacin de manipulacin de bfer que desplace una matriz de valores de pxeles desde un lugar
a otro se denomina tambin transferencia en bloque de los valores de los pxeles. En un sistema monocromo, estas operaciones se denominan transferencias bitblt o transferencias de bloques de bits, particularmente cuando dichas funciones se implementan en hardware. En sistemas con ms de dos niveles de color, se
utiliza tambin el trmino pixblt para designar las transferencias de bloques.
Podemos utilizar la siguiente funcin para seleccionar un bloque rectangular de valores de pxeles en un
conjunto especificado de bferes:

CAP03_HEARN_1P.qxd

152

27/09/2005

20:05

Pgina 152

CAPTULO 3 Primitivas grficas


glReadPixels (xmin, ymin, width, height,
dataFormat, dataType, array};

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 width, height, dataFormat y dataType son
iguales que para la rutina glDrawPixels. El tipo de los datos que hay que guardar en el parmetro array
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 dataFormat.
Para seleccionar una combinacin concreta de bferes de color o un bfer auxiliar para la rutina
glReadPixels se utiliza la funcin:
glReadBuffer (buffer);

Las constantes simblicas para especificar uno o ms bferes son iguales que para la rutina
glDrawBuffer, salvo porque no podemos seleccionar los cuatro bferes de color a la vez. La seleccin pre-

determinada 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 width y height debern tener valores enteros positivos para especificar el nmero de columnas
y de filas, respectivamente, que hay que copiar. El parmetro pixelValues puede tener como valores las
constantes GL_COLOR, GL_DEPTH o GL_STENCIL 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 copiado desde un bfer de origen y el bloque de valores de pxel se copian desde un bfer de origen hasta un bfer
de destino, asignndose la esquina inferior izquierda a la posicin de visualizacin actual. El bfer de origen
se selecciona mediante el comando glReadBuffer, mientras que para el bfer de destino se emplea el
comando glDrawBuffer. 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 glDrawPixels o glCopyPixels, podemos combinar de diversas formas los valores entrantes con
los anteriores valores del bfer. Como ejemplo, podemos aplicar operaciones lgicas, tales como and, or y
exclusive or. En OpenGL, puede seleccionarse una operacin lgica aplicable bit a bit para combinar los valores de color de los pxeles entrantes y de destino mediante las funciones:
glEnable (GL_COLOR_LOGIC_OP);
glLogicOp (logicOp);

Pueden asignarse diversas constantes simblicas al parmetro logicOp, 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 1). Para invertir los valores entrantes de los bits de color se utiliza la constante
GL_COPY_INVERTED, 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 GL_INVERT. 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 (GL_CLEAR), o asignar a todos los bits de destino el valor 1 (GL_SET). El valor predeterminado para la rutina glLogicOp es GL_COPY, 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 glDrawPixels, glReadPixels y glCopyPixels. Por ejemplo, las rutinas glPixelTransfer

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 153

3.20 Primitivas de caracteres

153

y glPixelMap 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 pxeles en captulos posteriores, cuando pasemos a analizar otras facetas de los paquetes de grficos por computadora.

3.20 PRIMITIVAS DE CARACTERES


Las imgenes grficas incluyen a menudo informacin textual, como por ejemplo etiquetas, grficas, carteles
en edificios o vehculos e informacin general de identificacin para aplicaciones de simulacin y visualizacin. La mayora de los paquetes grficos incluyen rutinas para generar primitivas de caracteres grficos.
Algunos sistemas proporcionan un amplio conjunto de funciones de caracteres, mientras que otros slo ofrecen un soporte de generacin de caracteres mnimo.
Las letras, los nmeros y otros caracteres pueden mostrarse con diversos tamaos y estilos. El estilo global de diseo para un conjunto (o familia) de caracteres se denomina tipo de letra. Hoy en da, hay disponibles miles de tipos de letra distintos para aplicaciones informticas, como por ejemplo Courier, Helvetica,
New York, Palatino o Zapf Chancery. Originalmente, el trmino fuente haca referencia a un conjunto de
caracteres extrudos en metal con un tamao y formato concretos, como por ejemplo Courier Itlica de 10 puntos o Palatino Negrita de 12 puntos. Una fuente de 14 puntos tiene una altura total de los caracteres de unos
0,5 centmetros; en otras palabras 72 puntos es aproximadamente equivalente a 2,54 centmetros (una pulgada). Hoy en da, se usan los trminos fuente y tipo de letra de manera intercambiable, ya que las tareas modernas de impresin raramente se realizan con caracteres extrudos en metal.
Los tipos de letra (o fuentes) pueden dividirse en dos amplios grupos: serif y sans serif. Un tipo serif tiene
pequeas lneas o acentos en los extremos de los principales trazos de los caracteres, mientras que los tipos
sans-serif no tiene este tipo de acentos. Por ejemplo, el texto de este libro est realizado con una fuente serif.
Pero esta frase est impresa en una fuente sans-serif (Univers). Los tipos serif son generalmente
ms legibles; es decir, es ms fcil leer grandes bloques de texto. Por otra parte, los caracteres individuales de
los tipos sans-serif son ms fciles de reconocer, por lo que este tipo de letra resulta adecuada para etiquetas
y cortos encabezados.
Las fuentes tambin se clasifican dependiendo de si son monoespaciadas o proporcionales. Todos los
caracteres de una fuente monoespaciada tienen la misma anchura, mientras que en una fuente proporcional la
anchura de los caracteres vara.
Se utilizan dos representaciones diferentes para almacenar fuentes en una computadora. Un mtodo simple para representar las formas de los caracteres en un tipo de letra concreto consiste en definir un patrn de
valores binarios sobre una cuadrcula rectangular. Entonces, ese conjunto de caracteres se denomina fuente
de mapa de bits. Un conjunto de caracteres de mapa de bits tambin se denomina en ocasiones fuente raster o fuente digitalizada.
Otro esquema ms flexible consiste en describir las formas de los caracteres utilizando secciones de lnea
rectas y de curvas, como por ejemplo en PostScript. En este caso, el conjunto de caracteres se denomina fuente de contorno o fuente de trazos. La Figura 3.62 ilustra los dos mtodos para la representacin de caracteres. Cuando se aplica el patrn de la Figura 3.62(a) a un rea del bfer de imagen, los bits con valor 1 designan
qu posiciones de pxel hay que mostrar en un color especificado. Para visualizar la forma del carcter de la
Figura 3.62(b), el interior del contorno de carcter se trata como un rea de relleno.
Las fuentes de mapa de bits son las ms simples de definir y de visualizar: basta con asignar las cuadrculas de caracteres a una posicin dentro del bfer de imagen. Sin embargo, en general, las fuentes de mapa de
bits requieren ms espacio de almacenamiento, ya que es necesario guardar cada variante (tamao y formato)
dentro de una cach de fuentes. Se pueden generar diferentes tamaos y otras variaciones, como por ejemplo
negrita e itlica a partir de un conjunto de fuentes en mapa de bits, pero los resultados que se obtienen no suelen ser buenos. Podemos incrementar o decrementar el tamao del mapa de bits de un carcter solamente en

CAP03_HEARN_1P.qxd

154

27/09/2005

20:05

Pgina 154

CAPTULO 3 Primitivas grficas

FIGURA 3.62. La letra B representada con un patrn de


mapa de bits 8 por 8 (a) y con una forma de contorno definida mediante segmentos de lneas rectas y de curvas (b).

(a)

(b)

y
*
100

*
*
*

50
*

FIGURA 3.63. Una grfica de tipo polimarcador para un conjunto de valores de datos.

41
59
85
110
121
149

94
43
74
59
89
122

x
0

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 bits, con lo que los bordes del carcter tendrn una apariencia escalonada.
Por contraste con las fuentes de mapa de bits, las fuentes de contorno 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 variantes 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 funcin 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 marcador 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 bits se describe mediante una cuadrcula rectangular de valores binarios y una posicin de referencia para la cuadrcula. Esta posicin de referencia 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.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 155

3.21 Funciones OpenGL de caracteres

155

3.21 FUNCIONES O pen GL DE CARACTERES


La biblioteca OpenGL bsica slo proporciona soporte de bajo nivel para la visualizacin de caracteres individuales o cadenas de texto. Podemos definir explcitamente cualquier carcter como un mapa de bits, como
en la forma de ejemplo mostrada en la Figura 3.61, y podemos almacenar un conjunto de mapas de bits caracteres como listado de fuentes. Entonces, se podr visualizar una cadena de texto asignando una secuencia
seleccionada de mapa de bits de la lista de fuentes a un conjunto de posiciones adyacentes dentro del bfer de
imagen.
Sin embargo, GLUT (OpenGL Utility Toolkit) proporciona algunos conjuntos de caracteres predefinidos,
por lo que no es necesario que creemos nuestras propias fuentes como mapas de bits, a menos que queramos
mostrar una fuente que no est disponible en GLUT. La biblioteca de GLUT contiene rutinas para visualizar
tanto fuentes de mapa de bits como fuentes de contorno. Las fuentes de mapa de bits de GLUT se visualizan
utilizando la funcin glBitmap de OpenGL, mientras que las fuentes de contorno se generan mediante contornos de tipo polilnea (GL_LINE_STRIP).
Podemos visualizar un carcter GLUT de mapa de bits mediante:
glutBitmapCharacter (font, character);

donde al parmetro font se le asigna una constante simblica de GLUT que identifica un conjunto concreto de tipos de letra, mientras que al parmetro character se le asigna el cdigo ASCII o el carcter especfico que queramos visualizar. As, 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 GLUT_BITMAP_8_BY_13 o GLUT_BITMAP_9_BY_15 al parmetro font. Y podemos seleccionar una fuente de 10 puntos con espaciado proporcional utilizando
GLUT_BITMAP_TIMES_ROMAN_10 o GLUT_BITMAP_HELVETICA_10. Tambin hay disponible una fuente
Times-Roman de 12 puntos, as como fuentes de tipo Helvetica de 12 puntos y 18 puntos.
Cada carcter generado por glutBitmapCharacter 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 x 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:
glRasterPosition2i (x, y);
for (k = 0; k < 36; k++)
glutBitmapCharacter (GLUT_BITMAP_9_BY_15, text [k]);

Los caracteres se muestran en el color que haya sido especificado antes de ejecutar la funcin
glutBitmapCharacter.

Un carcter de contorno se muestra mediante la siguiente llamada a funcin:


glutStrokeCharacter (font, character);

Para esta funcin, podemos asignar al parmetro font el valor GLUT_STROKE_ROMAN, que muestra una
fuente con espaciado proporcional, o el valor GLUT_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 glutStrokeCharacter. 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.

CAP03_HEARN_1P.qxd

156

27/09/2005

20:05

Pgina 156

CAPTULO 3 Primitivas grficas

3.22 PARTICIONAMIENTO DE IMGENES


Algunas bibliotecas grficas incluyen rutinas para describir una imagen como una coleccin de secciones
nominadas y para manipular las secciones individuales de una imagen. Utilizando estas funciones, podemos
crear, editar, borrar o mover una parte de una imagen independientemente de los dems componentes de la
misma. Y tambin podemos utilizar esta caracterstica de los paquetes grficos para el modelado jerrquico
(Captulo 14), con el cual la descripcin de un objeto se proporciona en forma de una estructura de rbol compuesta por una serie de niveles que especifican las subpartes del objeto.
Se utilizan diversos nombres para las subsecciones de una imagen. Algunos paquetes grficos se refieren
a ellos denominndolos estructuras (structures), mientras que otros paquetes los denominan segmentos
(segments) u objetos (objects). Asimismo, las operaciones disponibles para cada subseccin varan enormemente de un paquete a otro. Los paquetes de modelado, por ejemplo, proporcionan un amplio rango de operaciones que pueden usarse para describir y manipular los elementos de una imagen. Por el contrario, en las
bibliotecas grficas siempre se pueden estructurar y gestionar los componentes de una imagen utilizando elementos procedimentales disponibles en algn lenguaje de alto nivel, como por ejemplo C.

3.23 LISTAS DE VISUALIZACIN DE O pen GL


A menudo, puede resultar conveniente o ms eficiente almacenar la descripcin de un objeto (o cualquier otro
conjunto de comandos OpenGL) como una secuencia nominada de instrucciones. En OpenGL, podemos hacer
esto utilizando una estructura denominada lista de visualizacin. Una vez creada una lista de visualizacin,
podemos hacer referencia a la lista mltiples veces, utilizando operaciones de visualizacin diferentes. En una
red, una lista de visualizacin que describa una escena puede almacenarse en una mquina servidora, lo que
elimina la necesidad de transmitir los comandos de la lista cada vez que haya que visualizar la escena.
Tambin podemos configurar una lista de visualizacin con el fin de guardarla para su ejecucin posterior, o
podemos especificar que los comandos de la lista se ejecuten inmediatamente. Adems, las listas de visualizacin son particularmente tiles para el modelador jerrquico, en el que los objetos complejos se describen
mediante un conjunto de subpartes ms simples.

Creacin y denominacin de una lista de visualizacin OpenGL


Podemos transformar un conjunto de comandos OpenGL en una lista de visualizacin encerrando los comandos dentro de la pareja de funciones glNewList/glEndList. Por ejemplo,
glNewList (listID, listMode};
.
.
.
glEndList ( );

Esta estructura forma una lista de visualizacin asignando un valor entero positivo al parmetro listID
como nombre de la lista. Al parmetro listMode se le asigna una constante simblica OpenGL que puede
ser GL_COMPILE o GL_COMPILE_AND_EXECUTE. Si queremos guardar la lista para su ejecucin posterior, utilizaremos GL_COMPILE. 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 posteriores que se realicen a estos
parmetros no tendrn ningn efecto sobre la lista. Puesto que los valores de las listas de visualizacin no pue-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 157

3.23 Listas de visualizacin de OpenGL

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 (1) identificador entero positivo no utilizado, asignndolo a la variable
listID. Podemos obtener un rango de identificadores de lista no utilizados sin ms que utilizar el argumento de glGenLists, sustituyendo el valor 1 por algn otro entero positivo. Por ejemplo, si ejecutamos el
comando glGenLists (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 listID. La funcin glGenLists devuel-

ve 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 glGenLists, conviene comprobar
que ste es distinto de 0.
Aunque pueden generarse identificadores de lista no utilizados mediante la funcin glGenLists, 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 GL_TRUE si el valor de listID 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 glIsList devolver el valor GL_FALSE.

Ejecucin de listas de visualizacin OpenGL


Podemos ejecutar una lista de visualizacin mediante la instruccin:
glCallList (listID);

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 glCallList, que muestra el hexgono.

const double TWO_PI = 6.2831853;


GLuint regHex;
GLdouble theta;
GLint x, y, k;
/*
*
*

Especificar una lista de visualizacin para un hexgono regular.


Los vrtices del hexgono son seis puntos
equiespaciados dispuestos sobre una circunferencia.*/

regHex = glGenLists (1);

// Obtener un identificador para la


// lista de visualizacin.

CAP03_HEARN_1P.qxd

158

27/09/2005

20:05

Pgina 158

CAPTULO 3 Primitivas grficas

glNewList (regHex, GL_COMPILE);


glBegin (GL_POLYGON);
for (k = 0; k < 6; k++) {
theta = TWO_PI * k / 6.0;
x = 200 + 150 * cos (theta);
y = 200 + 150 * sin (theta);
glVertex2i (x, y);
}
glEnd ( );
glEndList ( );
glCallList (regHex);

Podemos ejecutar varias listas de visualizacin de una vez utilizando las siguientes dos instrucciones:
glListBase (offsetValue);
glCallLists (nLists, arrayDataType, listIDArray);

El nmero entero de listas que queremos ejecutar se asigna al parmetro nLists, mientras que el parmetro listIDArray es una matriz de identificadores de listas de visualizacin. En general, listIDArray
puede contener cualquier nmero de elementos, ignorndose los identificadores 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, GL_FLOAT, GL_3_BYTE o GL_4_BYTES. Los identificadores de las listas de visualizacin se calculan sumando el valor de un elemento de listIDArray al valor entero de offsetValue que se proporciona
en la funcin glListBase. El valor predeterminado de offsetValue 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 identificadores 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 offsetValue de la funcin glListBase para obtener una fuente concreta que est descrita dentro de la matriz listIDArray.

Borrado de listas de visualizacin OpenGL


Para eliminar un conjunto contiguo de listas de visualizacin, podemos utilizar la llamada a funcin:
glDeleteLists (startID, nLists);

El parmetro startID 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 identificadores 5, 6, 7 y 8. Los valores de identificadores que
hagan referencia a listas de visualizacin no existentes se ignorarn.

3.24 FUNCIN O pen GL DE REDIMENSIONAMIENTO DE LA VENTANA DE


VISUALIZACIN
En nuestro programa OpenGL introductorio (Seccin 2.9), hemos explicado las funciones para establecer una
ventana de visualizacin inicial. Pero despus de la generacin de una imagen, a menudo nos surge la nece-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 159

3.24 Funcin OpenGL de redimensionamiento de la ventana de visualizacin

159

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 funcin 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 reinicializar 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 glLoadIdentity 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 <GL/glut.h>
#include <math.h>
#include <stdlib.h>
const double TWO_PI = 6.2831853;
/* Tamao inicial de la ventana de visualizacin. */
GLsizei winWidth = 400, winHeight = 400;
GLuint regHex;
class screenPt
{
private:
GLint x, y;
public:
/* Constructor predeterminado: inicializacin la
* posicin de coordenadas a (0, 0). */
screenPt ( ) {
x = y = 0;
}
void setCoords (GLint xCoord, GLint yCoord) {
x = xCoord;
y = yCoord;
}

CAP03_HEARN_1P.qxd

160

27/09/2005

20:05

Pgina 160

CAPTULO 3 Primitivas grficas

GLint getx ( ) const {


return x;
}
GLint gety ( ) const {
return y;
}
};
static void init (void)
{
screenPt hexVertex, circCtr;
GLdouble theta;
GLint k;
/* Establecer coordenadas del centro del crculo. */
circCtr.setCoords (winWidth / 2, winHeight / 2);
glClearColor (1.0, 1.0, 1.0, 0.0); // Color ventana visualizacin = blanco.
/* Definir una lista de visualizacin para un hexgono regular rojo.
* Los vrtices del hexgono son seis puntos
* equiespaciados situados sobre una circunferencia.
*/
regHex = glGenLists (1); // Obtener un identificador para la vista
// de visualizacin.
glNewList (regHex, GL_COMPILE);
glColor3f (1.0, 0.0, 0.0); // Establecer rojo como color de relleno
// para el hexgono.
glBegin (GL_POLYGON);
for (k = 0; k < 6; k++) {
theta = TWO_PI * k / 6.0;
hexVertex.setCoords (circCtr.getx ( ) + 150 * cos (theta),
circCtr.gety ( ) + 150 * sin (theta));
glVertex2i (hexVertex.getx ( ), hexVertex.gety ( ));
}
glEnd ( );
glEndList ( );
}
void regHexagon (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glCallList (regHex);
glFlush ( );
}
void winReshapeFcn (int newWidth, int newHeight)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight);

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 161

3.25 Resumen

161

glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow (Reshape-Function & Display-List Example);
init ( );
glutDisplayFunc (regHexagon);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

FIGURA 3.64. Ventana de visualizacin generada por el


programa de ejemplo que ilustra el uso de la funcin de
redimensionamiento.

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 trayectoria
recta son el algoritmo DDA, el algoritmo de Bresenham y el mtodo del punto medio. El algoritmo de
Bresenham y el mtodo del punto medio son equivalentes en el caso de las lneas y son tambin los ms

CAP03_HEARN_1P.qxd

162

27/09/2005

20:05

Pgina 162

CAPTULO 3 Primitivas grficas

FIGURA 3.65. Una grfica de datos generada mediante segmentos lineales, curvas, smbolos de caracteres
marcadores y texto (Cortesa de Wolfram Research,
Inc., fabricante del paquete software Mathematica.)

FIGURA 3.66. Un diagrama elctrico dibujado mediante secciones rectas, crculos, rectngulos y texto.
(Cortesa de Wolfram Research, Inc., 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 implementacin
paralela, particionando los segmentos lineales y distribuyendo las particiones entre los procesadores disponibles.
Los crculos y elipses pueden digitalizarse 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 spline, que son polinomios continuos por partes, se
utilizan ampliamente en las aplicaciones de animacin y de diseo asistido por computadora. Pueden conseguirse implementaciones 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
lneas.
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.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 163

3.25 Resumen

163

TABLA 3.1. RESUMEN DE FUNCIONES PRIMITIVAS OpenGL DE SALIDA Y RUTINAS RELACIONADAS.


Funcin

Descripcin

gluOrtho2D

Especifica una referencia 2D de coordenadas universales.

glVertex*

Selecciona unas determinadas coordenadas. Esta funcin


debe incluirse dentro de una pareja glBegin/glEnd.

glBegin (GL_POINTS);

Dibuja uno o ms puntos, cada uno de ellos especificado


mediante una funcin glVertex. La lista de puntos se cierra mediante una instruccin glEnd.

glBegin (GL_LINES);

Muestra un conjunto de segmentos lineales rectos, cuyos


extremos se especifican mediante funciones in glVertex.
La lista de puntos se termina mediante una instruccin
glEnd.

glBegin (GL_LINE_STRIP);

Muestra una polilnea, especificada utilizando la misma


estructura que GL_LINES.

glBegin (GL_LINE_LOOP);

Muestra una polilnea cerrada, especificada utilizando la


misma estructura GL_LINES.

glRect*

Muestra un rectngulo relleno en el plano xy.

glBegin (GL_POLYGON);

Muestra un polgono relleno, cuyos vrtices se proporcionan mediante funciones glVertex y se terminan mediante una instruccin glEnd.

glBegin (GL_TRIANGLES);

Muestra un conjunto de tringulos rellenos utilizando la


misma estructura que GL_POLYGON.

glBegin (GL_TRIANGLE_STRIP);

Muestra una malla de tringulos rellenos, especificada


mediante la misma estructura que GL_POLYGON.

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 (GL_QUADS);

Muestra un conjunto de cuadrilteros rellenos, que se especifican mediante la misma estructura que GL_POLYGON.

glBegin (GL QUAD STRIP);

Muestra una malla de cuadrilteros rellenos, que se especifica con la misma estructura que GL POLYGON.

glEnableClientState (GL_VERTEX_ARRAY);

Activa las caracterstica de matrices de vrtices de


OpenGL.

glVertexPointer (size, type, stride, array); Especifica una matriz de valores de coordenadas.
glDrawElements (prim, num, type, array);

Muestra un tipo de primitiva especificado a partir de los


datos de una matriz.

glNewList (listID, listMode)

Define un conjunto de comandos como una lista de visualizacin, que se termina mediante una instruccin
glEndList.

(Contina)

CAP03_HEARN_1P.qxd

164

27/09/2005

20:05

Pgina 164

CAPTULO 3 Primitivas grficas

TABLA 3.1. RESUMEN DE FUNCIONES PRIMITIVAS OpenGL DE SALIDA Y RUTINAS RELACIONADAS. (Cont.)
Funcin

Descripcin

glGenLists

Genera uno o ms identificadores para listas de visualizacin.

glIsList

Funcin de consulta para determinar si un cierto identificador de lista de visualizacin est siendo utilizado.

glCallList

Ejecuta una nica lista de visualizacin.

glListBase

Especifica un valor de desplazamiento para una matriz de


identificadores de listas de visualizacin.

glCallLists

Ejecuta mltiples listas de visualizacin.

glDeleteLists

Elimina una secuencia especificada de listas de visualizacin.

glRasterPos*

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.

glBitmap (w, h, x0, y0, xShift, yShift,


pattern);

Especifica un patrn binario que hay que asignar a una


serie de posiciones de pxeles, de forma relativa a la posicin actual.

glDrawPixels (w, h, type, format, pattern);

Especifica un patrn de colores que hay que asignar a una


serie de posiciones de pxeles, de forma relativa a la posicin actual.

glDrawBuffer

Selecciona uno o ms bferes para almacenar un mapa de


pxeles.

glReadPixels

Guarda un bloque de pxeles en una matriz seleccionada.

glCopyPixels

Copia un bloque de pxeles de una posicin de bfer a otra.

glLogicOp

Selecciona una operacin lgica para combinar dos matrices de pxeles, despus de habilitar esta caracterstica con
la constante GL_COLOR_LOGIC_OP.

glutBitmapCharacter (font, char);

Especifica una fuente y un carcter de mapa de bits para su


visualizacin.

glutStrokeCharacter (font, char);

Especifica una fuente y un carcter de contorno para su


visualizacin.

glutReshapeFunc

Especifica las acciones que hay que tomar cuando se modifican las dimensiones de la ventana de visualizacin.

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-

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 165

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 pxeles 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 pxeles. 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 flotante 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 glRect, las coordenadas para un conjunto de puntos, lneas o polgonos se especifican mediante la funcin glVertex, y el conjunto de funciones
glVertex que definen cada primitiva se incluye entre una pareja de instrucciones glBegin/glEnd, donde el
tipo de la primitiva se identifica mediante una constante simblica que se introduce como argumento de la
funcin glBegin. 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 perodo 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.
#include <GL/glut.h>
GLsizei winWidth = 600, winHeight = 500;

//
//

Tamao inicial de la ventana de


visualizacin.

CAP03_HEARN_1P.qxd

166

27/09/2005

20:05

Pgina 166

CAPTULO 3 Primitivas grficas

GLint xRaster = 25, yRaster = 150;

//

Inicializar posicin de visualizacin.

GLubyte label [36] = {J, a, n,


F, e, b,
M, a, r,
A, p, r,
M, a, y,
J, u, n,
J, u, l,
A, u, g,
S, e, p,
O, c, t,
N, o, v,
D, e, c};
GLint dataValue [12] = {420, 342, 324, 310, 262, 185,
190, 196, 217, 240, 312, 438};
void init (void)
{
glClearColor (1.0, 1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 600.0, 0.0, 500.0);

//

Ventana de visualizacin blanca.

}
void lineGraph (void)
{
GLint month, k;
GLint x = 30;
glClear (GL_COLOR_BUFFER_BIT);

//

Inicializar posicin x para la grfica.


//

Borrar ventana de visualizacin.

glColor3f (0.0, 0.0, 1.0);


// Seleccionar azul como color de lnea.
glBegin (GL_LINE_STRIP);
// Dibujar los datos como una polilnea.
for (k = 0; k < 12; k++)
glVertex2i (x + k*50, dataValue [k]);
glEnd ( );
glColor3f (1.0, 0.0, 0.0);
for (k = 0; k < 12; k++) {

// Establecer el rojo como color de marcador.


// Dibujar los datos mediante polimarcadores
// de asterisco.
glRasterPos2i (xRaster + k*50, dataValue [k] - 4);
glutBitmapCharacter (GLUT_BITMAP_9_BY_15, *);

}
glColor3f (0.0, 0.0, 0.0);
// Establecer el negro como color del texto.
xRaster = 20;
// Mostrar etiquetas de la grfica.
for (month = 0; month < 12; month++) {
glRasterPos2i (xRaster, yRaster);
for (k = 3*month; k < 3*month + 3; k++)
glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12, label [k]);
xRaster += 50;
}
glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glMatrixMode (GL_PROJECTION);

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 167

Programas de ejemplo

167

glLoadIdentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow (Line Chart Data Plot);
init ( );
glutDisplayFunc (lineGraph);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

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.

CAP03_HEARN_1P.qxd

168

27/09/2005

20:05

Pgina 168

CAPTULO 3 Primitivas grficas

FIGURA 3.68. Una grfica de


barras generada mediante el
procedimiento barChart.

void barChart (void)


{
GLint month, k;
glClear (GL_COLOR_BUFFER_BIT); //

Borrar ventana de visualizacin.

glColor3f (1.0, 0.0, 0.0);


// Color rojo para las barras.
for (k = 0; k < 12; k++)
glRecti (20 + k*50, 165, 40 + k*50, dataValue [k]);
glColor3f (0.0, 0.0, 0.0);
// Color negro para el texto.
xRaster = 20;
// Mostrar etiquetas de la grfica.
for (month = 0; month < 12; month++) {
glRasterPos2i (xRaster, yRaster);
for (k = 3*month; k < 3*month + 3; k++)
glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12,
label [h]);
xRaster += 50;
}
glFlush ( );
}

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.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 169

Programas de ejemplo

169

FIGURA 3.69. Salida generada mediante el procedimiento pieChart.

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
const GLdouble twoPi = 6.283185;
class scrPt {
public:
GLint x, y;
};
GLsizei winWidth = 400, winHeight = 300; // Tamao inicial de la ventana de
// visualizacin.
void init (void)
{
glClearColor (1.0, 1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
.
.
.

// Rutinas del punto medio para mostrar el crculo.

void pieChart (void)


{
scrPt circCtr, piePt;
GLint radius = winWidth / 4; // Radio del crculo.
GLdouble sliceAngle, previousSliceAngle = 0.0;
GLint k, nSlices = 12; // Nmero de sectores.
GLfloat dataValues[12] = {10.0, 7.0, 13.0, 5.0, 13.0, 14.0,
3.0, 16.0, 5.0, 3.0, 17.0, 8.0};
GLfloat dataSum = 0.0;
circCtr.x = winWidth / 2;
// Posicin centro del crculo.
circCtr.y = winHeight / 2;
circleMidpoint (circCtr, radius); // Invocar rutina de punto medio para
// dibujo de crculo.

CAP03_HEARN_1P.qxd

170

27/09/2005

20:05

Pgina 170

CAPTULO 3 Primitivas grficas

for (k = 0; k < nSlices; k++)


dataSum += dataValues[k];
for (k = 0; k < nSlices; k++) {
sliceAngle = twoPi * dataValues[k] / dataSum + previousSliceAngle;
piePt.x = circCtr.x + radius * cos (sliceAngle);
piePt.y = circCtr.y + radius * sin (sliceAngle);
glBegin (GL_LINES);
glVertex2i (circCtr.x, circCtr.y);
glVertex2i (piePt.x, piePt.y);
glEnd ( );
previousSliceAngle = sliceAngle;
}
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT); // Borrar ventana de visualizacin.
glColor3f (0.0, 0.0, 1.0); // Seleccionar azul como color del crculo.
pieChart ( );
glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
glClear (GL_COLOR_BUFFER_BIT);
/* Reinicializar parmetros de tamao de la ventana de visualizacin.
winWidth = newWidth;
winHeight = newHeight;
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow (Pie Chart);
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

*/

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 171

Programas de ejemplo

(a)

(b)

(c)

(d)

171

(e)

FIGURA 3.70. Figuras curvas generadas por el procedimiento drawCurve: (a) caracola, (b) cardioide, (c) trbol de tres
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.
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
struct screenPt
{
GLint x;
GLint y;
};
typedef enum { limacon = 1, cardioid, threeLeaf, fourLeaf, spiral } curveName;
GLsizei winWidth = 600, winHeight = 500; // Tamao inicial de la ventana de
// visualizacin.
void init (void)
{
glClearColor (1.0, 1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void lineSegment (screenPt pt1, screenPt pt2)
{
glBegin (GL_LINES);
glVertex2i (pt1.x, pt1.y);
glVertex2i (pt2.x, pt2.y);
glEnd ( );
}
void drawCurve (GLint curveNum)
{

CAP03_HEARN_1P.qxd

172

27/09/2005

20:05

Pgina 172

CAPTULO 3 Primitivas grficas

/*
*
*
*
*
*
*/

La caracola de Pascal es una modificacin de la ecuacin del crculo


en la que el radio vara con la frmula r = a * cos (theta) + b, donde
a y b son constantes. Una cardioide es una caracola con a = b.
Los trboles de tres y cuatro hojas se generan cuando
r = a * cos (n * theta), con n = 3 y n = 2, respectivamente.
La espiral se muestra cuando r es un mltiplo de theta.

const GLdouble twoPi = 6.283185;


const GLint a = 175, b = 60;
GLfloat r, theta, dtheta = 1.0 / float (a);
GLint x0 = 200, y0 = 250; // Establecer posicin inicial en la pantalla.
screenPt curvePt[2];
glColor3f (0.0, 0.0, 0.0); // Seleccionar negro como color de curva.
curvePt[0].x = x0; // Inicializar posicin de la curva.
curvePt[0].y = y0;
switch (curveNum) {
case limacon:
case cardioid:
case threeLeaf:
case fourLeaf:
case spiral:
default:

curvePt[0].x
curvePt[0].x
curvePt[0].x
curvePt[0].x
break;
break;

+=
+=
+=
+=

a + b; break;
a + a; break;
a; break;
a; break;

}
theta = dtheta;
while (theta < two_Pi) {
switch (curveNum) {
case limacon:
r = a * cos (theta) + b;
case cardioid:
r = a * (1 + cos (theta));
case threeLeaf:
r = a * cos (3 * theta);
case fourLeaf:
r = a * cos (2 * theta);
case spiral:
r = (a / 4.0) * theta;
default:
}

break;
break;
break;
break;
break;
break;

curvePt[1].x = x0 + r * cos (theta);


curvePt[1].y = y0 + r * sin (theta);
lineSegment (curvePt[0], curvePt[1]);
curvePt[0].x = curvePt[1].x;
curvePt[0].y = curvePt[1].y;
theta += dtheta;

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 173

Referencias

173

}
}
void displayFcn (void)
{
GLint curveNum;
glClear (GL_COLOR_BUFFER_BIT); // Borrar ventana de visualizacin.
cout << "\nEnter the integer value corresponding to\n";
cout << "one of the following curve names.\n";
cout << "Press any other key to exit.\n";
cout << "\n1-limacon, 2-cardioid, 3-threeLeaf, 4-fourLeaf, 5-spiral: ";
cin >> curveNum;
if (curveNum == 1 || curveNum == 2 || curveNum == 3 || curveNum == 4
|| curveNum == 5)
drawCurve (curveNum);
else
exit (0);
glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow (Draw Curves);
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

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),

CAP03_HEARN_1P.qxd

174

27/09/2005

20:05

Pgina 174

CAPTULO 3 Primitivas grficas

Heckbert (1994) 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 funciones 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

Implemente una funcin de polilnea utilizando el algoritmo DDA, dado un nmero cualquiera n de puntos de
entrada. Cuando n  1 se debe mostrar un nico punto.

3.2

Ample el algoritmo de generacin de lneas de Bresenham para generar lneas de cualquier pendiente, teniendo
en cuenta la simetra entre cuadrantes.

3.3

Implemente 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  1, la rutina debe mostrar un nico
punto.

3.4

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 est comprendida en el rango 0 < m < 1. Demuestre que los parmetros de decisin para el algoritmo del punto medio son iguales que para el algoritmo de generacin de lneas
de Bresenham.

3.5

Utilice el mtodo del punto medio para calcular los parmetros de decisin que pueden emplearse para generar
segmentos de lnea recta con cualquier pendiente.

3.6

Disee una versin paralela del algoritmo de generacin de lneas de Bresenham para pendientes comprendidas
en el rango 0 < m < 1.

3.7

Disee una versin paralela del algoritmo de Bresenham para generacin de lneas rectas con pendiente arbitraria.

3.8

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 byte, 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, y)?

3.9

Suponga que tiene 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 byte, si 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 al pxel con coordenadas de pantalla (x, y)?

3.10

Incorpore las tcnicas iterativas de clculo de las direcciones del bfer de imagen (Seccin 3.7) al algoritmo de
generacin de lneas de Bresenham.

3.11

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).

3.12

Disee un procedimiento para la implementacin paralela del algoritmo del punto medio para generacin de crculos.

3.13

Calcule los parmetros de decisin para el algoritmo del punto medio de generacin de elipses, suponiendo que
la posicin de inicio sea (rx, 0) y que los puntos deben generarse a lo largo de la trayectoria curva en sentido contrario a las agujas del reloj.

3.14

Disee un procedimiento para la implementacin paralela del algoritmo del punto medio para generacin de elipses.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 175

Ejercicios

175

3.15

Disee un algoritmo eficiente que aproveche las propiedades de simetra para mostrar un ciclo completo de una
funcin seno.

3.16

Modifique el algoritmo del ejercicio anterior para mostrar la funcin seno para cualquier intervalo angular especificado.

3.17

Disee un algoritmo eficiente, teniendo en cuenta la simetra de la funcin, para mostrar una grfica del movimiento armnico amortiguado:
y = Ae kx sin( x + )
donde es la frecuencia angular y 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 10A .

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.
y=

3.19

1 3
x
12

Utilice el mtodo del punto medio y las consideraciones de simetra para digitalizar la parbola:
y = 100 x 2
en el intervalo 10 x 10.

3.20

Utilice el mtodo del punto medio y las consideraciones de simetra para digitalizar la parbola:
x = y2
en el intervalo 10 y 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 2 + b
con valores de entrada que especifique los parmetros a, b y el rango de x.
3.22

Defina unas tablas de datos geomtricos como las de la Figura 3.50 para un cubo de lado unidad.

3.23

Defina las tablas de datos geomtricos para un cubo de lado unidad utilizando simplemente una tabla 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.

3.24

Defina una representacin eficiente en forma de malla de polgonos para un cilindro y explique por qu ha elegido dicha representacin.

3.25

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.

3.26

Disee las rutinas necesarias para comprobar las tres tablas de datos geomtricos de la Figura 3.50 con el fin de
garantizar su coherencia y exhaustividad.

3.27

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.

3.28

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, B, C y D.

3.29

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?

3.30

Disee un procedimiento para identificar una lista de vrtices no planar para un cuadriltero.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 176

176

CAPTULO 3 Primitivas grficas

3.31

Ample el algoritmo del ejercicio anterior para identificar una lista de vrtices no planares que contengan ms de
cuatro puntos.

3.32

Escriba un procedimiento para dividir un conjunto de cuatro vrtices de un polgono en un conjunto de tringulos.

3.33

Disee un algoritmo para dividir un conjunto de n vrtices de un polgono, con n > 4, en un conjunto de tringulos.

3.34

Disee un algoritmo para identificar una lista de vrtices de un polgono degenerado que pueda contener vrtices
repetidos o vrtices colineales.

3.35

Disee un algoritmo para identificar una lista de vrtices de un polgono que contenga aristas que se intersecten.

3.36

Escriba una rutina para la identificacin de polgonos cncavos calculando el producto vectorial de parejas de vectores de las aristas.

3.37

Escriba una rutina para dividir un polgono cncavo, utilizando el mtodo vectorial.

3.38

Escriba una rutina para dividir un polgono cncavo, utilizando el mtodo rotacional.

3.39

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.

3.40

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.

3.41

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 1?

3.42

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.

3.43

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.

3.44

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.

3.45

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.

3.46

Escriba un programa para mostrar una grfica de barras en cualquier rea seleccionada de una ventana de visualizacin.

3.47

Escriba un procedimiento para mostrar una grfica de lneas 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 x e y 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).

3.48

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.

CAP03_HEARN_1P.qxd

27/09/2005

20:05

Pgina 177

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 178

CAPTULO 4

Atributos de las
primitivas grficas

Una pelcula de dibujos animados generada por computadora que muestra varios
objetos con color y otros atributos. (Cortesa de Softimage, Inc.)

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 179

4.1

Variables de estado de OpenGL

4.2

Color y escala de grises

4.3

Funciones de color de OpenGL

4.4

Atributos de los puntos

4.5

Atributos de las lneas

4.6

Atributos de las curvas

4.7

Funciones OpenGL para los atributos del


punto

4.12

Relleno de regiones con lmites curvos


mediante lneas de barrido

4.13

Mtodos de relleno de reas con lmites


irregulares

4.14

Funciones OpenGL para los atributos de


relleno de reas

4.15

Atributos de los caracteres

4.16

Funciones OpenGL para los atributos de los


caracteres

4.8

Funciones OpenGL para los atributos de las


lneas

4.17

Suavizado (antialiasing)

4.9

Atributos de relleno de reas

4.18

Funciones de suavizado de OpenGL

4.10

Algoritmo general de relleno de polgonos


mediante lneas de barrido

4.19

Funciones de consulta de OpenGL

4.11

Relleno de polgonos convexos mediante


lneas de barrido

4.20

Grupos de atributos de OpenGL

4.21

Resumen

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 lneas, 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 lista de tributos. Para generar una primitiva, el sistema comprueba los atributos relevantes e
invoca la subrutina de 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, entre 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

Cap04_HEARN_1P.qxd

180

27/09/2005

20:36

Pgina 180

CAPTULO 4 Atributos de las primitivas grficas

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.

4.1 VARIABLES DE ESTADO DE Open GL


Los valores de los atributos y otros parmetros se especifican con funciones independientes que definen el
estado actual de OpenGL. Entre los parmetros de estado de OpenGL se incluye el color y otros atributos de
primitivas, el modo actual de matriz, los elementos de la matriz modelview (vista de modelo), la posicin
actual del bfer de imagen y los parmetros para los efectos de iluminacin de una escena. Todos los parmetros de estado de OpenGL tienen valores predeterminados, que se mantienen hasta que se especifican nuevos
valores. En cualquier momento, podemos preguntar al sistema por el valor actual de un parmetro de estado.
En las siguientes secciones de este captulo, estudiaremos slo los valores de los atributos para las primitivas
de salida. Otros parmetros de estado se estudian en captulos posteriores.
Todas las primitivas grficas en OpenGL se visualizan con los atributos definidos en la lista de estados
actual. El cambio de uno o ms de los valores de los atributos afecta slo a aquellas primitivas que se especifican despus de que el estado de OpenGL haya cambiado. Las primitivas que se definieron antes del cambio
de estado mantienen sus atributos. Por tanto, podemos visualizar una lnea verde, cambiar el color actual a
rojo y definir otro segmento de lnea. Ambas lneas, la verde y la roja, se visualizarn. Tambin, algunos valores de estado de OpenGL se pueden especificar en pares glBegin/glEnd junto con los valores de las coordenadas, para que los valores de los parmetros puedan variar de unas coordenadas a otras.

4.2 COLOR Y ESCALA DE GRISES


Un atributo bsico de todas las primitivas es el color. Se puede hacer que varias opciones de color estn disponibles para el usuario, dependiendo de las capacidades y de los objetivos de diseo de un sistema particular. Las opciones de color se pueden especificar numricamente, seleccionar en un men o visualizar en una
escala con un cursor. En un monitor de vdeo, estos cdigos de color se convierten en valores de nivel de intensidad de los haces de electrones. En los trazadores de color, los cdigos permiten controlar los depsitos de
inyeccin de tinta o seleccionar las plumillas.

Las componentes de color RGB


En un sistema de barrido a color, el nmero de las alternativas de color disponibles depende de la cantidad
de almacenamiento proporcionado por pxel en el bfer de imagen. Adems, la formacin sobre el color se
puede almacenar en el bfer de imagen de dos modos: podemos almacenar directamente en el bfer de imagen los cdigos de color RGB, o podemos poner los cdigos de color en una tabla independiente y usar las
posiciones de los pxeles para almacenar los valores de los ndices que hacen referencia a las entradas de la
tabla de color. En el esquema de almacenamiento directo, cada vez que un cdigo de color concreto se especifica en un programa de aplicacin, la informacin de color se coloca en el bfer de imagen en la posicin
de cada pxel componente en las primitivas para mostrar dicho color. Se puede proporcionar un nmero
mnimo de colores en este esquema con tres bits de almacenamiento por pxel, como se muestra en la Tabla
4.1. Cada uno de estos tres bits se utiliza para controlar el nivel de intensidad (encendido o apagado, en este
caso) del can de electrones correspondiente en un monitor RGB. El bit situado ms a la izquierda controla el can rojo, el bit central controla el can verde y el bit situado ms a la derecha el can azul.
Podemos aumentar el nmero de alternativas de color disponibles aadiendo ms bits por pxel al bfer de
imagen. Con seis bits por pxel, se pueden utilizar dos bits para cada can. Esto permite cuatro valores de
intensidad diferentes para cada uno de los tres caones de color, y un total de 64 opciones de color disponibles para cada pxel de pantalla. A medida que se proporcionan ms opciones de color, el almacenamiento

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 181

4.2 El color y la escala de grises

181

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 color

ROJO

VERDE

AZUL

Color mostrado

Negro

Azul

Verde

Cin

Rojo

Magenta

Amarillo

Blanco

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 megabytes 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 bsqueda de
color (o mapa 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 (x, 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 (antialiasing) 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-

Cap04_HEARN_1P.qxd

182

27/09/2005

20:36

Pgina 182

CAPTULO 4 Atributos de las primitivas grficas


Tabla de
bsqueda
de colores

Al caon rojo

0
.
.
.
y

Al caon verde
Al can azul

196
196

2081
.
.
.

0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1

255
x

FIGURA 4.1. Una tabla de bsqueda de color con 24 bits por entrada a la que se accede desde de un bfer de imagen con
8 bits por pxel. Un valor de 196 almacenado en la posicin de pxel (x, y) hace referencia a la posicin de esta tabla que
contiene el valor hexadecimal 0x0821 (el valor decimal 2081). Cada segmento de 8 bits de esta entrada controla el nivel
de intensidad de uno 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 de pxel 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 0 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.

Otros parmetros de color


Adems de la especificacin RGB, son tiles en aplicaciones de grficos por computadora otras representaciones de color de tres componentes. Por ejemplo, la salida de color en las impresoras se describe con las componentes de color cian, magenta y amarillo, y a veces las interfaces de color utilizan parmetros tales como
el brillo o la oscuridad para elegir un color. Tambin, el color, y la luz en general, es un asunto complejo, por
lo que se han ideado en el campo de la ptica, la radiometra y la psicologa muchos trminos y conceptos
para describir los mltiples aspectos de las fuentes de luz y los efectos de iluminacin. Fsicamente, podemos
describir un color como una radiacin electromagntica con un margen de frecuencias y una distribucin de
energa concretos, pero tambin influyen las caractersticas de la percepcin de color de que se disponga. Por
tanto, utilizamos el trmino fsico intensidad para cuantificar la cantidad de energa luminosa radiante en una
direccin concreta durante un perodo de tiempo, y utilizamos el trmino psicolgico luminancia para caracterizar el brillo de la luz percibido. Estudiaremos estos trminos y otros conceptos relacionados con el color

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 183

4.3 Funciones de color de OpenGL

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).

4.3 FUNCIONES DE COLOR DE O penGL


En el programa de ejemplo de la parte final del Captulo 2, presentamos brevemente las subrutinas de color
de OpenGL. Utilizamos una funcin para establecer el color de la ventana de visualizacin y otra funcin para
especificar el color del segmento de lnea recta. Tambin establecimos el modo de visualizacin de color
como RGB con la lnea:
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

El 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 GLUT_RGB o GLUT_RGBA 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 GLUT_INDEX.

Los modos de color RGB y RGBA de OpenGL


La mayor parte de los parmetros de configuracin de color de las primitivas de OpenGL pertenecen al modo
RGB, que es bsicamente el mismo que el modo RGBA. La nica diferencia entre RGB y RGBA consiste
en la utilizacin del valor alfa para realizar el fundido de color. Cuando especificamos un conjunto concreto
de valores de color, definimos el estado de color de OpenGL. El color actual se aplica a las primitivas posteriores hasta que cambiemos la configuracin del color. Una especificacin nueva de color afecta nicamente
a los objetos que definamos con posterioridad al cambio de color.
En el modo RGB, especificamos valores para las componentes roja, verde y azul de un color. Como indicamos en el Seccin 2.9, el cuarto parmetro del color, el coeficiente alfa, es opcional y una especificacin
de color de cuatro dimensiones se denomina color RGBA. Este cuarto parmetro del color se puede utilizar
para controlar el fundido de color en las primitivas de superposicin. Una aplicacin importante del fundido
de color es la simulacin de los efectos de transparencia. En estos clculos, el valor alfa se corresponde con
la transparencia (u opacidad). En el modo RGB (o RGBA), seleccionamos las componentes de color actuales
con la funcin:
glColor* (colorComponents);

Los sufijos son similares a los de la funcin glVertex. Utilizamos un sufijo de 3 o 4 para especificar el
modo RGB o 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 0.0 hasta
1.0, y las componentes del color predeterminado de glColor, 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).
glColor3f (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 glBegin/glEnd.

Cap04_HEARN_1P.qxd

184

27/09/2005

20:36

Pgina 184

CAPTULO 4 Atributos de las primitivas grficas

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, 1.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.

Modo de color indexado de OpenGL


Las especificaciones de color en OpenGL tambin se pueden proporcionar en el modo de color indexado, el
cual hace referencia a los valores de una tabla de color. Utilizando este modo, establecemos el color actual al
especificar un ndice dentro de una tabla de color:
glIndex* (colorIndex);

Al argumento colorIndex 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 datos siguientes: byte sin signo, entero o punto
flotante. El tipo de dato del argumento colorIndex 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.
glIndexi (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 rojo, verde y azul 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 ndice.
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 subconjunto 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

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 185

4.3 Funciones de color de OpenGL

185

de color; es decir, podemos cambiar los colores RGB a otra especificacin utilizando otros tres colores primarios (tales como cian, magenta y amarillo).
Una tabla de color concreta del subconjunto de procesamiento de imgenes de OpenGL se activa con la
funcin glEnable , empleando como argumento uno de las nombres de la tabla: GL_COLOR_TABLE ,
GL_POST_CONVOLUTION_COLOR_TABLE o GL_POST_COLOR_MATRIX_COLOR_TABLE. Entonces podemos
utilizar las subrutinas 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.

Fundido de color en OpenGL


En muchas aplicaciones, es conveniente ser capaz de combinar los colores de objetos superpuestos o fundir
un objeto con el fondo. Algunos ejemplos son los siguientes: simulacin del efecto de una brocha, creacin
de una imagen compuesta de dos o ms imgenes, modelado de efectos de transparencia y suavizado de los
objetos de una escena. La mayora de los paquetes grficos proporcionan mtodos para producir varios efectos de mezcla de color, y estos procedimientos se denominan funciones de fundido de color o funciones de
composicin de imgenes. En OpenGL, los colores de dos objetos se pueden fundir cargando en primer lugar
un objeto en el bfer de imagen, para despus combinar el color del segundo objeto con el color del bfer de
imagen. El color actual del bfer de imagen se denomina color de destino de OpenGL y el color del segundo
objeto color de origen de OpenGL. Los mtodos de fundido se pueden realizar slo en el modo RGB o
RGBA. Para aplicar el fundido de color en una aplicacin, necesitamos en primer lugar activar esta caracterstica de OpenGL con la siguiente funcin.
glEnable (GL_BLEND);

Y desactivamos las subrutinas de fundido de color en OpenGL con:


glDisable (GL_BLEND);

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 diferentes 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:
(Sr Rs  Dr Rd, Sg Gs  Dg Gd, Sb Bs  Db Bd, Sa As  Da Ad)

(4.1)

donde las componentes de color RGBA del origen son (Rs, Gs, Bs, As), las componentes de color del destino
son (Rd, Gd, Bd, Ad), los factores de fundido del origen son (Sr, Sg, Sb, Sa) y los factores de fundido del destino son (Dr, Dg, Db, Da). Los valores calculados de las componentes del color de fundido se transforman al
rango que vara desde 0.0 a 1.0. 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.
Seleccionamos los valores de los factores de fundido con la funcin de OpenGL:
glBlendFunc (sFactor, dFactor);

A los argumentos sFactor y dFactor, 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 constante GL_ZERO proporciona los factores de fundido (0.0, 0.0, 0.0, 0.0) y GL_ONE (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 GL_DST_ALPHA y GL_SRC_ALPHA, respectivamente. Otras constantes de OpenGL disponibles para cambiar los factores de fundido son las siguientes: GL_ONE_MINUS_DST_ALPHA ,

Cap04_HEARN_1P.qxd

186

27/09/2005

20:36

Pgina 186

CAPTULO 4 Atributos de las primitivas grficas

GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR y GL_SRC_COLOR. 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 10.19.
El valor predeterminado del argumento sFactor es GL_ONE, mientras que el valor predeterminado del argumento dFactor es GL_ZERO. 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.
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.

Matrices de color en OpenGL


Tambin podemos especificar los valores de color de una escena en combinacin con los valores de las coordenadas en una matriz de vrtices (Seccin 3.17). Esto se puede hacer en modo RGB o en el modo de color
indexado. Como en el caso de las matrices de vrtices, debemos activar en primer lugar las caractersticas de
la matriz de color de OpenGL:
glEnableClientState (GL_COLOR_ARRAY);

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 nColorComponents se le asigna un valor de 3 o 4, dependiendo de si estamos enumerando las componentes de color RGB o RGBA en la matriz colorArray. Se asigna una constante simblica de
OpenGL tal como GL_INT o GL_FLOAT al argumento dataType para indicar el tipo de dato de los valores
del color. En una matriz de color independiente, podemos asignar el valor 0 al argumento offset. Pero s
combinamos los datos de color con los datos de los vrtices en la misma matriz, el valor offset es el nmero de bytes 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
todos 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

vertex3

[3],

color3

[3];

vertex3 pt [8] = { {0, 0, 0}, {0, 1, 0}, {1, 0, 0},


{1, 1, 0}, {0, 0, 1}, {0, 1, 1}, {1, 0, 1}, {1, 1, 1}};
color3 hue [8] = { {1, 0, 0}, {1, 0, 0}, {0, 0, 1},
{0, 0, 1}, {1, 0, 0}, {1, 0, 0}, {0, 0, 1}, {0, 0, 1} };
glEnableClientState

(GL_VERTEX_ARRAY);

glEnableClientState

(GL_COLOR_ARRAY);

glVertexPointer
glColorPointer

(3, GL_INT, 0, pt);


(3, GL_INT, 0, hue);

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,
static GLint hueAndPt [ ] =
{1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 187

4.3 Funciones de color de OpenGL

187

1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1,
0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1};
glVertexPointer (3, GL_INT, 6*sizeof(GLint), hueAndPt [3]);
glColorPointer (3, GL_INT, 6*sizeof(GLint), hueAndPt [0]);

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 offset con el nmero de bytes entre valores sucesivos de
color o vrtice, el cual es 6*sizeof(GLint) para ambos. Los valores de color comienzan en el primer elemento de la matriz entrelazada, el cual es hueAndPt [0], y los valores de los vrtices comienzan en el cuarto elemento, que es hueAndPt [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, as 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 hueAndPt 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, colorIndex);

Los ndices de color se enumeran en la matriz colorIndex y los argumentos type y stride son los mismos de glColorPointer. No se necesita el argumento size, ya que los ndices de la tabla de color se especifican con un nico valor.

Otras funciones de color en OpenGL


En el primer ejemplo de programacin de la Seccin 2.9, presentamos la siguiente funcin que selecciona las
componentes de color RGB para una ventana de visualizacin.
glClearColor ( rojo, verde, azul, alfa);

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 vara 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, alpha, proporciona una opcin para el fundido del color anterior con el color
actual. Esto puede ocurrir slo si activamos la caracterstica 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 glClearColor 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_BUFFER_BIT);

Tambin podemos utilizar la funcin glClear para establecer los valores iniciales de otros bferes disponibles en OpenGL. Existe el bfer de acumulacin, el 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.

Cap04_HEARN_1P.qxd

188

27/09/2005

20:36

Pgina 188

CAPTULO 4 Atributos de las primitivas grficas

En el modo de color indexado, utilizamos la siguiente funcin (en lugar de glClearColor) para definir
el color de la ventana de visualizacin.
glClearIndex (index);

Al color del fondo de las ventanas se le asigna entonces el color almacenado en la posicin index de la
tabla de color. Y la ventana se muestra en ese color cuando se invoca la funcin glClear (GL_CLEAR_
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.

4.4 ATRIBUTOS DE LOS PUNTOS


Bsicamente, podemos establecer dos atributos para los puntos: el color y el tamao. En un sistema de estados, el color y el tamao mostrados de un punto estn determinados por los valores actuales almacenados en
la lista de atributos. Las componentes de color se establecen con valores RGB o con un ndice de una tabla de
color. En un sistema de grficos digitalizados, el tamao del punto es un mltiplo del tamao del pxel, por lo
que un punto grande se muestra como un bloque cuadrado de pxeles.

4.5 ATRIBUTOS DE LAS LNEAS


Un segmento de lnea recta se puede mostrar con tres atributos bsicos: el color, el grosor y el estilo. El color
de la lnea se establece habitualmente con la misma funcin de todas las primitivas grficas, mientras que el
grosor y el estilo de la lnea se seleccionan con funciones independientes para las lneas. Adicionalmente, las
lneas se pueden generar con otros efectos, tales como los trazos de un lapicero y una brocha.

El grosor de las lneas


La implementacin de las opciones del grosor de las lneas depende de las capacidades del dispositivo de salida. Una lnea gruesa se podra mostrar en un monitor de vdeo como lneas adyacentes paralelas, mientras que
un trazador de plumillas podra precisar el cambio de la plumilla para dibujar una lnea gruesa.
En implementaciones de grficos digitalizados, una lnea de grosor estndar se genera con un nico pxel
en cada posicin muestreada, como en el algoritmo de Bresenham. Las lneas ms gruesas se visualizan como
mltiplos enteros positivos de la lnea estndar mediante el dibujo de pxeles adicionales a lo largo de lneas
paralelas adyacentes. Si una lnea tiene una pendiente menor o igual que 1.0, podemos modificar la subrutina
de dibujo de lneas para mostrar lneas gruesas mediante el dibujo de pxeles de extensin en cada columna
(posicin x) a lo largo de la lnea. El nmero de pxeles que se van a mostrar en cada columna se define como
el valor entero del grosor de la lnea. En la Figura 4.2 se muestra una lnea de grosor doble mediante la generacin de una lnea paralela encima de la trayectoria de la lnea original. En cada posicin x muestreada, calculamos la coordenada correspondiente y y se dibujan pxeles en las coordenadas de pantalla (x, y) y (x, y 
1). Podramos mostrar lneas con un grosor igual a 3 o mayor, dibujando alternativamente pxeles por encima
y por debajo de la lnea de grosor simple.
En una lnea de pendiente mayor que 1.0, podemos mostrar lneas gruesas empleando extensiones horizontales, aadiendo pxeles alternativamente a la derecha y a la izquierda de la trayectoria de la lnea. Este

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 189

4.4 Atributos de las lneas

189

FIGURA 4.2. Una lnea digitalizada de doble grosor con pendiente |m|< 1.0 generada con extensiones verticales de pxeles.

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 (x y y) de los puntos extremos de la lnea. Si |x| |y|, 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 perpendicularmente a la trayectoria de la lnea)
depende de su pendiente. Una lnea de 45 se visualizar ms fina debido al factor 1 / 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 lnea (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 m, las terminaciones cuadradas de la
lnea gruesa tienen una pendiente 1/m. 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-

Cap04_HEARN_1P.qxd

190

27/09/2005

20:36

Pgina 190

CAPTULO 4 Atributos de las primitivas grficas

culares tienen su centro en la zona media de la lnea 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 posicionan 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 lnea,
calculamos la posicin de los vrtices del rectngulo a lo largo de las perpendiculares a la trayectoria de la
lnea, 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 al 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 unin 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 lnea 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 la 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.

Estilo de las lneas


Entre las posibles elecciones del atributo de estilo de lnea se incluyen las lneas continuas, las lneas discontinuas y las lneas punteadas. Modificamos el algoritmo de dibujo de lneas para generar tales lneas mediante el
cambio de la longitud y del espaciado de las secciones continuas mostradas a lo largo de la trayectoria de la
lnea. En muchos paquetes grficos, podemos seleccionar tanto la longitud de los trazos discontinuos como el
espacio entre dichos trazos.
Los algoritmos de lneas en sistemas digitalizados muestran los atributos de estilo de las lneas dibujando
extensiones de pxeles. En patrones discontinuos, de puntos o ambas a la vez, el procedimiento de dibujo de
lneas produce como salida secciones continuas de pxeles a lo largo de la trayectoria de la lnea, saltando un
nmero de pxeles entre las extensiones continuas. La cantidad de pxeles utilizada en la longitud de las extensiones y el espacio entre las mismas se puede especificar mediante una mscara de pxel, la cual es un patrn
de dgitos binarios que indica qu posiciones se han de dibujar a lo largo de la trayectoria de la lnea. La mscara lineal 11111000, por ejemplo, se podra utilizar para mostrar una lnea discontinua con una longitud de
trazo de cinco pxeles y un espacio entre trazos de tres pxeles. A las posiciones de pxel correspondientes al
bit 1se les asigna el color actual, y a las posiciones de pxel correspondientes al bit 0 se les asigna el color de
fondo.
El dibujo de trazos con un nmero fijo de pxeles provoca trazos de longitud desigual segn las diferentes orientaciones de la lnea, como se muestra en la Figura 4.6. Ambos trazos se dibujan con cuatro pxeles
pero el trazo diagonal es ms largo en un factor de 2 . En dibujos en los que se necesita precisin, las longitudes de los trazos deberan permanecer aproximadamente constantes para cualquier orientacin de la lnea.
Para conseguir esto, podramos ajustar la cantidad de pxeles de las extensiones continuas y el espacio entre

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 191

4.5 Atributos de las lneas

(a)

(b)

191

(c)

FIGURA 4.4. Lneas gruesas dibujadas con extremos (a) abruptos, (b) redondeados y (c) cuadrados .

(a)

(b)

(c)

FIGURA 4.5. Segmentos de lnea gruesa conectados con una unin en punta (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
linea, la cual entonces calcula las posiciones de los pxeles a lo largo de la trayectoria del trazo.

Opciones de plumilla y brocha


En algunos paquetes, particularmente en los sistemas de dibujo y pintura, podemos seleccionar directamente
diferentes estilos de plumilla y brocha. Entre las opciones de esta categora se incluyen la forma, el tamao y
el patrn de la plumilla o brocha. Algunos ejemplos de formas de plumilla y brocha se muestran en la Figura
4.7. Esta forma se puede almacenar en una mscara de pxel que identifica la matriz de posiciones de pxel
que se deben cambiar a lo largo de la trayectoria de la lnea. Por ejemplo, una plumilla rectangular se podra
implementar con la mscara que se muestra en la Figura 4.8 mediante el movimiento del centro (o una esquina) de la mscara a lo largo de la trayectoria de la lnea, como en la Figura 4.9. Para evitar cambiar los pxeles ms de una vez en el bfer de imagen, podemos simplemente acumular las extensiones horizontales generadas en cada posicin de la mscara y mantener la pista del comienzo y el final de las posiciones x de las
extensiones a lo largo de cada lnea de barrido.
Las lneas generadas con plumilla (o brocha) se pueden visualizar con varios grosores mediante el cambio
del tamao de la mscara. Por ejemplo, la lnea generada con una plumilla rectangular de la Figura 4.9 se
podra estrechar con una mscara rectangular de tamao 2 por 2 o ensanchar con una mscara de tamao 4
por 4. Tambin, las lneas se pueden representar con patrones creados mediante la superposicin de varios
patrones en una mscara de plumilla o brocha.

(a)

(b)

FIGURA 4.6. Trazos de distinta longitud visualizados con el mismo nmero


de pxeles.

Cap04_HEARN_1P.qxd

192

27/09/2005

20:36

Pgina 192

CAPTULO 4 Atributos de las primitivas grficas

FIGURA 4.7. Formas de plumillas y brochas para la visualizacin de lneas.

1
1
1

1
1
1

1
1
1
Trayectoria
de la lnea

(a)

(b)

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.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 193

4.6 Atributos de las curvas

193

4.6 ATRIBUTOS DE LAS CURVAS


Los parmetros de los atributos de las curvas son los mismos que los de los segmentos de lnea recta. Podemos
mostrar curvas variando los colores, los grosores, utilizando patrones de punto y guin, y opciones disponibles de plumillas o brochas. Los mtodos para la adaptacin de algoritmos de dibujo de curvas para acomodarlos a las selecciones de los atributos son similares a aquellos empleados para el dibujo de lneas.
Las curvas digitalizadas de varios grosores se pueden representar empleando el mtodo de las extensiones
verticales y horizontales de pxeles. Donde la magnitud de la pendiente de la curva sea menor o igual que 1.0,
dibujaremos extensiones verticales; donde la magnitud de la pendiente sea mayor que 1.0, dibujaremos extensiones horizontales. La Figura 4.10 muestra este mtodo para la representacin de un arco circular de grosor
4 en el primer cuadrante. Utilizando la simetra del crculo, podemos generar una trayectoria circular con
extensiones verticales en el octante que va desde x  0 a x  y, y despus reflejar las posiciones de los pxeles sobre la lnea yx para obtener el reflejo de la curva mostrada. Las secciones circulares de otros cuadrantes se obtienen mediante reflexin de las posiciones de los pxeles del primer cuadrante segn los ejes de coordenadas. El grosor de las curvas representadas con este mtodo es de nuevo funcin de la pendiente de la
curva. Los crculos, elipses y otras curvas aparecern ms finas donde la pendiente tenga una magnitud de 1.
Otro mtodo para representar curvas gruesas consiste en rellenar el rea entre dos trayectorias de curva paralelas, cuya distancia de separacin sea igual al grosor deseado. Podramos hacer esto empleando la trayectoria de la curva especificada como una frontera y establecer la segunda frontera dentro o fuera de la
trayectoria de la curva original. Esta tcnica, sin embargo, cambia la trayectoria de la curva original hacia dentro o hacia afuera, dependiendo de la direccin que elijamos para la segunda frontera. Podemos mantener la
posicin de la curva original estableciendo dos curvas frontera a una distancia de medio grosor a cada lado de
la trayectoria de la curva especificada. Un ejemplo de esta tcnica se muestra en la Figura 4.11 para un segmento circular con radio 16 y grosor 4. Los arcos lmite se establecen entonces con una distancia de separacin de 2 a cada lado del radio de valor 16. Para mantener las dimensiones adecuadas del arco circular, como
se estudi en el Seccin 3.13, podemos establecer el radio para los arcos lmite concntricos en r  14 y
r 17. Aunque este mtodo es preciso para la generacin de crculos gruesos, proporciona en general, slo
una aproximacin al rea verdadera de otras curvas gruesas. Por ejemplo, los lmites internos y externos de
una elipse gruesa generada con este mtodo no tienen el mismo foco.

17

14

FIGURA 4.10. Un arco circular de grosor 4 dibujado con


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.

Cap04_HEARN_1P.qxd

194

27/09/2005

20:36

Pgina 194

CAPTULO 4 Atributos de las primitivas grficas

Las mscaras de pxeles estudiadas para la implementacin 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 octante 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.13. Un arco circular obtenido con una plumilla rectangular.

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.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 195

4.7 Funciones OpenGL para los atributos de los puntos

195

Figura 4.15. Un mueco daruma, un smbolo de buena fortuna en Japn, dibujado por el artista de las computadoras
Koichi Kozaki 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.

4.7 FUNCIONES OpenGL PARA LOS ATRIBUTOS DE LOS PUNTOS


El color mostrado en un punto se controla mediante los valores de color actuales de la lista de estado. Un color
se especifica con la funcin glColor o glIndex.
Establecemos el tamao de un punto en OpenGL con:
glPointSize (size);

y el punto se muestra entonces como un bloque de pxeles cuadrado. Al argumento size se le asigna un valor
positivo en punto flotante, 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
size. Por tanto, un tamao de punto de 1.0 muestra un nico pxel y un tamao de punto 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 glBegin/ 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.
glColor 3f (1.0, 0.0, 0.0);
glBegin (GL_POINTS);
glVertex2i (50, 100);
glPointSize (2.0);
glColor3f (0.0, 1.0, 0.0);
glVertex2i (75, 150);
glPointSize (3.0);

Cap04_HEARN_1P.qxd

196

27/09/2005

20:36

Pgina 196

CAPTULO 4 Atributos de las primitivas grficas


glColor3f (0.0, 0.0, 1.0);
glVertex2i (100, 200);
glEnd ( );

4.8 FUNCIONES OpenGL PARA LOS ATRIBUTOS DE LAS LNEAS


Podemos controlar la apariencia de un segmento de lnea recta en OpenGL con tres atributos: el color de la
lnea, el grosor de la lnea y el estilo de la lnea. Ya hemos visto cmo realizar una seleccin de color. OpenGL
proporciona una funcin para establecer el grosor de una lnea y otra para especificar un estilo de lnea, tal
como una lnea discontinua o una lnea de puntos.

Funcin de grosor de lnea de OpenGL


El grosor de lnea se establece en OpenGL con la funcin:
glLineWidth

(width);

Asignamos un valor en punto flotante al argumento width, 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 implementa 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, x y
y, se comparan para determinar si se genera una lnea gruesa utilizando extensiones de pxeles verticales o
extensiones de pxeles horizontales.

La funcin de estilo de lnea de OpenGL


De manera predeterminada, un segmento de lnea recta se visualiza como lnea continua. Pero tambin podemos representar lneas discontinuas, lneas de puntos y una lnea con una combinacin de trazos y puntos.
Podemos variar la longitud de los trazos y el espacio entre trazos o puntos. Establecemos el estilo de visualizacin actual de las lneas con la funcin de OpenGL:
glLineStipple (repeatFactor, pattern);

El argumento pattern se utiliza para referenciar un entero de 16 bits que describe cmo se visualizar la
lnea. Un bit de valor 1 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 0xFFFF (cada posicin de
pxel tiene un valor de 1), el cual produce una lnea continua. El argumento entero repeatFactor 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 pattern
la representacin en hexadecimal 0x00FF y que el factor de repeticin es 1. 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

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 197

4.8 Funciones OpenGL para los atributos de las lneas

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 0xFFFF 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.

/* Define un tipo de datos para coordenadas universales bidimensionales. */


typedef struct { float x, y; } wcPt2D;
wcPt2D dataPts [5];
void linePlot (wcPt2D dataPts [5])
{
int k;
glBegin (GL_LINE_STRIP);
for (k = 0; k < 5; k++)
glVertex2f (dataPts [k].x, dataPts [k].y);
glFlush ( );
glEnd ( );
}

Cap04_HEARN_1P.qxd

198

27/09/2005

20:36

Pgina 198

CAPTULO 4 Atributos de las primitivas grficas

/* Invocar aqu un procedimiento para dibujar los ejes de coordenadas.

*/

glEnable (GL_LINE_STIPPLE);
/* Introduce el primer conjunto de valores (x, y). */
glLineStipple (1, 0x1C47);
// Dibuja una polilnea trazo-punto de grosor
// estndar.
linePlot (dataPts);
/* Introduce el segundo conjunto de valores (x, y). */
glLineStipple (1, 0x00FF);
// Dibuja una polilnea a trazos de grosor doble.
glLineWidth (2.0);
linePlot (dataPts);
/* Introduce el tercer conjunto de valores (x, y). */
glLineStipple (1, 0x0101);
// Dibuja una polilnea punteada de grosor triple.
glLineWidth (3.0);
linePlot (dataPts);
glDisable (GL_LINE_STIPPLE);

Otros efectos de lnea de OpenGL


Adems de especificar el grosor, el estilo y un color slido, podemos mostrar lneas con gradaciones de color.
Por ejemplo, podemos variar el color a lo largo de la trayectoria de una lnea continua mediante la asignacin
de un color diferente en cada extremo de la lnea cuando definimos sta. En el siguiente segmento de cdigo
mostramos esto asignando un color azul a un extremo de la lnea y un color rojo al otro extremo. La lnea continua se visualiza entonces como una interpolacin lineal de los colores de los puntos extremos.
glShadeModel

(GL_SMOOTH);

glBegin (GL_LINES);
glColor3f
glVertex2i
glColor3f
glVertex2i
glEnd

(0.0, 0.0, 1.0);


(50, 50);
(1.0, 0.0, 0.0);
(250, 250);

( );

A la funcin glShadeModel tambin se le puede pasar el argumento GL_FLAT. 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, GL_SMOOTH 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 lneas 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.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 199

4.9 Atributos de relleno de reas

199

4.9 ATRIBUTOS DE RELLENO DE REAS


La mayora de los paquetes grficos limitan el relleno de reas a polgonos, porque stos se describen con
ecuaciones lineales. Una mayor restriccin requiere que las reas a rellenar sean polgonos convexos, para que
las lneas de barrido no intersecten con ms de dos lados de los polgonos. Sin embargo, por lo general, podemos rellenar regiones cualesquiera, entre las que se incluyen los crculos, elipses y otros objetos con lmites
curvos. Los sistemas de aplicaciones, tales como los programas de pintura, proporcionan opciones de relleno
de regiones de forma arbitraria.
Existen dos procedimientos bsicos para rellenar un rea en sistemas digitalizados, una vez que la definicin de la regin a rellenar se ha mapeado a coordenadas de pxel. Un procedimiento determina en primer
lugar los intervalos de superposicin de las lneas de barrido que cruzan el rea. Entonces, las posiciones de
los pxeles a lo largo de estos intervalos de superposicin se cambian al color de relleno. Otro mtodo para
rellenar regiones consiste en comenzar por una posicin interior y pintar hacia afuera, pxel a pxel, desde
este punto hasta encontrar las condiciones lmite especificadas. El procedimiento de la lnea de barrido se aplica habitualmente a formas simples tales como crculos o a las regiones con lmites definidos a base de polilneas. Los paquetes grficos generales utilizan este mtodo de relleno. Los algoritmos de relleno que utilizan
un punto interior de comienzo son tiles para rellenar reas con lmites ms complejos y se utilizan en aplicaciones de pintura interactivas.

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 contorno 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. En 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 pxeles 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

FIGURA 4.17. Estilos bsicos de relleno de polgonos.

Cap04_HEARN_1P.qxd

200

27/09/2005

20:36

Pgina 200

CAPTULO 4 Atributos de las primitivas grficas

FIGURA 4.18. reas rellenadas con patrones de


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 implementar 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 pxeles 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 pxeles 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 nico 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
 1). 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 pxeles 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.

Relleno de regiones con fundido de color


Tambin se puede combinar un patrn de relleno con el color de fondo de varios modos. Un patrn se podra
combinar con los colores de fondo utilizando un factor de transparencia que determine qu cantidad del fondo
se debera mezclar con el color del objeto. O podramos utilizar operaciones simples lgicas o de reemplazamiento. La Figura 4.19 muestra cmo las operaciones lgicas y de reemplazamiento combinaran un patrn
de relleno 2 por 2 con un patrn de fondo en un sistema binario (blanco y negro).
Algunos mtodos de relleno que utilizan fundido de color se han denominado algoritmos de relleno suave
o relleno tintado. Un uso de estos mtodos de relleno es suavizar los colores de relleno de los bordes del objeto que se han difuminado para suavizar los bordes. Otra aplicacin de un algoritmos de relleno suave es permitir repintar un rea de color que se rellen inicialmente con una brocha semitransparente, donde el color
actual es entonces una mezcla del color de la brocha y los colores de fondo que hay detrs del rea. En otro
caso, queremos que el nuevo color de relleno tenga las mismas variaciones sobre el rea que el color de relleno actual.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 201

4.9 Atributos de relleno de reas

201

and

or

Patrn

xor

Fondo

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
(or exclusivo), y usando reemplazamiento simple.

Como ejemplo de esta clase 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  tF  (1  t)B

(4.2)

donde el factor de transparencia t toma un valor entre 0 y 1 en cada pxel. Para valores de t menores que 0.5,
el color de fondo contribuye ms al color interior de la region que el color de relleno. La Ecuacin vectorial
4.2 contiene las componentes RGB de los colores, con:
P  (PR, PG, PB),

F  (FR, FG, FB),

B  (BR, BG, BB)

(4.3)

Podemos por tanto calcular el valor del parmetro t utilizando una de las componentes de color RGB:
t=

Pk Bk
Fk Bk

(4.4)

donde k  R, G, o B; y Fk Bk. Tericamente, el argumento t 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 t 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.
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 B1 y B2 se mezclan con el color de primer plano F, el color del pxel resultante P es:

Cap04_HEARN_1P.qxd

202

27/09/2005

20:36

Pgina 202

CAPTULO 4 Atributos de las primitivas grficas

P  t0F  t1B1  (1  t0  t1)B2

(4.5)

donde la suma de los coeficientes de los trminos de color t0, t1 y (1  t0  t1) debe ser igual a 1. Podemos
establecer un sistema de dos ecuaciones utilizando dos de las tres componentes de color RGB para resolver
los dos parmetros de proporcionalidad t0 y t1. 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 s.

4.10 ALGORITMO GENERAL DE RELLENO DE POLGONOS MEDIANTE LNEAS


DE BARRIDO
El relleno mediante lneas de barrido de una regin se realiza determinando en primer lugar los puntos de
interseccin de los lmites de la regin que se va a rellenar con las lneas de barrido de la pantalla. Entonces
se aplican los colores de relleno a cada parte de la lnea de barrido que se encuentra en el interior de la regin
a rellenar. El algoritmo de relleno mediante lneas de barrido identifica las mismas regiones interiores que la
regla par-impar (Seccin 3.15). El rea ms simple para rellenar es un polgono, ya que cada punto de interseccin de la lnea de barrido con el lmite del polgono se obtiene mediante la resolucin de un sistema de
dos ecuaciones lineales, donde la ecuacin de la lnea de barrido es simplemente y  constante.
La Figura 4.20 muestra el procedimiento bsico de lneas de barrido para el relleno con un color liso de
un polgono. Para cada lnea de barrido que atraviesa el polgono, las intersecciones con los bordes se ordenan de izquierda a derecha, y entonces las posiciones de los pxeles entre cada par de interseccin se cambian
al color de relleno especificado. En el ejemplo de la Figura 4.20, los cuatro pxeles de interseccin con los
lmites del polgono definen dos tramos de pxeles interiores. Por tanto, el color de relleno se aplica a los cinco
pxeles desde x  10 a x  14 y a los siete pxeles desde x  18 a x  24. Si hay que aplicar un patrn de
relleno al polgono, entonces el color de cada pxel a lo largo de la lnea de barrido se determina a partir de
su posicin de solapamiento con el patrn de relleno.
Sin embargo, el algoritmo de relleno mediante lneas de barrido para un polgono no es tan simple como
la Figura 4.20 podra sugerir. Cada vez que una lnea de barrido pasa a travs de un vrtice, intersecta con dos
aristas del polgono en dicho punto. En algunos casos, esto puede producir un nmero impar de intersecciones con la frontera para una lnea de barrido. La Figura 4.21 muestra dos lneas de barrido que cruzan un rea
de relleno de un polgono y que intersectan con un vrtice. La lnea de barrido y intersecta con un nmero
par de aristas, y los dos pares de puntos de interseccin a lo largo de esta lnea de barrido identifican correctamente las extensiones interiores de pxeles. Pero la lnea de barrido y intersecta con cinco aristas del poly

FIGURA 4.20. Pxeles interiores a lo largo de


una lnea de barrido que pasa a travs de un rea
de relleno de un polgono.

x
10

14

18

24

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 203

Algoritmo general de relleno de polgonos mediante lneas de barrido

203

Lnea de barrido y
1

1
Lnea de barrido y

FIGURA 4.21. Puntos de interseccin a lo largo de lneas de barrido que intersectan con los vrtices de un polgono. La
lnea de barrido y genera un nmero impar de intersecciones, pero la lnea 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 y, 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 y 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 y 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 y 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.
Habitualmente, 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 incrementales aplicados a lo largo de una nica lnea 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 incrementales 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

Cap04_HEARN_1P.qxd

204

27/09/2005

20:36

Pgina 204

CAPTULO 4 Atributos de las primitivas grficas

Lnea de barrido y  1
Lnea de barrido y
Lnea de barrido y  1

(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. La arista que se est procesando actualmente se indica con una lnea contnua. En (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.
(xk  1, yk  1)

Lnea de barrido yk  1

(xk, yk)

Lnea de barrido yk

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 pendiente de esta arista se puede expresar en trminos de las coordenadas de la interseccin con la lnea de barrido:
m=

y k +1 y k
x k +1 x k

Ya que el cambio en las coordenadas y entre las dos lneas de barrido es simplemente,
yk1  yk  1

(4.6)

(4.7)

el valor xk1 de interseccin segn el eje x de la lnea de barrido superior se puede determimar a partir del
valor xk de interseccin segn el eje x de la lnea de barrido precedente del siguiente modo,
x k +1 = x k +

1
m

(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 xk de la
lnea de barrido k sobre la lnea inicial de barrido se puede calcular del siguiente modo:
x k = x0 +

k
m

(4.9)

En un algoritmo secuencial de relleno, el incremento de los valores de x en la cantidad m1 a lo largo de


una arista se puede realizar con operaciones enteras renombrando la pendiente m como el cociente de dos
enteros:

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 205

Algoritmo general de relleno de polgonos mediante lneas de barrido

m=

205

y
x

donde x y y son las diferencias entre las coordenadas x e y de los puntos extremos de la arista. Por tanto,
los clculos incrementales de la x de interseccin a lo largo de una arista con sucesivas lneas de barrido se
pueden expresar del siguiente modo:
x k +1 = x k +

x
y

(4.10)

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 x 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 y, incrementamos el valor
actual de la x de interseccin en una unidad y decrementamos el contador con el valor y. Este procedimiento es equivalente a mantener la parte entera y la parte fraccionaria de la x 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 = 73 . 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 reiniciamos 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 x 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 y/2. Esto se puede hacer con aritmtica entera incrementando el contador con el valor
2y en cada paso y comparando el incremento con y. Cuando el incremento es mayor o igual que y, incrementamos el valor de x en 1 y decrementamos el contador con el valor 2y. En el ejemplo previo de m = 73 ,
los valores del contador para las primeras lneas de barrido sobre la lnea inicial de barrido para esta arista
seran ahora 6, 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 2x  x  x y 2y  y
 y, 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 contiene todas las aristas con las que se cruza dicha lnea

Cap04_HEARN_1P.qxd

206

27/09/2005

20:36

Pgina 206

CAPTULO 4 Atributos de las primitivas grficas


Nmero
de la lnea
de barrido
yC
B

yA

Lnea de barrido yD
Lnea de barrido yA

1/mCB

yC

xD

1/mDC

yE

xD

1/mDE

yE

xA

1/mAE

yB

xA

1/mAB

.
.
.

Lnea de barrido yC

C

xC

.
.
.
yD

yB

D
A

.
.
.
1
0

FIGURA 4.24. Un polgono y su tabla 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 x y y 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 x 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 y en el punto extremo superior. Estas medidas tambin garantizan que los pxeles de polgonos adyacentes no se superpondrn.

4.11 RELLENO DE POLGONOS CONVEXOS MEDIANTE


LNEAS DE BARRIDO
Cuando aplicamos un procedimiento de relleno mediante lneas de barrido a un polgono convexo, puede que
no haya ms que una nica extensin interior para cada lnea de barrido de la pantalla. Por lo que necesitamos procesar las aristas del polgono slo hasta que hayamos encontrado dos intersecciones con los lmites
para cada lnea de barrido que cruza el interior del polgono.
El algoritmo general de lnea de barrido de polgonos estudiado en la seccin anterior se puede simplificar considerablemente en el caso del relleno de polgonos convexos. De nuevo utilizamos extensiones de
coordenadas para determinar qu aristas cruzan una lnea de barrido. Los clculos de las intersecciones con
estas aristas despus determinan la extensin interior de pxeles para aquella lnea de barrido, donde cualquier
vrtice cruzado se cuenta como un nico punto de interseccin con el lmite. Cuando una lnea de barrido
intersecta en un nico vrtice (en una cspide, por ejemplo), dibujamos slo dicho punto. Algunos paquetes
grficos restringen ms an el relleno de reas a nicamente tringulos. Esto hace que el relleno sea an ms
sencillo, ya que cada tringulo slo tiene tres aristas que procesar.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 207

4.13 Mtodos de relleno de reas con lmites irregulares

207

4.12 RELLENO DE REGIONES CON LMITES CURVOS MEDIANTE


LNEAS DE BARRIDO
Puesto que un rea con lmites curvos se describe con ecuaciones no lineales, su relleno mediante lneas de
barrido generalmente requiere ms tiempo que el relleno de un polgono mediante lneas de barrido. Podemos
utilizar la misma tcnica general detallada en el Seccin 4.10, pero los clculos de las intersecciones con los
lmites se realizan con las ecuaciones de las curvas. La pendiente del lmite cambia de forma continua, por lo
que no podemos utilizar directamente los clculos incrementales, que se emplean con las aristas rectas.
En el caso de curvas simples como crculos o elipses, podemos aplicar mtodos de relleno similares a los
empleados con los polgonos convexos. Cada lnea de barrido que cruza el interior de un crculo o de una elipse tiene slo dos intersecciones con su contorno. Podemos determinar estos dos puntos de interseccin con el
lmite de un crculo o de una elipse utilizando clculos incrementales del mtodo del punto medio. Despus,
simplemente rellenamos la extensin de pxeles horizontal entre ambos puntos de interseccin. Las simetras
entre cuadrantes (y entre octantes en los crculos) se utilizan para reducir los clculos de los lmites.
Mtodos similares se pueden utilizar para generar el rea de relleno de una seccin curva. Por ejemplo, un
rea delimitada por un arco elptico y una lnea recta (Figura 4.25) se puede rellenar utilizando una combinacin de procedimientos de curvas y de rectas. Las simetras y los clculos incrementales se utilizan siempre
que sea posible para reducir los clculos.
El relleno de otras reas curvadas puede implicar un procesamiento considerablemente mayor. Podramos
utilizar mtodos incrementales similares en combinacin con tcnicas numricas para determinar las intersecciones de las lneas de barrido, pero habitualmente los lmites curvos se aproximan mediante segmentos de
lnea recta.

4.13 MTODOS DE RELLENO DE REAS CON LMITES IRREGULARES


Otra tcnica para rellenar un rea especificada consiste en comenzar por un punto interior y pintar el interior, punto a punto, hasta los lmites. Esta tcnica es particularmente til para rellenar reas con lmites irregulares, tales como un diseo creado con un programa de pintura. Generalmente, estos mtodos requieren la
introduccin de un punto de comienzo dentro del rea a rellenar e informacin del color de los lmites o del
interior.
Podemos rellenar regiones irregulares con un nico color o con un patrn de color. En el caso del relleno
con un patrn, superponemos una mscara de color, como se estudi en el Seccin 4.9. Cuando se procesa cada
pxel dentro de la regin, se determina su color con los valores correspondientes del patrn de superpuesto.

Algoritmo de relleno por contorno


Si el lmite de una regin se especifica en un nico color, podemos rellenar el interior de esta regin, pxel a
pxel, hasta encontrar el color de dicho lmite. Este mtodo, denominado algoritmo de relleno por contorno, se emplea en paquetes de pintura interactivos, donde los puntos interiores se seleccionan fcilmente.
Empleando una tableta grfica u otro dispositivo interactivo, un artista o diseador puede esbozar el contorno de una figura, seleccionar un color de relleno de un men de color, especificar el color de los lmites del
rea, y seleccionar un punto interior. El interior de la figura se pinta entonces con el color de relleno. Se pueden establecer tanto lmites interiores como exteriores para definir un rea para rellenar por frontera. La
Figura 4.26 muestra ejemplos de especificacin de color de regiones.
Bsicamente, un algoritmo de relleno por contorno comienza a partir de un punto interior (x, y) y comprueba el color de los puntos vecinos. Si un punto comprobado no presenta el color de la frontera, se cambia
su color al color de relleno y se comprueban sus vecinos. Este procedimiento contina hasta que todos los
pxeles se han procesado hasta comprobar el color del lmite designado para el rea.

Cap04_HEARN_1P.qxd

208

27/09/2005

20:36

Pgina 208

CAPTULO 4 Atributos de las primitivas grficas

(a)

FIGURA 4.25. Relleno del interior de un arco elptico.

(b)

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-conectada con un color liso,
especificado en el argumento fillColor, hasta un color de contorno especificado con el argumento
borderColor. Podemos ampliar este procedimiento para rellenar una regin 8-conectada mediante la inclusin de cuatro lneas adicionales para comprobar las posiciones diagonales (x 1, y 1).

(a)

(b)

FIGURA 4.27. Mtodos de relleno aplicados a un rea 4-conectada (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.

Posicin inicial
(a)

(b)

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 209

4.13 Mtodos de relleno de reas con lmites irregulares

209

void boundaryFill4 (int x, int y, int fillColor, int borderColor)


{
int interiorColor;
/* Establece el color actual en fillColor, despus realiza las siguientes
operaciones. */
getPixel (x, y, interiorColor);
if ((interiorColor != borderColor) && (interiorColor != fillColor)) {
setPixel (x, y);
// Set color of pxel to fillColor.
boundaryFill4 (x + 1, y , fillColor, borderColor);
boundaryFill4 (x - 1, y , fillColor, borderColor);
boundaryFill4 (x , y + 1, fillColor, borderColor);
boundaryFill4 (x , y - 1, fillColor, borderColor)
}
}

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 pxeles interiores que estn inicialmente con el color de relleno antes de aplicar el procedimiento de relleno por contorno.
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-conectados 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.

Cap04_HEARN_1P.qxd

210

27/09/2005

20:36

Pgina 210

CAPTULO 4 Atributos de las primitivas grficas

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.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 211

4.14 Funciones OpenGL para atributos de relleno de reas

211

FIGURA 4.30. Un rea definida por lmites de mltiples colores.

Algoritmo de relleno por inundacin


A veces se desea rellenar (o cambiar de color) un rea que no est definida por un nico color de contorno.
La Figura 4.30 muestra un rea limitada por varias regiones de colores diferentes. Podemos pintar tales reas
reemplazando un color interior especificado en lugar de buscar un color de contorno concreto. Este procedimiento de relleno se denomina algoritmo de relleno por inundacin. Comenzamos por un punto interior
especificado (x, y) y se cambian los valores de todos los pxeles que actualmente tienen un color interior dado
al color de relleno deseado. Si el rea que queremos pintar tiene ms de un color interior, podemos en primer
lugar cambiar el valor de los pxeles para que todos los puntos interiores tengan el mismo color. Utilizando
una tcnica 4-conectada u 8-conectada, despus procedemos con las posiciones de los pxeles hasta que se han
repintado todos los puntos interiores. El siguiente procedimiento por inundacin rellena una regin 4-conectada recursivamente, comenzando por la posicin de entrada.

void floodFill4 (int x, int y, int fillColor, int interiorColor)


{
int color;
/* Establece el color actual en fillColor, despus realiza las siguientes
operaciones. */
getPixel (x, y, color);
if (color = interiorColor) {
setPixel (x, y);
// Set color of pxel to fillColor.
floodFill4 (x + 1, y, fillColor, interiorColor);
floodFill4 (x - 1, y, fillColor, interiorColor);
floodFill4 (x, y + 1, fillColor, interiorColor);
floodFill4 (x, y - 1, fillColor, interiorColor)
}
}

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.

4.14 FUNCIONES O pen GL PARA ATRIBUTOS DE RELLENO DE REAS


En el paquete grfico OpenGL, se dispone de subrutinas de relleno de reas slo para polgonos convexos.
Generamos visualizaciones de polgonos convexos rellenos siguiendo estos cuatro pasos:

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 212

212

CAPTULO 4 Atributos de las primitivas grficas

(1)

Definir un patrn de relleno

(2)

Invocar la subrutina de relleno de polgonos

(3)

Activar la caracterstica de OpenGL de relleno de polgonos

(4)

Describir los polgonos que se van a rellenar

Un patrn de relleno de polgonos se visualiza hasta 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. Una 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 diferentes para las caras anterior y posterior de un rea de relleno poligonal.

Funcin de relleno con patrn de OpenGL


De forma predeterminada, un polgono convexo se muestra como una regin de color liso, utilizando la configuracin de color actual. Para rellenar un polgono con un patrn en OpenGL, utilizamos una mscara de 32
por 32 bits. Un valor de 1 en la mscara indica que el pxel correspondiente se ha de cambiar al color actual,
y un 0 deja el valor de dicha posicin del bfer de imagen sin cambios. El patrn de relleno se especifica con
bytes sin signo utilizando el tipo de dato de OpenGL GLubyte, como hicimos con la funcin glBitmat.
Definimos un patrn de bits con valores hexadecimales como, por ejemplo,
Glubyte fillPattern [ ] = {
0xff, 0x00, 0xff, 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 bitShape 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:
glPolygonStipple

(fillPattern);

Ventana de visualizacin
Posicin inicial

FIGURA 4.31. Disposicin en mosaico de un patrn de relleno rectangular en una ventana de visualizacin para rellenar
dos polgonos convexos.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 213

4.14 Funciones OpenGL para atributos de relleno de reas

213

Esquina
superior-derecha
del patrn

(a)

(b)

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);

De forma similar, desactivamos el relleno con patrones con la instruccin:


glDisable

(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.

Patrones de textura e interpolacin de OpenGL


Otro mtodo para rellenar polgonos consiste en utilizar patrones de textura, como se estudia en el Captulo
10. Este mtodo puede producir patrones de relleno que simulan la apariencia superficial de la madera, ladrillos, acero cepillado o algn otro material. Tambin, podemos obtener una coloracin por interpolacin del
interior de un polgono como hicimos con la primitiva de lneas. Para ello, asignamos colores diferentes a los
vrtices del polgono. El relleno por interpolacin del interior de un polgono se utiliza para producir visualizaciones realistas de superficies sombreadas con varias condiciones de iluminacin.
Como ejemplo de relleno por interpolacin, el siguiente fragmento de cdigo asigna el color azul, rojo o
verde a cada uno de los tres vrtices de un tringulo. El relleno del polgono es una interpolacin lineal de los
colores de sus vrtices.
glShadeModel (GL_SMOOTH);
glBegin (GL_TRIANGLES);
glColor3f (0.0, 0.0, 1.0);
glVertex2i (50, 50);
glColor3f (1.0, 0.0, 0.0);
glVertex2i (150, 50);
glColor3f (0.0, 1.0, 0.0);
glVertex2i (75, 150);
glEnd ( );

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 glShadeModel a GL_FLAT en este ejemplo, el polgono se rellena
con el ltimo color especificado (verde). El valor GL_SMOOTH 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.

Cap04_HEARN_1P.qxd

214

27/09/2005

20:36

Pgina 214

CAPTULO 4 Atributos de las primitivas grficas

Mtodos OpenGL para modelos almbricos


Tambin podemos elegir mostrar slo las aristas de los polgonos. Esto produce una representacin almbrica o hueca del polgono. O podramos mostrar un polgono dibujando nicamente un conjunto de puntos en
las posiciones de sus vrtices. Estas opciones se seleccionan con la funcin:
glPolygonMode (face, displayMode);

Utilizamos el argumento face para designar qu cara del polgono queremos mostrar slo como aristas o
slo como vrtices. A este argumento se le asigna GL_FRONT, GL_BACK o GL_FRONT_AND_BACK, para indicar la cara frontal, la cara trasera, o ambas, respectivamente. Despus, si slo queremos que se muestren las
aristas del polgono, asignaremos la constante GL_LINE al argumento displayMode. Para dibujar slo los
puntos de los vrtices del polgono, asignaremos la constante GL_POINT al argumento displayMode. Una
tercera opcin es GL_FILL. Pero este es el modo de visualizacin predeterminado, por lo que habitualmente
slo invocamos glPolygonMode 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 displayMode establecido en GL_FILL y luego de nuevo con displayMode definido como
GL_LINE (o GL_POINT). 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 (0.0, 1.0, 0.0);
\* Invocar la subrutina de generacin del polgono *\
glColor3f (1.0, 0.0, 0.0);
glPolygonMode (GL_FRONT, GL_LINE);
\* Invocar la subrutina de generacin del polgono de nuevo*\

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_OFFSET_FILL);
glPolygonOffset (factor1, factor2);

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, factor1 y factor2, que se utilizan para calcular la cantidad de compensacin de la profundidad. El clculo de esta compensacin de la profundidad es:
depthOffset  factor1 maxSlope  factor2 const
(4.11)
donde maxSlope es la mxima pendiente del polgono y const es una constante de implementacin. Para
un polgono en el plano xy, la pendiente es 0. En cualquier otro caso, la mxima pendiente se calcula como el

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 215

4.14 Funciones OpenGL para atributos de relleno de reas

215

cambio en la profundidad del polgono dividido entre el cambio en x o en y. Un valor tpico para los dos factores es 0.75 o 1.0, 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 (0.0, 1.0, 0.0);
glEnable (GL_POLYGON_OFFSET_FILL);
glPolygonOffset (1.0, 1.0);
\* Invocar la subrutina de generacin del polgono *\
glDisable (GL_POLYGON_OFFSET_FILL);
glColor3f (1.0, 0.0, 0.0);
glPolygonMode (GL_FRONT, GL_LINE);
\* Invocar la subrutina de generacin del polgono de nuevo*\

Ahora el relleno 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 glEnable a GL_POLYGON_OFFSET_LINE. 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 glEnable debera ser GL_POLYGON_OFFSET_
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 fin 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 polgonos.
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 GL_LINE, 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 bandera (flag) 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.
glEdgeFlag (flag);

Para indicar que dicho vrtice no precede a una arista del contorno, asignamos la constante de OpenGL
GL_FALSE al argumento flag. Esto se aplica a todos los vrtices que se especifiquen posteriormente hasta

(a)

(b)

FIGURA 4.33. La divisin de un polgono


cncavo (a) en un conjunto de tringulos
(b) produce aristas de tringulos (con lneas
discontnuas) que son interiores al polgono
original.

Cap04_HEARN_1P.qxd

216

27/09/2005

20:36

Pgina 216

CAPTULO 4 Atributos de las primitivas grficas


v1

v1

v2

v2

(a)

v3
(b)

v3

FIGURA 4.34. El tringulo (a) se puede visualizar como aparece en (b) cambiando la bandera de la arista del vrtice v2 al
valor GL_FALSE, asumiendo que los vrtices se especifican en sentido contrario a las agujas del reloj.

que se haga otra llamada a glEdgeFlag. La constante de OpenGL GL_TRUE activa de nuevo la bandera de
la arista, el cual es su estado predeterminado. La funcin glEdgeFlag se puede situar entre pares
glBegin/glEnd. Para mostrar el uso de una bandera de arista, el cdigo siguiente muestra slo dos aristas
del tringulo definido (Figura 4.34).
glPolygonMode

(GL_FRONT_AND_BACK, GL_LINE);

glBegin (GL_POLYGON);
glVertex3fv (v1);
glEdgeFlag (GL_FALSE);
glVertex3fv (v2);
glEdgeFlag (GL_TRUE);
glVertex3fv (v3);
glEnd ( );

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, edgeFlagArray);

El argumento offset indica el nmero de bytes entre los valores de las banderas de las aristas en el vector edgeFlagArray. El valor predeterminado del argumento offset es 0.

La funcin de cara frontal de OpenGL


Aunque, de manera predeterminada, la ordenacin de los vrtices de un polgono controla la identificacin de
las caras frontal y trasera, podemos etiquetar de forma independiente las superficies seleccionadas de una
escena como frontales o traseras con la funcin:
glFrontFace

(vertexOrder);

Si cambiamos el argumento vertexOrder a la constante de OpenGL GL_CW, 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.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 217

4.15 Atributos de los caracteres

217

4.15 ATRIBUTOS DE LOS CARACTERES


La apariencia de los caracteres mostrados se controla con atributos tales como la fuente, el tamao, el color y
la orientacin. En muchos paquetes, los atributos se pueden cambiar en cadenas de caracteres completas
(texto) o en caracteres individuales, que se pueden utilizar para propsitos especiales tales como dibujar un
grfico de datos.
Hay disponible una gran cantidad de opciones posibles para la visualizacin de texto. En primer lugar, se
puede elegir la fuente, que es un conjunto de caracteres con un diseo particular tal como New York, Courier,
Helvetica, London, Times Roman y diversos grupos de smbolos especiales. Los caracteres de una fuente
seleccionada se pueden mostrar tambin con diversos estilos de subrayado (continuo, punteado, doble) ,en
negrita, en cursiva y letra hueca o sombreada.
La configuracin del color para visualizar texto se puede almacenar en la lista de atributos del sistema y
usarse con los procedimientos que generan las definiciones de los caracteres en el bfer de imagen. Cuando
se ha de visualizar una cadena de caracteres, se utiliza el color actual para cambiar los valores de los pxeles
del bfer de imagen, que se corresponden con las formas de los caracteres y sus posiciones.
Podramos ajustar el tamao del texto cambiando de escala las dimensiones de conjunto (altura y anchura) de los caracteres o slo la altura o la anchura. El tamao de los caracteres (altura) se especifica en las
impresoras y por los compositores en puntos, donde 1 punto es, aproximadamente, 0.035146 cm (o 0.013837
pulgadas, lo cual es aproximadamente 721 pulgadas). Por ejemplo, los caracteres de este libro utilizan una fuente de 10 puntos. Las medidas en puntos especifican el tamao del cuerpo de un carcter (Figura 4.35), pero
fuentes diferentes con las mismas especificaciones en puntos pueden tener tamaos de caracteres diferentes,
dependiendo del diseo de la fuente. La distancia entre la lnea inferior y la lnea superior del cuerpo de un
carcter es la misma para todos los caracteres de un tamao y una fuente concretas, pero el ancho del cuerpo
puede variar. Las fuentes proporcionalmente espaciadas asignan un ancho de cuerpo ms pequeo a los caracteres estrechos tales como i, j, l y f en comparacin con caracteres anchos como W o M. La altura del carcter se define como la distancia entre la lnea base y la lnea de tapa (cap) de los caracteres. Los caracteres
alargados (kerned), tales como f y j en la Figura 4.35, habitualmente se extienden ms all de los lmites del
cuerpo de los caracteres y las letras con extremos descendentes (g, j, p, q, y) se extienden por debajo de la
lnea de base. Cada carcter se posiciona dentro del cuerpo del carcter mediante un diseo de fuente, de tal
modo que se logra un espaciado adecuado a lo largo y entre las lneas impresas, cuando el texto se visualiza
con cuerpos de caracteres que se tocan.
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 atributo que a menudo se puede asignar a una cadena de caracteres.
La Figura 4.38 muestra una cadena de caracteres con tres configuraciones diferentes para el espaciado entre
caracteres.
Cuerpo
del carcter
Kern
Cuerpo
del carcter

Superior
Tapa
Altura
del carcter
Base
Inferior
Kern

FIGURA 4.35. Ejemplos de cuerpos de caracteres.

Cap04_HEARN_1P.qxd

218

27/09/2005

20:36

Pgina 218

CAPTULO 4 Atributos de las primitivas grficas

Altura 1

Altura 2

Altura 3
FIGURA 4.36. Cadenas de caracteres
visualizadas con diferentes configuraciones de altura de cuerpo y con una
relacin ancho-altura constante.

anchura 0.5

Espaciado 0.0

anchura 1.0

Espaciado 0.5

anchura 2.0

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.

T
E
X
T
O TEXTO HORIZONTAL

TO

TE
O

A
IN

CL

IN

Vector ascendente
(a)

1 . 0

(b)

FIGURA 4.39. Direccin del vector que apunta hacia


arriba (a) que controla la orientacin del texto mostrado (b).

V
E
R
T
I
C
A
L

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

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 219

Atributos de los caracteres

a
n
e
d
a
c

Direccin del vector


de caracteres (hacia arriba)
(a)

IZ

Q
U

IE

RD
A

RR
A
IB

cadena

anedac

219

c
a
d
e
n
a

BA

JO

ER

EC

Direccin de la trayectoria del texto

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).

Superior
Tapa
Media
Base
Inferior

CADENA

Izquierda

Centro

Derecha

C
A
D
E

Superior
Tapa

N
A
H
A
C
I
A

C
A
D
E
N
A

(a)

B
A
J
O

CA

D
EN
A

H
AC
I

LA

D
ER
EC

Lnea
media

Base
H
A

(b)

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.

Inferior
Izquierda Derecha
Centro

FIGURA 4.44. Alineaciones de los caracteres para


cadenas horizontales y verticales.

Cap04_HEARN_1P.qxd

220

27/09/2005

20:36

Pgina 220

CAPTULO 4 Atributos de las primitivas grficas


A
L
I
N
E
A
C
I

FIGURA 4.45. Alineaciones de cadenas de caracteres.

S
U
P
E
R
I
O
R

ALINEACIN
DERECHA
A
L
I
N
E
A
C
I

ALIENACIN
CENTRADA
I
N
F
E
R
I
O
R

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 grficos, 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 atributos, 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 habitualmente el color y el tamao.

4.16 FUNCIONES O pen GL PARA LOS ATRIBUTOS DE CARACTERES


Disponemos de dos mtodos para visualizar caracteres con el paquete OpenGL. Podemos disear un conjunto de fuentes empleando las funciones de mapas de bits de la biblioteca del ncleo, o podemos invocar las
subrutinas de generacin de caracteres de GLUT. La biblioteca GLUT contiene funciones para la visualizacin de mapas de bits predefinidos y conjuntos de caracteres de impacto. Por tanto, podemos establecer que
los atributos de los caracteres son aquellos que se aplican a los mapas de bits o los segmentos de lneas.
Para las fuentes de mapa de bits o de contorno, el estado de color actual determina el color de visualizacin. Por lo general, la designacin de la fuente determina el espaciado y el tamao de los caracteres, tal como
GLUT_BITMAT_9_BY_15 y GLUT_STROKE_MONO_ROMAN. Pero tambin podemos establecer el ancho de la
lnea y el tipo de lnea de las fuentes de contorno. Especificamos el ancho de una lnea con la funcin
glLineWidth, y seleccionamos un tipo de lnea con la funcin glLineStipple. Las fuentes de impacto de
GLUT se visualizarn entonces utilizando los valores actuales que hayamos especificado para los atributos de
ancho de lnea y tipo de lnea.
Podemos lograr algunas otras caractersticas de la visualizacin de texto empleando las funciones de transformacin descritas en el Captulo 5. Las subrutinas de transformacin permiten cambiar de escala, posicionar y rotar los caracteres de impacto de GLUT en un espacio bidimensional o en un espacio tridimensional.
Adems, se pueden utilizar las transformaciones de visualizacin tridimensional (Captulo 7) para generar
otros efectos de visualizacin.

4.17 SUAVIZADO
Los segmentos de lnea y otras primitivas grficas generadas por algoritmos de barrido estudiadas en el
Captulo 3 tienen una apariencia dentada o de peldao de escalera, porque el proceso de muestreo digitaliza

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 221

4.17 Suavizado

221

los puntos de coordenadas de un objeto en posiciones de pxel enteras y discretas. Esta distorsin de la informacin debida al muestreo de baja frecuencia (submuestreo) se denomina aliasing. Podemos mejorar la apariencia de las lneas digitalizadas mostradas aplicando mtodos de suavizado (antialiasing), 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) fs:
fs  2fmax

(4.12)

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 xs es:
xs =

xciclo
2

(4.13)

donde xciclo  1/fmax. 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.
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 subpxeles, 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 prefiltrado, 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 pxeles individuales.

Cap04_HEARN_1P.qxd

222

27/09/2005

20:36

Pgina 222

CAPTULO 4 Atributos de las primitivas grficas

*
(a)

Posiciones
de muestreo

(b)

FIGURA 4.46. El muestreo de la forma peridica (a) en las posiciones indicadas produce la representacin (b) de baja frecuencia y escalonada (con aliasing).

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 (pixel 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 lnea recta se pueden acercar a la trayectoria de la lnea definida para suavizar
el efecto de peldao de escalera de la digitalizacin.

Supermuestreo de segmentos de lnea recta


El supermuestreo se puede realizar de varias formas. En un segmento de lnea recta, podemos dividir cada
pxel en un nmero de subpxeles y contar el nmero de subpxeles que se superponen con la trayectoria de
la lnea. El nivel de intensidad de cada pxel se cambia entonces a un valor que es proporcional a este nmero de subpxeles. En la Figura 4.47 se muestra un ejemplo de este mtodo. Cada rea cuadrada del pxel se
divide en nueve subpxeles cuadrados de igual tamao. Las regiones sombreadas muestran los subpxeles que
se deberan seleccionar con el algoritmo de Bresenham. Esta tcnica proporciona tres configuraciones de
intensidad por encima de cero, ya que el nmero mximo de subpxeles que se pueden seleccionar dentro de
cada pxel es tres. En este ejemplo, el pxel de posicin (10, 20) se cambia a la intensidad mxima (nivel 3);
los pxeles de posiciones (11, 21) y (12, 21) se cambian ambos al siguiente nivel de intensidad ms alto (nivel
2); y los pxeles de posiciones (11, 20) y (12, 22) se cambian ambos a la intensidad ms baja por encima de
cero (nivel 1). Por tanto, la intensidad de la lnea se extiende sobre un nmero ms grande de pxeles para suavizar el efecto de dentado original. Este procedimiento muestra una lnea difuminada en la vecindad de los
peldaos de escalera (entre recorridos horizontales). Si queremos utilizar ms niveles de intensidad para suavizar la lnea con este mtodo, incrementaremos el nmero de posiciones de muestreo en cada pxel. Diecisis
subpxeles proporcionan cuatro niveles de intensidad por encima de cero; veinticinco subpxeles proporcionan cinco niveles; y as sucesivamente.
En el ejemplo de supermuestreo de la Figura 4.47, consideramos reas de pxeles de tamao finito, pero
tratamos la lnea como una entidad matemtica de ancho cero. Realmente, las lneas visualizadas poseen un
ancho aproximadamente igual al del pxel. Si tenemos en cuenta el ancho finito de la lnea, podemos realizar
supermuestreo cambiando la intensidad de los pxeles de forma proporcional al nmero de subpxeles dentro
del polgono que representa el rea de la lnea. Se puede considerar que un subpxel se encuentra dentro de la
lnea si su esquina inferior izquierda est dentro de las fronteras del polgono. Una ventaja de este procedimiento de supermuestro es que el nmero de niveles de intensidad posibles para cada pxel, es igual al nmero total de subpxeles dentro del rea de pxeles. En el ejemplo de la Figura 4.47, podemos representar esta
lnea de ancho finito posicionando las fronteras del polgono, paralelas a la trayectoria de la lnea como se
muestra en la Figura 4.48. Ahora se puede cambiar cada pxel a uno de los nueve posibles niveles de brillo
por encima de cero.
Otra ventaja del supermuestro con una lnea de ancho finito es que la intensidad total de la lnea se distribuye sobre ms pxeles. En la Figura 4.48, ahora el pxel de posicin (10, 21) en la cuadrcula est encendido (con intensidad de nivel 2), y tambin tenemos en cuenta las contribuciones de los pxeles inmediatamente
inferiores e inmediatamente a su izquierda. Tambin, si disponemos de una pantalla en color, podemos
ampliar este mtodo para tener en cuenta los colores de fondo. Una lnea concreta podra cruzar varias reas
de colores diferentes. Podemos calcular el valor medio de las intensidades de los subpxeles para obtener el

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 223

4.17 Suavizado

22

22

21

21

20

223

20
10

11

12

10

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).

11

12

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
azul, podemos calcular el color de este pxel del siguiente modo:
pxel color =

(5 rojo + 4 azul)
9

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 lnea. Tambin, necesitamos tener en cuenta el posicionamiento de los lmites de la lnea en
relacin con la trayectoria de la misma. Este posicionamiento depende de la pendiente de la lnea. Para una
lnea con pendiente de 45, 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 unos de los lmites del polgono. A modo
de ejemplo, una lnea horizontal que pase a travs de las coordenadas de la cuadrcula (10, 20) se podra representar como un polgono limitado por las lneas horizontales de la cuadrcula y  20 e y  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|<1, 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 |m|>1, la trayectoria de la lnea se sita ms cerca del lmite superior del polgono.

Mscaras de ponderacin de subpxeles


Los algoritmos de supermuestreo se implementan a menudo dando ms peso a los subpxeles prximos al centro del rea de un pxel, ya que se espera que estos subpxeles sean ms importantes en la determinacin de
la intensidad global de un pxel. En las subdivisiones 3 por 3 de los pxeles que hemos considerado hasta
ahora, es posible utilizar una combinacin de pesos como los de la Figura 4.49. Aqu el subpxel central tiene
un peso que es cuatro veces el peso de los subpxeles de las esquinas y dos veces el peso del resto de los subpxeles. Las intensidades calculadas para cada uno de los nueve subpxeles se promediaran entonces para que
el subpxel central se pondere con un factor de 14 ; los pxeles superior, inferior y laterales se ponderen con un
factor de 81 ; y los subpxeles de las esquinas con un factor de 161 . Una matriz de valores que especifica la importancia relativa de los subpxeles se denomina, habitualmente, mscara de ponderacin. Se pueden establecer
mscaras similares para cuadrculas de subpxeles mayores. Tambin, ests mscaras se amplan habitualmen-

Cap04_HEARN_1P.qxd

224

27/09/2005

20:36

Pgina 224

CAPTULO 4 Atributos de las primitivas grficas

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.

Muestreo por rea de segmentos de lnea recta


Realizamos un muestreo por rea de una lnea recta cambiando la intensidad de los pxeles proporcionalmente al rea de superposicin del pxel con la lnea de ancho finito. La lnea se puede tratar como un rectngulo. La seccin del rea de la lnea entre dos lneas adyacentes verticales (o dos adyacentes horizontales)
de la cuadrcula de pantalla es entonces un trapezoide. Las reas de superposicin de los pxeles se calculan
determinando cunto el trapezoide se superpone sobre cada pxel en aquella columna (o fila). En la Figura
4.48, el pxel de coordenadas de la cuadrcula (10, 20) se cubre, aproximadamente, al 90 por ciento por el
rea de la lnea, por lo que su intensidad se cambiara al 90 por ciento de la intensidad mxima. De forma
similar, el pxel de posicin (10, 21) se cambiara a una intensidad de, aproximadamente, el 15% del mximo. En la Figura 4.48 se muestra un mtodo de estimacin de las reas de superposicin de los pxeles con
un ejemplo de supermuestreo. El nmero total de subpxeles dentro de los lmites de la lnea es aproximadamente igual al rea de superposicin. Esta estimacin se puede mejorar usando cuadrculas de subpxeles ms
finas.

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

FIGURA 4.49. Pesos relativos para una cuadrcula de subpxeles 3 por 3.

Filtro de cubo

Filtro de cono

Filtro gaussiano

(a)

(b)

(c)

FIGURA 4.50. Funciones de filtrado que se usan habitualmente para suavizar las trayectorias de las lneas. El volumen de
cada filtro est normalizado al valor 1. La altura proporciona el peso relativo de cada posicin de subpxel.

Cap04_HEARN_1P.qxd

27/09/2005

20:36

Pgina 225

4.17 Suavizado

225

tinua 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 empleados en la mscara
de pesos, pero ahora integramos sobre la superficie del pxel para obtener la intensidad promedio ponderada.
Para reducir los clculos, se utilizan habitualmente tablas de bsqueda para evaluar las integrales.

Ajuste de fase de los pxeles


En los sistemas digitalizados que pueden tratar posiciones de subpxeles dentro de la cuadrcula de la pantalla, se puede utilizar el ajuste de fase de los pxeles para suavizar los objetos. Una lnea de la pantalla se suaviza con esta tcnica moviendo (microposicionando) las posiciones de los pxeles ms prximas a la
trayectoria de la lnea. Los sistemas que incorporan ajuste de fase de los pxeles se disean para que el haz de
electrones se pueda modificar en una fraccin del dimetro del pxel. El haz de electrones se modifica habitualmente en 14 , 12 o 34 del dimetro del pxel para dibujar los puntos ms cercanos a la verdadera trayectoria
de la lnea o del borde del objeto. Algunos sistemas tambin permiten ajustar el tamao de pxeles individuales como medio adicional de distribucin de intensidades. La Figura 4.51 muestra los efectos de suavizado del
ajuste de fase de los pxeles para varias trayectorias de lnea.

Compensacin de diferencias en la intensidad de las lneas


El suavizado de una lnea para eliminar el efecto de peldao de escalera tambin compensa otro efecto de la
digitalizacin, como se muestra en la Figura 4.52. Ambas lneas se dibujan con el mismo nmero de pxeles,
pero la lnea diagonal es ms larga que la horizontal en un factor de 2 . Por ejemplo, si la lnea horizontal

FIGURA 4.51. Las lneas dentadas (a), dibujadas en un sistema Merln 9200, 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
por 576 a 3072 por 2304. (Cortesa de Peritek Corp.)

Cap04_HEARN_1P.qxd

226

27/09/2005

20:36

Pgina 226

CAPTULO 4 Atributos de las primitivas grficas

FIGURA 4.52. Lneas de diferente longitud dibujadas


con el mismo nmero de pxeles 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 visualizacin, las intensidades se compensan automticamente. Cuando el ancho finito de una lnea se tiene en consideracin, las intensidades de
los pxeles se ajustan para que la lnea se muestre con una intensidad total proporcional a su longitud.

Suavizado de los lmites de las reas


Los conceptos de suavizado que hemos estudiado para las lneas, tambin se pueden aplicar a los lmites de
las reas para eliminar la apariencia dentada. Podramos incorporar estos procedimientos al algoritmo de lneas de barrido para suavizar los lmites al generar un rea.
Si las capacidades del sistema permiten el reposicionamiento de los pxeles, se podran suavizar los lmites de las reas modificando las posiciones de los pxeles ms cercanos al contorno. Otros mtodos ajustan la
intensidad de los pxeles de los lmites segn el porcentaje del rea del pxel que es interior al objeto. En la
Figura 4.53, el pxel de la posicin (x, y) tiene aproximadamente la mitad de su rea dentro del contorno del
polgono. Por tanto, la intensidad en dicha posicin se debera ajustar a la mitad de su valor asignado. En la
siguiente posicin (x  1, y  1) a lo largo del lmite, la intensidad se ajusta a aproximadamente un tercio del
valor asignado para dicho punto. Ajustes similares, basados en el porcentaje del rea del pxel cubierta, se aplican a otros valores de la intensidad alrededor del lmite.

y1
y
x

x1

FIGURA 4.53. Ajuste de las intensidades de los pxeles


a lo largo del lmite de un rea.

FIGURA 4.54. Seccin de pxeles 4 por 4 de una pantalla digitalizada subdividida en una cuadrcula de 8
por 8.

Cap04_HEARN_1P.qxd

27/09/2005

20:37

Pgina 227

4.17 Suavizado
de ie
ite rfic
m
L upe
s
la

227

y  mx  b

Lnea de barrido 1
Lnea de barrido 2

yk  1
yk  0.5
yk

rea de pxeles
subdividida

xk

FIGURA 4.55. Un rea de pxeles subdividida con tres


subdivisiones dentro de la lnea de frontera de un objeto.

xk1

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 subpxeles 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 pxeles 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 subpxeles 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 de 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 (xk, yk) , el siguiente pxel ms cercano a la lnea en x
 xk 1 es el pxel en yk o en yk  1. Podemos determinar qu pxel es el ms cercano con el clculo:
y  ymid  [m(xk  1)  b]  (yk 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 yk e yk  1. Si esta diferencia es negativa, el pxel yk es ms cercano
a la lnea. Si la diferencia es positiva, el pxel yk1 es ms cercano. Podemos ajustar este clculo para que
produzca un nmero positivo dentro del rango que vara desde 0 a 1 aadiendo la cantidad 1  m:
p  [m(xk  1)  b]  (yk 0.5)  (1  m)1

(4.15)

Ahora el pxel en yk es ms cercano si p < 1  m, y el pxel en yk  1 es ms cercano si p > 1  m.


El parmetro p tambin mide la cantidad del pxel actual que se superporne con el rea. Para el pxel de
posicin (xk, yk) de la Figura 4.57, la parte interior del pxel tiene un rea que se puede calcular del siguiente
modo
rea  m xk  b  yk  0.5
(4.16)
Esta expresin del rea de superposicin del pxel de la posicin (xk, yk) 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

Cap04_HEARN_1P.qxd

228

27/09/2005

20:37

Pgina 228

CAPTULO 4 Atributos de las primitivas grficas


yk  0.5
del
Lnea rno
o
t
n
o
c
y  m(xk  0.5)  b

yk
y  m(xk  0.5)  b

rea de
solapamiento

yk  0.5
xk  0.5

xk

xk  0.5

FIGURA 4.57. rea de superposicin de un pxel rectangular, centrado en la posicin (xk, yk), con el interior del rea de relleno de un
polgono.

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.

4.18 FUNCIONES O pen GL DE SUAVIZADO


Activamos las subrutinas de suavizado de OpenGL con la funcin:
glEnable (primitiveType);

donde al argumento primitiveType se le asignan las constantes simblicas GL_POINT_SMOOTH, GL_LINE_


SMOOTH o GL_POLYGON_SMOOTH.
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_SRC_ALPHA);

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.

Cap04_HEARN_1P.qxd

27/09/2005

20:37

Pgina 229

4.20 Grupos de atributos de OpenGL

229

4.19 FUNCIONES DE CONSULTA DE Open GL


Podemos obtener los valores actuales de los parmetros de estado, incluyendo las configuraciones de los atributos, empleando las funciones de consulta de OpenGL. Estas funciones copian los valores de estado especificados en una matriz, que podemos guardar para reutilizarla posteriormente o para comprobar el estado
actual del sistema si se produce un error.
Para los valores de los atributos actuales utilizamos una funcin apropiada glGet, tal como:
glGetBooleanv ( )
glGetIntegerv ( )

glGetFloatv ( )
glGetDoublev ( )

En cada una de las funciones precedentes, especificamos dos argumentos. El primer argumento es una
constante simblica de OpenGL que identifica un atributo u 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 colorValues. Para obtener los valores
enteros de las componentes de color actuales, invocamos la funcin glIntegerv. En algunos casos, se puede
necesitar una conversin de tipos para devolver el tipo de datos especificado.
Otras constantes de OpenGL, tales como GL_POINT_SIZE, GL_LINE_WIDTH y GL_CURRENT_RASTER_
POSITION, se pueden utilizar en 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 glGet,
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:
glGetIntegerv (GL_RED_BITS, redBitSize);

En esta instruccin, a la matriz redBitSize se le asigna el nmero de bits de la componente roja disponibles en cada uno de los bferes (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 GL_GREEN_BITS,
GL_BLUE_BITS, GL_ALPHA_BITS 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.

4.20 GRUPOS DE ATRIBUTOS DE O pen GL


Los atributos y otros parmetros de estado de OpenGL estn organizados en grupos de atributos. Cada grupo
contiene un conjunto de parmetros de estado relacionados. Por ejemplo, el grupo de atributos de los puntos contiene los parmetros del tamao y de suavizado (antialiasing) de los puntos y el grupo de atributos
de las lneas contiene el grosor, el estado de los trazos, el patrn de los trazos, el contador de repeticin de
los trazos y el estado de suavizado de las lneas. De forma similar, el grupo de atributos de los polgonos
contiene once parmetros de los polgonos, tales como el patrn de relleno, la bandera de cara frontal y el esta-

Cap04_HEARN_1P.qxd

230

27/09/2005

20:37

Pgina 230

CAPTULO 4 Atributos de las primitivas grficas

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 todos los parmetros de un grupo especificado.
glPushAttrib (attrGroup);

Al parmetro attrGroup se le asigna una constante simblica de OpenGL que identifica el grupo de atributos, tal como GL_POINT_BIT, GL_LINE_BIT o GL_POLYGON_BIT. Para guardar los parmetros del color,
utilizamos la constante simblica GL_CURRENT_BIT. Podemos guardar todos los parmetros de estado de
todos los grupos de atributos con la constante GL_ALL_ATTRIB_BITS. La funcin glPushAttrib sita
todos 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 lnea sita todos los parmetros de los puntos, las lneas y los polgonos
en la pila de atributos.
glPushAttrib (GL_POINT_BIT | GL_LINE_BIT | 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 glPopAttrib 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 glPushClientAttrib y
glPopClientAttrib. 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/deshabilitado 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 lneas son el color,

Cap04_HEARN_1P.qxd

27/09/2005

20:37

Pgina 231

Resumen

231

el grosor y el estilo. Las especificaciones del grosor de una lnea se dan en trminos de mltiplos de una lnea
estndar de un pxel de grosor. Entre los atributos del estilo de las lneas se incluyen las lneas de trazo contnuo, de trazo discontnuo 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 visualizacin hueca que slo muestra los lmites del rea. Se pueden especificar 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 o 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 fundido 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, tamaos, 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 (antialiasing), que ajusten las intensidades de los pxeles. Un
mtodo para hacer esto es el supermuestreo. Es decir, consideramos que cada pxel est compuesto por subpxeles, 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 atributo 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 tabla 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

Cap04_HEARN_1P.qxd

232

27/09/2005

20:37

Pgina 232

CAPTULO 4 Atributos de las primitivas grficas

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

Descripcin

glutInitDisplayMode

Selecciona el modo de color, que puede ser GLUT_RGB


o GLUT_INDEX.

glColor*

Especifica un color RGB o RGBA.

glIndex*

Especifica un color utilizando un ndice de tabla de


color.

glutSetColor (index, r, g, b);

Carga un color en una posicin de la tabla de color.

glEnable (GL_BLEND);

Activa el fundido de color.

glBlendFunc (sFact, dFact);

Especifica los factores del fundido de color.

glEnableClientState ;
(GL_COLOR_ARRAY)

Activa las caractersticas de matriz de color de


OpenGL.

glColorPointer
(size, type, stride, array);

Especifica una matriz de color RGB.

glIndexPointer (type, stride, array);

Especifica una matriz de color usando el modo de


color indexado.

glPointSize (size);

Especifica un tamao de punto.

glLineWidth (width);

Especifica un grosor de lnea.

glEnable (GL_LINE_STIPPLE);

Activa el estilo de las lneas.

glEnable (GL_POLYGON_STIPPLE);

Activa el estilo de relleno.

glLineStipple (repeat, pattern);

Especifica el patrn de estilo de lnea.

glPolygonStipple (pattern);

Especifica el patrn de relleno.

glPolygonMode

Muestra la cara frontal o la cara posterior como un


conjunto de aristas o como un conjunto de vrtices.

glEdgeFlag

Establece la bandera de la arista del relleno de


polgonos en el valor GL_TRUE o GL_FALSE para
determinar el estado de visualizacin de una arista.

glFrontFace

Especifica el orden de los vrtices de la cara frontal


como GL_CCW o GL_CW.

(Contina)

Cap04_HEARN_1P.qxd

27/09/2005

20:37

Pgina 233

Ejercicios

233

TABLA 4.2. RESUMEN DE LAS FUNCIONES DE LOS ATRIBUTOS DE OPENGL. (Cont.)


Funcin

Descripcin

glEnable

Activa el suavizado con GL_POINT_SMOOTH,


GL_LINE_SMOOTH, o GL_POLYGON_ SMOOTH.
(Tambin se necesita activar el fundido de color.)

glGet**

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.

glPushAttrib

Guarda todos los parmetros de estado de un grupo de


atributos especificado.

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

Utilice la funcin glutSetColor para establecer una tabla de color para un conjunto de entrada de valores de
color.

4.2

Utilizando matrices de vrtices y de color, establezca la descripcin de una escena que contenga al menos seis
objetos bidimensionales.

4.3

Escriba un programa para visualizar la descripcin de la escena bidimensional del ejercicio anterior.

4.4

Utilizando matrices de vrtices y de color, establezca la descripcin de una escena que contenga al menos cuatro
objetos tridimensionales.

4.5

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 puntos grandes, ms prximos y de color gris oscuro.)

4.6

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 efecto realista, utilice diferentes tonos de rojo y amarillo
(y tal vez verde) en los puntos.

4.7

Implemente una funcin general de estilo de lnea modificando el algoritmo de dibujo de lneas de Bresenham
para representar lneas contnuas, a trazos o de puntos.

Cap04_HEARN_1P.qxd

234
4.8
4.9
4.10
4.11

4.12
4.13

4.14
4.15
4.16
4.17
4.18
4.19
4.20

4.21
4.22

4.23
4.24
4.25

4.26

27/09/2005

20:37

Pgina 234

CAPTULO 4 Atributos de las primitivas grficas


Implemente una funcin de estilo de lnea utilizando un algoritmo de lnea de punto medio para representar lneas contnuas, a trazos o de puntos.
Idee un mtodo paralelo para implementar una funcin de estilo de lnea.
Idee un mtodo paralelo para implementar una funcin de grosor de lnea.
Una lnea 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 datos 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 linePlot.
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 linePlot.
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 lnea, 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 pxeles 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 controlar 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 subrutina para mostrar un grfico de barras en un rea especificada de la pantalla. La entrada debe
incluir el conjunto de datos, 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
x, 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 horizontalmente para producir un patrn de
superposicin de barra que facilite la comparacin de los dos conjuntos de datos. Utilice un color o patrn de relleno diferente para los dos conjuntos de barras.

Cap04_HEARN_1P.qxd

27/09/2005

20:37

Pgina 235

Ejercicios

235

4.27

Idee un algoritmo para implementar una tabla de bsqueda de color.

4.28

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?

4.29

Considere un sistema digitalizado RGB que tiene un bfer de imagen de 512 por 512 pxeles con 20 bits por pxel
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.

4.30

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.

4.31

Escriba un programa para convertir el interior de una elipse especificada en un color slido.

4.32

Escriba un procedimiento para rellenar el interior de una elipse con un patrn especificado.

4.33

Escriba un procedimiento para rellenar el interior de cualquier conjunto especificado 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.

4.34

Modifique el algoritmo de relleno por contorno para una regin 4-conectada para evitar un apilado excesivo incorporando mtodos de lnea de barrido.

4.35

Escriba un procedimiento de relleno por contorno para rellenar una regin 8-conectada.

4.36

Explique cmo una elipse visualizada con el mtodo del punto medio se podra rellenar adecuadamente con un
algoritmo de relleno por contorno.

4.37

Desarrolle e implemente un algoritmo de relleno por inundacin para rellenar el interior de un rea especificada.

4.38

Defina e implemente un procedimiento para cambiar el tamao del patrn existente de relleno rectangular.

4.39

Escriba un procedimiento para implementar un algoritmo de relleno suave. Defina con cuidado qu debe realizar
el algoritmo y cmo se deben combinar los colores.

4.40

Idee un algoritmo par ajustar la altura y la anchura de los caracteres definidos como patrones de cuadrcula rectangular.

4.41

Implemente subrutinas para establecer el vector de orientacin de caracteres y la trayectoria del texto para controlar la visualizacin de cadenas de caracteres.

4.42

Escriba un programa para alinear texto como se indique de acuerdo con los valores de entrada de los parmetros
de alineacin.

4.43

Desarrolle procedimientos para implementar atributos de marcadores (tamao y color).

4.44

Implemente un procedimiento 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.

4.45

Implemente un procedimiento de suavizado para el algoritmo de la lnea del punto medio.

4.46

Desarrolle un algoritmo de suavizado para lmites elpticos.

4.47

Modifique el algoritmo de lnea de barrido de relleno de reas para incorporar suavizado. Utilice tcnicas de coherencia para reducir los clculos en las lneas sucesivas de barrido.

4.48

Escriba un programa para implementar el algoritmo de suavizado de Pitteway-Watkinson como un procedimiento de lnea de barrido para rellenar el interior de un polgono, utilizando la funcin de dibujo de puntos de
OpenGL.

CAP05_HEARN_1P.qxd

27/09/2005

21:06

Pgina 236

CAPTULO 5

Transformaciones
geomtricas

Una escena de grficos 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,
Mathematics and Computer Sciencie, Universidad de Yale).

CAP05_HEARN_1P.qxd

5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8

27/09/2005

21:06

Pgina 237

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.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18

Transformaciones geomtricas en un espacio


tridimensional
Translaciones tridimensionales
Rotaciones tridimensionales
Escalado tridimensional
Transformaciones tridimensionales
compuestas
Otras transformaciones tridimensionales
Transformaciones entre sistemas de
coordenadas tridimensionales
Transformaciones afines
Funciones de transformaciones geomtricas
en OpenGL
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.

CAP05_HEARN_1P.qxd

238

27/09/2005

21:07

Pgina 238

CAPTULO 5 Transformaciones geomtricas

5.1 TRANSFORMACIONES GEOMTRICAS BIDIMENSIONALES


BSICAS
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 a veces se incluyen en los paquetes, son las operaciones de reflexin e inclinacin. Para introducir
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 traslacin 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 distancias de traslacin tx y ty a las coordenadas originales (x, y) para obtener la nueva posicin de coordenadas (x, y) como se muestra en la Figura 5.1.
x = x + tx

y = y + ty

(5.1.)

El par de distancia de traslacin (tx, ty) se llama vector de traslacin o vector de cambio.
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
P = ,
y

x
P = ,
y

(5.2)

t x
T=
t y

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 mediante la aplicacin de una ecuacin de transformacin a cada uno de los puntos finales de la lnea y redibujando
la lnea entre los dos nuevos puntos finales. Un polgono se traslada de forma similar. Se aade un vector de
y

P
T
P

FIGURA 5.1. Traslacin de un punto desde la posicin P a la posicin P usando


un vector de traslacin T.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 239

5.1 Transformaciones geomtricas bidimensionales bsicas

239

y
10

10

15

20 x

15

20 x

(a)
y
10

10
(b)

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 {
public:
GLfloat x, y;
};
void translatePolygon (wcPt2D * verts, GLint nVerts, GLfloat tx, GLfloat ty)
{
GLint k;
for (k = 0; k < nVerts; k++) {
verts [k].x = verts [k].x + tx;
verts [k].y = verts [k].y + ty;
}
glBegin (GL_POLYGON);
for (k = 0; k < nVerts; k++)
glVertex2f (verts [k].x, verts [k].y);
glEnd ( );
}

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.

CAP05_HEARN_1P.qxd

240

27/09/2005

21:07

Pgina 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
spline, 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. Todos 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 bidimensional 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 , y una posicin (xr, yr) llamada punto 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 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 P, 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 es la posicin angular original del punto desde la horizontal, y es el ngulo de rotacin. Usando identidades trigonomtricas estndar, podemos expresar las coordenadas transformadas en funcin de los ngulos y como:
x = r cos ( + ) = r cos cos r sin sin

(5.4)

y = r sin ( + ) = r cos sin r sin cos


Las coordenadas originales del punto en coordenadas polares son:
x = r cos,

y = r sin

(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 (x, y) aplicando un ngulo sobre el origen:
x = x cos y sin

(5.6)

y = x sin y cos

(x, y)

yr

xr

FIGURA 5.3. Rotacin de un objeto un ngulo


alrededor del punto de pivote (xr, yr).

(x, y)

FIGURA 5.4. Rotacin de un punto desde la posicin (x, y) a la posicin (x, y) un ngulo respecto del origen de coordenadas. El desplazamiento angular original del punto respecto del eje x es .

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 241

5.1 Transformaciones geomtricas bidimensionales bsicas

241

(x, y)
r
(xr , yr )

(x, y)

FIGURA 5.5. Rotacin de un punto desde la posicin (x, y) a la posicin (x, y) un ngulo respecto al punto de rotacin (xr, yr).

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

(5.7)

donde la matriz de rotacin es:


cos
R=
sin

sin
cos

(5.8)

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-fila para posiciones de puntos. Esto cambia el orden en el que la matriz de multiplicacin para una rotacin sera representada. Pero ahora, todos los paquetes grficos como OpenGL, Java,
PHIGS 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 (xr, yr):
x = xr + (x xr) cos (y yr) sin
y = yr + (x xr) sin + (y yr) cos

(5.9)

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 contienen 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 rota 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-

CAP05_HEARN_1P.qxd

242

27/09/2005

21:07

Pgina 242

CAPTULO 5 Transformaciones geomtricas

les del polgono, las coordenadas del punto de pivote y el ngulo de rotacin theta especificado en radianes.
Siguiendo la transformacin de la posicin de los vrtices, el polgono se regenera usando rutinas OpenGL.

class wcPt2D {
public:
GLfloat x, y;
};
void rotatePolygon (wcPt2D * verts, GLint nVerts, wcPt2D pivPt,GLdouble theta)
{
wcPt2D * vertsRot;
GLint k;
for (k = 0; k < nVerts; k++) {
vertsRot [k].x = pivPt.x + (verts [k].x
- (verts [k].y
vertsRot [k].y = pivPt.y + (verts [k].x
+ (verts [k].y
}
glBegin {GL_POLYGON};
for (k = 0; k < nVerts; k++)
glVertex2f (vertsRot [k].x, vertsRot
glEnd ( );

pivPt.x)
pivPt.y)
pivPt.x)
pivPt.y)

*
*
*
*

cos
sin
sin
cos

(theta)
(theta);
(theta)
(theta);

[k].y);

Cambio de escala bidimensional


Para alterar el tamao de un objeto, aplicamos transformaciones de escala. Una simple operacin de cambio
de escala bidimensional se lleva a cabo multiplicando las posiciones de los objetos (x, y) por los factores de
escala sx y sy para producir las coordenadas transformadas (x, y):
x = x sx,

y = y sy

(5.10)

El factor de escala sx cambia la escala de un objeto en la direccin x, mientras que sy hace el cambio de
escala en la direccin y. Las ecuaciones bsicas del cambio de escala en dos dimensiones 5.10 pueden tambin escribirse en la forma de la matriz siguiente.
x sx
y = 0

0 x

sy y

(5.11)

o,
P = S P

(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 sx y sy. Valores inferiores a 1 reducen
el tamao de los objetos; valores superiores a 1 producen alargamientos. Especificando un valor de 1 tanto
para sx como para sy se deja el tamao del objeto inalterado. Cuando a sx y sy se les asigna el mismo valor, se
produce un cambio de escala uniforme que mantiene las proporciones relativas del objeto. Valores desiguales de sx y sy resultan en un cambio de escala diferente que es a menudo usado en aplicaciones de diseo,
donde los dibujos son construidos desde unas pocas formas bsicas que pueden ajustarse mediante escalas y

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 243

5.1 Transformaciones geomtricas bidimensionales bsicas

243

(a)

x

(b)

FIGURA 5.6. Conversin de un cuadrado (a)


en un rectngulo (b) mediante los factores de
escala sx  2 y sy  1.

FIGURA 5.7. Cambio de escala de una lnea aplicando la Ecuacin


5.12 con sx  sy  0.5, reducindose su tamao y aproximndose
al origen de coordenadas.

y
P1
(xf , yf)

P2

FIGURA 5.8. Cambio de escala respecto a un punto fijo seleccionado (xf, yf ). La distancia desde cada vrtice del polgono al punto
fijo se escala mediante las Ecuaciones de transformacin 5.13.

P3
x

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 reubicables. Los factores de
escala con valores absolutos inferiores a 1 mueven los objetos aproximndolos al origen, mientras que valores absolutos mayores que 1 mueven la posicin de las coordenadas alejndolas del origen. La Figura 5.7 ilustra el cambio de escala de una lnea asignando el valor 0.5 a sx y sy en la Ecuacin 5.11. Tanto la lnea de longitud como la distancia desde el origen se reducen en un factor de 12 .
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
fijo, (xf, yf) 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 (x, y) se calculan a partir de las siguientes relaciones.
x xf = (x xf ) sx,

y yf = (y yf ) sy

(5.13)

Podemos rescribir las Ecuaciones 5.13 para separar los trminos multiplicativo y aditivo como:
x = x sx + xf (1 sx)

(5.14)

y = y sy+ yf (1 sy)
donde los trminos aditivos xf (1 sx) e yf (1 sy) 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 SP 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.

CAP05_HEARN_1P.qxd

244

27/09/2005

21:07

Pgina 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.
class wcPt2D {
public:
GLfloat x, y;
};
void scalePolygon (wcPt2D * verts, GLint nVerts, wcPt2D fixedPt,
GLfloat sx, GLfloat sy)
{
wcPt2D vertsNew;
GLint k;
for (k = 0; k < nVerts; k++) {
vertsNew [k].x = verts [k].x * sx + fixedPt.x * (1 - sx);
vertsNew [k].y = verts [k].y * sy + fixedPt.y * (1 - sy);
}
glBegin {GL_POLYGON};
for (k = 0; k < nVerts; k++)
glVertex2f (vertsNew [k].x, vertsNew [k].y);
glEnd ( );
}

5.2 REPRESENTACIN MATRICIAL Y COORDENADAS


HOMOGNEAS
Muchas aplicaciones grficas implican secuencias de transformaciones geomtricas. Una animacin debera
requerir que un objeto fuese trasladado y rotado tras cada incremento de movimiento. En diseo y aplicaciones de construccin de dibujos, se llevan a cabo traslaciones, rotaciones y cambios de escala para acoplar los
componentes del dibujo dentro de sus propias posiciones. Y la visualizacin de las transformaciones implica
secuencias de traslaciones y rotaciones para llevarnos desde la escena original especificada a la visualizacin
en un dispositivo de salida. Aqu, consideramos cmo las representaciones de matrices discutidas en la seccin anterior pueden reformularse, de tal forma que las secuencias de transformaciones puedan ser procesadas eficientemente.
Hemos visto en la Seccin 5.1 que cada una de las tres transformaciones bidimensionales bsicas (traslacin, rotacin y cambio de escala) pueden expresarse en forma de matriz general:
P = M1 P + M2
(5.15)
con posiciones de coordenadas P y P representados en vectores columnas. La matriz M1 es una matriz de 2
por 2 que contiene factores multiplicativos, y M2 es una matriz columna de 2 elementos que contiene los tr-

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 245

5.2 Representacin matricial y coordenadas homogneas

245

minos traslacionales. Para la traslacin, M1 es la matriz identidad. Para la rotacin o el cambio de escala, M2
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,
reformulando 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 (xh, yh, h) llamadas
coordenadas homogneas, donde el parmetro homogneo h es un valor distinto de cero tal que:

x=

xh
,
h

y=

yh
h

(5.16)

Por tanto, una representacin de coordenadas homogneas bidimensionales, puede escribirse tambin
como (hx, hy, h). 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 = 1. Cada posicin bidimensional
se representa con coordenadas homogneas (x, y, 1). Se necesitan otros valores para el parmetro h, 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 (xh,
yh, h) las ecuaciones que contienen x e y, tales como f(x, y) = 0, se convierten en ecuaciones homogneas en
los tres parmetros xh, yh, 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.

Matriz de traslacin bidimensional


Usando la aproximacin de coordenadas homogneas, podemos representar las ecuaciones para una traslacin
bidimensional de una posicin de coordenadas usando la siguiente matriz de multiplicacin.
x 1 0 t x x
y = 0 1 t y
y

1 0 0 1 1
Esta operacin de traslacin puede escribirse en su forma abreviada:

(5.17)

CAP05_HEARN_1P.qxd

246

27/09/2005

21:07

Pgina 246

CAPTULO 5 Transformaciones geomtricas

P = T(tx, ty) P

(5.18)

con T(tx, ty) 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.

Matriz de rotacin bidimensional


De manera similar, las ecuaciones de transformacin de rotacin bidimensional sobre el origen de coordenadas pueden expresarse en forma de matriz,
x cos
y = sin

1 0

sin
cos
0

0 x
0 y
1 1

(5.19)

o como:
P = R() 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 . 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.

Matriz de cambio de escala bidimensional


Finalmente, una transformacin de cambio de escala relativa al origen de coordenadas puede ahora expresarse como la matriz de multiplicacin:
x sx
y = 0

1 0

0
sy
0

0 x

0 y
1 1

(5.21)

o,
P = S(sx, sy) P

(5.22)

El operador S(sx, sy) es la matriz de 3 por 3 en la Ecuacin 5.21 con parmetros sx y sy. Y, en la mayora
de los casos, podemos representar la matriz de cambio de escala simplemente como S.
Algunas bibliotecas ofrecen una funcin de cambio de escala que puede generar slo un cambio de escala con respecto al origen de coordenadas, como en la Ecuacin 5.21. En este caso, una transformacin de cambio de escala relativa a otra posicin de referencia es llevada a cabo como una sucesin de operaciones de
transformacin. Sin embargo, otros sistemas s incluyen una rutina de cambio de escala general que puede
construir matrices homogneas para realizar cambios de escala con respecto a puntos fijos designados.

5.3 TRANSFORMACIONES INVERSAS


Para la traslacin, obtenemos la matriz inversa mediante la negacin de las distancias de traslacin. As, si
tenemos distancias de traslacin bidimensionales tx y ty, la matriz de traslacin inversa es:

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 247

5.4 Transformaciones compuestas bidimensionales

1 0 t x

T = 0 1 t y
0 0 1

247

(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 q sobre el origen de coordenadas, tiene la matriz de transformacin:
cos
R = sin
0
1

sin
cos
0

0
0
1

(5.24)

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. Esto es, podemos calcular la inversa de cualquier
matriz de rotacin R evaluando su traspuesta (R1 = RT).
Formamos la matriz inversa para cualquier transformacin de escala sustituyendo los parmetros de escala por sus recprocos. Para escalas bidimensionales con parmetros sx y sy aplicados respecto al origen de coordenadas, la matriz de transformacin inversa es:
1
s
x

S1 = 0

0
1
sy
0

(5.25)

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.

5.4 TRANSFORMACIONES COMPUESTAS BIDIMENSIONALES


Usando la representacin de matrices, podemos establecer una secuencia de transformaciones como matriz
de transformacin compuesta calculando el producto de las transformaciones individuales. Formando productos con las matrices de transformacin es comn referirse a ello como concatenacin, o composicin, de
matrices. Desde una posicin de coordenadas representada como una matriz columna homognea, debemos
premultiplicar la matriz columna por las matrices, representando una secuencia de transformaciones. Y, como
muchas posiciones de una escena son normalmente transformadas por la misma secuencia, es ms eficiente
primero multiplicar la transformacin de matrices para formar una nica matriz compuesta. As, si queremos
aplicar dos transformaciones a la posicin de un punto P, la ubicacin transformada se calculara como:
P= M2 M1 P
=MP

(5.26)

La posicin de coordenadas se transforma usando la matriz compuesta M, mejor que aplicando las transformaciones individuales M1 y luego M2.

CAP05_HEARN_1P.qxd

248

27/09/2005

21:07

Pgina 248

CAPTULO 5 Transformaciones geomtricas

Traslaciones compuestas bidimensionales


Si dos vectores de traslacin consecutivos (t1x, t1y) y (t2x, t2y) se aplican a una posicin de coordenadas bidimensional P, la ubicacin transformada final P, se calcula como:
P = T(t2x, t2y) {T(t1x, t1y) P}
= {T(t2x, t2y) T(t1x, t1y)} 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:
1 0 t2 x 1 0 t1x 1 0 t1x + t2 x

0 1 t2 y 0 1 t1y = 0 1 t1y + t2 y
0 0 1 0 0 1 0 0
1

(5.28)

T(t2x, t2y) T(t1x, t1y) = T(t1x + t2x, t1y + t2y)

(5.29)

o,
lo cual demuestra que dos traslaciones sucesivas son aditivas.

Rotaciones compuestas bidimensionales


Dos rotaciones sucesivas aplicadas a un punto P producen la posicin transformada:
P = R(2) {R(1) P}
= {R(2) R(1)} P

(5.30)

Mediante la multiplicacin de dos matrices de rotacin, podemos verificar que dos rotaciones sucesivas
son aditivas:
R(2) R(1) = R(1 + 2)

(5.31)

por tanto, las coordenadas rotadas finales de un punto pueden calcularse con la matriz de rotacin compuesta como
P = R(1 + 2) P

(5.32)

Cambios de escala compuestos bidimensionales


Concatenar matrices de transformacin para dos operaciones sucesivas de cambio de escala en dos dimensiones produce la siguiente matriz de cambio de escala compuesta:
s2 x

0
0

0
s2 y
0

0 s1x

0 0
1 0

0
s1y
0

0 s1x s2 x

0 = 0
1 0

0
s1y s2 y
0

0
1

(5.33)

o,
S(s2x, s2y) S(s1x, s1y) = S(s1x s2x, s1y s2y)

(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 sera nueve
veces ms grande que el original.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 249

5.4 Transformaciones compuestas bidimensionales

249

Rotacin general sobre un punto de pivote bidimensional


Cuando un paquete grfico ofrece slo una funcin de rotacin con respecto al origen de coordenadas, podemos generar una rotacin bidimensional sobre cualquier otro punto de pivote (xr, yr) representando la siguiente secuencia de operaciones traslacin-rotacin-traslacin.
(1)
(2)
(3)

Trasladar el objeto de tal forma que la posicin del punto de pivote se mueva al origen de coordenadas.
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.9. La matriz de transformacin compuesta


para esta secuencia se obtiene con la concatenacin:
1 0 xr cos
0 1 y sin
r

0 0 1 0
cos
= sin
0

sin
cos
0

sin
cos
0

0 1 0 xr
0 0 1 yr
1 0 0 1

(5.35)

xr (1 cos ) + yr sin
yr (1 cos ) xr sin

que puede expresarse en la forma:


T(xr, yr) R() T(xr, yr) = R(xr, yr, )
T1(xr, yr).

En general, una funcin de rotacin de una biblioteca grfica, puede estructudonde T(xr, yr) =
rarse para aceptar parmetros de coordenadas de un punto de pivote, as como de un ngulo de rotacin, y
para generar automticamente la matriz de rotacin de la Ecuacin 5.35.

Cambio de escala general de puntos fijos bidimensionales


La Figura 5.10 ilustra una secuencia de transformaciones para producir un cambio de escala bidimensional
con respecto a una posicin fija seleccionada (xf, yf) cuando tenemos una funcin que slo puede realizar un
cambio de escala respecto al origen de coordenadas. Esta secuencia es:
(1)
Trasladar el objeto de tal forma que el punto fijo coincida con el origen de coordenadas.

(xr , yr )

(xr , yr)

(a)

(b)

(c)

(d)

Posicin original
del objeto y del
punto de pivote

Traslacin del
objeto de modo que
el punto de pivote
(xr , yr) se mueve
al origen

Rotacin
alrededor
del origen

Translacin del
objeto de modo
que el punto de
pivote vuelve a la
posicin (xr , yr)

FIGURA 5.9. Secuencia de transformacin para la rotacin de un objeto sobre un punto de pivote especificado usando la
matriz de rotacin R() de la transformacin 5.19.

CAP05_HEARN_1P.qxd

250

27/09/2005

21:07

Pgina 250

CAPTULO 5 Transformaciones geomtricas

(xf , yf)

(xf , yf)

(a)
Posicin original
del objeto y del
punto fijo

(b)
Se traslada el objeto
de modo que el punto
fijo (xf , yf) se sita en
el origen

(c)
Se escala el objeto
con respecto
al origen

(d)
Se traslada el
objeto de modo que
el punto fijo vuelve
a la posicin (xf , yf)

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(sx, sy) 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:
1 0

0 1
0 0

x f sx

yf 0
1 0

0
sy
0

0 1 0 x f sx


0 0 1 y f = 0
1 0 0 1 0

0
sy
0

x f (1 sx )

y f (1 sy )

(5.37)

o,
T(xf, yf) S(sx, sy) T(xf, yf) = S(xf, yf,, sx, sy)

(5.38)

Esta transformacin se genera automticamente en sistemas que ofrecen una funcin de cambio de escala
que acepta coordenadas para un punto fijo.

Directrices generales para el cambio de escala bidimensional


Los parmetros sx y sy cambian la escala de objetos a lo largo de las direcciones x e y. Podemos cambiar de
escala un objeto segn otras direcciones mediante la rotacin del objeto para alinear la direccin del cambio
de escala deseado con los ejes de coordenadas antes de aplicar la transformacin cambio de escala.
Supongamos que queremos aplicar factores de escala con valores especificados por los parmetros s1 y s2
en las direcciones mostradas en la Figura 5.11. Para llevar a cabo el cambio de escala, sin cambiar la orientacin del objeto, primero se lleva a cabo la rotacin de forma que las direcciones para s1 y s2 coincidan con los
ejes x e y, respectivamente. Despus, se aplica la transformacin de cambio de escala S(s1, s2) seguida de una
y

s2

x
s1

FIGURA 5.11. Parmetros de cambio de escala s1 y s2 a lo largo de direcciones ortogonales definidas por el desplazamiento angular .

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 251

5.4 Transformaciones compuestas bidimensionales

251

rotacin opuesta a los puntos de retorno de sus orientaciones originales. La matriz compuesta resultante del
producto de estas tres transformaciones es:
s1 cos2 + s2 sin 2

R ( ) S(s1 , s2 ) R( ) = (s2 s1 ) cos sin

(s2 s1 ) cos sin


s1 sin 2 + s2 cos2
0

0
1

(5.39)

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 = 45, luego duplicamos su longitud con los valores de escala s1 =1 y s2 = 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.

Propiedades de la concatenacin de matrices


La multiplicacin de matrices es asociativa. Para tres matrices cualesquiera, M1, M2 y M3, la matriz producto M3 M2 M1 puede obtenerse multiplicando primero M3 y M2 o multiplicando primero M2 y M1:
M3 M2 M1 = (M3 M2) M1 = M3 (M2 M1)

(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) o bien multiplicando de
derecha a izquierda (postmultipliando). Algunos paquetes grficos requieren que las transformaciones se
hagan especificando el orden en el que deben ser aplicadas. En este caso, invocaramos primero la transformacin M1, luego M2 y despus M3. 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 M1) es la primera en aplicarse, y
la primera transformacin que fue llamada (M3 para nuestro ejemplo) es la ltima en aplicarse.
Por otra parte, el producto de transformaciones no puede ser conmutativo. El producto de las matrices
M1 M2 en general no es igual que M2 M1. Esto significa que si queremos trasladar y rotar 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
y

y
(2, 2)
(1/2, 3/2)

(0, 1)

(1, 1)

(3/2, 1/2)
(0, 0)

(1, 0)
(a)

(0, 0)
(b)

FIGURA 5.12. Un cuadrado (a) se convierte en un paralelogramo (b) utilizando la matriz de transformacin compuesta
5.39, con s1  1, s2  2 y  45.

CAP05_HEARN_1P.qxd

252

27/09/2005

21:07

Pgina 252

CAPTULO 5 Transformaciones geomtricas

Posicin
final

Posicin
final

(a)

(b)

FIGURA 5.13. Invertir el orden en el que se lleva a cabo la secuencia de transformaciones puede afectar a la posicin transformada de un objeto. En (a), un objeto primero se traslada en la direccin x y luego se rota en el sentido contrario al de
las agujas del reloj con un ngulo de 45. En (b), el objeto primero se rota 45 en el sentido contrario al de las agujas del
reloj y despus es trasladado en la direccin x.

transformacin es conmutativa. Como ejemplo, dos rotaciones sucesivas pueden llevarse a cabo en cualquier
orden y la posicin final ser la misma. Esta propiedad conmutativa 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 (sx = sy).

Transformaciones compuestas bidimensionales generales y eficiencia de clculo


Una transformacin bidimensional, que representa cualquier combinacin de traslaciones, rotaciones y cambios de escala se puede expresar como:
x rsxx
y = rs
yx
1 0

rsxy
rsyy
0

trsx x

trsy y
1 1

(5.41)

Los cuatro elementos rsjk son los trminos multiplicativos rotacin-escala en la transformacin, lo que
implica slo ngulos de rotacin y factores de escala. Los elementos trsx y trsy son los trminos traslacionales, que contienen combinaciones de distancias de traslacin, coordenadas de puntos de pivote y puntos fijos,
ngulos de rotacin y parmetros de escala. Por ejemplo, si se va a cambiar de escala y rotar un objeto sobre
las coordenadas de su centroide (xc, yc) y luego se va a trasladar, los valores de los elementos de la matriz de
transformacin compuesta son:
T(t x , t y ) R( xc , yc , ) S( xc , yc , sx , sy )
sx cos

= sx sin
0

sy sin
sy cos
0

xc (1 sx cos ) + yc sy sin + t x

yc (1 sy cos ) xc sx sin + t y

(5.42)

Aunque la Ecuacin de matrices 5.41 requiere nueve multiplicaciones y seis sumas, los clculos explcitos para las coordenadas transformadas son:
x = x rsxx + y rsxy + trsx

y = x rsyx + y rsyy + trsy

(5.43)

Por tanto, realmente necesitamos realizar cuatro multiplicaciones y cuatro sumas para transformar las
posiciones de coordenadas. ste 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

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 253

5.4 Transformaciones compuestas bidimensionales

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) cos
es, aproximadamente, 1.0 y sin tiene un valor muy prximo al valor de radianes. Si estamos rotando en
pequeos pasos angulares sobre el origen, por ejemplo, podemos igualar cos a 1.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 sin ,

y = x sin + y

(5.44)

donde sin se 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 estimando el error en x e y 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.
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.

Transformacin bidimensional de slido-rgido


Si una matriz de transformacin incluye slo parmetros de traslacin y rotacin, es una matriz de transformacin de slido-rgido. La forma general para una matriz de transformacin bidimensional de slidorgido es:
rxx

ryx
0

rxy
ryy
0

trx

try
1

(5.45)

donde los cuatro elementos rjk son los trminos multiplicativos de la rotacin, y los elementos trx y try 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 fila (o

CAP05_HEARN_1P.qxd

254

27/09/2005

21:07

Pgina 254

CAPTULO 5 Transformaciones geomtricas

cada columna) de la submatriz como un vector, entonces los dos vectores fila (rxx, rxy) (o los dos vectores
columna) forman un juego ortogonal de vectores unidad. Tal juego de vectores, tambin se puede denominar
juego de vectores ortonormal. Cada vector tiene como longitud la unidad:
rxx2 + rxy2 = ryx2 + ryy2 = 1

(5.46)

y los vectores son perpendiculares (su producto escalar es 0):


rxxryx + rxyryy = 0

(5.47)

Por tanto, si estos vectores unidad se transforman mediante la rotacin de la submatriz, entonces el vector
(rxx, rxy) se convierte en un vector unidad a lo largo del eje x y el vector (ryx, ryy) se transforma en un vector
unidad a lo largo del eje y del sistema de coordenadas:
rxx

ryx
0

rxy

rxx

ryx
0

rxy

ryy
0

ryy
0

0 rxx 1

0 ryx = 0
1 1 1

(5.48)

0 ryx 0

0 ryy = 1
1 1 1

(5.49)

Por ejemplo, la siguiente transformacin de slido-rgido primero rota un objeto un ngulo alrededor del
punto de pivote (xr, yr) y despus traslada el objeto.
cos

T(t x , t y ) R( xr , yr , ) = sin
0

sin
cos
0

xr (1 cos ) + yr sin + t x

yr (1 cos ) xr sin + t y

(5.50)

Aqu, los vectores unidad ortogonales en la submatriz superior izquierda son (cos, sin) y (sin, cos)
y,
cos
sin

sin
cos
0

0 cos 1
0 sin = 0
1 1 1

(5.51)

De manera similar, el vector unidad (sin, cos) se convierte, por la matriz de transformacin precedente,
en el vector unidad (0,1) en la direccin y.

Construccin de matrices de rotacin bidimensionales


La propiedad ortogonal de la rotacin de matrices resulta til para construir la matriz cuando conocemos la
orientacin final de un objeto, en lugar de la cantidad de rotaciones angulares necesarias para colocar el objeto en aquella posicin. Esta informacin de orientacin podra determinarse por la alineacin de ciertos objetos en una escena o por posiciones de referencia entre sistemas de coordenadas. Por ejemplo, podramos
querer rotar un objeto para alinear su eje de simetra con la direccin de visualizacin (de la cmara) o podramos querer rotar un objeto de tal forma que estuviera encima de otro objeto. La Figura 5.14 muestra un objeto que va a ser alineado con la direccin de los vectores unidad u y v. Asumiendo que la orientacin del
objeto original, como se muestra en la Figura 5.14(a), se alinea con el eje de coordenadas, construimos la

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 255

5.4 Transformaciones compuestas bidimensionales


y

v

255

u

(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

200

150

150

100

100
Centroide

Centroide

50

50

50

100
(a)

150

200

50

100
(b)

150

200

FIGURA 5.15. Un tringulo (a) es transformado a la posicin (b) usando los clculos de la matriz compuesta del procedimiento transformVerts2D.

transformacin deseada asignando los elementos de u a la primera fila 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.

Ejemplo de programacin de matrices bidimensionales compuestas


Un ejemplo de implementacin para una secuencia de transformaciones geomtricas se da en el siguiente programa. Inicialmente, la matriz compuesta, compMatrix, se construye como la matriz identidad. En este ejemplo, se usa una concatenacin de izquierda a derecha para construir la matriz de transformacin compuesta y
se invocan las rutinas de transformacin en el orden en el que son ejecutadas. A medida que cada una de las
rutinas de transformacin bsicas (cambio de escala, rotacin y traslacin) se invoca, se establece una matriz
para aquella transformacin y se concatena por la izquierda con la matriz compuesta. Una vez que todas las
transformaciones se han especificado, la transformacin compuesta se aplica para transformar un tringulo.
Primero se cambia la escala del tringulo con respecto a la posicin de su centroide (Apndice A) luego, se
rota sobre su centroide y, por ltimo, se traslada. La Figura 5.15 muestra las posiciones original y final de un

CAP05_HEARN_1P.qxd

256

27/09/2005

21:07

Pgina 256

CAPTULO 5 Transformaciones geomtricas

tringulo que se transforma mediante esta secuencia. Las rutinas OpenGL se usan para mostrar la posicin inicial y final del tringulo.

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
/* Establece el tamao inicial de la ventana de visualizacin. */
GLsizei winWidth = 600, winHeight = 600;
/* Establece el rango de las coordenadas del universo. */
GLfloat xwcMin = 0.0, xwcMax = 225.0;
GLfloat ywcMin = 0.0, ywcMax = 225.0;
class wcPt2D {
public:
GLfloat x, y;
};
typedef GLfloat Matrix3x3 [3][3];
Matrix3x3 matComposite;
const GLdouble pi = 3.14159;
void init (void)
{
/* Establece el color de la ventana de visualizacin en blanco. */
glClearColor (1.0, 1.0, 1.0, 0.0);
}
/* Construye la matriz identidad 3 por 3. */
void matrix3x3SetIdentity (Matrix3x3 matIdent3x3)
{
GLint row, col;
for (row = 0; row < 3; row++)
for (col = 0; col < 3; col++)
matIdent3x3 [row][col] = (row == col);
}
/* Premultiplica la matriz m1 por la matriz m2, almacenando el resultdo en m2. */
void matrix3x3PreMultiply (Matrix3x3 m1, Matrix3x3 m2)
{
GLint row, col;
Matrix3x3 matTemp;
for (row = 0; row < 3; row++)
for (col = 0; col < 3 ; col++)
matTemp [row][col] = m1 [row][0] * m2 [0][col] + m1 [row][1] *
m2 [1][col] + m1 [row][2] * m2 [2][col];

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 257

5.4 Transformaciones compuestas bidimensionales

for (row = 0; row < 3; row++)


for (col = 0; col < 3; col++)
m2 [row][col] = matTemp [row][col];
}
void translate2D (GLfloat tx, GLfloat ty)
{
Matrix3x3 matTransl;
/* Inicializa la matriz de traslacin con la matriz identidad. */
matrix3x3SetIdentity (matTransl);
matTransl [0][2] = tx;
matTransl [1][2] = ty;
/* Concatena matTransl con la matriz compuesta. */
matrix3x3PreMultiply (matTransl, matComposite);
}
void rotate2D (wcPt2D pivotPt, GLfloat theta)
{
Matrix3x3 matRot;
/* Inicializa la matriz de rotacin con la matriz identidad. */
matrix3x3SetIdentity (matRot);
matRot
matRot
matRot
matRot
matRot
matRot

[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]

=
=
=
=
=
=

cos (theta);
-sin (theta);
pivotPt.x * (1 - cos (theta)) + pivotPt.y * sin (theta);
sin (theta);
cos (theta);
pivotPt.y * (1 - cos (theta)) - pivotPt.x * sin (theta);

/* Concatena matRot con la matriz compuesta. */


matrix3x3PreMultiply (matRot, matComposite);
}
void scale2D (GLfloat sx, GLfloat sy, wcPt2D fixedPt)
{
Matrix3x3 matScale;
/* Inicializa la matriz de cambio de escala con la matriz identidad. */
matrix3x3SetIdentity (matScale);
matScale
matScale
matScale
matScale

[0][0]
[0][2]
[1][1]
[1][2]

=
=
=
=

sx;
(1 - sx) * fixedPt.x;
sy;
(1 - sy) * fixedPt.y;

/* Concatenate matScale with the composite matrix. */


matrix3x3PreMultiply (matScale, matComposite);
}
/* Usando la matriz compuesta, se calculan las coordenadas transformadas. */

257

CAP05_HEARN_1P.qxd

258

27/09/2005

21:07

Pgina 258

CAPTULO 5 Transformaciones geomtricas

void transformVerts2D (GLint nVerts, wcPt2D * verts)


{
GLint k;
GLfloat temp;
for (k = 0; k < nVerts; k++) {
temp = matComposite [0][0] * verts [k].x + matComposite [0][1] *
verts [k].y + matComposite [0][2];
verts [k].y = matComposite [1][0] * verts [k].x + matComposite [1][1] *
verts [k].y + matComposite [1][2];
verts [k].x = temp;
}
}
void triangle (wcPt2D *verts)
{
GLint k;
glBegin (GL_TRIANGLES);
for (k = 0; k < 3; k++)
glVertex2f (verts [k].x, verts [k].y);
glEnd ( );
}
void displayFcn (void)
{
/* Define la posicin inicial del tringulo. */
GLint nVerts = 3;
wcPt2D verts [3] = { {50.0, 25.0}, {150.0, 25.0}, {100.0, 100.0} };
/* Calcula la posicin del centroide del tringulo. */
wcPt2D centroidPt;
GLint k, xSum = 0, ySum = 0;
for (k = 0; k < nVerts; k++) {
xSum += verts [k].x;
ySum += verts [k].y;
}
centroidPt.x = GLfloat (xSum) / GLfloat (nVerts);
centroidPt.y = GLfloat (ySum) / GLfloat (nVerts);
/* Establece los parmetros de la transformacin geomtrica. */
wcPt2D pivPt, fixedPt;
pivPt = centroidPt;
fixedPt = centroidPt;
GLfloat tx = 0.0, ty = 100.0;
GLfloat sx = 0.5, sy = 0.5;
GLdouble theta = pi/2.0;
/* Borra la ventana de visualizacin. */

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 259

5.4 Transformaciones compuestas bidimensionales

glClear (GL_COLOR_BUFFER_BIT);
/* Establece el color de relleno inicial en azul. */
glColor3f (0.0, 0.0, 1.0);
/* Muestra un tringulo azul. */
triangle (verts);
/* Inicializa la matriz compuesta con la matriz identidad. */
matrix3x3SetIdentity (matComposite);
/* Construye la matriz compuesta para la secuencia de transformacin. */
scale2D (sx, sy, fixedPt); // Primera transformacin: escala.
rotate2D (pivPt, theta); // Segunda transformacin: rotacin
translate2D (tx, ty); // Transformacin final: traslacin.
/* Aplica la matriz compuesta a los vrtices del tringulo. */
transformVerts2D (nVerts, verts);
/* Establece el color para el tringulo transformado.*/
glColor3f (1.0, 0.0, 0.0);
/* Muestra el tringulo transformado en rojo.*/
triangle (verts);
glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (xwcMin, xwcMax, ywcMin, ywcMax);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char ** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (50, 50);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Geometric Transformation Sequence");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

259

CAP05_HEARN_1P.qxd

260

27/09/2005

21:07

Pgina 260

CAPTULO 5 Transformaciones geomtricas

5.5 OTRAS TRANSFORMACIONES BIDIMENSIONALES


Las transformaciones bsicas tales como la traslacin, la rotacin y el cambio de escala son componentes
estndares de 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
bidimensional, 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 xy o perpendicular al plano xy. Cuando el eje de reflexin es una lnea en el plano xy, la trayectoria de la rotacin est tambin en el plano xy. 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:
1 0 0
0 1 0

0 0 1

(5.52)

Esta transformacin conserva los valores x, pero da la vuelta a las posiciones de coordenadas de valores y. La orientacin resultante de un objeto despus de haber sido reflejado sobre el eje x se muestra en la
Figura 5.16. Para imaginar la trayectoria de la transformacin de rotacin para esta reflexin, podemos pensar en el objeto plano movindose fuera del plano xy y girando 180 a travs de un espacio tridimensional alrededor del eje x y colocado de nuevo sobre el plano xy al otro lado del eje x.
Una reflexin sobre la lnea x = 0 (el eje y) vuelca las coordenadas x mientras que mantiene las mismas
coordenadas y. La matriz para esta transformacin es:
1 0 0
0 1 0

0 0 1

(5.53)

La Figura 5.17 ilustra el cambio de posicin de un objeto que ha sido reflejado respecto de la lnea x = 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 deno1

y
Posicin
original
2

Posicin
original
2

Posicin
reflejada
2

x
2

3
3
Posicin
reflejada

1
3
x

1

FIGURA 5.16. Reflexin de un objeto respecto al eje x.

FIGURA 5.17. Reflexin de un objeto respecto al eje y.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 261

5.5 Otras transformaciones bidimensionales

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 1

(5.54)

En la Figura 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() con = 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 1 0
1 0 0

0 0 1

(5.55)

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 lnea 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 y = 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 90 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:
y
Posicin
reflejada

3
3
2
yrfl

1
x

1
2

2

1 Preflejado

1
2
3
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
xy sobre el origen de coordenadas.

xrfl

FIGURA 5.19. Reflexin de un objeto respecto a un eje perpendicular al plano xy que pasa por el punto Preflejado.

CAP05_HEARN_1P.qxd

262

27/09/2005

21:07

Pgina 262

CAPTULO 5 Transformaciones geomtricas


yx

Posicin
original

2
1
1

Posicin
reflejada
3

2
x

FIGURA 5.20. Reflexin de un objeto con respecto a la lnea y = x.


yx

45

(a)
y

FIGURA 5.21. Secuencia de transformaciones para producir una reflexin respecto a la lnea y = 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).

45
x

(b)

0 1 0
1 0 0

0 0 1

(c)

(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 lnea y = mx + b en el plano xy pueden realizarse con una combinacin de
transformaciones traslacin-rotacin-reflexin. En general, primero trasladamos la lnea 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, reestablecemos 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 1 cambia
la imagen del espejo por un punto ms alejado del eje de reflexin, y un parmetro cuya magnitud es inferior
a 1 trae la imagen del espejo a un punto ms cercano al eje de reflexin. As, un objeto reflejado puede tambin agrandarse, reducirse o distorsionarse.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 263

5.5 Otras transformaciones bidimensionales

2

1
2

263

Posicin
reflejada
3

Posicin
original

3
y  x

FIGURA 5.22. Reflexin con respecto a la lnea y = x.

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 y.
Una inclinacin en la direccin-x respecto al eje x se produce con la matriz de transformacin:
1 shx
0 1

0 0

0
0
1

(5.57)

la cual transforma la posicin de coordenadas como sigue:


x = x + shx y,

y = y

(5.58)

Cualquier nmero real puede asignarse a los parmetros de inclinacin shx. Entonces, una posicin de
coordenadas (x, y) se cambia horizontalmente por una cantidad proporcional a su distancia perpendicular
(valor y) desde el eje x. Establecer el parmetro shx por ejemplo con el valor 2, cambia el cuadrado de la Figura
5.23 por un paralelogramo. Los valores negativos para shx cambian las posiciones de las coordenadas hacia
la izquierda.
Podemos generar una inclinacin en la direccin-x respecto a otras lneas de referencia con
shx yref

1 shx
0 1

0 0

(5.59)

Ahora, las posiciones de las coordenadas se transforman en:


y

(2, 1)
(0, 1)

(0, 0)

(3, 1)

(1, 1)

(1, 0)
(a)

(0, 0)

(1, 0)

x
(b)

FIGURA 5.23. Un cuadrado (a) se convierte en un paralelogramo (b) utilizando la matriz de inclinacin 5.57 en la
direccin-x con shx = 2.

CAP05_HEARN_1P.qxd

264

27/09/2005

21:07

Pgina 264

CAPTULO 5 Transformaciones geomtricas

x = x + shx(y yref),

y = y

(5.60)

Un ejemplo de esta transformacin de inclinacin se da en la Figura 5.24 para un valor de del parmetro de inclinacin respecto a la lnea yref = 1.
Una inclinacin en la direccin-y respecto a la lnea x = xref se genera con la matriz de transformacin:
1

shy
0

(5.61)

0
0

1 shy xref

0
1

la cual genera los siguientes valores de coordenadas transformadas:


x = x,

y = y + shy(x xref)

(5.62)

Esta transformacin cambia la posicin de coordenadas verticalmente en una cantidad proporcional a su


distancia de la lnea de referencia x = xref. La Figura 5.25 ilustra la conversin de un cuadrado en un paralelogramo con shy = 0.5 y xref = 1.
Las operaciones de inclinacin pueden expresarse como secuencias de transformaciones bsicas. La
matriz de inclinacin en la direccin-x 5.57, por ejemplo, puede representarse 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 lneas
de inclinacin de referencia son equivalentes a las traslaciones.
y

(0, 1)

(1, 1)

(1, 1)

(0, 0)

(1, 0)

(1/2, 0)

yref  1

(2, 1)

(3/2, 0)

yref  1
(b)

(a)

FIGURA 5.24. Un cuadrado (a) se transforma en un paralelogramo desplazado (b) con shx = 0.5 y yref = 1 en la matriz de
inclinacin 5.59.
y

(1, 2)

y
(0, 3/2)

(0, 1)

(1, 1)

(1, 1)
(0, 1/2)

xref  1 (0, 0)

(1, 0)
(a)

xref  1

x
(b)

FIGURA 5.25. Un cuadrado(a) se convierte en un paralelogramo desplazado (b) usando los siguientes valores de los parmetros shy = 0.5 y xref = 1 en la matriz de inclinacin en la direccin-y 5.61.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 265

5.6 Mtodos de rasterizacin para transformaciones geomtricas

265

5.6 MTODOS DE RASTERIZACIN PARA TRANSFORMACIONES


GEOMTRICAS
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 arrays 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 bloque, 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 90 en 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 contrario al de las agujas
del reloj invirtiendo los valores de los pxeles en cada fila del array, y despus intercambiando filas por columnas. Una rotacin de 180 se obtiene invirtiendo el orden de los elementos en cada fila del array, y despus
invirtiendo 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
rotado y se calcula la cantidad superpuesta con las reas rotadas de pxeles. Puede entonces calcularse un color
para un pxel de destino, 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 (antialiasing), 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 sx y sy, y luego se mapean sobre un
conjunto de pxeles de destino. El 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).
Un objeto puede reflejarse usando transformaciones de rasterizacin, que invierten los valores de filas 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.
Pmax

Pmin

P0
(a)

(b)

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 Pmin y Pmax especifican los lmites del bloque rectangular que va a ser movido y P0 es la
posicin de referencia de destino.

CAP05_HEARN_1P.qxd

266

27/09/2005

21:07

Pgina 266

CAPTULO 5 Transformaciones geomtricas


1
4
7
10

2
5
8
11

3
6
9
12

(a)

3
2
1

6
5
4

9
8
7

12
11
10

(b)

12
9
6
3

11
8
5
2

10
7
4
1

(c)

FIGURA 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).

reas de destino
de pxeles

Array de
pxeles
girados

FIGURA 5.28. Una rotacin de lneas para un bloque rectangular de pxeles puede llevarse a cabo
mapeando las reas de destino de pxeles sobre el
bloque rotado.

Array de destino
de pxeles

Array de
destino
de pxeles

FIGURA 5.29. Mapeo de reas de destino de pxeles sobre un array cambiado de escala de valores
de pxeles. Los factores de escala sx =sy = 0.5 se
aplican respecto a un punto fijo (xf, yf).

Array
escalado

(xf , yf)

5.7 TRANSFORMACIONES DE RASTERIZACIN EN Open GL


En la Seccin 3.19 presentamos la mayora de las funciones OpenGL para la realizacin de operaciones de
rasterizacin. Una traslacin de un array rectangular de valores de pxeles de color, de un rea de bfer a otra,
puede llevarse a cabo en OpenGL como una operacin de copia:
glCopyPixels (xmin, ymin, width, height, GL_COLOR)

Los primeros cuatro parmetros de esta funcin dan la localizacin y las dimensiones del bloque de pxeles. Y la constante simblica de OpenGL, GL_COLOR, 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 est 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 g1CopyPixels se elige con la rutina
g1ReadBuffer y el bfer de destino se selecciona con la rutina g1DrawBuffer.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 267

5.8 Transformaciones entre sistemas de coordenadas bidimensionales

267

Podemos rotar un bloque de valores de pxeles de color en incrementos de 90 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, GL_RGB, GL_UNSIGNED_BYTE, colorArray);

Si los ndices de la tabla de color se almacenan en las posiciones de los pxeles, podemos sustituir la constante GL_RGB por GL_COLOR_INDEX. Para rotar los valores de color, cambiamos las filas y las columnas del
array de color, tal y como se describe en la seccin anterior. Despus, ponemos el array rotado de nuevo en
el bfer con:
glDrawPixels (width, height, GL_RGB, 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 g1ReadBuffer, y designamos
un bfer de destino con g1DrawBuffer.
Una transformacin de escala bidimensional puede desarrollarse como una operacin de rasterizacin en
OpenGL, especificando los factores de escala y despus invocando bien g1CopyPixels o g1DrawPixels.
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 decrementan el tamao del elemento. Un valor negativo para sx, sy, 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.

5.8 TRANSFORMACIONES ENTRE SISTEMAS DE COORDENADAS


BIDIMENSIONALES
Las aplicaciones de grficos por computadora implican transformaciones de coordenadas de un marco de referencia a otro durante varias etapas del procesamiento de la escena. Las rutinas de visualizacin transforman
descripciones de objetos de las coordenadas universales a unas coordenadas de dispositivo de salida. Para
aplicaciones de modelado y diseo, los objetos individuales se definen tpicamente en sus propias referencias
cartesianas locales. Estas descripciones de coordenadas locales deben, por tanto, transformarse en posiciones
y orientaciones dentro del sistema de coordenadas total de la escena. Un programa para facilitar la gestin de
la disposicin de oficinas, por ejemplo, tiene descripciones de coordenadas individuales para sillas y mesas y
otros muebles que pueden colocarse en el plano de la planta, con mltiples copias de sillas y otros elementos
en diferentes posiciones.
Adems, las escenas a veces se describen en marcos de referencia no cartesianos que aprovechan las simetras de los objetos. Las descripciones de coordenadas en estos sistemas deben convertirse a coordenadas uni-

CAP05_HEARN_1P.qxd

268

27/09/2005

21:07

Pgina 268

CAPTULO 5 Transformaciones geomtricas

versales cartesianas para ser procesadas. Algunos ejemplos de sistemas 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 sistemas 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 xy especificado con el origen de coordenadas (x0, y0) y un
ngulo de orientacin en un marco de referencia cartesiano xy. Para transformar las descripciones del objeto de las coordenadas xy a las coordenadas xy, establecemos una transformacin que superpone los ejes xy
sobre los ejes xy. Esto se realiza en dos pasos:
(1)
(2)

Traslacin de tal forma que el origen (x0, y0) del sistema xy se mueva al origen (0,0) del sistema xy.
Rotacin del eje x sobre el eje x.
La transformacin del origen de coordenadas se lleva a cabo con la matriz de transformacin:
1 0 x0
T( x0 , y0 ) = 0 1 y0
0 0 1

(5.63)

La orientacin de los dos sistemas 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:
cos
R( ) = sin
0

sin
cos
0

0
0
1

(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 xy:
Mxy,xy = R() T(x0, y0)

(5.65)

Un mtodo alternativo para describir la orientacin del sistema de coordenadas xy 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
v=

V
= (vx , vy )
V

(5.66)

eje y

eje y
eje

y

eje

x

y0

eje

y

eje

y

x0

eje x

FIGURA 5.30. Un sistema cartesiano xy posicionado


en (x0, y0) con orientacin en un sistema cartesiano
xy.

x

x

eje x

FIGURA 5.31. Posicin de los marcos de referencia mostrados en la Figura 5.30 despus de trasladar el origen del
sistema xy al origen de coordenadas del sistema xy.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 269

5.8 Transformaciones entre sistemas de coordenadas bidimensionales

269

eje y
eje

y
eje

x

P0

y0

x0

FIGURA 5.32. Sistema cartesiano xy con origen en


P0 = (x0, y0) y eje y paralelo al vector V.

eje x

eje y

eje

y

V  P1  P0
P1

eje

x

y0
P0
0

x0

FIGURA 5.33. Un sistema cartesiano xy definido por


dos posiciones de coordenadas, P0 y P1, dentro de un
marco de referencia xy.

eje x

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 = (vy, vx) = (ux, uy)
(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 xy y hacerlo coincidir con el sistema xy, puede escribirse como:
ux

R = vx
0

uy
vy
0

0
1

(5.68)

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 1 0
1 0 0

0 0 1
De igual manera, podemos obtener esta matriz de rotacin de la Ecuacin 5.64 estableciendo como ngulo de orientacin = 90.
En una aplicacin interactiva, sera ms conveniente elegir una direccin relativa a la posicin P0 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:
v=

P1 P0
P1 P0

y u se obtiene como la perpendicular a v que forma un sistema cartesiano a derechas.

(5.69)

CAP05_HEARN_1P.qxd

270

27/09/2005

21:07

Pgina 270

CAPTULO 5 Transformaciones geomtricas

5.9 TRANSFORMACIONES GEOMTRICAS EN UN ESPACIO


TRIDIMENSIONAL
Los mtodos para transformaciones geomtricas en tres dimensiones pueden obtenerse extendiendo los mtodos bidimensionales, incluyendo consideraciones para la coordenada z. Ahora, trasladamos un objeto especificando un vector de traslacin tridimensional, que determina cunto va a ser movido el objeto en cada una
de las tres direcciones de coordenadas. De la misma forma, cambiamos la escala de un objeto eligiendo un
factor de escala para cada una de las tres coordenadas cartesianas. Pero la extensin de los mtodos de rotacin bidimensionales a los de tres dimensiones es menos directa.
Cuando hemos visto las rotaciones bidimensionales en el plano xy, necesitbamos considerar slo las rotaciones sobre los ejes que fueran perpendiculares al plano xy. En un espacio tridimensional, podemos seleccionar cualquier orientacin espacial para la rotacin de ejes. Algunos paquetes grficos soportan rotaciones tridimensionales como una composicin de tres rotaciones, una para cada uno de los tres ejes cartesianos.
Alternativamente, podemos establecer unas ecuaciones generales de rotacin, dando la orientacin de rotacin del eje y el ngulo de rotacin requerido.
Una posicin tridimensional, expresada en coordenadas homogneas, se representa como un vector columna de cuatro elementos. As, cada operando de la transformacin geomtrica es ahora una matriz de 4 por 4,
que premultiplica un vector columna de coordenadas. Y, al igual que en dos dimensiones, cualquier secuencia de transformaciones se representa como una matriz simple, formada por la concatenacin de matrices para
las transformaciones individuales de la secuencia. Cada matriz sucesiva en una secuencia de transformacin
se concatena a la izquierda de las matrices de transformacin previas.

5.10 TRASLACIONES TRIDIMENSIONALES


Una posicin P = (x, y, z) en un espacio tridimensional, se traslada a la posicin P = (x, y, z) aadiendo las
distancias de traslacin tx, ty y tz a las coordenadas cartesianas de P:
x = x + tx,

y = y+ ty,

z = z + tz

(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 de traslacin T es una matriz de 4 por 4:
x 1
y 0
=
z 0

1 0

0 0 tx x
1 0 t y y

0 1 tz z

0 0 1 1

(5.71)

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.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 271

5.11 Rotaciones tridimensionales


eje y

271

eje y

(x, y, z)


(x, y, z)

(x, y, z)

T  (tx, ty, tz)

T  (tx, ty, tz)


(x, y, z)
eje x

eje x

eje z

eje z

FIGURA 5.34. Movimiento de una posicin de coordenadas con el vector de traslacin T = (tx, ty, tz).

FIGURA 5.35. Cambio de la posicin de un objeto tridimensional usando el vector de traslacin T.

typedef GLfloat Matrix4x4 [4][4];


/* Construye la matriz identidad 4 por 4. */
void matrix4x4SetIdentity (Matrix4x4 matIdent4x4)
{
GLint row, col;
for (row = 0; row < 4; row++)
for (col = 0; col < 4 ; col++)
matIdent4x4 [row][col] = (row == col);
}
void translate3D (GLfloat tx, GLfloat ty, GLfloat tz)
{
Matrix4x4 matTransl3D;
/* Inicializa la matriz de traslacin con la matriz identidad. */
matrix4x4SetIdentity (matTransl3D);
matTransl3D [0][3] = tx;
matTransl3D [1][3] = ty;
matTransl3D [2][3] = tz;
}

La inversa de una matriz de traslacin tridimensional se obtiene usando los mismos procedimientos que
se aplicaron en la traslacin bidimensional. Esto es, negamos las distancias de traslacin tx, ty y tz. Esto produce una traslacin en la direccin opuesta, y el producto de la matriz de traslacin y su inversa es la matriz
identidad.

5.11 ROTACIONES TRIDIMENSIONALES


Podemos rotar un objeto sobre cualquier eje en el espacio, pero la forma ms fcil de llevar a cabo una rotacin de ejes, es aquella que es paralela a los ejes de coordenadas cartesianos. Tambin, podemos usar combi-

CAP05_HEARN_1P.qxd

272

27/09/2005

21:07

Pgina 272

CAPTULO 5 Transformaciones geomtricas


y

x
z

(a)

x
z

(b)

x
z

(c)

FIGURA 5.36. Las rotaciones positivas alrededor de un eje de


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 lnea 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). Esto 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).

Rotaciones de ejes de coordenadas tridimensionales


Las ecuaciones de rotacin del eje-z bidimensionales pueden extenderse fcilmente a tres dimensiones:
x = x cos y sin
y = x sin + y cos
z = z

(5.73)

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 273

5.11 Rotaciones tridimensionales

273

El parmetro 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:
x cos
y sin
=
z 0

1 0

sin
cos
0
0

0 0 x
0 0 y

1 0 z

0 1 1

(5.74)

y las podemos escribir de manera ms compacta como:


P = Rz() P

(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 x, y y z en las Ecuaciones 5.73:
xyzx

(5.76)

As, para obtener las transformaciones de rotacin del eje-x y el eje-y, sustituimos cclicamente x por y, y
por z, y z por x, 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-x:
y = y cos z sin
z = y sin + z cos

(5.77)

x = x
La rotacin de un objeto alrededor del eje x se muestra en la Figura 5.39.
y

FIGURA 5.37. Rotacin de un objeto sobre el eje z.

z
y

x
z

y
x

z
y

FIGURA 5.38. Permutacin cclica de los ejes de coordenadas cartesianas para producir los tres juegos de ecuaciones de
rotacin de ejes de coordenadas.

CAP05_HEARN_1P.qxd

274

27/09/2005

21:07

Pgina 274

CAPTULO 5 Transformaciones geomtricas


y

FIGURA 5.39. Rotacin de un objeto alrededor del eje x.

FIGURA 5.40. Rotacin de un objeto alrededor del eje y.

Una permutacin cclica de coordenadas en las Ecuaciones 5.77 proporciona las ecuaciones de trasformacin para una rotacin del eje-y:
z = z cos x sin
x = z sin + x cos

(5.78)

y = y
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 por . 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 filas por columnas. Es
decir, podemos calcular la inversa de cualquier matriz de rotacin R formando su traspuesta (R1 = RT).

Rotaciones tridimensionales generales


Una matriz de rotacin, para cualquier eje que no coincide con un eje de coordenadas, puede realizarse como
una transformacin compuesta incluyendo combinaciones de traslaciones y rotaciones de ejes de coordenadas. Primero, movemos el eje de rotacin designado dentro de uno de los ejes de coordenadas. Despus aplicamos la matriz de rotacin apropiada para ese eje de coordenadas. El ltimo paso en la secuencia de transformacin es devolver el eje de rotacin a su posicin original.
En el caso especial de que un objeto vaya a ser rotado alrededor de un eje que es paralelo a uno de los ejes
de coordenadas, conseguimos la rotacin deseada con la siguiente secuencia de transformaciones.
(1)

Traslado del objeto de tal forma que el eje de rotacin coincida con el eje de coordenadas paralelo.

(2)

Se realiza la rotacin especificada sobre ese eje.

(3)

Traslado del objeto de tal forma que el eje de rotacin se mueva de nuevo a su posicin original.

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 = T1 Rx() T P

(5.79)

donde la matriz de rotacin compuesta para la transformacin es:


R() = T1 Rx() T

(5.80)

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 275

5.11 Rotaciones tridimensionales


y

Eje d

e rot

aci
n

(a)
Posicin original del objeto

(c)
Se gira el objeto un ngulo

Eje d

e rot

275

aci

(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 x.

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)

Trasladar el objeto de tal forma que el eje de rotacin pase a travs del origen de coordenadas.

(2)

Rotar el objeto de forma que el eje de rotacin coincida con uno de los ejes de coordenadas.

(3)

Realizar la rotacin especificada sobre el eje de coordenadas seleccionado.

(4)

Aplicar las rotaciones inversas para devolver al eje de rotacin su orientacin original.

(5)

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. El eje-z es a
menudo una eleccin conveniente, y 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.43, o con un
punto 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 P2
a P1. Las componentes del vector del eje de rotacin se calculan entonces del siguiente modo:
V = P2 P1
= (x2 x1, y2 y1, z2 z1)

(5.81)

CAP05_HEARN_1P.qxd

276

27/09/2005

21:07

Pgina 276

CAPTULO 5 Transformaciones geomtricas


y

P2

P2

P1

P1

P1
x

P
2

z
Posicin
inicial

Paso 1
Trasladar
P1 al origen

Paso 2
Rotar P2
sobre el eje z

y
P2

P1
P
2

P2

P1

P1
x

z
z

Paso 3
Rotar el objeto
alrededor del
eje z

z
Paso 5
Trasladar el
eje de rotacin
a su posicin
original

Paso 4
Rotar el eje
hasta su orientacin
original

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:


u=

V
= (a, b, c)
V

(5.82)

donde los componentes a, b y c son los cosenos de direccin para la rotacin del eje:
a=

x2 x1
,
V

b=

y2 y1
,
V

c=

z2 z1
V

(5.83)

Si la rotacin se va a realizar en sentido contrario (en el sentido de las agujas del reloj cuando se mira de
P2 a P1) entonces deberamos invertir el vector de eje V y el vector unidad u de tal manera que apuntasen en
la direccin de P2 a P1.
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 P2 a P1 (Figura 5.43) movemos el punto
P1 al origen. (Si la rotacin ha sido especificada en la direccin opuesta, deberemos mover P2 al origen). Esta
matriz de traslacin es:
1
0
T=
0

0
1
0
0

0 x1
0 y1
1 z1

0 1

La cual recoloca el eje de rotacin y el objeto tal y como se muestra en la Figura 5.44.

(5.84)

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 277

5.11 Rotaciones tridimensionales

277

y
P2
u

P1

x
z

FIGURA 5.43. Un eje de rotacin (lnea de puntos) definido


por los puntos P1 y P2. La direccin para el vector de eje unidad u se determina especificando la direccin de rotacin.

FIGURA 5.44. Traslacin de un eje de rotacin


al origen de coordenadas.

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 u = (0, b, c) entonces el coseno del ngulo de rotacin puede determinarse a partir del producto escalar de u y el vector unitario uz a lo largo del eje z:
cos =

u u z
c
=
d
u u z

(5.85)

donde d es el mdulo de u:


d = b2 + c 2

(5.86)

De manera similar, podemos determinar el seno de a partir del producto vectorial de u y uz. La forma
independiente de las coordenadas de este producto vectorial es:
y

u
u

x
z

z
(a)

x
z

uz  (0, 0, 1)

(b)

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
sobre el eje z.

CAP05_HEARN_1P.qxd

278

27/09/2005

21:07

Pgina 278

CAPTULO 5 Transformaciones geomtricas

u uz = ux | u | | uz | sin

(5.87)

y la forma cartesiana para el producto vectorial nos da:


u uz = ux b

(5.88)

Igualando las Ecuaciones 5.87 y 5.88, y sabiendo que | uz | = 1 y | u | = d, tenemos:


d sin = b
o,
sin =

(5.89)

b
d

Ahora que hemos determinado los valores para cos y sin en funcin de las componentes del vector u,
podemos establecer los elementos de la matriz para la rotacin de este vector sobre el eje x y dentro del plano
xz:

0
R x ( ) =

0
c
d
b
d
0

0
b
d
c
d
0

(5.90)

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 y 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 rotado 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 a partir del producto escalar de los vectores
unidad u y uz. As,
cos =

(5.91)

u u z
=d
u u z

mientras | uz | = | u | = 1. Comparando la forma independiente de las coordenadas del producto vectorial:
u uz = uy | u | | uz | sin

(5.92)

u uz = uy (a)

(5.93)

sin  =

(5.94)

con la forma cartesiana:


encontramos que,
Por tanto, la matriz de transformacin para la rotacin de u sobre el eje y es
d
0
R y ( ) =
a

0 a
1 0
0 d
0 0

0
0
0

(5.95)

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 279

5.11 Rotaciones tridimensionales

uy
ux

uz  (0, 0, 1)
z

uz  u

279

u  (a, 0, d)

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 uz.

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 puede ahora aplicarse como una rotacin alrededor del eje z:
cos
sin
R z ( ) =
0

sin
cos
0
0

0 0
0 0
1 0

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( ) = T 1 R -1x ( ) R -1y ( ) R z ( ) R y ( ) R x ( ) T

(5.97)

Un mtodo algo ms rpido, pero quizs menos intuitivo, para obtener la matriz de rotacin compuesta
Ry()Rx() es hacer uso del hecho de que la matriz compuesta para cualquier secuencia de rotaciones tridimensionales es de la forma:
r11
r
R = 21
r31

r12
r22
r32
0

r13
r23
r33
0

0
0
0

(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, y y z respectivamente:
r11 1
r 0
R 12 = ,
r13 0

1 1

r21 0
r 1
R 22 = ,
r23 0

1 1

r31 0
r 0
R 32 =
r33 1

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

CAP05_HEARN_1P.qxd

280

27/09/2005

21:07

Pgina 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 z = u
u y =

u ux
u ux

(5.100)

u x = u y u z

Si expresamos los elementos de los vectores unidad locales para la rotacin de ejes como:
u x = (ux1 , ux 2 , ux 3 )
u y = (uy1 , uy 2 , uy 3 )

(5.101)

u z = (uz1 , uz2 , uz3 )


entonces la matriz compuesta requerida, que es igual al producto de Ry()Rx() es:
ux1
u
y1
R=
u
z1
0

ux 2
uy 2

ux 3
uy 3

uz2
0

uz3
0

0
0
0

(5.102)

Esta matriz transforma los vectores unidad ux, uy y uz en los ejes x, y y z, respectivamente. Y esto alinea el eje de rotacin con el eje z, porque uz = u.

Mtodos de cuaternios para rotaciones tridimensionales


Un mtodo ms eficiente para generar una rotacin sobre un eje arbitrario seleccionado consiste en usar una
representacin cuaternia (Apndice A) para la transformacin de rotacin. Los cuaternios, que son extensiones de los nmeros complejos bidimensionales, son tiles en una serie de procedimientos de grficos por computador, incluyendo la generacin de objetos fractales. Requieren menos espacio de almacenamiento que las
matrices de 4 por 4, y es ms sencillo escribir procedimientos cuaternios para secuencias de transformaciones. Esto es particularmente importante en animaciones, las cuales a menudo requieren secuencias de movimientos complicadas e interpolacin de movimiento entre dos posiciones de un objeto dadas.
Una forma de caracterizar un cuaternio es como un par ordenado, formada por una parte escalar y una
parte vectorial:
q = (s, 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:

(5.103)
s = cos , v = u sin
2
2
donde u es el vector unidad a lo largo del eje de rotacin seleccionado y es 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:

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 281

5.11 Rotaciones tridimensionales

281

u
x

FIGURA 5.49. Parmetros de cuaternios unidad y u para la rotacin sobre un eje


especificado.

P = (0, p)
con las coordenadas del punto como la parte vectorial p = (x, y, z). La rotacin del punto entonces se lleva a
cabo con la operacin cuaternal:
P = qPq1
(5.104)
donde q1 = (s, v) es la inversa del cuaternio unidad q con las partes escalar y vectorial dadas en las
Ecuaciones 5.103. Esta transformacin produce el siguiente nuevo cuaternio.
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 = s2p + v(p v) + 2s(v p) + v (v p)

(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 el 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
v = (a, b, c) obtenemos los elementos para la matriz de rotacin compuesta Rx1()Ry1()Rz()Ry()Rx()
en la forma de 3 por 3 como:
1 2b 2 2c 2
2 ab 2 sc
2 ac + 2 sb

2
2
M R ( ) = 2 ab + 2 sc 1 2 a 2c
2bc 2 sa
2 ac 2 sb
2bc + 2 sa 1 2 a 2 2b 2

(5.107)

Los clculos implicados en esta matriz pueden reducirse drsticamente sustituyendo los valores especficos por los parmetros a, b, c y s, y luego usando las siguientes identidades trigonomtricas para simplificar
los trminos.
cos2

sin 2 = 1 2 sin 2 = cos ,


2
2
2

2 cos sin = sin


2
2

As, podemos reescribir la matriz 5.107 como:


ux2 (1 cos ) + cos

M R ( ) = uy ux (1 cos ) + uz sin

uz ux (1 cos ) uy sin

ux uy (1 cos ) uz sin
u (1 cos ) + cos
2
y

uz uy (1 cos ) + ux sin

ux uz (1 cos ) + uy sin

uy uz (1 cos ) ux sin

uz2 (1 cos ) + cos

(5.108)

CAP05_HEARN_1P.qxd

282

27/09/2005

21:07

Pgina 282

CAPTULO 5 Transformaciones geomtricas

donde ux, uy y uz 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 cuaternal, correspondiente a la Ecuacin 5.97, es:
R() = T1 MR 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, Rz(), en las ecuaciones de transformacin 5.74. De
manera similar, sustituyendo los valores de rotacin del cuaternio 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 cuaternal de la Ecuacin 5.109 se usa para establecer los elementos de la matriz para una rotacin tridimensional general.
class wcPt3D {
public:
GLfloat x, y, z;
};
typedef float Matrix4x4 [4][4];
Matrix4x4 matRot;
/* Construye la matriz identidad 4 por 4. */
void matrix4x4SetIdentity (Matrix4x4 matIdent4x4)
{
GLint row, col;
for (row = 0; row < 4; row++)
for (col = 0; col < 4 ; col++)
matIdent4x4 [row][col] = (row == col);
}
/* Premultiplica la matriz m1 por la matriz m2, almacena el resultado en m2. */
void matrix4x4PreMultiply (Matrix4x4 m1, Matrix4x4 m2)
{
GLint row, col;
Matrix4x4 matTemp;
for (row = 0; row < 4; row++)
for (col = 0; col < 4 ; col++)
matTemp [row][col] = m1 [row][0] * m2 [0][col] + m1 [row][1] *
m2 [1][col] + m1 [row][2] * m2 [2][col] +
m1 [row][3] * m2 [3][col];
for (row = 0; row < 4; row++)
for (col = 0; col < 4; col++)
m2 [row][col] = matTemp [row][col];
}
void translate3D (GLfloat tx, GLfloat ty, GLfloat tz)

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 283

5.11 Rotaciones tridimensionales


{
Matrix4x4 matTransl3D;
/* Inicializa la matriz de traslacin con la matriz identidad. */
matrix4x4SetIdentity (matTransl3D);
matTransl3D [0][3] = tx;
matTransl3D [1][3] = ty;
matTransl3D [2][3] = tz;
/* Concatena la matriz de traslacin con matRot. */
matrix4x4PreMultiply (matTransl3D, matRot);
}
void rotate3D (wcPt3D p1, wcPt3D p2, GLfloat radianAngle)
{
Matrix4x4 matQuaternionRot;
GLfloat axisVectLength = sqrt ((p2.x - p1.x) * (p2.x - p1.x) +
(p2.y - p1.y) * (p2.y - p1.y) +
(p2.z - p1.z) * (p2.z - p1.z));
GLfloat cosA = cos (radianAngle);
GLfloat oneC = 1 - cosA;
GLfloat sinA = sin (radianAngle);
GLfloat ux = (p2.x - p1.x) / axisVectLength;
GLfloat uy = (p2.y - p1.y) / axisVectLength;
GLfloat uz = (p2.z - p1.z) / axisVectLength;
/* Configura la matriz de traslacin para mover p1 al origen. */
translate3D (-p1.x, -p1.y, -p1.z);
/* Inicializa matQuaternionRot con la matriz identidad. */
matrix4x4SetIdentity (matQuaternionRot);
matQuaternionRot
matQuaternionRot
matQuaternionRot
matQuaternionRot
matQuaternionRot
matQuaternionRot
matQuaternionRot
matQuaternionRot
matQuaternionRot

[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
[2][0]
[2][1]
[2][2]

=
=
=
=
=
=
=
=
=

ux*ux*oneC
ux*uy*oneC
ux*uz*oneC
uy*ux*oneC
uy*uy*oneC
uy*uz*oneC
uz*ux*oneC
uz*uy*oneC
uz*uz*oneC

+
+
+
+
+
+

cosA;
uz*sinA;
uy*sinA;
uz*sinA;
cosA;
ux*sinA;
uy*sinA;
ux*sinA;
cosA;

/* Combina matQuaternionRot con la matriz de traslacin. */


matrix4x4PreMultiply (matQuaternionRot, matRot);
/* Configura la matriz matTransl3D inversa y la concatena con el
* producto de las dos matrices anteriores.*/

283

CAP05_HEARN_1P.qxd

284

27/09/2005

21:07

Pgina 284

CAPTULO 5 Transformaciones geomtricas

translate3D (p1.x, p1.y, p1.z);


}
void displayFcn (void)
{
/* Introducir los parmetros de rotacin. */
/* Inicializa matRot con la matriz identidad: */
matrix4x4SetIdentity (matRot);
/* Pasar los parmetros de rotacin al procedimiento rotate3D. */
/* Mostrar el objeto girado. */
}

5.12 CAMBIO DE ESCALA TRIDIMENSIONAL


La expresin de la matriz para la transformacin de cambio de escala tridimensional de una posicin P =
(x, y, z) relativa al origen de coordenadas es una simple extensin de un cambio de escala bidimensional.
Simplemente incluimos el parmetro para el cambio de escala de la coordenada-z en la matriz de transformacin:
x sx
y 0
=
z 0

1 0

0
sy

0
0

0
0

sz
0

0 x
0 y

0 z

1 1

(5.110)

La transformacin de cambio de escala tridimensional para una posicin de un punto puede representarse
como:
P = S P
(5.111)
donde a los parmetros de escala sx, sy y sz, se les asignan cualesquiera valores positivos. Las expresiones
explcitas para la transformacin de cambio de escala respecto del origen son:
x = x sx,

y = y sy,

z = z sz

(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 1 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: sx = sy = sz. 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.
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 fija seleccionada (xf, yf, zf) usando la siguiente secuencia de transformaciones.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 285

5.12 Escalado tridimensional

285

FIGURA 5.50. Duplicar el tamao de un objeto con la transformacin 5.110 tambin mueve el objeto alejndolo del origen.

(xF, yF, zF)


z

Posicin original

(xF, yF, zF)


z

(a)

Traslacin
(b)

Escala
(c)

(xF, yF, zF)

(xF, yF, zF)

Traslacin inversa
(d)

FIGURA 5.51. Secuencia de transformaciones para el cambio de escala de un objeto


respecto a un punto fijo seleccionado usando la Ecuacin 5.110.

(1)
(2)

Trasladar el punto fijo al origen.


Aplicar la transformacin de cambio de escala respeto al origen de coordenadas usando la Ecuacin
5.110.
(3)
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:
sx

0
T( x f , y f , z f ) S(sx , sy , sz ) T( x f , y f , z f ) =
0

sy

sz

(1 sx ) x f

(1 sy ) y f
(1 sz )z f

(5.113)

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.

CAP05_HEARN_1P.qxd

286

27/09/2005

21:07

Pgina 286

CAPTULO 5 Transformaciones geomtricas

class wcPt3D
{
private:
GLfloat x, y, z;
public:
/* Constructor predeterminado:
* Inicializa la posicin en (0.0, 0.0, 0.0).
*/
wcPt3D ( ) {
x = y = z = 0.0;
}
setCoords (GLfloat xCoord, GLfloat yCoord, GLfloat zCoord) {
x = xCoord;
y = yCoord;
z = zCoord;
}
GLfloat getx ( ) const {
return x;
}
GLfloat gety ( ) const {
return y;
}
GLfloat getz ( ) const {
return z;
}
};
typedef float Matrix4x4 [4][4];
void scale3D (GLfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt)
{
Matrix4x4 matScale3D;
/* Inicializa la matriz de cambio de escala con la matriz identidad. */
matrix4x4SetIdentity (matScale3D);
matScale3D
matScale3D
matScale3D
matScale3D
matScale3D
matScale3D
}

[0][0]
[0][3]
[1][1]
[1][3]
[2][2]
[2][3]

=
=
=
=
=
=

sx;
(1 - sx) * fixedPt.getx ( );
sy;
(1 - sy) * fixedPt.gety ( );
sz;
(1 - sz) * fixedPt.getz ( );

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 287

5.13 Transformaciones compuestas tridimensionales

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 (sx, sy y sz) 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.

5.13 TRANSFORMACIONES COMPUESTAS TRIDIMENSIONALES


Al igual que en las transformaciones bidimensionales, formamos una transformacin tridimensional multiplicando las representaciones matriciales para las operaciones individuales en la secuencia de transformacin.
Cualquiera de las secuencias de transformacin bidimensionales vistas en la Seccin 5.4, tales como el cambio de escala en direcciones sin coordenadas, puede llevarse a cabo en el espacio tridimensional.
Podemos implementar una secuencia de transformaciones concatenando las matrices individuales de derecha a izquierda o de izquierda a derecha, dependiendo del orden en el que las representaciones de matrices se
hayan especificado. Por supuesto, el trmino del extremo derecho en un producto de matrices es siempre la
primera transformacin que hay que aplicar al objeto y el trmino situado ms a la izquierda es siempre la
ltima transformacin. Necesitamos usar este orden para el producto de matrices porque las posiciones de
coordenadas se representan como vectores columna de cuatro elementos, los cuales se premultiplican con la
matriz de transformacin compuesta de 4 por 4.
El siguiente programa ofrece rutinas de ejemplo para la construccin de matrices de transformacin compuestas tridimensionales. Las tres transformaciones geomtricas bsicas se combinan en un orden determinado para producir una nica matriz compuesta, la cual se inicializa con la matriz identidad. En este ejemplo,
primero se realiza la rotacin, luego el cambio de escala y, por ltimo, la traslacin. Elegimos una evaluacin
de izquierda a derecha de la matriz compuesta, de tal forma que las transformaciones se van llamando en el
orden en el que van a ser aplicadas. As, a medida que se construye cada matriz, se concatena por el lado
izquierdo de la matriz compuesta actual para formar el producto actualizado de la matriz.

class wcPt3D {
public:
GLfloat x, y, z;
};
typedef GLfloat Matrix4x4 [4][4];
Matrix4x4 matComposite;
/* Construye la matriz identidad 4 por 4. */
void matrix4x4SetIdentity (Matrix4x4 matIdent4x4)
{
GLint row, col;
for (row = 0; row < 4; row++)
for (col = 0; col < 4 ; col++)
matIdent4x4 [row][col] = (row == col);
}
/* Premultiplica la matriz m1 por la matriz m2, almacena el resultado en m2. */
void matrix4x4PreMultiply (Matrix4x4 m1, Matrix4x4 m2)
{

CAP05_HEARN_1P.qxd

288

27/09/2005

21:07

Pgina 288

CAPTULO 5 Transformaciones geomtricas

GLint row, col;


Matrix4x4 matTemp;
for (row = 0; row < 4; row++)
for (col = 0; col < 4 ; col++)
matTemp [row][col] = m1 [row][0] * m2 [0][col] + m1 [row][1] *
m2 [1][col] + m1 [row][2] * m2 [2][col] +
m1 [row][3] * m2 [3][col];
for (row = 0; row < 4; row++)
for (col = 0; col < 4; col++)
m2 [row][col] = matTemp [row][col];
}
/* Procedimiento para generar la matriz de traslacin 3D. */
void translate3D (GLfloat tx, GLfloat ty, GLfloat tz)
{
Matrix4x4 matTransl3D;
/* Inicializa la matriz de traslacin con la matriz identidad. */
matrix4x4SetIdentity (matTransl3D);
matTransl3D [0][3] = tx;
matTransl3D [1][3] = ty;
matTransl3D [2][3] = tz;
/* Concatena matTransl3D con la matriz compuesta. */
matrix4x4PreMultiply (matTransl3D, matComposite);
}
/* Procedimiento para generar una matriz de rotacin de cuaternios. */
void rotate3D (wcPt3D p1, wcPt3D p2, GLfloat radianAngle)
{
Matrix4x4 matQuatRot;
float axisVectLength = sqrt ((p2.x - p1.x) * (p2.x - p1.x) +
(p2.y - p1.y) * (p2.y - p1.y) +
(p2.z - p1.z) * (p2.z - p1.z));
float cosA = cosf (radianAngle);
float oneC = 1 - cosA;
float sinA = sinf (radianAngle);
float ux = (p2.x - p1.x) / axisVectLength;
float uy = (p2.y - p1.y) / axisVectLength;
float uz = (p2.z - p1.z) / axisVectLength;
/* Define la matriz de traslacin para mover p1 al origen
* y concatena la matriz de traslacin con matComposite. */
translate3D (-p1.x, -p1.y, -p1.z);
/* Inicializa matQuatRot con la matriz identidad. */
matrix4x4SetIdentity (matQuatRot);
matQuatRot [0][0] = ux*ux*oneC + cosA;

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 289

5.13 Transformaciones compuestas tridimensionales

matQuatRot
matQuatRot
matQuatRot
matQuatRot
matQuatRot
matQuatRot
matQuatRot
matQuatRot

[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
[2][0]
[2][1]
[2][2]

=
=
=
=
=
=
=
=

ux*uy*oneC
ux*uz*oneC
uy*ux*oneC
uy*uy*oneC
uy*uz*oneC
uz*ux*oneC
uz*uy*oneC
uz*uz*oneC

+
+
+
+
+

uz*sinA;
uy*sinA;
uz*sinA;
cosA;
ux*sinA;
uy*sinA;
ux*sinA;
cosA;

/* Concatena matQuatRot con la matriz compuesta. */


matrix4x4PreMultiply (matQuatRot, matComposite);
/* Construye la matriz de traslacin inversa para p1 y la
* concatena con la matriz compuesta. */
translate3D (p1.x, p1.y, p1.z);
}
/* Procedimiento para generar la matriz de cambio de escala 3D. */
void scale3D (Gfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt)
{
Matrix4x4 matScale3D;
/* Inicializa la matriz de cambio de escala con la matriz identidad. */
matrix4x4SetIdentity (matScale3D);
matScale3D
matScale3D
matScale3D
matScale3D
matScale3D
matScale3D

[0][0]
[0][3]
[1][1]
[1][3]
[2][2]
[2][3]

=
=
=
=
=
=

sx;
(1 - sx) * fixedPt.x;
sy;
(1 - sy) * fixedPt.y;
sz;
(1 - sz) * fixedPt.z;

/* Concatena matScale3D con la matriz compuesta. */


matrix4x4PreMultiply (matScale3D, matComposite);
}
void displayFcn (void)
{
/* Introducir la descripcin del objeto. */
/* Introducir los parmetros de traslacin, rotacin y cambio de escala. */
/* Establecer las rutinas de transformacin de visualizacin 3D. */
/* Inicializar la matriz matComposite con la matriz identidad: */
matrix4x4SetIdentity (matComposite);
/* Invocar a las rutinas de transformacin en el orden en que
* van a ser aplicadas: */
rotate3D (p1, p2, radianAngle); // Primera transformacin: rotacin.
scale3D (sx, sy, sz, fixedPt); // Segunda transformacin: cambio de escala.
translate3D (tx, ty, tz); // Transformacin final: traslacin.
/* Llamada a las rutinas que muestran los objetos transformados. */
}

289

CAP05_HEARN_1P.qxd

290

27/09/2005

21:07

Pgina 290

CAPTULO 5 Transformaciones geomtricas

5.14 OTRAS TRANSFORMACIONES TRIDIMENSIONALES


Adems de la traslacin, la rotacin y el cambio de escala, las otras transformaciones vistas para las aplicaciones bidimensionales son tambin tiles en muchas situaciones tridimensionales. Estas transformaciones
adicionales incluyen la reflexin, la inclinacin y las transformaciones entre sistemas de coordenadas de referencia.

Reflexiones tridimensionales
Una reflexin en un espacio tridimensional puede desarrollarse con respecto a un eje de 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 180 en un espacio cuatridimensional. Cuando el plano de reflexin es un plano de coordenadas
(xy, xz, o yz) 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 e y invariables. La representacin de la matriz para
esta reflexin relativa al plano xy es:

M zreflejada

1
0
=
0

0 0 0
1 0 0
0 1 0

0 0 1

(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 xz, respectivamente. Las reflexiones sobre otros planos pueden obtenerse como una combinacin de rotaciones y reflexiones 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.

M zinclinacin

1
0
=
0

0 sh zx
1 sh zy
0
0

1
0

sh zx zref
sh zy zref

(5.115)

A los parmetros de inclinacin shzx y shzy 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 zref, 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 zref. 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 shzx = shzy = 1 y una posicin de referencia zref = 0. Las matrices de transformacin tridimensional para una inclinacin en el eje x y

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 291

5.15 Transformaciones entre sistemas de coordenadas tridimensionales

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.

z
x

FIGURA 5.53. Un cubo (a) inclinado respecto al origen (b) mediante la matriz de transformacin 5.115,
con shzx = shzy =1.

z
(a)

291

(b)

una inclinacin del eje y es similar a las matrices bidimensionales. Simplemente necesitamos aadir una fila
o una columna para los parmetros de inclinacin de las coordenadas z.

5.15 TRANSFORMACIONES ENTRE SISTEMAS DE


COORDENADAS TRIDIMENSIONALES
En la Seccin 5.8 examinamos las operaciones necesarias para transferir una descripcin de una escena bidimensional desde un sistema de referencia a otro. Las transformaciones de sistemas de coordenadas se emplean en paquetes de grficos por computadora para construir (modelar) escenas e implementar rutinas de
visualizacin tanto para aplicaciones bidimensionales como tridimensionales. Como vimos en la Seccin 5.8,
una matriz de transformacin para transferir la descripcin de una escena bidimensional de un sistema de
coordenadas a otro se construye con operaciones para superponer los ejes de coordenadas de los dos sistemas.
Los mismos procedimientos son aplicables a transformaciones de escenas tridimensionales.
De nuevo consideramos slo marcos de referencia cartesianos y asumimos que un sistema xyz se define con respecto a un sistema xyz. Para transferir las descripciones de las coordenadas xyz al sistema xyz,
primero establecemos una traslacin que lleva el origen de coordenadas xyz a la posicin del origen xyz. A
continuacin se realiza la secuencia de rotaciones que alinea los correspondientes ejes de coordenadas. Si se
usan diferentes escalas en los dos sistemas de coordenadas, una transformacin de cambio de escala tambin
es necesaria para compensar las diferencias en los intervalos de coordenadas.
La Figura 5.54 muestra un sistema de coordenadas xyz con origen en (x0, y0, z0) y vectores unidad de
ejes definidos respecto a un marco de referencia xyz. El origen de coordenadas del sistema xyz se mueve
hasta hacerlo coincidir con el origen xyz usando la matriz de traslacin T(x0, y0, z0). Podemos usar los vectores unidad de ejes para formar la matriz de rotacin del eje de coordenadas:
ux1
u
y1
R=
u
z1
0

ux 2
uy 2

ux 3
uy 3

uz2
0

uz3
0

0
0
0

(5.116)

CAP05_HEARN_1P.qxd

292

27/09/2005

21:07

Pgina 292

CAPTULO 5 Transformaciones geomtricas


y

FIGURA 5.54. Un sistema de coordenadas xyz definido


dentro de un sistema xyz. Una descripcin de una escena es
transferida a la nueva referencia de coordenadas usando
una secuencia de transformacin que superpone el marco
xyz sobre los ejes xyz.

y

uy

(x0, y0, z0)


(0, 0, 0)

ux

x

uz

z
z

la cual transforma los vectores unidad ux, uy y uz dentro de los ejes x, y y z, respectivamente. La secuencia
completa de transformaciones de coordenadas se da entonces con la matriz compuesta R T. Esta matriz
transforma correctamente las descripciones de coordenadas de un sistema cartesiano a otro, incluso si un sistema es a izquierdas y el otro a derechas.

5.16 TRANSFORMACIONES AFINES


Una transformacin de coordenadas de la forma:
x = axxx + axyy + axzz + bx
y = ayxx + ayyy + ayzz + by

(5.117)

z = azxx + azyy + azzz + bz


se llama transformacin afn. Cada una de las coordenadas transformadas x, y y z, es una funcin lineal
del origen de coordenadas x, y y z, y los parmetros aij y bk son constantes determinadas por el tipo de transformacin. Las transformaciones 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 afn es la conversin de descripciones de coordenadas para una
escena de un sistema de referencia a otro, mientras esta transformacin pueda describirse como combinacin
de traslacin y rotacin. Una transformacin afn que slo implica transformacin, rotacin y reflexin conserva los ngulos y longitudes, as como lneas paralelas. Para cada una de estas tres transformaciones, la longitud de la lnea y el ngulo entre cualesquiera dos lneas se mantiene igual despus de la transformacin.

5.17 FUNCIONES DE TRANSFORMACIONES


GEOMTRICAS EN O pen GL
En la biblioteca del ncleo (core) de OpenGL hay disponible una funcin distinta para cada una de las transformaciones geomtricas, y todas las transformaciones se especifican en tres dimensiones. Para llevar a cabo
una traslacin, invocamos la rutina de traslacin y establecemos los componentes para el vector de traslacin
tridimensional. En la funcin de rotacin, especificamos el ngulo y la orientacin para el eje de rotacin que
hace la interseccin con el origen de coordenadas. Y una funcin de cambio de escala se usa para establecer
las tres coordenadas de los factores de escala relativos al origen de coordenadas. En cada caso, la rutina de
transformacin usa una matriz de 4 por 4 que se aplica a las coordenadas de los objetos a los que se hace referencia despus de la llamada a la transformacin.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 293

5.17 Funciones de transformaciones geomtricas en OpenGL

293

Transformaciones bsicas en OpenGL


Una matriz de traslacin de 4 por 4 se construye con la siguiente rutina:
glTranslate* (tx, ty, tz);

A los parmetros de traslacin tx, 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 haya invocado a esta funcin. Por ejemplo, para trasladar posiciones definidas de coordenadas 25 unidades en la direccin x y 10 unidades en la direccin y utilizamos la instruccin
glTranslatef (25.0, -10.0, 0.0);

De manera similar, una matriz de rotacin de 4 por 4 se genera con:


glRotate* (theta, vx, vy, vz);

donde el vector v = (vx,vy,vz) 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 theta 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 cuaternales 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 f 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.0, -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.

Operaciones con matrices en OpenGL


En la Seccin 2.9 vimos que la rutina g1MatrixMode se usaba para establecer el modo proyeccin, el cual
designaba la matriz que iba a ser usada para la transformacin de proyeccin. Esta transformacin determina
cmo una escena va a proyectarse sobre la pantalla. Usamos la misma rutina para fijar la matriz para las transformaciones geomtricas. Pero en este caso la matriz es referenciada como matriz modelview (vista de modelo), y se emplea para almacenar y combinar las transformaciones geomtricas. Adems se usa para combinar
las transformaciones geomtricas con la transformacin de un sistema de coordenadas de visualizacin.
Especificamos el modo modelview con la instruccin:
glMatrixMode (GL_MODELVIEW);

CAP05_HEARN_1P.qxd

294

27/09/2005

21:07

Pgina 294

CAPTULO 5 Transformaciones geomtricas

la cual designa la matriz modelview de 4 por 4 como la matriz actual. Las rutinas de transformacin de
OpenGL discutidas en la seccin anterior se usan para modificar la matriz modelview, la cual se aplica para
transformar posiciones de coordenadas en una escena. Otros dos modos que podemos establecer con la funcin g1MatrixMode son el modo textura (texture 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. El
argumento predeterminado para la funcin g1MatrizMode es GL_MODELVIEW.
Una vez que estamos en el modo modelview (o cualquier otro modo) una llamada a una rutina de transformacin genera una matriz que se multiplica por la matriz actual para ese modo. Adems, podemos asignar
valores a los elementos de una matriz actual, y hay dos funciones en las bibliotecas de OpenGL para este propsito. Con la siguiente funcin, asignamos la matriz identidad a la matriz actual.
glLoadIdentity ( );

Alternativamente, podemos asignar otros valores a los elementos de una matriz actual usando:
glLoadMatrix* (elements16);

Un subndice simple, un array de 16 elementos de valores en punto flotante, se especifica con el parmetro elements16, y un cdigo de sufijo, f o d, se usa para designar tipos de datos. Los elementos en este array
deben especificarse por columnas. Es 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 (GL_MODELVIEW);
GLfloat elems [16];
GLint k;
for (k = 0; k < 16; k++)
elems [k] = float (k);
glLoadMatrixf (elems);

que da lugar a la matriz:


0.0
1.0
M=
2.0

3.0

4.0 8.0
5.0 9.0
6.0 10.0
7.0 11.0

12.0
13.0
14.0

15.0

Tambin podemos concatenar una matriz especifica con la matriz actual:


glMultMatrix* (otherElements16);

De nuevo, el cdigo de sufijo es o bien f o d, y el parmetro otherElements16 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 g1MultMatrix, y este producto sustituye a la matriz actual.
As, asumiendo que la matriz actual es la matriz modelview, 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 otherElements16 en la instruccin g1MultMatrix anterior.
La funcin g1MultMatrix tambin puede usarse para establecer cualquier secuencia de transformaciones con matrices definidas individualmente. Por ejemplo,

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 295

5.17 Funciones de transformaciones geomtricas en OpenGL

295

glMatrixMode (GL_MODELVIEW);
glLoadIdentity ( ); // Establece la matriz actual como la matriz identidad.
glMultMatrixf (elemsM2); // Postmultiplica la matriz identidad con la matriz M2.
glMultMatrixf (elemsM1); // Postmultiplica M2 con la matriz M1.

genera la siguiente matriz modelview actual.


M = M2 M1
La primera transformacin que hay que aplicar en esta secuencia es la ltima especificada en el cdigo.
As, 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 mjk, en OpenGL, es una referencia al elemento de la columna j y la fila
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 elemenos, con un solo subndice y recordando que los elementos deben enumerarse por columnas.

Pilas de matrices en OpenGL


Para cada uno de los cuatro modos (modelview, proyeccin, textura y color) que podemos seleccionar con la
funcin g1matrixMode, OpenGL mantiene una pila de matrices. Inicialmente, cada pila contiene slo la
matriz identidad. En cualquier momento durante el procesamiento de una escena, la matriz en la cima de cada
pila es la matriz actual para dicho modo. Despus de que hayamos especificado las transformaciones geomtricas y de visualizacin, la cima de la pila de matrices de modelview es una matriz compuesta de 4 por
4 que combina las transformaciones de visualizacin y las diversas transformaciones geomtricas que queramos aplicar a la escena. En algunos casos, podemos querer crear mltiples vistas y secuencias de transformacin, y luego guardar la matriz compuesta para cada una. Por tanto, OpenGL soporta una pila de modelview
de profundidad al menos 32, y algunas implementaciones deben permitir ms de 32 matrices que guardar en
la pila de modelview. Podemos determinar el nmero de posiciones disponibles en la pila de modelview para
una implementacin particular de OpenGL con
glGetIntegerv (GL_MAX_MODELVIEW_STACK_DEPTH, stackSize);

que devuelve un nico valor entero al array stackSize. 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: GL_MAX_PROJECTION_STACK_DEPTH, GL_MAX_TEXTURE_STACK_DEPTH, o GL_MAX\_COLOR\_STACK\ _DEPTH.
Tambin podemos averiguar cuntas matrices hay actualmente en la pila con:
glGetIntegerv (GL_MODELVIEW_STACK_DEPTH, numMats);

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-

CAP05_HEARN_1P.qxd

296

27/09/2005

21:07

Pgina 296

CAPTULO 5 Transformaciones geomtricas

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 repetidas llamadas a g1LoadIdentity.
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 ( );

Esto nos da matrices duplicadas en las dos posiciones de la cima de la pila. La otra funcin de la pila es:
glPopMatrix ( );

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.

Ejemplos de programas de transformaciones geomtricas OpenGL


En el siguiente fragmento de cdigo, aplicamos cada una de las transformaciones geomtricas bsicas, una
cada vez, a un rectngulo. Inicialmente, la matriz de modelview es la matriz identidad y muestra un rectngulo azul (gris claro en las figuras). A continuacin, se establece el color actual como rojo, se especifican los
parmetros de traslacin bidimensionales y se muestra el rectngulo rojo (gris ms ocuro en las figuras) trasladado (Figura 5.55).

200
150
100
Posicin original

Posicin
trasladada
50

150

100

50

50

100

150

200

FIGURA 5.55. Traslacin de un rectngulo


usando la funcin OpenGL g1Translatef (200.0, 50.0, 0.0).

200

150

100

50

Posicin girada

150

100

Posicin original

50

50

100

150

200

FIGURA 5.56. Rotacin de un rectngulo


sobre el eje x usando la funcin de
OpenGL g1Rotatef (90.0, 0.0,
1.0).

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 297

5.17 Funciones de transformaciones geomtricas en OpenGL

297

200
150
Posicin escalada
y reflejada
Posicin original
50

150 100

50

50

100

150

200

FIGURA 5.57. Cambio de escala y reflexin de un rectngulo usando la funcin


OpenGL g1Scalef (0.5, 1.0,
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.

glMatrixMode (GL_MODELVIEW);
glColor3f (0.0, 0.0, 1.0);
glRecti (50, 100, 200, 150); // Muestra un rectngulo azul.
glColor3f (1.0, 0.0, 0.0);
glTranslatef (-200.0, -50.0, 0.0); // Establece los parmetros de traslacin.
glRecti (50, 100, 200, 150); // Muestra un rectngulo rojo trasladado.
glLoadIdentity ( ); // Carga la matriz identidad como matriz actual.
glRotatef (90.0, 0.0, 0.0, 1.0); // Establece una rotacin de 90 grados alrededor
// del eje z .
glRecti (50, 100, 200, 150); // Muestra un rectngulo rojo girado.
glLoadIdentity ( ); // Carga la matriz identidad como matriz actual.
glScalef (-0.5, 1.0, 1.0); // Establece los parmetros de reflexin y escala.
glRecti (50, 100, 200, 150); // Muestra un rectngulo rojo transformado.

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 g1LoadIdentity.
glMatrixMode (GL_MODELVIEW);
glColor3f (0.0, 0.0, 1.0); // Establece el color actual en azul.

CAP05_HEARN_1P.qxd

298

27/09/2005

21:07

Pgina 298

CAPTULO 5 Transformaciones geomtricas

glRecti (50, 100, 200, 150); // Presenta un rectngulo azul.


glPushMatrix ( ); // Hace una copia de la matriz identidad (superior).
glColor3f (1.0, 0.0, 0.0); // Establece el color actual en rojo.
glTranslatef (-200.0, -50.0, 0.0); // Establece los parmetros de traslacin.
glRecti (50, 100, 200, 150); // Muestra un rectngulo rojo trasladado.
glPopMatrix ( ); // Recorre la matriz de traslacin.
glPushMatrix ( ); // Hace una copia de la matriz identidad (superior).
glRotatef (90.0, 0.0, 0.0, 1.0); // Define rotacin de 90 grados sobre el eje z.
glRecti (50, 100, 200, 150); // Muestra un rectngulo rojo girado.
glPopMatrix ( ); // Recorre la matriz de rotacin.
glScalef (-0.5, 1.0, 1.0); // Establece los paramtros de reflexin y escala.
glRecti (50, 100, 200, 150); // Muestra un rectngulo rojo 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.

class wcPt3D {
public:
GLfloat x, y, z;
};
\* Procedimiento para generar una matriz para girar alrededor de
* un eje definido por los puntos p1 y p2.*/
void rotate3D (wcPt3D p1, wcPt3D p2, GLfloat thetaDegrees)
{
/* Establece las componentes del vector de rotacin segn el eje. */
float vx = (p2.x - p1.x);
float vy = (p2.y - p1.y);
float vz = (p2.z - p1.z);
/* Especifica la secuencia traslacin-rotacin-traslacin en orden inverso: */
glTranslatef (p1.x, p1.y, p1.z); // Mueve p1 a su posicin original.
/* Rotacin alrededor del eje que pasa por el origen: */
glRotatef (thetaDegrees, vx, vy, vz);
glTranslatef (-p1.x, -p1.y, -p1.z); // Traslada p1 al origen.
}

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 299

5.18 Resumen

299

/* Procedimiento para generar una matriz para la transformacin de cambio


* de escala con respecto a un punto fijo arbitrario.
*/
void scale3D (GLfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt)
{
/* Especifica la secuencia traslacin-escalado-traslacin en orden inverso: */
/* (3) Traslada el punto fijo a su posicin original: */
glTranslatef (fixedPt.x, fixedPt.y, fixedPt.z);
glScalef (sx, sy, sz); // (2) Escalado con respecto al origen.
/* (1) Traslada un punto fijo al origen de coordenadas: */
glTranslatef (-fixedPt.x, -fixedPt.y, -fixedPt.z);
}
void displayFcn (void)
{
/* Introducir la descripcin del objeto. */
/* Definir las rutinas de visualizacin y transformacin 3D. */
/* Mostrar el objeto. */
glMatrixMode (GL_MODELVIEW);
/* Introducir los parmetros de traslacin tx, ty, tz. */
/* Introducir los puntos que definen, p1 y p2, el eje de rotacin. */
/* Introducir en grados el ngulo de rotacin. */
/* Introducir los parmetros de cambio de escala: sx, sy, sz y fixedPt. */
/* Invocar las transformaciones geomtricas en orden inverso: */
glTranslatef (tx, ty, tz); // Transformacin final: traslacin.
scale3D (sx, sy, sz, fixedPt); // Segunda transformacin: cambio de escala.
rotate3D (p1, p2, thetaDegrees); // Primera transformacin: rotacin.
/* Llamar a la rutinas que muestran los 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. Elegimos la repre-

CAP05_HEARN_1P.qxd

300

27/09/2005

21:07

Pgina 300

CAPTULO 5 Transformaciones geomtricas

sentacin de matriz columna para puntos de coordenadas porque ese es el convenio matemtico estndar, y
muchos paquetes 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 coeficiente homogneo se le asigna el valor 1.
Las transformaciones compuestas se forman como 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 slidorgido, mientras que los ngulos y las distancias se mantienen invariables. Adems, la submatriz 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 vectores
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.
Otras 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 xy, la reflexin se obtiene como
una rotacin en un plano que es perpendicular al plano xy. 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 lnea 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 vectores de eje para un marco de referencia respecto al marco de coordenadas de referencia
original. En un sistema bidimensional, un vector define completamente las direcciones del eje de coordenadas. Pero, en un sistema tridimensional, hay 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 afines. 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 bidimensionales, podemos usar operaciones de rasterizacin para
llevar a cabo traslaciones rpidas, reflexiones y rotaciones en mltiplos de 90. 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. Adems
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 tipos de transformacin que se usan en las aplicaciones grficas. Podemos usar una funcin de consul-

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 301

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 OpenGL 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

Descripcin

glTranslate*

Especifica los parmetros de traslacin.

glRotate*

Especifica los parmetros para la rotacin sobre cualquier eje a travs del origen.

glScale*

Especifica los parmetros de escala respecto al origen de coordenadas.

glMatrixMode

Especifica la matriz actual para transformaciones de visualizacin geomtrica,


transformaciones de proyeccin, transformaciones de textura o transformaciones
de color.

glLoadIdentity

Establece la matriz identidad actual.

glLoadMatrix*(elems);

Establece los elementos de la matriz actual.

glMultMatrix*(elems);

Postmultiplica la matriz actual con la matriz especificada.

glGetIntegerv

Obtiene la profundidad mxima de la pila o el nmero de matrices en la pila para


el modo de matriz seleccionado.

glPushMatrix

Copia la cima de la pila y almacena la copia en la segunda posicin de la pila.

glPopMatrix

Borra la cima de la pila y mueve la segunda matriz a la cima de la pila.

glPixelZoom

Especifica los parmetros de escala bidimensionales para operaciones de rasterizacin.

REFERENCIAS
Para tcnicas adicionales que implican matrices y transformaciones geomtricas, vase Glassner (1990), Arvo
(1991), Kirk (1992), Heckbert (1994), y Paeth (1995). Exposiciones acerca de coordenadas homogneas en
grficos por computadora se pueden encontrar en Blinn y Newell (1978) y en Blinn (1993, 1996, y 1998).
Adicionalmente, ejemplos de programas usando funciones de transformaciones geomtricas en OpenGL
se dan en Woo, Neider, Davis, y Shreiner (1999). Ejemplos de programas para las funciones de transformaciones geomtricas en OpenGL estn tambin disponibles en el tutorial del sitio web de Nate Robins:
http://www.cs.utah.edu/narobins/opengl.html. 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 xy. Los pequeos ngulos van a ser usados para cada paso sucesivo en la rotacin, y las aproximacio-

CAP05_HEARN_1P.qxd

302

27/09/2005

21:07

Pgina 302

CAPTULO 5 Transformaciones geomtricas


nes para las funciones de seno y coseno van a ser usadas para agilizar los clculos. Para evitar la acumulacin
excesiva de errores de redondeo, reestablecer los valores de coordenadas originales para el objeto al principio de
cada nueva revolucin.

5.2

Demostrar que la composicin de dos rotaciones es aditiva mediante la concatenacin de representaciones de


matrices para R(1) y R(2) para obtener

R(1) R(2) = R(1 + 2)

5.3

Modificar la matriz de transformacin bidimensional (5.39) para hacer un cambio de escala en una direccin arbitraria, con el fin de incluir coordenadas para cualquier punto fijo de cambio de escala especificado (xf, yf).

5.4

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 sucesivas.
Dos cambios de escala sucesivos.

5.5

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.

5.6

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.

5.7

Modificar el programa de ejemplo en la Seccin 5.4 de tal forma que los parmetros de transformacin puedan
especificarse como entradas de usuario.

5.8

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.

5.9

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.

5.10

Demostrar que la matriz de transformacin (5.55) para una reflexin sobre la lnea y = x, es equivalente a una reflexin relativa al eje x seguida de una rotacin de 90 en el sentido contrario a las agujas del reloj.

5.11

Demostrar que la matriz de transformacin (5.56) para una reflexin sobre la lnea y = x, es equivalente a una
reflexin relativa al eje y seguida de una rotacin de 90 en el sentido contrario a las agujas del reloj.

5.12

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.

5.13

Determinar la forma de una matriz de transformacin bidimensional para una operacin de reflexin sobre cualquier lnea: y = mx + b.

5.14

Demostrar que dos reflexiones sucesivas sobre cualquier lnea en el plano xy que intersecta con el origen de coordenadas son equivalentes a una rotacin en el plano xy sobre el origen.

5.15

Determinar una secuencia de transformaciones bsicas que sea equivalente a la matriz de inclinacin en la direccin-x (5.57).

5.16

Determinar una secuencia de transformaciones bsicas que sea equivalente a la matriz de inclinacin en la direccin-y (5.61).

5.17

Establecer un procedimiento de inclinacin para mostrar caracteres en cursiva bidimensionales dado un vector
como fuente de definicin. Es decir, todos los tamaos de los caracteres en esta fuente se definen con segmentos
en lnea 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.

5.18

Deducir las siguientes ecuaciones para transformar un punto de coordenadas P = (x, 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 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.

CAP05_HEARN_1P.qxd

27/09/2005

21:07

Pgina 303

Ejercicios

x = x cos + y sin

303

y = x sin + y cos

5.19

Escribir un procedimiento para calcular los elementos de una matriz para la transformacin de descripciones de
objetos de un sistema de coordenadas cartesiano bidimensional a otro. El segundo sistema de coordenadas va a
definirse con un punto origen P0 y un vector V que da la direccin del eje positivo y para este sistema.

5.20

Establecer 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.

5.21

Determinar los resultados de desarrollar dos transferencias de bloque sucesivas dentro de un mismo rea de un
bfer de imagen usando varias operaciones booleanas.

5.22

Cules son los resultados de desarrollar dos transferencias de bloque sucesivas dentro del mismo rea de un bfer
de imagen usando operaciones aritmticas binarias?

5.23

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).

5.24

Escribir una rutina para implementar rotaciones en incrementos de 90 en transferencias de bloque de un bfer de
imagen.

5.25

Escriba una rutina para implementar rotaciones para cualquier ngulo especificado en una transferencia de bloque
de un bfer de imagen.

5.26

Escriba una rutina para implementar el cambio de escala como una transformacin de rasterizacin de un bloque
de pxeles.

5.27

Demostrar que la matriz de rotacin 5.102 es igual a la matriz compuesta Ry() Rx().

5.28

Evaluando los trminos de la Ecuacin 5.106, deducir los elementos para la matriz de rotacin general dada en la
Ecuacin 5.107.

5.29

Probar que una matriz de rotacin cuaternal 5.107 reduce la matriz de representacin en la Ecuacin 5.74 cuando
el eje de rotacin es el eje de coordenadas z.

5.30

Probar que la Ecuacin 5.109 es equivalente a la transformacin de rotacin general dada en la Ecuacin 5.97.

5.31

Usando identidades trigonomtricas, deducir los elementos de la matriz de rotacin cuaternal 5.108 a partir de la
expresin 5.107.

5.32

Desarrollar un procedimiento para animar un objeto tridimensional rotndolo incrementalmente alrededor de un


eje especificado. Usar aproximaciones apropiadas para las ecuaciones trigonomtricas con el fin de acelerar los
clculos, y reestablecer el objeto a su posicin original despus de cada revolucin completa sobre el eje.

5.33

Deducir la matriz de transformacin tridimensional para el cambio de escala de un objeto mediante el factor de
escala s en la direccin definida por los cosenos de direccin , y .

5.34

Desarrollar una rutina para reflejar un objeto tridimensional sobre un plano arbitrario seleccionado.

5.35

Escribir un procedimiento para inclinar un objeto tridimensional con respecto a cualquiera de los tres ejes de coordenadas, usando valores de entrada para los parmetros de inclinacin.

5.36

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.

5.37

Implementar el programa de ejemplo de la Seccin 5.17 de tal forma que las rutinas de transformaciones geomtricas tridimensionales OpenGL se apliquen al tringulo bidimensional mostrado en la Figura 5.15(a), para producir la transformacin mostrada en la parte (b) de dicha figura.

5.38

Modificar el programa del ejercicio anterior para que la secuencia de transformacin se pueda aplicar a cualquier
polgono bidimensional, cuyos vrtices sean especificados como entradas de usuario.

5.39

Modificar el ejemplo del programa anterior para que el orden de las secuencias de transformaciones geomtricas
pueda especificarse como entradas de usuario.

5.40

Modificar el ejemplo del programa anterior para que los parmetros de la transformacin geomtrica se especifiquen como entradas de usuario.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 304

CAPTULO 6

Visualizacin bidimensional

Una escena que representa un jardn con colibrs pintada por el artista John Derry de Time Arts, Inc., utilizando una
tableta grfica con un lapicero sensible a la presin e inalmbrico. (Cortesa de Wacom Technology Corporation.)

CAP06_HEARN_1P.qxd

6.1
6.2
6.3
6.4
6.5

28/09/2005

10:49

Pgina 305

Pipeline de visualizacin bidimensional


La ventana de recorte
Normalizacin y transformaciones de visor
Funciones de visualizacin bidimensional de
OpenGL
Algoritmos de recorte

6.6
6.7
6.8
6.9
6.10
6.11

Recorte de puntos bidimensionales


Recorte de lneas bidimensionales
Recorte de reas de relleno de polgonos
Recorte de curvas
Recorte de texto
Resumen

En el Captulo 2, presentamos brevemente los conceptos y las funciones de visualizacin bidimenional. Ahora
examinaremos con ms detalle los procedimientos para mostar vistas de una imagen bidimensional 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 xy 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 bidimensional 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.

6.1 PIPELINE DE VISUALIZACIN BIDIMENSIONAL


Un parte de una escena bidimensional que se ha seleccionado para su visualizacin se denomina ventana de
recorte (clipping), porque todas las partes de la escena situadas fuera de la parte seleccionada se recortan.
La nica parte de la escena que se muestra en la pantalla es la que se encuentra dentro de la ventana de recorte. A veces la ventana de recorte se denomina ventana universal o ventana de visualizacin. Y, alguna vez, los
sistemas grficos se refieren a la ventana de recorte simplemente como la ventana, pero se utilizan tantas
ventanas en los computadores que necesitamos distinguirlas. Por ejemplo, un sistema de gestin de ventanas
puede crear y manipular varias zonas en una pantalla de video, cada una de las cuales se denomina ventana, para la visualizacin de grficos y de texto (Figura 6.1). Por lo que, siempre utilizaremos el trmino ventana de recorte para referirnos a una parte seleccionada de una escena que se convierte, en definitiva en patrones de pxeles dentro de una ventana de visualizacin en un monitor de video. Los paquetes grficos tambin
nos permiten controlar el emplazamiento dentro de la ventana de visualizacin utilizando otra ventana llamada visor (viewport). Los objetos que se encuentran dentro de la ventana de recorte se mapean al visor, y es
el visor el que se posiciona entonces dentro de la ventana de visualizacin. La ventana de recorte selecciona
qu queremos ver; el visor indica dnde se debe ver en el dispositivo de salida.

CAP06_HEARN_1P.qxd

306

28/09/2005

10:49

Pgina 306

CAPTULO 6 Visualizacin bidimensional

FIGURA 6.1. Una pantalla de vdeo mostrando mltiples y


simultneas ventanas de visualizacin. (Cortesa de Sun
Microsystems.)

Ventana de recorte

ywmax

Visor

yvmax

ywmin

yvmin
xwmin

xwmax

Coordenadas universales

xvmin

xvmax

Coordenadas del visor

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.
Habitualmente, 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

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 307

6.2 La ventana de recorte

MC

Construir la escena en
coordenadas universales
usando transformaciones
de coordenadas de
modelado

WC

Convertir las
coordenadas
universales
en
coordenadas de
visualizacin

VC

Transformar las
coordenadas de
visualizacin en
coordenadas normalizadas

NC

Mapear las
coordenadas
normalizadas a las
coordenadas del
dispositivo

307

DC

FIGURA 6.3. Pipeline de transformacin de visualizacin bidimensional.

coordenadas universales, podramos establecer un sistema independiente bidimensional de referencia de


coordenadas de visualizacin 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 subrutinas de recorte. Algunos sistemas utilizan coordenadas normalizadas que varan de 0 a1, y otros entre
1 y 1. 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.

6.2 LA VENTANA DE RECORTE


Para lograr un efecto de visualizacin particular en un programa de aplicacin, podramos disear nuestra propia ventana de recorte con cualquier forma, tamao y orientacin que elijamos. Por ejemplo, podramos querer utilizar un patrn de estrellas, una elipse, o una figura con lmites definidos mediante splines como ventana de recorte. Pero recortar una escena utilizando un polgono cncavo o una ventana de recorte con lmites
no lineales requiere ms procesamiento que recortar con un rectngulo. Necesitamos realizar ms clculos
para determinar dnde un objeto intersecta con un crculo que para encontrar dnde intersecta con una lnea
recta. Las aristas de ventana ms simples para recortar son las lneas rectas que son paralelas a los ejes de
coordenadas. Por tanto, los paquetes grficos habitualmente slo permiten ventanas de recorte rectangulares
alineadas con los ejes x e y.
Si queremos alguna otra forma para las ventanas de recorte, entonces debemos implementar algoritmos y
transformaciones de coordenadas particulares. O podramos simplemente editar la imagen para producir una
cierta forma para el marco de visualizacin de la escena. Por ejemplo, podramos adornar los bordes de una
imagen con cualquier patrn superponiendo polgonos rellenos con el color de fondo. De este modo, podramos generar cualquier efecto en los bordes o incluso incluir agujeros interiores en la imagen.
Las ventanas de recorte rectangulares en posicin estndar se definen fcilmente, proporcionando las coordenadas de dos esquinas opuestas del rectngulo. Si quisiramos obtener una vista rotada de una escena,
podramos definir una ventana de recorte en un sistema de coordenadas de visualizacin rotado o, de forma
equivalente, podramos rotar la escena en coordenadas universales. Algunos sistemas proporcionan opciones
para seleccionar un marco de visualizacin bidimensional rotado pero, habitualmente, la ventana de recorte
se debe definir en coordenadas universales.

CAP06_HEARN_1P.qxd

308

28/09/2005

10:49

Pgina 308

CAPTULO 6 Visualizacin bidimensional

Ventana de recorte en coordenadas de visualizacin


Una forma general de realizar la transformacin de visualizacin bidimensional consiste en establecer un sistema de coordenadas de visualizacin, dentro del sistema de coordenadas universales. El sistema de referencia de visualizacin proporciona una referencia para especificar una ventana de recorte rectangular con cualquier orientacin y posicin, como se muestra en la Figura 6.4. Para obtener una vista de la escena en el sistema de coordenadas universales como la determinada por la ventana de recorte de la Figura 6.4, slo necesitamos transformar la descripcin de la escena en coordenadas de visualizacin. Aunque muchos paquetes
grficos no proporcionan funciones para especificar una ventana de recorte en un sistema de coordenadas bidimensional de visualizacin, esta es la manera estndar de definir una regin de recorte de una escena tridimensional.
Elegimos un origen para un sistema de coordenadas bidimensional de visualizacin en alguna posicin P0
= (x0, y0) del universo, y podemos establecer la orientacin empleando un vector V en coordenadas universales que defina la direccin de yvista. El vector V se denomina vector de orientacin bidimensional. Un mtodo alternativo para especificar la orientacin del sistema de referencia de visualizacin consiste en
proporcionar un ngulo de rotacin relativo al eje x o al eje y del sistema de referencia universal. A partir de
este ngulo de rotacin, podemos entonces obtener el vector de orientacin. Una vez que hemos establecido
los parmetros que definen el sistema de coordenadas de visualizacin, utilizamos los procedimientos de la
Seccin 5.8 para transformar la descripcin de la escena al sistema de visualizacin. Esto implica una secuencia de transformaciones equivalente a superponer el sistema de referencia de visualizacin sobre el sistema
universal.
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 = (vx, vy) y u = (ux, uy)
de los ejes yview y xview, 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 xvista e yvista con los ejes universales xw e yw.
Las posiciones de los objetos en coordenadas universales se convierten entonces en coordenadas de visualizacin con la matriz compuesta de transformacin bidimensional
MWC,VC = R T

(6.1)

donde T es la matriz de traslacin que lleva el origen de visualizacin P0 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 esta transformacin de coordenadas.

Ventana de recorte en coordenadas universales


En una biblioteca de programacin de grficos se proporciona habitualmente una subrutina para definir una
ventana de recorte estndar en coordenadas universales. Simplemente especificamos dos posiciones en coordevis

ta

y universal
Ventana
de recorte

y0
vis

ta

x0

x universal

Coordenadas universales

FIGURA 6.4. Una ventana de recorte rotada definida en coordenadas de


visualizacin.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 309

6.3 Transformaciones de visor y normalizacin

309

y
y
universal vista

y
universal
yv

ist

y0

x0

x universal
xv

x vista
x universal

ist

(b)

(a)

y
universal
V

y
universal

Ventana de recorte

y0
x universal
x0 x universal
(a)

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.

(b)

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 subrutinas de
visualizacin hacia el dispositivo de salida.
Si queremos obtener una vista rotada de una escena bidimensional, 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 eje yuniversal utilizando la matriz 6.1. 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).

6.3 TRANSFORMACIONES DE VISOR Y NORMALIZACIN


En algunos paquetes grficos, la normalizacin y las transformaciones de ventana a visor se combinan en una
nica operacin. En este caso, las coordenadas del visor se proporcionan a menudo dentro del rango que vara
desde 0 a 1 para que se posicione dentro de un cuadrado unidad. Despus del recorte, el cuadrado unidad que
contiene el visor se mapea al dispositivo de salida de visualizacin. En otros sistemas, las subrutinas de normalizacin y de recorte se aplican antes de la transformacin del visor. En estos sistemas, los lmites del visor
se especifican en coordenadas de pantalla relativas a la posicin de la ventana de visualizacin.

CAP06_HEARN_1P.qxd

310

28/09/2005

10:49

Pgina 310

CAPTULO 6 Visualizacin bidimensional

Mapeo de la ventana de recorte en un visor normalizado


Para ilustrar los procedimientos generales de las transformaciones de visores y de normalizacin, en primer
lugar consideramos un visor definido con valores de coordenadas normalizadas comprendidos entre 0 y 1. Las
descripciones de los objetos se transfieren a este espacio normalizado utilizando una transformacin que mantiene el mismo emplazamiento relativo de un punto en el visor que cuando estaba en la ventana de recorte. Si
una posicin de coordenadas est en el centro de la ventana de recorte, por ejemplo, sta se mapeara al centro del visor. La Figura 6.7 muestra este mapeo ventana a visor. La posicin (xw, yw) de la ventana de recorte se mapea a la posicin (xv, yv) del visor asociado.
Para transformar el punto en coordenadas universales en la misma posicin relativa dentro del visor, necesitamos que:
xv xvmin
xw xwmin
=
xvmax xvmin xwmax xwmin

(6.2)

yv yvmin
yw ywmin
=
yvmax yvmin ywmax ywmin
Resolviendo estas expresiones para la posicin de vista (xv, yv), tenemos,
xv = sx xw + tx

(6.3)

yv = sy yw + ty
donde los factores de escala son:
sx =

xvmax xvmin
xwmax xwmin

(6.4)

yv yvmin
sy = max
ywmax ywmin
y los factores de traslacin son:
tx =

xwmax xvmin xwmin xvmax


xwmax xwmin

(6.5)

yw yv ywmin yvmaxx
t y = max min
ywmax ywmin

ywmax

Ventana de recorte

(xw, yw)

yvmax

Visor
de normalizacin
(xv, yv)

yvmin
ywmin
xwmin

xwmax

xvmin

xvmax 1

FIGURA 6.7. Un punto (xw, yw) de una ventana de recorte en coordenadas universales se mapea a las coordenadas de visor
(xv, yv), dentro de un cuadrado unidad, para que las posiciones relativas de los dos puntos en sus respectivos rectngulos
sean las mismas.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 311

6.3 Transformaciones de visor y normalizacin

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)
Cambie de escala la ventana de recorte al tamao del visor utilizando un punto fijo (xwmin, ywmin).
(2)
Traslade (xwmin, ywmin) a (xvmin, yvmin).
La transformacin de cambio de escala del paso (1) se puede representar con la matriz bidimensional:
sx

S = 0
0

0
sy
0

xwmin (1 sx )

ywmin (1 sy )

(6.6)

donde sx y sy 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:
1 0 xvmin swmin
T = 0 1 yvmin ywmin
0 0

(6.7)

Y la matriz compuesta que representa la transformacin al visor normalizado es

M ventana, visornorm

sx

= TS = 0
0

0
sy
0

tx

ty
1

(6.8)

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 sx y sy 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 subrutinas 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.

Mapeo de la ventana de recorte a un cuadrado normalizado


Otro enfoque de la visualizacin bidimensional consiste en transformar la ventana de recorte en un cuadrado
normalizado, recortar en coordenadas normalizadas y despus transferir la descripcin de la escena a un visor

CAP06_HEARN_1P.qxd

312

28/09/2005

10:49

Pgina 312

CAPTULO 6 Visualizacin bidimensional

ywmax

Ventana de recorte

(xnorm, ynorm) 1

(xw, yw)

ywmin
xwmin

xwmax

Cuadrado de
normalizacin

Visor de
pantalla

yvmax
yvmin

1
1

(xv, yv)
xvmin

xvmax

FIGURA 6.8. Un punto (xw, yw) de la ventana de recorte se mapea a una posicin definida mediante coordenadas normalizadas (xnorm, ynorm), 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 1. 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.8 sustituyendo 1 por xvmin e yvmin y sustituyendo +1 por xvmax e yvmax. Haciendo
estas sustituciones en las expresiones con tx, ty, sx y sy, tenemos,

M ventana, cuadradonorm

2
xw xw
min
max

=
0

2
ywmax ywmin
0

xwmax + xwmin
xwmax xwminn

ywmax + ywmin

ywmax ywmin

(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 1 por xwmin e ywmin y sustituyendo +1 por xwmax e
ywmax:

M cuadradonorm, visor

xvmax xvmin

=
0

0
yvmax yvmin
2
0

xvmax + xvmin

yvmax + yvmin

(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 especificadas 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.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 313

6.3 Transformaciones de visor y normalizacin

313

ypantalla
Pantalla de vdeo

Un t

ring

Ventana de
visualizacin
ys

ulo r

ojo

Visor

xs
xpantalla

FIGURA 6.9. Una vista en las coordenadas (xs, ys) dentro


de la ventana de visualizacin.

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 x o del eje y. Tambin, la relacin de aspecto de la ventana de visualizacin puede afectar
a las proporciones de los objetos. Si el visor se mapea a toda la ventana de visualizacin y el tamao de la
ventana de visualizacin se cambia, los objetos se pueden distorsionar a menos que la relacin de aspecto del
visor tambin se ajuste.

Visualizacin de cadenas de caracteres


Las cadenas de caracteres se pueden manipular de dos formas cuando se mapean a un visor mediante la pipeline de visualizacin. El mapeo ms simple mantiene un tamao de carcter constante. Este mtodo se podra
emplear con patrones de caracteres de mapas de bits. Pero las fuentes de contorno se podran transformar del
mismo modo que otras primitivas; slo ser necesario transformar las posiciones de definicin de los segmentos de lnea de las formas de los caracteres de contorno. Los algoritmos de determinacin de los patrones de
los pxeles de los caracteres transformados, se aplican despus cuando se procesan las otras primitivas de la
escena.

Efectos de divisin de pantalla y mltiples dispositivos de salida


Seleccionando diferentes ventanas de recorte y sus visores asociados en una escena, podemos proporcionar
visualizaciones simultneas de dos o ms objetos, mltiples partes de la imagen, o vistas diferentes de una
nica escena. Podemos posicionar estas vistas en diferentes partes de una nica ventana de visualizacin o en
mltiples ventanas de visualizacin en la pantalla. En una aplicacin de diseo, por ejemplo, podemos visualizar una vista de malla de alambre de un objeto en una vista, mientras tambin visualizamos una vista totalmente sombreada del objeto en otro visor. Podramos enumerar otra informacin o mens en un tercer visor.
Tambin es posible que se puedan utilizar dos o ms dispositivos de salida de forma concurrente en un sistema concreto, y que podamos establecer un par de ventana de recorte/visor en cada dispositivo de salida. Un
mapeo a un dispositivo de salida seleccionado a veces se denomina transformacin de estacin de trabajo.
En este caso, los visores se podran especificar en las coordenadas de un dispositivo de visualizacin particular. O cada visor se podra especificar dentro de un cuadrado unidad, que se mapea despus al dispositivo de
salida elegido. Algunos sistemas grficos proporcionan un par de funciones de estacin de trabajo para este
propsito. Una funcin se utiliza para designar una ventana de recorte para un dispositivo de salida seleccionado, identificado por un nmero de estacin de trabajo, y la otra funcin se utiliza para establecer el visor
asociado de dicho dispositivo.

CAP06_HEARN_1P.qxd

314

28/09/2005

10:49

Pgina 314

CAPTULO 6 Visualizacin bidimensional

6.4 FUNCIONES DE VISUALIZACION BIDIMENSIONAL DE OpenGL


Realmente, la biblioteca bsica de OpenGL no posee funciones especficas para visualizacin bidimensional,
ya que est diseada principalmente para aplicaciones tridimensionales. Pero podemos adaptar las subrutinas
de visualizacin tridimensional a una escena bidimensional, y la biblioteca de ncleo contiene una funcin de
visor. Adems, OpenGL Utility (GLU) proporciona una funcin bidimensional para especificar la ventana de
recorte, y tenemos funciones de GLUT para manipular ventanas de visualizacin. Por tanto, podemos utilizar
estas subrutinas bidimensionales, junto con la funcin de visor de OpenGL, para todas las operaciones de
visualizacin que necesitemos.

Modo de proyeccin de OpenGL


Antes de que seleccionemos una ventana de recorte y un visor en OpenGL, necesitamos establecer el modo
apropiado para construir la matriz de transformacin de coordenadas universales a coordenadas de pantalla.
Con OpenGL, no podemos establecer un sistema de coordenadas de visualizacin bidimensional independiente como el de la Figura 6.4, y debemos establecer los parmetros de la ventana de recorte como una parte de
la transformacin de proyeccin. Por tanto, en primer lugar hay que seleccionar el modo de proyeccin.
Hacemos esto con la misma funcin que utilizamos para establecer el modo de vista de modelo para las transformaciones geomtricas. Los comandos posteriores de definicin de una ventana de recorte y un visor se
aplicarn entonces a la matriz de proyeccin.
glMatrixMode (GL_PROJECTION);

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 lnea en otras vistas de la escena, tambin podemos establecer la inicializacin con
glLoadIdentity

( );

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.

Funcin de ventana de recorte de GLU


Para definir una ventana de recorte bidimensional, podemos utilizar la funcin de OpenGL Utility:
gluOrtho2D

(xwmin, xwmax, ywmin, ywmax);

Las coordenadas de los lmites 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, los 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 gluOrtho2D (Seccin 7.10).
Las coordenadas normalizadas en el rango que vara de 1 hasta 1 se utilizan en las subrutinas de recorte
OpenGL. La funcin gluOrtho2D 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 (xwmin, ywmin) = (1.0, 1.0) y (xwmax, ywmax) = (1.0, 1.0). Por tanto, la ventana de recorte pre-

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 315

6.4 Funciones de visualizacin bidimensional de OpenGL

315

determinada es el cuadrado normalizado centrado en el origen de coordenadas con una longitud de lado de
2.0.

Funcin de visor de OpenGL


Especificamos los parmetros del visor con la funcin OpenGL
glViewport (xvmin, yvmin, vpWidth, vpHeight);

donde todos los valores de los argumentos se proporcionan en coordenadas de pantalla enteras relativas a la
ventana de visualizacin. Los argumentos xvmin e yvmin 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 vpWidth y vpHeight. Si no se invoca la funcin
glViewport 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.10. 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:
xvmax = xvmin + vpWidth,

yvmax = yvmin + vpHeight

(6.11)

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:
glGetIntegerv

(GL_VIEWPORT, vpArray);

donde vpArray es una matriz de un nico ndice y cuatro elementos. Esta funcin Get devuelve los parmetros del visor actual en vpArray en el orden xvmin, yvmin, vpWidth y vpHeight. En una aplicacin interactiva, por ejemplo, podemos utilizar esta funcin para obtener los parmetros del visor que contiene el cursor de pantalla.

Creacin de una ventana de visualizacin con GLUT


En la Seccin 2.9, presentamos brevemente algunas de las funciones de la biblioteca GLUT. Ya que la biblioteca GLUT acta como interfaz con cualquier sistema de gestin de ventanas, usamos las subrutinas de GLUT
para la creacin y la manipulacin de ventanas de visualizacin con el fin de que nuestros programas de ejemplo sean independientes de cualquier mquina especfica. Para acceder a estas subrutinas, necesitamos en primer lugar inicializar GLUT con la siguiente funcin.
glutInit

(&argc, argv);

Los argumentos de esta funcin de inicializacin son los mismos que los del procedimiento main, y podemos utilizar glutInit para procesar argumentos de la lnea de comandos.
Disponemos de tres funciones en GLUT para definir la ventana de visualizacin y elegir sus dimensiones
y su posicin:
glutInitWindowPosition (xTopLeft, yTopLeft);
glutInitWindowSize (dwWidth, dwHeight);
glutCreateWindow (Title of Diplay Window);

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-

CAP06_HEARN_1P.qxd

316

28/09/2005

10:49

Pgina 316

CAPTULO 6 Visualizacin bidimensional

lizacin en la pantalla. Con la segunda funcin, seleccionamos el ancho y la altura de la ventana de visualizacin 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 visualizacin al sistema gestor de ventanas. En cualquier caso, el tamao y la posicin de la ventana de visualizacin especificados con subrutinas de GLUT 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 visualizacin de una forma diferente. La tercera
funcin crea la ventana de visualizacin, 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 visualizacin est definida pero no se muestra en la pantalla hasta que se han completado todas las operaciones de configuracin de
GLUT.

Establecimiento del modo y del color de la ventana de visualizacin con GLUT


Con la siguiente funcin de GLUT se seleccionan varios parmetros de la ventana de visualizacin
glutInitDisplayMode

(mode);

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 or. El modo predeterminado es bfer simple y modo de color RGB (o RGBA), que es el mismo que se obtendra con la siguiente instruccin:
glutInitDisplayMode

(GLUT_SINGLE | GLUT_RGB);

La especificacin de color GLUT_RGB es equivalente a GLUT_RGBA. Un color de fondo para la ventana de


visualizacin se elige con la subrutina OpenGL
glClearColor

(red, green, blue, alpha);

En el modo de color indexado, establecemos el color de la ventana de visualizacin con


glClearColor

(index);

donde al argumento index se le asigna un valor entero que se corresponde con una posicin de la tabla de
colores.

Identificador de la ventana de visualizacin con GLUT


Se pueden crear mltiples ventanas de visualizacin para una aplicacin, y a cada una se le asigna un entero
positivo, el identificador de la ventana de visualizacin, que comienza por el valor 1 para la primera ventana que se cree. A la vez que iniciamos una ventana de visualizacin, podemos registrar su identificador con
la instruccin
windowID = glutCreateWindow

(A Display Window);

Una vez que hemos guardado el identificador entero de la ventana de visualizacin en la variable
windowID, podemos utilizar el nmero del identificador para cambiar los parmetros de visualizacin o para

borrar la ventana de visualizacin.

Borrado de una ventana de visualizacin con GLUT


La biblioteca GLUT tambin incluye una funcin para borrar una ventana de visualizacin que hayamos creado. Si conocemos el identificador de la ventana de visualizacin, podemos eliminarla con la siguiente instruccin
glutDestroyWindow

(windowID);

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 317

6.4 Funciones de visualizacin bidimensional de OpenGL

317

Ventana de visualizacin actual con GLUT


Cuando especificamos cualquier operacin de ventana de visualizacin, sta se aplica a la ventana de visualizacin actual, que es la ltima ventana de visualizacin que hemos creado o la que seleccionamos con el
siguiente comando.
glutSetWindow

(windowID);

En cualquier momento, podemos preguntar al sistema cul es la ventana de visualizacin actual:


currentWindowID = glutGetWindow

( );

Esta funcin devuelve el valor 0 si no hay ventanas de visualizacin o si la ventana de visualizacin actual
se destruy.

Reposicionamiento y cambio de tamao de una ventana de visualizacin con GLUT


Podemos cambiar la posicin en pantalla de la ventana de visualizacin actual con:
glutPositionWindow

(xNewTopLeft, yNewTopLeft);

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 glutPositionWindow o glutReshapeWindow 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 winReshapeFcn, 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.

Gestin de mltiples ventanas de visualizacin con GLUT


La biblioteca GLUT tambin tiene un gran nmero de subrutinas para manipular una ventana de visualizacin
de formas diversas. Estas subrutinas son particularmente tiles cuando tenemos mltiples ventanas de visualizacin en la pantalla y queremos redistribuirlas o localizar una ventana de visualizacin particular.
Utilizamos la siguiente subrutina para convertir la ventana de visualizacin actual en un icono en forma
de imagen pequea o un smbolo que representa la ventana.
glutIconifyWindow

( );

CAP06_HEARN_1P.qxd

318

28/09/2005

10:49

Pgina 318

CAPTULO 6 Visualizacin bidimensional

Este icono tendr una etiqueta con el mismo nombre que asignamos a la ventana, pero podemos cambiar
el nombre del icono con:
glutSetIconeTitle

(Icon Name);

Podemos cambiar el nombre de la ventana de visualizacin con un comando similar:


glutSetWindowTitle

(New Window Name);

Cuando estn abiertas mltiples ventanas de visualizacin en la pantalla, algunas de ellas se pueden solapar con otras ventanas de visualizacin. Podemos seleccionar cualquier ventana de visualizacin 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
glutPopWindow

(windowID);
( );

De un modo similar, podemos empujar la ventana de visualizacin actual hacia atrs, para que quede
detrs de las restantes ventanas de visualizacin. Esta secuencia de operaciones es:
glutSetWindow (windowID);
glutPushWindow ( );

Tambin podemos quitar de la pantalla la ventana actual con:


glutHideWindow

( );

Y podemos volver a mostrar una ventana de visualizacin oculta, o una que se haya convertido en un
icono, designando sta como la ventana de visualizacin actual e invocando la funcin:
glutShowWindow

( );

Subventanas de GLUT
Dentro de una ventana de visualizacin seleccionada, podemos establecer cualquier nmero de ventanas de
visualizacin de segundo nivel, llamadas subventanas. Esto proporciona un medio para particionar ventanas
de visualizacin en zonas de visualizacin diferentes. Creamos una subventana con la siguiente funcin.
glutCreateSubwindow

(windowID, xBottomLeft, yBottomLeft, width, height);

El argumento windowID identifica la ventana de visualizacin 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 visualizacin.
A las subventanas se les asigna como identificador un nmero entero positivo del mismo modo que se
numeran las ventanas de visualizacin de primer nivel. Podemos colocar una subventana dentro de otra subventana. Tambin, a cada subventana se le puede asignar un modo de visualizacin 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 visualizacin de primer nivel.
Pero no podemos convertir una subventana creada con GLUT en un icono.

Seleccin de la forma del cursor de pantalla en una ventana de visualizacin


Podemos utilizar la siguiente subrutina de GLUT para solicitar una forma para el cursor de pantalla que hay
que utilizar con la ventana actual.
glutSetCursor

(shape);

Las formas posibles de cursor que podemos seleccionar son una punta de flecha con una direccin que elijamos, una flecha bidireccional, una flecha rotante, una cruz, un reloj de pulsera, una interrogacin, o inclu-

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 319

6.4 Funciones de visualizacin bidimensional de OpenGL

319

so una calavera con huesos que se cruzan. Por ejemplo, podemos asignar la constante simblica GLUT_CURSOR_UP_DOWN al argumento shape 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.

Visualizacin de objetos grficos en una ventana de visualizacin de GLUT


Despus de que hayamos creado una ventana de visualizacin y seleccionado su posicin, tamao, color y
otras caractersticas, indicamos qu hay que mostrar en dicha ventana. Si se ha creado ms de una ventana de
visualizacin, en primer lugar, designamos la que queramos como ventana de visualizacin actual. A continuacin, invocamos la siguiente funcin para asignar algo a aquella ventana.
glutDisplayFunc

(pictureDescription);

El argumento es una subrutina que describe lo que hay que mostrar en la ventana actual. Esta subrutina,
llamada pictureDescription, 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 pictureDescription contiene habitualmente 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 glutDisplayFunc 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.

Ejecucin del programa de aplicacin


Cuando se ha completado la organizacin del programa y se han creado e inicializado las ventanas de visualizacin, necesitamos ejecutar el comando final de GLUT que seala la ejecucin del programa:
glutMainLoop

( );

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 GLUT que continuamente comprueba si se han producido eventos nuevos, tales como una entrada interactiva procedente de un ratn o de una tableta grfica.

Otras funciones de GLUT


La biblioteca GLUT proporciona una gran variedad de subrutinas para gestionar procesos que dependen del
sistema y para aadir caractersticas a la biblioteca bsica de OpenGL. Por ejemplo, esta biblioteca contiene
funciones para generar caracteres de mapas de bit y de contorno (Seccin 3.21), y proporciona funciones para
cargar valores en una tabla de color (Seccin 4.3). Adems, hay disponibles algunas funciones de GLUT, estudiadas en el Captulo 8, que permiten visualizar objetos tridimensionales, con representacin slida o en su
modelo almbrico. Entre estos objetos se incluye una esfera, un toro y los cinco poliedros regulares (cubo,
tetraedro, octaedro, dodecaedro e icosaedro).

CAP06_HEARN_1P.qxd

320

28/09/2005

10:49

Pgina 320

CAPTULO 6 Visualizacin bidimensional

FIGURA 6.10. Efecto de divisin de pantalla generado dentro de una ventana de visualizacin mediante el procedimiento
displayFunc.

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

(stateParam);

Esta 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.

Ejemplo de programa de visualizacin bidimensional en OpenGL


Como demostracin del uso de la funcin de visor de OpenGL usamos un efecto de divisin de pantalla para
mostrar dos vistas de un tringulo en el plano xy con su centroide en el origen de coordenadas universales. En
primer lugar, se define una vista en la mitad izquierda de la ventana de visualizacin, y el tringulo original
se muestra all en color gris claro (color azul en el listado del programa de ejemplo). Utilizando la misma ventana de recorte, definimos otra vista en la mitad derecha de la ventana de visualizacin, y se cambia el color
de relleno a gris ms oscuro (rojo en el listado). El tringulo despus se gira por su centroide y se muestra en
el segundo visor. La Figura 6.10 muestra los dos tringulos mostrados con este programa de ejemplo.
#include <GL/glut.h>
class wcPt2D {
public:
GLfloat x, y;

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 321

6.4 Funciones de visualizacin bidimensional de OpenGL

321

}
void init (void)
{
/* Establece el color de la ventana visualizacin en blanco.
glClearColor (1.0, 1.0, 1.0, 0.0);

*/

/* Establece los parmetros de la ventana de recorte en


* coordenadas universales. */
glMatrixMode (GL_PROJECTION);
gluOrtho2D (-100.0, 100.0, -100.0, 100.0);
/* Establece el modo de construccin de la matriz de
* transformacin geomtrica. */
glMatrixMode (GL_MODELVIEW);
}
void triangle (wcPt2D *verts)
{
GLint k;
glBegin (GL_TRIANGLES);
for (k = 0; k < 3; k++)
glVertex2f (verts [k].x, verts [k].y);
glEnd ( );
}
void displayFcn (void)
{
/* Define la posicin inicial del tringulo. */
wcPt2D verts [3] = { {-50.0, -25.0}, {50.0, -25.0}, {0.0, 50.0} };
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 1.0);
glViewport (0, 0, 300, 300);
triangle (verts);

//

Borra la ventana de visualizacin.

// Establece el color de relleno en azul.


// Establece el visor izquierdo.
// Muestra el tringulo.

/* Gira el tringulo y lo visualiza en la mitad derecha de la


* ventana de visualizacin. */
glColor3f (1.0, 0.0, 0.0);
glViewport (300, 0, 300, 300);

//
//

Establece el color de relleno en rojo.


Establece el visor derecho.

glRotatef (90.0, 0.0, 0.0, 1.0);


// Gira alrededor del eje z.
triangle (verts);
// Muestra el tringulo rojo girado.
glFlush ( );
}

CAP06_HEARN_1P.qxd

322

28/09/2005

10:49

Pgina 322

CAPTULO 6 Visualizacin bidimensional

void main (int argc, char ** argv)


{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (50, 50);
glutInitWindowSize (600, 300);
glutCreateWindow (Split-Screen Example);
init ( );
glutDisplayFunc (displayFcn);
glutMainLoop ( );
}

6.5 ALGORITMOS DE RECORTE


Generalmente, cualquier procedimiento que elimina aquellas porciones de una imagen que estn dentro o
fuera de una regin del espacio especificada se denomina algoritmo de recorte o simplemente recorte.
Habitualmente, una regin de recorte es un rectngulo en posicin estndar, aunque podramos utilizar cualquier forma en una aplicacin de recorte.
La aplicacin de recorte ms comn est en la pipeline de visualizacin, donde el recorte se aplica para
extraer una porcin designada de la escena (bidimensional o tridimensional) para su visualizacin en un dispositivo de salida. Los mtodos de recorte tambin se utilizan para suavizar los lmites de los objetos, para
construir objetos utilizando mtodos de modelado de slidos, gestionar entornos multiventana y para permitir que partes de una imagen se muevan, se copien o se borren en programas de dibujo y pintura.
Los algoritmos de recorte se aplican en procedimientos de visualizacin bidimensional para identificar
aquellas partes de una imagen que estn dentro de la ventana de recorte. Todo lo que se encuentra fuera de la
ventana de recorte, se elimina de la descripcin de la escena que se transfiere al dispositivo de salida para su
visualizacin. Una implementacin eficiente de recorte en la pipeline de visualizacin consiste en aplicar los
algoritmos a los lmites normalizados de la ventana de recorte. Esto reduce los clculos, porque todas las
matrices de transformacin geomtrica y de visualizacin se pueden concatenar y aplicar a una descripcin
de una escena antes de que el recorte se lleve a cabo. La escena recortada se puede despus transferir a las
coordenadas de pantalla para el procesamiento final.
En las secciones siguientes, tratamos los algoritmos bidimensionales para:

Recorte de puntos
Recorte de lneas (segmentos de lnea recta)
Recorte de reas de relleno (polgonos)
Recorte de curvas
Recorte de texto

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 spline 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 xwmin, xwmax, ywmin y ywmax. Estas aristas lmite habi-

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 323

6.7 Recorte de lneas bidimensionales

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 1 o desde 1 a 1.

6.6 RECORTE DE PUNTOS BIDIMENSIONALES


En un rectngulo de recorte ubicado en la posicin estndar, mantenemos un punto bidimensional P = (x, y)
para su visualizacin si se satisfacen las siguientes desigualdades:
xwmin x xwmax

(6.12)

ywmin y ywmax

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, resulta til
en diversas situaciones, sobre todo 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.

6.7 RECORTE DE LNEAS BIDIMENSIONALES


La Figura 6.11 muestra posibles posiciones de segmentos de lnea recta en relacin con una ventana de recorte estndar. Un algoritmo de recorte de lneas procesa cada lnea de una escena mediante una serie de pruebas
y clculos de intersecciones para determinar si se debe guardar la lnea completa o una parte de sta. La parte
ms costosa de un procedimiento de recorte de lneas es el clculo de las intersecciones de una lnea con las
aristas de la ventana. Por tanto, un objetivo importante en cualquier algoritmo de recorte de lneas consiste en
minimizar los clculos de intersecciones. Para ello, podemos realizar en primer lugar pruebas para determinar si un segmento de lnea est completamente dentro de la ventana de recorte o est completamente fuera.
Es sencillo determinar si una lnea est completamente dentro de una ventana, pero es ms difcil identificar
todas las lneas que estn completamente fuera de la ventana. Si somos incapaces de identificar si una lnea
est completamente dentro o completamente fuera de un rectngulo de recorte, debemos entonces realizar los
clculos de interseccin para determinar si una parte de la lnea cruza el interior de la ventana.
Comprobamos un segmento de lnea para determinar si est completamente dentro o fuera del borde de
una ventana de recorte seleccionada, aplicando las pruebas de recorte de puntos de la seccin anterior. Cuando
ambos puntos extremos de un segmento de lnea estn dentro de los cuatro lmites de recorte, como la lnea
que va de P1 a P2 en la Figura 6.11, la lnea est completamente dentro de la ventana de recorte y la guardamos. Cuando ambos puntos extremos de un segmento de lnea se encuentran fuera de cualquiera de los cuatro lmites (lnea P3P4 en la Figura 6.11), dicha lnea se encuentra completamente fuera de la ventana y se elimina de la descripcin de la escena. Pero ambas pruebas fallan, el segmento de lnea intersecta con al menos
un lmite de recorte y puede o no cruzar el interior de la ventana de recorte.
Un modo de formular la ecuacin de un segmento de lnea recta consiste en utilizar la siguiente representacin paramtrica, donde las coordenadas (x0, y0) y (xfin, yfin) designan los dos puntos extremos de la lnea.
x = x0 + u (xfin x0)
y = y0 + u (yfin y0)

0u1

(6.13)

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 x o y y resolviendo para el parme-

CAP06_HEARN_1P.qxd

324

28/09/2005

10:49

Pgina 324

CAPTULO 6 Visualizacin bidimensional


P9
Ventana de
recorte

Ventana de
recorte
P2

P2

P4

P8

P1
P3

P6
P5

P10

P1
P6

P5

P8

P7

P7
Antes del recorte

Despus del recorte

(a)

(b)

FIGURA 6.11. Recorte de segmentos de lnea recta utilizando una ventana de recorte rectangular estndar.

tro u. A modo de ejemplo, el lmite izquierda de la ventana est en la posicin xwmin, por lo que sustituimos
x por este valor y resolvemos para u, y calculamos el valor de interseccin y correspondiente. Si este valor de
u se encuentra fuera del rango que vara desde 0 a 1, 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 parte
que est dentro de la ventana.
El procesamiento de segmentos de lnea de una escena utilizando la sencilla tcnica descrita en el prrafo
anterior 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 lnea tridimensionales.

Recorte de lneas de Cohen-Sutherland


ste es uno de algoritmos ms antiguos que se ha desarrollado para el recorte de lneas rpido, y variaciones
de este mtodo se utilizan ampliamente. El tiempo de procesamiento se reduce en el mtodo de CohenSutherland realizando ms pruebas antes de proceder con los clculos de las intersecciones. Inicialmente, se
asigna a cada punto extremo de las lneas de una imagen un valor binario de cuatro dgitos llamado cdigo de
regin. Cada bit se utiliza para indicar si est dentro o fuera de uno de los lmites de la ventana de recorte.
Podemos hacer referencia a las aristas de la ventana en cualquier orden. La Figura 6.12 muestra una posible
ordenacin en la que los bits estn numerados de 1 a 4 de derecha a izquierda. Por tanto, para esta ordenacin, el bit situado ms a la derecha (bit 1) hace referencia al borde izquierdo de la ventana de recorte, y el
situado ms a la izquierda (bit 4) hace referencia al borde superior de la ventana. Un valor de 1 (o verdadero)
en cualquier bit indica que el punto extremo est fuera de la ventana. De forma similar, un valor de 0 (o falso)
en cualquier bit indica que el punto extremo no est fuera (est dentro o sobre) del lmite correspondiente de
la ventana. A veces, un cdigo de regin se denomina cdigo de fuera porque un valor de 1en cualquier
bit indica que el punto del espacio est fuera del correspondiente borde de recorte.
Cada arista de la ventana de recorte divide el espacio bidimensional en un semiespacio interior y un
semiespacio exterior. En total, los cuatro lmites de la ventana crean nueve regiones. La Figura 6.13 enumera
el valor del cdigo binario en cada una de estas regiones. Por tanto, a un punto extremo que est situado debajo y a la izquierda de la ventana de recorte se le asigna un cdigo de regin 0101, y el valor del cdigo de
regin de cualquier punto interior a la ventana de recorte es 0000.
Los valores de los bits de un cdigo de regin se determinan comparando los valores de las coordenadas
(x, y) de un punto extremo con los lmites de recorte. El bit 1 se pone a 1 si x < xwmin. Los valores de los otros

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 325

6.7 Recorte de lneas bidimensionales

bit
4

bit
3

Superior

bit
2

bit
1

Derecho
Inferior

1001

0001

325

Izquierdo

1000

0000

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 Cohen-Sutherland.

1010

0010

Ventana de recorte

0101

0100

0110

FIGURA 6.13. Los nueve cdigos de regin


para la identificacin de la posicin de un
punto extremo de una lnea, 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 xwmin; el bit 2 es el bit de signo de xwmax x; el bit 3 es el bit de signo de y ywmin;
y el bit 4 es el bit de signo de ywmax 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 lnea 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 bit de cada cdigo de regin.
Podemos realizar las pruebas de dentro-fuera para los segmentos de lnea utilizando operadores lgicos.
Cuando la operacin or entre los dos cdigos de regin de los puntos extremos de un segmento de lnea es
falsa (0000), la lnea se encuentra 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 and entre 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 intersectan con los lmites de la ventana. Como se muestra en la Figura 6.14, los segmentos de lnea
pueden intersectar con los lmites de recorte sin entrar dentro del interior de la ventana. Por tanto, para recortar un segmento de lnea podran ser necesarios varios clculos de intersecciones, dependiendo del orden en

CAP06_HEARN_1P.qxd

326
P2

28/09/2005

10:49

Pgina 326

CAPTULO 6 Visualizacin bidimensional

P2
P2
Ventana de
recorte

P3

P1

P3

P1
P4

FIGURA 6.14. Las lneas que se extienden desde una regin de la


ventana de recorte a otra pueden atravesar la ventana de recorte o
pueden intersectar con uno o ms lmites de recorte sin entrar en el
interior de la ventana.

(xo, yo)
1
4

Ventana de
recorte
3
2
(xfin, yfin)

FIGURA 6.15. Los cuatro puntos de interseccin (etiquetados de 1 a


4) de un segmento de lnea que se recorta de acuerdo con los lmites 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 lnea 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 lnea 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 0, 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 P1 a
P2 son 0100 y 1001. Por tanto, P1 est dentro del lmite izquierdo de recorte y P2 est fuera de dicho lmite.
A continuacin, calculamos la interseccin P2, y recortamos la parte de la lnea desde P2 a P2. La parte que
permanece de la lnea se encuentra dentro de la lnea lmite derecha, y por ello a continuacin comprobamos
el lmite inferior. El punto extremo P1 se encuentra por debajo de la arista inferior de recorte y P2 se encuentra por encima de sta, por lo que determinamos la interseccin con esta arista (P1). Eliminamos la parte de
la lnea desde P1 a P1 y procedemos con la arista superior de la ventana. All determinamos la interseccin
P2. El ltimo paso consiste en recortar la parte situada por encima del lmite superior y guardar el segmento interior desde P1 hasta P2. En el caso de la segunda lnea, obtenemos que el punto P3 se encuentra fuera

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 327

6.7 Recorte de lneas bidimensionales

327

del lmite izquierdo y P4 se encuentra dentro. Por tanto, calculamos la interseccin P3 y eliminamos la parte
de la lnea que va desde P3 a P3. Comprobando los cdigos de regin de los puntos extremos P3 y P4, 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
cuatro 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 determinar 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 (x0,
y0) y (xfin, yfin), la coordenada y del punto de interseccin con un borde de recorte vertical se puede obtener
mediante el clculo,
y = y0 + m(x x0)

(6.14)

donde el valor de x se establece en xwmin o xwmax, y la pendiente de esta lnea se calcula como m = (yfin
y0)/(xfin x0). De forma similar, si buscamos la interseccin con el borde horizontal, la coordenada x se puede
calcular como:

x = x0 +

y y0
m

(6.15)

(estableciendo y en ywmin o en ywmax.


En los siguientes procedimientos se proporciona una implementacin 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.

class wcPt2D {
public:
GLfloat x, y;
};
inline GLint round (const GLfloat a)

{ return GLint (a + 0.5); }

/* Define un cdigo de cuatro bits para cada una de las regiones


* exteriores de una ventana rectangular de recorte.
*/
const
const
const
const
/*
*
*
*
*
*

GLint
GLint
GLint
GLint

winLeftBitCode = 0x1;
winRightBitCode = 0x2;
winBottomBitCode = 0x4;
winTopBitCode = 0x8;

Un cdigo de regin de mscara de bit se asigna tambin a cada extremo


de un segmento de lnea de entrada, de acuerdo con su posicin respecto de
los cuatro bordes de una ventana de recorte rectangular de entrada.
Un extremo con un valor de cdigo de regin de 0000 se encuentra dentro
de la ventana de recorte, en otro caso, est fuera al menos respecto

CAP06_HEARN_1P.qxd

328

28/09/2005

10:49

Pgina 328

CAPTULO 6 Visualizacin bidimensional

*
*
*
*
*
*
*
*/

de uno de los lmites de recorte. Si la operacin orentre los dos


cdigos de los puntos extremos da como resultado un valor falso, la lnea
completa definida por dichos dos puntos se guarda (se acepta).
Si la operacin and entre los cdigos de los puntos extremos da como
resultado verdadero, quiere decir que la lnea est completamente fuera de
la ventana de recorte y se elimina (se rechaza) para posteriores
procesamientos.

inline GLint inside (GLint code) { return GLint (!code); }


inline GLint reject (GLint code1, GLint code2)
{ return GLint (code1 & code2); }
inline GLint accept (GLint code1, GLint code2)
{ return GLint (!(code1 | code2)); }
GLubyte encode (wcPt2D pt, wcPt2D winMin, wcPt2D winMax)
{
GLubyte code = 0x00;
if (pt.x < winMin.x)
code = code | winLeftBitCode;
if (pt.x > winMax.x)
code = code | winRightBitCode;
if (pt.y < winMin.y)
code = code | winBottomBitCode;
if (pt.y > winMax.y)
code = code | winTopBitCode;
return (code);
}
void swapPts (wcPt2D * p1, wcPt2D * p2)
{
wcPt2D tmp;
tmp = *p1; *p1 = *p2; *p2 = tmp;
}
void swapCodes (GLubyte * c1, GLubyte * c2)
{
GLubyte tmp;
tmp = *c1; *c1 = *c2; *c2 = tmp;
}
void lineClipCohSuth (wcPt2D winMin, wcPt2D winMax, wcPt2D p1, wcPt2D p2)
{
GLubyte code1, code2;
GLint done = false, plotLine = false;
GLfloat m;

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 329

6.7 Recorte de lneas bidimensionales

while (!done) {
code1 = encode (p1, winMin, winMax);
code2 = encode (p2, winMin, winMax);
if (accept (code1, code2)) {
done = true;
plotLine = true;
}
else
if (reject (code1, code2))
done = true;
else {
/* Etiqueta el punto extremo que est fuera de la ventana
* de visualizacin como p1. */
if (inside (code1)) {
swapPts (&p1, &p2);
swapCodes (&code1, &code2);
}
/* Usa la pendiente m para hallar la interseccin lnea-lmite
* de recorte.*/
if (p2.x != p1.x)
m = (p2.y - p1.y) / (p2.x - p1.x);
if (code1 & winLeftBitCode) {
p1.y += (winMin.x - p1.x) * m;
p1.x = winMin.x;
}
else
if (code1 & winRightBitCode) {
p1.y += (winMax.x - p1.x) * m;
p1.x = winMax.x;
}
else
if (code1 & winBottomBitCode) {
/* Es necesario actualizar p1.x slo para lneas no verticales.
if (p2.x != p1.x)
p1.x += (winMin.y - p1.y) / m;
p1.y = winMin.y;
}
else
if (code1 & winTopBitCode) {
if (p2.x != p1.x)
p1.x += (winMax.y - p1.y) / m;
p1.y = winMax.y;
}
}
}
if (plotLine)
lineBres (round (p1.x), round (p1.y), round (p2.x), round (p2.y));
}

329

*/

CAP06_HEARN_1P.qxd

330

28/09/2005

10:49

Pgina 330

CAPTULO 6 Visualizacin bidimensional

Recorte de lneas de Liang-Barsky


Se han desarrollado algoritmos de recorte de lneas ms rpidos que realizan una comprobacin mayor de las
lneas antes de proceder con los clculos de interseccin. Uno de los ms antiguos esfuerzos en esta direccin
es un algoritmo desarrollado por Cyrus y Beck, que se basa en el anlisis de las ecuaciones paramtricas de
las lneas. Posteriormente, Liang y Barsky de forma independiente idearon una forma incluso ms rpida del
algoritmo de recorte de lneas paramtrico.
Para un segmento de lnea cuyos puntos extremos son (x0, y0) y (xfin, yfin), podemos describir la lnea en
forma paramtrica:
x = x0 + ux
0u1

y = y0 + uy

(6.16)

donde x = xfin x0 y y = yfin y0. 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:
xwmin x0 + ux xwmax
ywmin y0 + uy ywmax

(6.17)

que se pueden expresar como:


u pk qk,

k = 1, 2, 3, 4

(6.18)

donde los parmetros p y q se definen como:


p1 = x,

q1 = x0 xwmin

p2 = x,

q2 = xwmax x0

p3 = y,

q3 = y0 ywmin

p4 = y,

q4 = ywmax y0

(6.19)

Cualquier lnea que sea paralela a una de las aristas de la ventana de recorte tiene pk = 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 k, tambin observamos que qk < 0, entonces la lnea est
completamente fuera del lmite y se puede eliminar de las consideraciones posteriores. Si qk 0, la lnea se
encuentra dentro del lmite de recorte paralelo.
Cuando pk < 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 pk > 0, la lnea procede de dentro hacia fuera.
Para un valor distinto de cero de pk, podemos calcular el valor de u 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:
u=

qk
pk

(6.20)

Para cada lnea, podemos calcular los valores de los parmetros u1 y u2 que definen aquella parte de la
lnea que se encuentra dentro del rectngulo de recorte. El valor de u1 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 rk = qk/pk. El valor de u1 se obtiene como el mayor del conjunto que contiene 0 y los valores de
r. Inversamente, el valor de u2 se determina examinando los lmites para los que la lnea est orientada de dentro hacia afuera (p > 0). Para cada una de estas aristas se calcula un valor de rk y el valor de u2 es el mnimo
del conjunto que contiene 1 y los valores de r calculados. Si u1 > u2, 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 u.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 331

6.7 Recorte de lneas bidimensionales

331

Este algoritmo est implementado en las siguientes secciones de cdigo. Los parmetros de las intersecciones se inicializan con los valores u1 = 0 y u2 = 1. Para cada lmite de recorte, se calculan los valores apropiados de p y q y se utilizan en la funcin clipTest 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 u1; cuando
p > 0, el parmetro r se utiliza para actualizar u2. Si al actualizar u1 o u2 resulta que u1 > u2, 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 u1 y u2.

class wcPt2D
{
private:
GLfloat x, y;
public:
/* Constructor predeterminado: inicializa la posicin como (0.0, 0.0). */
wcPt3D ( ) {
x = y = 0.0;
}
setCoords (GLfloat xCoord, GLfloat yCoord) {
x = xCoord;
y = yCoord;
}
GLfloat getx ( ) const {
return x;
}
GLfloat gety ( ) const {
return y;
}
};
inline GLint round (const GLfloat a) { return GLint (a + 0.5); }
GLint clipTest (GLfloat p, GLfloat q, GLfloat * u1, GLfloat * u2)
{
GLfloat r;
GLint returnValue = true;
if (p < 0.0) {
r = q / p;
if (r > *u2)
returnValue = false;
else
if (r > *u1)
*u1 = r;
}

CAP06_HEARN_1P.qxd

332

28/09/2005

10:49

Pgina 332

CAPTULO 6 Visualizacin bidimensional

else
if (p > 0.0) {
r = q / p;
if (r < *u1)
returnValue = false;
else if (r < *u2)
*u2 = r;
}
else
/* Luego p = 0 y la lnea es paralela al lmite de recorte. */
if (q < 0.0)
/* La lnea est fuera del lmite de recorte. */
returnValue = false;
return (returnValue);
}
void lineClipLiangBarsk (wcPt2D winMin, wcPt2D winMax, wcPt2D p1, wcPt2D p2)
{
GLfloat u1 = 0.0, u2 = 1.0, dx = p2.getx ( ) - p1.getx ( ), dy;
if (clipTest (-dx, p1.getx ( ) - winMin.getx ( ), &u1, &u2))
if (clipTest (dx, winMax.getx ( ) - p1.getx ( ), &u1, &u2)) {
dy = p2.gety ( ) - p1.gety ( );
if (clipTest (-dy, p1.gety ( ) - winMin.gety ( ), &u1, &u2))
if (clipTest (dy, winMax.gety ( ) - p1.gety ( ), &u1, &u2)) {
if (u2 < 1.0) {
p2.setCoords (p1.getx ( ) + u2 * dx, p1.gety ( )
+ u2 * dy);
}
if (u1 > 0.0) {
p1.setCoords (p1.getx ( ) + u1 * dx, p1.gety ( )
+ u1 * dy);
}
lineBres (round (p1.getx ( )), round (p1.gety ( )),
round (p2.getx ( )), round (p2.gety ( )));
}
}
}

Por lo general, el algoritmo de recorte de lneas de Liang-Barsky es ms eficiente que el de CohenSutherland. Cada actualizacin de los parmetros u1 y u2 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 u1 y u2. Sin
embargo, el algoritmo de Cohen y Sutherland puede calcular repetidamente las intersecciones a lo largo de la
trayectoria de la lnea, aun cuando la lnea se encuentre totalmente fuera de la ventana de recorte. Y cada clculo de interseccin de Cohen-Sutherland requiere tanto una divisin como una multiplicacin. El algoritmo
bidimensional de Liang-Barsky se puede ampliar para recortar lneas tridimensionales (vase el Captulo 7).

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 333

6.7 Recorte de lneas bidimensionales

333

Recorte de lneas de Nicholl-Lee-Nicholl


Mediante la creacin de ms regiones alrededor de la ventana de recorte, el algoritmo de Nicholl-Lee-Nicholl
(NLN) evita los mltiples clculos de las intersecciones de la lnea. En el mtodo de Cohen-Sutherland, por
ejemplo, se podan calcular mltiples intersecciones a lo largo de la trayectoria de un segmento de lnea antes
de localizar una interseccin en el rectngulo de recorte o de rechazar completamente la lnea. Estos clculos
adicionales de intersecciones se eliminan en el algoritmo NLN mediante una mayor comprobacin de regiones antes de calcular las intersecciones. Comparado tanto con el algoritmo de Cohen-Sutherland como con el
de Liang-Barsky, el algoritmo de Nicholl-Lee-Nicholl realiza menos comparaciones y divisiones. La desventaja del algoritmo NLN es que slo se puede aplicar al recorte bidimensional, mientras que tanto el algoritmo
de Liang-Barsky como el de Cohen-Sutherland se pueden ampliar fcilmente a escenas tridimensionales.
La comprobacin inicial para determinar si un segmento de lnea est completamente dentro de la ventana de recorte o fuera se puede realizar con comprobaciones de cdigos de regin, como en los dos algoritmos
previos. Si no es posible una aceptacin o un rechazo triviales, el algoritmo NLN procede a establecer regiones de recorte adicionales.
Para una lnea con puntos extremos P0 y Pfin, primero determinamos la posicin del punto P0 respecto a
las nueve posibles regiones relativas a la ventana de recorte. Slo se necesita considerar las tres regiones que
se muestran en la Figura 6.16. Si P0 se encuentra en cualquiera de las otras seis regiones, podemos moverlo
a una de las tres regiones de la Figura 6.16 mediante una transformacin de simetra. Por ejemplo, se puede
transformar la regin situada directamente encima de la ventana de recorte en la regin situada a la izquierda
de la ventana utilizando una reflexin respecto de la lnea y = x, o podramos utilizar una rotacin de 90 en
sentido contrario al movimiento de las agujas del reloj.
Asumiendo que P0 y Pfin no estn ambos dentro de la ventana de recorte, a continuacin determinamos la
posicin de Pfin respecto de P0. Para ello, creamos algunas regiones nuevas en el plano, dependiendo de la
posicin de P0. Los lmites de las nuevas regiones son los segmentos de lnea semi-infinitos que comienzan
en P0 y pasan a travs de las esquinas de la ventana de recorte. Si P0 se encuentra dentro de la ventana de
recorte, establecemos las cuatro regiones que se muestran en la Figura 6.17. Despus, dependiendo de cul de
estas cuatro regiones (L, T, R, o B) contenga Pfin, calculamos la interseccin de la lnea con el lmite correspondiente de la ventana.
Si P0 se encuentra en la regin situada a la izquierda de la ventana, establecemos las cuatro regiones etiquetadas como L, LT, LR y LB en la Figura 6.18. Estas cuatro regiones de nuevo determinan una nica arista de la ventana de recorte para el segmento de lnea, relativa a la posicin de Pfin. Por ejemplo, si Pfin est en
una de las tres regiones etiquetadas como L, recortamos la lnea del lmite izquierdo de la ventana y guardamos el segmento de lnea desde esta interseccin a Pfin. Si Pfin est en la regin LT, salvamos el segmento
desde el lmite izquierdo de la ventana hasta el lmite superior. Un procesamiento similar se lleva a cabo en
las regiones LR y LB. Pero si Pfin no est en ninguna de las cuatro regiones L, LT, LR o LB, se recorta la lnea
completa.

P0

P0

P0

P0 dentro de la ventana de recorte

P0 en una regin de borde

P0 en un regin de esquina

(a)

(b)

(c)

FIGURA 6.16. Tres posibles posiciones de un punto extremo de una lnea P0 en el algoritmo de recorte de lneas NLN.

CAP06_HEARN_1P.qxd

334

28/09/2005

10:49

Pgina 334

CAPTULO 6 Visualizacin bidimensional

LT

L
P0

LR

L
L

R
P0

LB
B

FIGURA 6.17. Las cuatro regiones utilizadas en el


algoritmo NLN cuando P0 est dentro de la ventana de
recorte y Pfin est fuera.

FIGURA 6.18. Las cuatro regiones de recorte utilizadas


en el algoritmo NLN cuando P0 est directamente a la
izquierda de la ventana de recorte.

P0
P0
T

TR

or
T

TR

L
L
LR

TB

LB
(a)

LB
(b)

FIGURA 6.19. Los dos posibles conjuntos de regiones de recorte utilizados en el algoritmo NLN cuando P0 est encima
y a la izquierda de la ventana de recorte.

En el tercer caso, cuando P0 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 P0
con respecto a la esquina superior izquierda de la ventana de recorte. Cuando P0 est cerca del lmite izquierdo de recorte de la ventana, utilizamos las regiones del apartado (a) de esta figura. De lo contrario, cuando P0
est cerca del lmite superior de recorte de la ventana, utilizamos las regiones del apartado (b). Si Pfin est en
una de 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.
Para determinar la regin en la que se encuentra Pfin, comparamos la pendiente del segmento de lnea con
las pendientes de los lmites de las regiones del algoritmo NLN. Por ejemplo, si P0 est a la izquierda de la
ventana de recorte (Figura 6.18), entonces Pfin est en la regin LT si,
pendienteP0 PTR < pendienteP0 Pfin < pendienteP0 PTL
o

(6.21)

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 335

6.7 Recorte de lneas bidimensionales

335

yT y0 yfin y0 yT y0
<
<
x R x0 xfin x0 xL x0

(6.22)

(yT y0) (xfin x0) < (xL x0) (yfin y0)

(6.23)

Y recortamos la lnea entera si,


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:
x = x0 + (xfin x0)u
y = y0 + (yfin y0)u
calculamos la coordenada x de la interseccin con el lmite izquierdo de la ventana como x = xL, por lo que
u = (xL x0)/(xend x0) y la coordenada y de la interseccin es:
y = y0 +

yfin y0
( x L x0 )
xfin x0

(6.24)

Y para una interseccin con el lmite superior tenemos y = yT y u = (yT y0)/(yfin y0), por lo que la coordenada x vale:
x x0
x = x0 + fin
( yT y0 )
(6.25)
yfin y0

Recorte de lneas con ventanas de recorte polgonales no rectangulares


En algunas aplicaciones, se puede desear recortar lneas con polgonos de forma arbitraria. Los mtodos basados en las ecuaciones paramtricas de la lnea, tales como el algoritmo de Cyrus-Beck o el de Liang-Barsky,
se pueden ampliar fcilmente para recortar lneas con ventanas poligonales convexas. Hacemos esto modificando el algoritmo para que incluya las ecuaciones paramtricas de los lmites de la regin de recorte. La
visualizacin preliminar de los segmentos de lnea se puede realizar procesando las lneas frente a las extensiones de coordenadas del polgono de recorte.
En el caso de las regiones de recorte poligonales cncavas, todava podramos aplicar estos procedimientos de recorte paramtricos si primero dividimos el polgono cncavo en un conjunto de polgonos convexos
utilizando uno de los mtodos descritos en la Seccin 3.15. Otra tcnica consiste simplemente en aadir una
o ms aristas adicionales al rea de recorte cncava para que se transforme en un polgono convexo. Entonces
se puede aplicar una serie de operaciones de recorte utilizando las componentes del polgono convexo modificado, como se muestra en la Figura 6.20.
El segmento de lnea P1 P2 del apartado (a) de esta figura hay que recortarlo con la ventana cncava de vrtices V1, V2, V3, V4 y V5. En este caso, se obtienen dos regiones de recorte convexas, aadiendo un segmento de lnea de V4 a V1. Despus se recorta la lnea en dos pasos: (1) se recorta la lnea P1 P2 con el polgono
convexo de vrtices V1, V2, V3 y V4 para producir el segmento recortado P1 P2 (vase la Figura 6.20(b)). (2)
Se recorta el segmento de lnea interno P1 P2 utilizando el polgono convexo de vrtices V1, V5 y V4 (Figura
6.20(c)) para producir el segmento de lnea recortado final P1P2 .

Recorte de lneas utilizando ventanas de recorte con lmites no lineales


Los crculos u otras regiones de recorte con lmites curvados tambin son posibles, pero requieren ms procesamiento, ya que los clculos de interseccin implican ecuaciones no lineales. En el primer paso, las lneas

CAP06_HEARN_1P.qxd

336

28/09/2005

10:49

Pgina 336

CAPTULO 6 Visualizacin bidimensional


Ventana de recorte
en forma de
polgono cncavo

V3
V4
P1

P2

V5
V2
V1
(a)

V3
V4
P1

P2

P1

P2
V2
V1

Recorte de segmentos
de lnea exteriores
(b)

V4
P1

P1

P2
V5
V1

Recorte de segmento
de lnea interior
(c)

FIGURA 6.20. Una ventana de recorte con forma de polgono cncavo (a) definida por los vrtices V1, V2, V3, V4 y V5
se modifica para obtener el polgono convexo (b) definido por los vrtices V1, V2, V3 y V4. Los segmentos externos de
la lnea P1 P2 se descartan usando esta ventana de recorte convexa. El segmento de lnea resultante, P1' P2' se procesa
despus de acuerdo con el tringulo (V1, V5, V4) (c) para recortar el segmento de lnea interno P1' P1'' y generar la lnea
recortada final P1'' P2' .

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 lneas restantes se procesan despus mediante clculos de interseccin, que deben ser la solucin simultnea de las ecuaciones de la lnea y
del crculo.

6.8 RECORTE DE REAS DE RELLENO POLIGONALES


Los paquetes grficos habitualmente slo permiten reas de relleno que sean polgonos y, a menudo, slo polgonos convexos. Para recortar un rea de relleno poligonal, no podemos aplicar directamente un mtodo de

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 337

6.8 Recorte de reas de relleno poligonales

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 lneas 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).

Antes del recorte

Despus del recorte

(a)

(b)

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).

Polgono
original

Recorte
izquierdo

Antes del recorte

Despus del recorte

(a)

(b)

FIGURA 6.22. Visualizacin de un rea de relleno poligonal correctamente recortada.

Recorte
derecho

Recorte
inferior

Recorte
superior

FIGURA 6.23. Procesamiento de un rea de relleno poligonal con los sucesivos lmites de la ventana de recorte.

CAP06_HEARN_1P.qxd

338

28/09/2005

10:49

Pgina 338

CAPTULO 6 Visualizacin bidimensional


Ventana de recorte

Extensiones de coordenadas
del rea de relleno poligonal

FIGURA 6.24. Un rea de relleno poligonal con las extensiones de coordenadas fuera del lmite derecho de recorte.
1
1

1
3

3
3

Recorte
3

Ventana
de recorte
2

2
(a)

(b)

FIGURA 6.25. Un rea de relleno poligonal convexa (a), definida por la lista de vrtices {1, 2, 3}, se recorta para producir la forma del rea de relleno mostrada en (b), que se define por la lista de vrtices de salida {1, 2, 2, 3, 3, 1}.

Cuando no podemos identificar si un rea 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.

Recorte de polgonos de Sutherland-Hodgman


Un mtodo eficiente de recorte de reas de relleno poligonales convexas, desarrollado por Sutherland y
Hodgman, consiste en enviar los vrtices del polgono a travs de cada etapa de recorte para que un nico vrtice recortado se pueda pasar inmediatamente a la etapa siguiente. Esto elimina la necesidad de producir como
salida un conjunto de vrtices en cada etapa de recorte, lo que permite que las subrutinas de recorte de bordes
se implementen en paralelo. La salida final es una lista de vrtices que describe las aristas del rea de relleno
poligonal recortada.
Ya que el algoritmo de Sutherland-Hodgman produce slo una lista de vrtices de salida, no puede generar correctamente los dos polgonos de salida de la Figura 6.22(b), que son el resultado del recorte del pol-

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 339

6.8 Recorte de reas de relleno poligonales

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.
(2)
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.
(3)
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.
(4)
Si ambos vrtices de entrada se encuentran fuera de este borde de la ventana de recorte, no se envan
vrtices al siguiente recortador.
El ltimo recortador de esta serie genera una lista de vrtices que describe el rea final 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.
V1

V2

V1

V2

V1
(1)

fuera
dentro
Salida: V1, V2

V2

V1

V1
(2)
dentro
dentro
Salida: V2

V1

V2
(3)
dentro
fuera
Salida: V1

(4)
fuera
fuera
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.

CAP06_HEARN_1P.qxd

340

28/09/2005

10:49

Pgina 340

CAPTULO 6 Visualizacin bidimensional

2
2

Ventana
de recorte

3
2

3
1

Arista de
entrada

Recortador
izquierdo

{1, 2}: (in in)

{2}

{2, 3}: (in out)

{2}

{3, 1}: (out in)

{3, 1}

Recortador
derecho

{2, 2}: (in in)

Recortador
inferior

Recortador
superior

{2}

{2, 3}: (in in)

{3} {2, 3}: (in out)

{2}

{3, 1}: (in in)

{1} {3, 1}: (out out)

{}

{1, 2}: (in in)

{2} {1, 2}: (out in)


{2, 2}: (in in)

{1, 2} {2, 1}: (in in)

{1}

{2} {1, 2}: (in in)

{2}

{2, 2}: (in in)

{2}

{2, 2}: (in in)

{2}

in = dentro; out = fuera

FIGURA 6.27. Procesamiento de un conjunto de vrtices de un polgono, {1, 2, 3}, mediante los recortadores de bordes
utilizando el algoritmo de Sutherland-Hodgman. El conjunto final de vrtices recortados es {1, 2, 2, 2}.

Estas salidas se pasan sucesivamente desde el recortador izquierdo al derecho, al inferior y al superior. La salida del recortador 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.
typedef enum { Left, Right, Bottom, Top } Boundary;
const GLint nClip = 4;
GLint inside (wcPt2D p, Boundary b, wcPt2D wMin, wcPt2D wMax)
{
switch (b) {
case Left: if (p.x < wMin.x) return (false); break;
case Right: if (p.x > wMax.x) return (false); break;
case Bottom: if (p.y < wMin.y) return (false); break;
case Top: if (p.y > wMax.y) return (false); break;
}
return (true);
}
GLint cross (wcPt2D p1, wcPt2D p2, Boundary winEdge, wcPt2D wMin, wcPt2D wMax)
{
if (inside (p1, winEdge, wMin, wMax) == inside (p2, winEdge, wMin, wMax))

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 341

6.8 Recorte de reas de relleno poligonales

341

return (false);
else return (true);
}
wcPt2D intersect (wcPt2D p1, wcPt2D p2, Boundary winEdge, wcPt2D wMin, wcPt2D wMax)
{
wcPt2D iPt;
GLfloat m;
if (p1.x != p2.x) m = (p1.y - p2.y) / (p1.x - p2.x);
switch (winEdge) {
case Left:
iPt.x = wMin.x;
iPt.y = p2.y + (wMin.x - p2.x) * m;
break;
case Right:
iPt.x = wMax.x;
iPt.y = p2.y + (wMax.x - p2.x) * m;
break;
case Bottom:
iPt.y = wMin.y;
if (p1.x != p2.x) iPt.x = p2.x + (wMin.y - p2.y) / m;
else iPt.x = p2.x;
break;
case Top:
iPt.y = wMax.y;
if (p1.x != p2.x) iPt.x = p2.x + (wMax.y - p2.y) / m;
else iPt.x = p2.x;
break;
}
return (iPt);
}
void clipPoint (wcPt2D p, Boundary winEdge, wcPt2D wMin, wcPt2D wMax,
wcPt2D * pOut, int * cnt, wcPt2D * first[], wcPt2D * s)
{
wcPt2D iPt;
/* Si no existe ningn punto anterior para este lmite de recorte,
* guardar este punto. */
if (!first[winEdge])
first[winEdge] = &p;
else
/* Existe un punto previo. Si p y un punto anetrior cruzan este
* lmite de recorte, hallar la intersecccin. Recortar de acuerdo
* con el siguiente lmite, si lo hay. Si no hay ms lmites de recorte,
* aadir la interseccin a la lista de salida. */
if (cross (p, s[winEdge], winEdge, wMin, wMax)) {
iPt = intersect (p, s[winEdge], winEdge, wMin, wMax);
if (winEdge < Top)

CAP06_HEARN_1P.qxd

342

28/09/2005

10:49

Pgina 342

CAPTULO 6 Visualizacin bidimensional

clipPoint (iPt, b+1, wMin, wMax, pOut, cnt, first, s);


else {
pOut[*cnt] = iPt; (*cnt)++;
}
}
/* Guardar p como el punto ms reciente para este lmite de recorte. */
s[winEdge] = p;
/* Para todos, si el punto est dentro, pasar al siguiente lmite
* de recorte, si lo hay. */
if (inside (p, winEdge, wMin, wMax))
if (winEdge < Top)
clipPoint (p, winEdge + 1, wMin, wMax, pOut, cnt, first, s);
else {
pOut[*cnt] = p; (*cnt)++;
}
}
void closeClip (wcPt2D wMin, wcPt2D wMax, wcPt2D * pOut,
GLint * cnt, wcPt2D * first [ ], wcPt2D * s)
{
wcPt2D pt;
Boundary winEdge;
for (winEdge = Left; winEdge <= Top; winEdge++) {
if (cross (s[winEdge], *first[winEdge], winEdge, wMin, wMax)) {
pt = intersect (s[winEdge], *first[winEdge], winEdge, wMin, wMax);
if (winEdge < Top)
clipPoint (pt, winEdge + 1, wMin, wMax, pOut, cnt, first, s);
else {
pOut[*cnt] = pt; (*cnt)++;
}
}
}
}
GLint polygonClipSuthHodg (wcPt2D wMin, wcPt2D wMax, GLint n, wcPt2D * pIn,
wcPt2D * pOut)
{
/* El parmetro "first" guarda un puntero a primer punto porcesado por un
* lmite de recorte; "s" almacena el punto ms recientemente procesado
* por el lmite de recorte.*/
wcPt2D * first[nClip] = { 0, 0, 0, 0 }, s[nClip];
GLint k, cnt = 0;
for (k = 0; k < n; k++)
clipPoint (pIn[k], Left, wMin, wMax, pOut, &cnt, first, s);
closeClip (wMin, wMax, pOut, &cnt, first, s);
return (cnt);
}

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 343

6.8 Recorte de reas de relleno poligonales

343

Ventana de recorte

(a)

(b)

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.

Recorte de polgonos de Weiler-Atherton


Este algoritmo proporciona una tcnica general de recorte de polgonos que se puede utilizar para recortar un
rea de relleno que sea un polgono convexo o un polgono cncavo. Adems, este mtodo se desarroll como
medio de identificacin de superficies visibles de una escena tridimensional. Por tanto, podramos tambin
utilizar esta tcnica para recortar cualquier rea de relleno poligonal segn una ventana de recorte con cualquier forma poligonal.
En lugar de simplemente recortar las aristas del rea de relleno como en el mtodo de SutherlandHodgman, el algoritmo de Weiler-Atherton recorre el permetro del polgono de relleno en busca de los lmites que encierran una regin de relleno recortada. De este modo, como se observa en la Figura 6.28(b), se pueden identificar mltiples regiones de relleno y mostrarlas como polgonos independientes y no conectados.
Para encontrar las aristas de un rea de relleno recortada, seguimos un camino (en sentido antihorario o en
sentido horario) alrededor del rea de relleno que se desva a lo largo de un lmite de ventana de recorte, cada
vez que una arista de un polgono cruza hacia el exterior de dicho lmite. La direccin de un desvo en una
arista de una ventana de recorte es la misma que la direccin de procesamiento de las aristas del polgono.
Habitualmente, podemos determinar si la direccin de procesamiento es en sentido antihorario o en sentido horario, a partir de la ordenacin de la lista de vrtices que define un rea de un polgono de relleno. En la
mayora de los casos, la lista de vrtices se especifica en sentido antihorario como un medio para definir la
cara frontal del polgono. Por tanto, el producto vectorial de los vectores de dos aristas sucesivas que forman
un ngulo convexo determina la direccin del vector normal, que est en la direccin de la cara posterior hacia
la cara frontal del polgono. Si no conocemos la ordenacin de los vrtices, podramos calcular el vector normal, o podramos usar un mtodo cualquiera de los estudiados en la Seccin 3.15 para localizar el interior del
rea de relleno a partir de cualquier posicin de referencia. Despus, si procesamos secuencialmente las aris-

CAP06_HEARN_1P.qxd

344

28/09/2005

10:49

Pgina 344

CAPTULO 6 Visualizacin bidimensional

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-Atherton:
(1)

(2)

(3)
(4)

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 continue procesando las aristas del polgono en orden contrario al movimiento de las agujas del reloj.

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 1 y seguimos el lmite izquierdo
hacia la interseccin 1. 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
(rea

nud
ar)

1
1

3
r) 1
(para

6(
re

anu

dar

1
5

5
5

Ventana
de recorte

5
4

4
(a)

(b)

FIGURA 6.29. Un polgono cncavo (a), definido mediante la lista de vrtices {1, 2, 3, 4, 5, 6}, se recorta utilizando el
algoritmo de Weiler-Atherton para generar las dos listas {1, 1, 1, 1} y {4, 5, 5}, que representan las reas de relleno poligonales e independientes mostradas en (b).

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 345

6.8 Recorte de reas de relleno poligonales

rea de
relleno
poligonal

Ventana de
recorte

rea de
relleno
recortada

345

FIGURA 6.30. Recorte de un rea de relleno poligonal con una


ventana de recorte poligonal cncava utilizando el algoritmo de
Weiler-Atherton.

vrtices {1, 1, 1, 1} 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, todos los vrtices y las aristas del polgono se han procesado, por lo que el rea de relleno est completamente recortada.

Recorte de polgonos utilizando ventanas de recorte poligonales no rectangulares


El algoritmo de Liang-Barsky y otros mtodos de recorte de lneas paramtricos estn particularmente bien
adecuados para el procesamiento de reas de relleno de polgonos con ventanas de recorte poligonales y convexas. En esta tcnica, utilizamos una representacin paramtrica de las aristas tanto del rea de relleno como
de la ventana de recorte, y ambos polgonos se representan mediante listas de vrtices. En primer lugar, comparamos las posiciones de las rectngulos frontera del rea de relleno y del polgono de recorte. Si no podemos identificar el rea de relleno como completamente fuera del polgono de recorte, podemos utilizar las
pruebas dentro-fuera para procesar las ecuaciones paramtricas de las aristas. Despus de finalizar todas
las pruebas de las regiones, resolvemos sistemas de dos ecuaciones paramticas de lneas para determinar las
intersecciones con la ventana.
Tambin podemos procesar cualquier rea de relleno de un polgono con cualquier ventana de recorte de
forma poligonal (convexa o cncava), como en la Figura 6.30, utilizando la tcnica arista-transversal del algoritmo de Weiler-Aherton. En este caso, necesitamos mantener una lista de vrtices de la ventana de recorte as
como del rea de relleno, organizadas con un orden en el sentido contrario al movimiento de las agujas del
reloj (o a favor). Necesitamos aplicar pruebas dentro-fuera para determinar si un vrtice del rea de relleno
est dentro o fuera de los lmites de una ventana de recorte particular. Como en los ejemplos anteriores, seguimos los lmites de la ventana cada vez que una arista del rea de relleno sale de uno de los lmites de recorte. Este mtodo de recorte tambin se puede utilizar cuando el rea de relleno o la ventana de recorte contienen
agujeros que quedan definidos mediante lmites poligonales. Adems, podemos utilizar esta tcnica bsica en
aplicaciones de construccin de geometra de slidos para identificar la unin, la interseccin o la diferencia
de dos polgonos. De hecho, la localizacin de la regin recortada de un rea de relleno es equivalente a la
determinacin de la interseccin de dos reas planas.

Recorte de polgonos utilizando ventanas de recorte con lmites no lineales


Un mtodo para procesar una ventana de recorte con lmites curvados consiste en aproximar los lmites con
partes de lneas rectas y utilizar uno de los algoritmos de recorte con una ventana de recorte de forma poligo-

CAP06_HEARN_1P.qxd

346

28/09/2005

10:49

Pgina 346

CAPTULO 6 Visualizacin bidimensional

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.

6.9 RECORTE DE CURVAS


Las reas con lmites curvos se pueden recortar con mtodos similares a los estudiados en los apartados anteriores. Si los objetos se aproximan mediante secciones de lnea recta, se puede emplear un mtodo de recorte de polgonos. De otro modo, los procedimientos de recorte implican ecuaciones no lineales, y esto requiere ms procesamiento que para los objetos con lmites lineales.
En primer lugar podemos comprobar las extensiones de coordenadas de un objeto respecto a los lmites de
recorte, para determinar si es posible aceptar trivialmente o rechazar el objeto entero. Si no, podramos comprobar las simetras del objeto que podramos explotar en las pruebas iniciales de aceptacin o rechazo. Por
ejemplo, los crculos presentan simetras entre cuadrantes y octantes, por lo que podramos comprobar las
extensiones de las coordenadas de estas regiones individuales del crculo. No podemos rechazar el rea de
relleno circular completa de la Figura 6.31 slo comprobando sus extensiones de coordenadas en conjunto.
Pero la mitad del crculo est fuera del lmite derecho de recorte (o fuera del lmite superior), el cuadrante
superior izquierdo est encima del lmite superior de recorte, y los dos octantes restantes se pueden eliminar
de forma similar.
Un clculo de interseccin implica la sustitucin de una posicin en el lmite de recorte (xwmin, xwmax,
ywmin, o ywmax) en la ecuacin no lineal de los lmites del objeto y la resolucin para la otra coordenada. Una
vez que todas las intersecciones se han evaluado, los puntos que definen el objeto se pueden almacenar para
su uso posterior en procedimientos de relleno por lnea de barrido. La Figura 6.32 muestra el recorte de un
crculo con una ventana rectangular. En este ejemplo, el radio del crculo y los puntos extremos del arco recortado se pueden utilizar para rellenar la regin recortada, invocando el algoritmo del crculo para localizar los
puntos a lo largo del arco entre los puntos extremos de interseccin.
Se pueden aplicar procedimientos similares cuando se recorta un objeto curvado con una regin de recorte de forma poligonal general. En el primer paso, podramos comparar el rectngulo delimitador del objeto
con el rectngulo delimitador de la regin de recorte. Si no se almacena o elimina el objeto entero, a continuacin resolvemos el sistema de ecuaciones de lneas y las curvas para determinar los puntos de interseccin
de recorte.

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.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 347

6.10 Recorte de textos

347

Antes del recorte

FIGURA 6.32. Recorte de un rea de relleno circular.

Despus del recorte

6.10 RECORTE DE TEXTOS


Existen varias tcnicas que se pueden utilizar para proporcionar recorte de textos en un paquete grfico. En
una aplicacin concreta, la eleccin del mtodo de recorte depende de cmo se generen los caracteres y de
qu requisitos tengamos para la visualizacin de cadenas de caracteres.
El mtodo ms simple para procesar las cadenas de caracteres relativo a los lmites de la ventana de recorte consiste en utilizar la estrategia de recorte de cadenas todo o ninguno mostrada en la Figura 6.33. Si toda
la cadena se encuentra dentro de la ventana de recorte, visualizamos la cadena completa. En caso contrario,
se elimina la cadena completa. Este procedimiento se implementa examinando las extensiones de coordenadas de la cadena de caracteres. Si los lmites de las coordenadas de este rectngulo delimitador no estn completamente dentro de la ventana de recorte, se rechaza la cadena.
Una alternativa consiste en utilizar la estrategia de recorte de caracteres todo o ninguno. Aqu eliminamos
slo aquellos caracteres que no estn completamente dentro de la ventana de recorte (Figura 6.34). En este

CADENA 1

CADENA 2
Antes del recorte

CADENA 2
Despus del recorte

FIGURA 6.33. Recorte de texto utilizando las extensiones de coordenadas para una cadena completa.

CAP06_HEARN_1P.qxd

348

28/09/2005

10:49

Pgina 348

CAPTULO 6 Visualizacin bidimensional

CADENA 1
NA

E
AD

C
CADENA 3
CADENA 4

Antes del recorte

NA 1
D
CA
ADENA 3
CADENA 4

Despus del recorte

FIGURA 6.34. Recorte de texto utilizando el rectngulo delimitador para caracteres individuales de una cadena.

CADENA 1
A

N
DE

CA

Antes del recorte

CADENA 1

CA

Despus del recorte

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 tratabamos las lneas 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 pxeles individuales en los patrones de
rejilla de caracteres con los lmites de la regin de recorte.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 349

Resumen

349

6.11 RESUMEN
La pipeline de transformacin de visualizacin 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 1 y 1, 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. Cohen 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
bidimensionales.
Tambin se han desarrollado algoritmos de recorte de segmentos de lnea 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.

CAP06_HEARN_1P.qxd

350

28/09/2005

10:49

Pgina 350

CAPTULO 6 Visualizacin bidimensional

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 Sutherland-Hodgman, 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 Sutherland-Hodgman produce extraos segmentos de lnea de
conexin. Tambin se pueden utilizar para recortar reas de relleno de polgonos convexos, ampliaciones de
recortadores de lnas 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 paramtricas. 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 GLU 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 BIDIMENSIONAL.
Funcin

Descripcin

gluOrtho2D

Especifica las coordenadas de la ventana de recorte en sus argumentos de una


proyeccin ortogonal bidimensional.

glViewport

Especifica los parmetros del sistema de coordenadas de pantalla de una vista.

glGetIntegerv

Utiliza los argumentos GL_VIEWPORT y vpArray para obtener los parmetros


de la vista activa actual.

glutInit

Inicializa la biblioteca GLUT.

glutInitWindowPosition

Especifica las coordenadas de la esquina superior izquierda de la ventana de


visualizacin.

glutInitWindowSize

Especifica la anchura y la altura de la ventana de visualizacin.

glutCreateWindow

Crea una ventana de visualizacin (a la que se asigna un identificador entero) y


especifica un ttulo para la misma.

(Contina)

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 351

Resumen

351

TABLA 6.1. RESUMEN DE LAS FUNCIONES DE VISUALIZACIN BIDIMENSIONAL DE OpenGL. (Cont.)


Funcin

Descripcin

glutInitDisplayMode

Selecciona parmetros tales como los bferes y el modo de color de una ventana
de visualizacin.

glClearColor

Especifica un color RGB de fondo en una ventana de visualizacin.

glClearIndex

Especifica un color de fondo de una ventana de visualizacin utilizando el modo


de color indexado.

glutDestroyWindow

Especifica un nmero identificador de una ventana de visualizacin que hay que


borrar.

glutSetWindow

Especifica el nmero identificador de una ventana de visualizacin que debe ser


establecida como la ventana de visualizacin actual.

glutPositionWindow

Restablece la localizacin en la pantalla de la ventana de visualizacin actual.

glutReshapeWindow

Restablece la anchura y la altura de la ventana de visualizacin actual.

glutFullScreen

Cambia la ventana de visualizacin actual al tamao de la pantalla de vdeo.

glutReshapeFunc

Especifica la funcin que se debe invocar cuando se cambia el tamao de la ventana de visualizacin.

glutIconifyWindow

Convierte la ventana de visualizacin actual en un icono.

glutSetIconTitle

Especifica una etiqueta para un icono de la ventana de visualizacin.

glutSetWindowTitle

Especifica un nuevo ttulo para la ventana de visualizacin actual.

glutPopWindow

Mueve la ventana de visualizacin actual hacia la cima; es decir, la coloca


encima de las dems ventanas.

glutPushWindow

Mueve la ventana de visualizacin actual hacia el fondo; es decir, la coloca


detrs de las dems ventanas.

glutShowWindow

Muestra en pantalla la ventana de visualizacin actual.

GlutCreateSubWindow

Crea una ventana de segundo nivel dentro de una ventana de visualizacin.

glutSetCursor

Selecciona una forma para el cursor de pantalla.

glutDisplayFunc

Invoca una funcin para crear una imagen dentro de la ventana de visualizacin
actual.

glutPostRedisplay

Redibuja los contenidos de la ventana actual.

glutMainLoop

Ejecuta el programa de grficos por computadora.

glutIdleFunc

Especifica una funcin para su ejecucin cuando el sistema no tiene algo que
hacer.

glutGet

Pregunta al sistema acerca de un parmetro de estado espeficado.

CAP06_HEARN_1P.qxd

352

28/09/2005

10:49

Pgina 352

CAPTULO 6 Visualizacin 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 Nicholl (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 Atherton (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 visualizacin de OpenGL. Las subrutinas de GLUT de ventanas de visualizacin se estudian en Kilgard (1996) y se puede obtener informacin
adicional sobre GLUT en el sitio web: http://reality.sgi.com/opengl/glut3/glut3.html.

EJERCICIOS
6.1

Escriba un procedimiento para calcular los elementos de la matriz 6.1 de transformacin bidimensional de coordenadas universales a coordenadas de visualizacin, proporcionando las coordenadas del origen de visualizacin
P0 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

Escriba un procedimiento para calcular los elementos de la matriz 6.9 de transformacin de una ventana de recorte en el cuadrado normalizado y simtrico.

6.4

Escriba un conjunto de procedimientos para implementar la tubera de visualizacin bidimensional sin las operaciones de recorte. Su programa debera permitir que se construya una escena con transformaciones de coordenadas de modelado, un sistema de visualizacin especificado y una transformacin al cuadrado normalizado y simtrico. De forma opcional, se podra implementar una tabla de visualizacin para almacenar diferentes conjuntos
de parmetros de transformacin de visualizacin.

6.5

Escriba un programa completo para implementar el algoritmo de recorte de lneas de Cohen-Sutherland.

6.6

Estudie cuidadosamente el fundamento lgico de los tests y los mtodos para el clculo de los parmetros de las
intersecciones u1 y u2 del algoritmo de recorte de lneas de Liang-Barsky.

6.7

Compare el nmero de operaciones aritmticas realizados en los algoritmos de recorte de lneas de CohenSutherland y Liang-Barsky para varias orientaciones diferentes de lnea relativas a la ventana de recorte.

6.8

Escriba un programa completo para implementar el algoritmo de recorte de lneas de Liang-Barsky.

6.9

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.

6.10

Establezca un algoritmo detallado para la tcnica de Nicholl-Lee-Nicholl de recorte de lneas para cualquier par
de puntos extremos de lnea de entrada.

6.11

Compare el nmero de operaciones aritmticas realizadas en el algoritmo NLN con los algoritmos de CohenSutherland y de Liang-Barsky de recorte de lneas, para varias orientaciones diferentes de lnea respecto de la ventana de recorte.

6.12

Adapte el algoritmo de recorte de lneas de Liang-Barsky al recorte de polgonos.

6.13

Establezca un algoritmo detallado para el recorte de polgonos de Weiler-Atherton, asumiendo que la ventana de
recorte es un rectngulo en posicin estndar.

6.14

Idee un algoritmo para el recorte de polgonos de Weiler-Atherton, en el que la ventana de recorte pueda ser cualquier polgono convexo.

CAP06_HEARN_1P.qxd

28/09/2005

10:49

Pgina 353

Ejercicios

353

6.15

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).

6.16

Escriba una subrutina para recortar una elipse en posicin estndar con una ventana rectangular.

6.17

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.

6.18

Desarrolle un algoritmo de recorte de texto que recorte caracteres individuales, asumiendo que los caracteres se
definen en una cuadrcula de pxeles de un tamao especificado.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 354

CAPTULO 7

Visualizacin tridimensional

El Templo de Luxor, una escena de un vdeo de E&S Digital Theater donde se realiza una visualizacin
tridimensional en tiempo real con tcnicas de animacin infogrfica. (Cortesa de Evans & Sutherland.)

CAP07_HEARN_1P.qxd

7.1
7.2
7.3
7.4
7.5
7.6

28/09/2005

11:34

Pgina 355

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

7.7
7.8
7.9
7.10
7.11
7.12
7.13

Proyecciones paralelas oblicuas


Proyecciones en perspectiva
Transformacin del visor y coordenadas de
pantalla tridimensionales
Funciones de visualizacin tridimensional
OpenGL
Algoritmos de recorte tridimensional
Planos de recorte opcionales en OpenGL
Resumen

Para aplicaciones grficas bidimensionales, las operaciones de visualizacin transfieren las posiciones desde
el sistema de referencia en coordenadas universales a posiciones de pxeles 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.

7.1 PANORMICA DE LOS CONCEPTOS DE VISUALIZACIN TRIDIMENSIONAL


Cuando modelamos una escena tridimensional, cada objeto de la escena se suele definir mediante un conjunto de superficies que forman un conjunto cerrado alrededor del interior del objeto. Y para algunas aplicaciones puede que tambin tengamos que especificar informacin acerca de la estructura interior del objeto.
Adems de proporcionar procedimientos que generan vistas de las caractersticas superficiales de un objeto,
los paquetes grficos proporcionan en ocasiones rutinas para mostrar los componentes internos o vistas en seccin transversal de un objeto slido. Las funciones de visualizacin procesan a las descripciones de los objetos mediante una serie de procedimientos que proyectan una vista especificada de los objetos sobre la
superficie de un dispositivo de salida. Muchos procesos de visualizacin tridimensional, como las rutinas de
recorte, son similares a los que podemos encontrar en una pipeline de visualizacin bidimensional. Pero la
visualizacin tridimensional requiere algunas otras tareas que no estn presentes en su equivalente bidimensional. Por ejemplo, se necesitan rutinas de proyeccin para transferir la escena a una vista sobre una superficie plana; asimismo, es necesario identificar las partes visibles de una escena y, para tener una imagen
realista, es necesario tener en cuenta los efectos de iluminacin y las caractersticas de las superficies.

Visualizacin de una escena tridimensional


Para obtener una imagen de una escena tridimensional definida en coordenadas universales, primero necesitamos definir un sistema de referencia de coordenadas para los parmetros de visualizacin, o parmetros de
la cmara. Este sistema de referencia define la posicin y orientacin de un plano de visualizacin (o plano
de proyeccin) que se corresponde con el plano de la pelcula de una cmara (Figura 7.1). Entonces, se transfieren las descripciones de los objetos al sistema de coordenadas de visualizacin y se proyectan sobre el

CAP07_HEARN_1P.qxd

356

28/09/2005

11:34

Pgina 356

CAPTULO 7 Visualizacin tridimensional

Plano de
visualizacin

FIGURA 7.1. Sistema de coordenadas de referencia para obtener una vista


seleccionada de una escena tridimensional.

FIGURA 7.2. Visualizacin almbrica de tres objetos en


la que se han eliminado las lneas posteriores; las imgenes estn extradas de una base de datos comercial de
formas de objetos. Cada objeto de la base de datos est
definido mediante una cuadrcula tridimensional de
puntos que pueden visualizarse en forma almbrica o
como un slido con superficie sombreada. (Cortesa 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 del 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

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 357

7.1 Panormica de los conceptos de visualizacin tridimensional

Superior

Lateral

Frontal

357

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 & Sutherland.)

(a)

(b)

(c)

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 bidimensional 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.

CAP07_HEARN_1P.qxd

358

28/09/2005

11:34

Pgina 358

CAPTULO 7 Visualizacin tridimensional

FIGURA 7.6. Una representacin almbrica de un objeto con informacin de


profundidad, de modo que el brillo de las lneas disminuye desde la parte
frontal del objeto hacia la parte posterior.

Identificacin de lneas y superficies visibles


Tambin podemos clarificar las relaciones de profundidad en una representacin almbrica de una escena utilizando tcnicas distintas de la variacin de las intensidades con la distancia. Una posibilidad consiste simplemente en resaltar las lneas visibles o en mostrarlas con un color diferente. Otra tcnica, comnmente utilizada
en los dibujos de ingeniera, consiste en mostrar las lneas no visibles como lneas punteadas. Tambin podemos eliminar las lneas no visibles de la imagen como en la Figura 7.5(b) y 7.5(c). Pero al eliminarse las lneas ocultas tambin se elimina informacin acerca de la forma de las superficies posteriores de un objeto, y la
realidad es que las representaciones almbricas se utilizan generalmente para obtener una indicacin de la apariencia global de un objeto, incluyendo tanto su parte frontal como la posterior.
Cuando hay que generar una vista realista de una escena, se eliminan completamente las partes posteriores de los objetos, de modo que slo se muestran las superficies visibles. En este caso, se aplican procedimientos de representacin superficial para que los pxeles de la pantalla slo contengan la informacin de color
correspondiente a las superficies frontales.

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
seleccionadas de la superficie. (Cortesa de John
Snyder, Jed Lengyel, Devendra Kalra y Al Barr,
California Institute of Technology. Copyright
1992 Caltech.)

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 359

7.1 Panormica de los conceptos de visualizacin tridimensional

359

Despieces y secciones transversales


Muchos paquetes grficos permiten definir los objetos como estructuras jerrquicas, con lo que pueden almacenarse los detalles internos. Entonces, pueden utilizarse despieces y secciones transversales de dichos objetos para mostrar la estructura interna y las relaciones de las partes del objeto. La Figura 7.8 muestra diferentes
tipos de despieces para un diseo mecnico. Una alternativa al despiece de un objeto con el fin de mostrar sus
partes componentes consiste en generar una seccin transversal, como en la Figura 7.9, que elimina partes de
las superficies visibles con el fin de que se vea la estructura interna.

(a)

(b)

(c)

(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. (Cortesa de
Autodesk, Inc.)

CAP07_HEARN_1P.qxd

360

28/09/2005

11:34

Pgina 360

CAPTULO 7 Visualizacin tridimensional

Visualizacin tridimensional y estereoscpica


Otros mtodos para dar una sensacin de realismo a una escena infogrfica incluyen la utilizacin de monitores tridimensionales y vistas estereoscpicas. Como hemos visto en el Captulo 2, pueden obtenerse imgenes tridimensionales reflejando una imagen bidimensional en un espejo vibratorio y flexible. Las vibraciones
del espejo estn sincronizadas con la visualizacin de la escena en el TRC. A medida que el espejo, la longitud focal vara, de modo que cada punto de la escena se refleja a una posicin espacial que se corresponde
con su profundidad.
Los dispositivos estereoscpicos presentan dos vistas de una escena: una para el ojo izquierdo y la otra
para el ojo derecho. Las posiciones de visualizacin se corresponden con las posiciones de los ojos de la
persona que contempla la escena. Estas dos vistas se suelen mostrar en ciclos alternativos de refresco de un
monitor convencional. Cuando contemplamos el monitor mediante unas gafas especiales que oscurecen alternativamente primero una de las lentes y luego la otra, en sincronizacin con los ciclos de refresco del monitor, se puede ver la escena con un efecto tridimensional.

7.2 PIPELINE DE VISUALIZACIN TRIDIMENSIONAL


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. En 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 tomamos la fotografa, 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 infogrfico tenemos 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 partes 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

x
z

FIGURA 7.10. La fotografa de una escena implica seleccionar la posicin y orientacin de la cmara.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 361

7.2 Pipeline de visualizacin tridimensional

361

una ventana de recorte bidimensional para seleccionar la vista que haya 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 volumen de visualizacin y su forma y tamao
dependen de las dimensiones de la ventana de recorte, del tipo de proyeccin que seleccionemos y de las posiciones lmite 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.
Al 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 regla 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.

CM

Transformacin
de modelado

CU

Transformacin
de visualizacin

CV

Transformacin
de proyeccin

CP

Transformacin
de normalizacin
y recorte

CN

Transformacin
de visor

CD

FIGURA 7.11. Pipeline general tridimensional de transformacin 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.

CAP07_HEARN_1P.qxd

362

28/09/2005

11:34

Pgina 362

CAPTULO 7 Visualizacin tridimensional

7.3 PARMETROS DE COORDENADAS DE VISUALIZACIN TRIDIMENSIONAL


Establecer un sistema de referencia de visualizacin tridimensional es similar al caso bidimensional analizado en la Seccin 6.2. Primero se selecciona una posicin en coordenadas universales P0 (x0, y0, z0) para el
origen de la visualizacin, que se denominar punto de vista o posicin de visualizacin. (Algunas veces el
punto de vista tambin se denomina posicin del ojo o posicin de la cmara.) Tambin se especifican un vector vertical V, que define la direccin yview. Para un espacio tridimensional, necesitamos tambin asignar una
direccin para uno de los dos restantes ejes de coordenadas. Esto se suele llevar a cabo con un segundo vector que define el eje zview, estando la direccin de visualizacin definida sobre este eje. La Figura 7.12 ilustra
el posicionamiento de un sistema de referencia de visualizacin tridimensional dentro de un sistema de coordenadas universales.

Vector normal del plano de visualizacin


Puesto que la direccin de visualizacin suele estar definida segn el eje zview, normalmente se asume que el
plano de visualizacin, tambin llamado plano de proyeccin, es perpendicular a este eje. As, la orientacin del plano de visualizacin y la direccin del eje zview positivo pueden definirse mediante un vector normal del plano de visualizacin N, como se muestra en la Figura 7.13. Se utiliza un parmetro escalar
adicional para establecer la posicin del plano de visualizacin en un cierto valor de coordenada zvp segn el
eje zview, como se ilustra en la Figura 7.14. Este parmetro se suele especificar como una distancia con respecto al origen de visualizacin segn la direccin de visualizacin, que normalmente se toma en la direccin
zview negativa. As, el plano de visualizacin es siempre paralelo al plano xviewyview y la proyeccin de los
objetos sobre el plano de visualizacin se corresponde con la vista de la escena que se mostrar en el dispositivo de salida.
El vector N puede especificarse de diversas formas. En algunos sistemas grficos, la direccin de N se
define segn la lnea que va del origen de coordenadas universales hasta un punto seleccionado. Otros sistemas definen N en la direccin que va desde un punto de referencia Pref hasta el origen de coordenadas de
visualizacin P0, como en la Figura 7.15. En este caso, el punto de referencia suele denominarse punto observado de la escena, siendo la direccin de visualizacin opuesta a la direccin de N.
Tambin podramos definir el vector normal al plano de visualizacin, y otras direcciones de vectores, utilizando ngulos de direccin. Estos son los tres ngulos , y que una lnea espacial forma con los ejes x,
y y z, respectivamente. Pero normalmente resulta bastante ms fcil especificar la direccin de un vector
mediante dos puntos de una escena que mediante los ngulos de direccin.
yview
xview

yw

FIGURA 7.12. Un sistema de coordenadas de visualizacin que cumple la regla de la mano derecha, con ejes
xview, yview y zview, relativo a un sistema de referencia en
coordenadas universales que tambin cumple la regla de
la mano derecha.

zview
P0 (x0, y0, z0)
xw

zw
yview
yw

P0
N

FIGURA 7.13. Orientacin del plano de visualizacin y


del vector normal a dicho plano N.

zw

xview

xw

Plano de
visualizacin

zview

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 363

7.3 Parmetros de coordenadas de visualizacin tridimensional

363

yview

zvp 0
xview

zvp 0

FIGURA 7.14. Tres posibles posiciones para el plano de visualizacin segn el eje zview.

zvp 0
zview

yview

xview

yw

zview
N

Pref

zw

xw

P0

FIGURA 7.15. Especificacin del vector normal al plano de


visualizacin N como la direccin desde un punto de referencia
seleccionado Pref hasta el origen de las coordenadas de visualizacin P0.

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 eje yview.
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 zview, 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.
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 yw; en otras
palabras, podemos definir V (0, 1, 0).

Sistema de referencia de coordenadas de visualizacin uvn


En los paquetes grficos se utilizan en ocasiones coordenadas de visualizacin que cumplen la regla de la
mano izquierda, estando la visualizacin definida en la direccin zview. Con un sistema que cumpla la regla
de la mano izquierda, los valores crecientes de zview representan puntos progresivamente ms alejados de la
posicin de visualizacin, segn la lnea de visin. Pero suelen ser ms comunes los sistemas de visualizacin
Entrada
V
Ajustado
V

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.

CAP07_HEARN_1P.qxd

364

28/09/2005

11:34

Pgina 364

CAPTULO 7 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. Esto 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 normalizacin.
Puesto que la normal al plano de visualizacin N define la direccin del eje zview y el vector vertical V se
utiliza para obtener la direccin del eje yview, lo nico que nos queda es determinar la direccin del eje xview.
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 xview 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 yview 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:
n=

N
= (nx , ny , nz )
N

u=

Vn
= (ux , uy , uz )
V

(7.1)

v = n u = ( v x , v y , vz )
El sistema de coordenadas formado por estos tres vectores unitarios se suele denominar sistema de referencia uvn de coordenadas de visualizacin (Figura 7.17).

Generacin de efectos de visualizacin tridimensionales


Variando los parmetros de visualizacin, podemos obtener diferentes vistas de los objetos de una escena. Por
ejemplo, desde una posicin de visualizacin fija, podramos cambiar la posicin de N para mostrar los objetos situados en las posiciones que rodean el origen del sistema de coordenadas de visualizacin. Tambin
podemos variar N para crear una imagen compuesta que contenga mltiples vistas tomadas desde una posicin de cmara fija. La Figura 7.18 muestra una imagen de gran angular creada para un entorno de realidad
virtual. El efecto de gran angular se consigue generando siete vistas de la escena desde la misma posicin de
visualizacin, pero con pequeos desplazamientos de la direccin de visualizacin y combinando luego las
vistas con el fin de mostrar una imagen compuesta. De forma similar, podemos generar vistas estereoscpicas desplazando la direccin de visualizacin. En este caso, sin embargo, tambin tendremos que desplazar el
punto de vista para simular la posicin de los dos ojos.
yview

v
u
n
zview

xview

FIGURA 7.17. Un sistema de visualizacin que cumple la regla de la


mano derecha, definido mediante los vectores unitarios u, v y n.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 365

7.3 Parmetros de coordenadas de visualizacin tridimensional

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 Supercomputing
Applications, Universidad de Illinois en Urbana-Champaign.)
yw

xw

P0

P0
zw

P0

N
N
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 de 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.

CAP07_HEARN_1P.qxd

366

28/09/2005

11:34

Pgina 366

CAPTULO 7 Visualizacin tridimensional

Pref
N

FIGURA 7.20. Visualizacin de un objeto desde diferentes direcciones utilizando un punto de referencia fijo.

FIGURA 7.21. Una interfaz interactiva para controlar los


parmetros de visualizacin, desarrollada en la Universidad
de Manchester utilizando la herramienta PHIGS 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 TRANSFORMACIN DE COORDENADAS UNIVERSALES A COORDENADAS


DE VISUALIZACIN
En la pipeline de visualizacin tridimensional, el primer paso despus de construir una escena consiste en
transferir las descripciones de los objetos al sistema de coordenadas de visualizacin. Esta conversin de las
descripciones de los objetos es equivalente a una secuencia de transformaciones que superpone el sistema de

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 367

7.4 Transformacin de coordenadas universales a coordenadas de visualizacin

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)
Desplazar el origen de coordenadas de visualizacin al origen del sistema de coordenadas universales.
(2)
Aplicar rotaciones para alinear los ejes xview, yview y zview con los ejes de coordenadas universales xw,
yw y zw, respectivamente.
El origen de coordenadas de visualizacin se encuentra en la posicin P (x0, y0, z0) en coordenadas universales. Por tanto, la matriz para desplazar el origen de coordenadas de visualizacin al origen de coordenadas universales es:
1 0 0 x0
0 1 0 y
0
T=
(7.2)
0 0 1 z0

0 0 0 1
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:
ux

vx
R=
n
x
0

uy

uz

vy

vz

ny

nz

0
0

(7.3)

donde los elementos de la matriz R son las componentes de los vectores de los ejes uvn.
La matriz de transformacin de coordenadas se obtiene entonces calculando el producto de las dos matrices anteriores de desplazamiento y de rotacin:
MWC ,VC = R T
ux

vx
=
n
x
0

uy

uz

vy

vz

ny

nz

u P0

v P0
n P0

(7.4)

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 P0, 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 P0 sobre cada uno de los ejes de coordenadas de visualizacin (el negado de
las componentes de P0 en coordenadas de visualizacin). Estos elementos de la matriz se evalan de la forma
siguiente:
(7.5)
u P = x u y u z u
0

0 x

0 y

0 z

v P0 = x0 vx y0 vy z0 vz
n P0 = x0 nx y0 ny z0 nz
La Matriz 7.4 transfiere las descripciones de los objetos en coordenadas universales al sistema de referencia de visualizacin.

CAP07_HEARN_1P.qxd

368

28/09/2005

11:34

Pgina 368

CAPTULO 7 Visualizacin tridimensional

7.5 TRANSFORMACIONES DE PROYECCIN


En la siguiente fase de la pipeline de visualizacin tridimensional, despus de realizada la transformacin a
coordenadas de visualizacin, las descripciones de los objetos se proyectan sobre el plano de visualizacin.
Los paquetes grficos soportan en general tanto proyecciones paralelas como en perspectiva.
En una proyeccin paralela, las coordenadas se transfieren al plano de visualizacin segn una serie de
lneas paralelas. La Figura 7.22 ilustra una proyeccin paralela para un segmento de lnea recta definido
mediante los extremos P1 y P2. Una proyeccin paralela preserva las proporciones relativas de los objetos, y
ste es el mtodo utilizado en diseo asistido por computadora con el fin de generar imgenes a escala de objetos tridimensionales. Todas las lneas paralelas de una escena se muestran como paralelas cuando se las contempla mediante una proyeccin paralela. Hay dos mtodos generales para obtener una vista de proyeccin
paralela de un objeto: podemos proyectar el objeto segn lneas que sean perpendiculares al plano de visualizacin, o podemos utilizar un ngulo oblicuo con respecto al plano de visualizacin.
Para una proyeccin en perspectiva, las posiciones de los objetos se transforman a las coordenadas de
proyeccin segn una serie de lneas que convergen en un punto situado detrs del plano de visualizacin. En
la Figura 7.23 se proporciona un ejemplo de proyeccin en perspectiva para un segmento de lnea recta definido mediante los extremos P1 y P2. A diferencia de una proyeccin paralela, la proyeccin en perspectiva no
preserva las proporciones relativas de los objetos. Sin embargo, las vistas en perspectiva de una escena son
ms realistas, porque los objetos distantes tienen un tamao ms pequeo en la imagen proyectada.

7.6 PROYECCIONES ORTOGONALES


Una transformacin de un objeto a un plano de visualizacin segn lneas paralelas al vector normal al plano
de visualizacin N se denomina proyeccin ortogonal (o tambin proyeccin ortogrfica). Esto produce
una transformacin de proyeccin paralela en la que las lneas de proyeccin son perpendiculares al plano
de visualizacin. Las proyecciones ortogonales se suelen utilizar para generar las vistas frontal, lateral y
superior de un objeto, como se muestra en la Figura 7.24. Las proyecciones ortogonales frontal, lateral y posterior de un objetos se denominan elevaciones, mientras que una proyeccin ortogonal superior se denomina vista plana. Los grficos de ingeniera y arquitectura suelen emplear estas proyecciones ortogrficas, ya
Plano de
visualizacin

P2
P2
P1
P1

FIGURA 7.22. Proyeccin paralela de un segmento de lnea


sobre un plano de visualizacin.

Plano de
visualizacin

P2
P2
P1

FIGURA 7.23. Proyeccin en perspectiva de un segmento


de lnea sobre un plano de visualizacin.

P1

Punto de
convergencia

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 369

7.6 Proyecciones ortogonales

369

Vista plana

Vista de elevacin lateral

Vista de elevacin frontal

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.

Proyecciones ortogonales axonomtricas e isomtricas


Tambin podemos formar proyecciones ortogonales que muestren ms de una cara de un objeto. Dichas vistas se denominan proyecciones ortogonales axonomtricas. La proyeccin axonomtrica ms comnmente
utilizada es la proyeccin isomtrica, que se genera alineando el plano de proyeccin (o el objeto) de modo
que el plano intersecte todos los ejes de coordenadas sobre los que est definido el objeto, denominados ejes
principales, a la misma distancia del origen. La Figura 7.25 muestra una proyeccin isomtrica de un cubo.
Podemos obtener la proyeccin isomtrica mostrada en esta figura alineando el vector normal al plano de
visualizacin segn una diagonal del cubo. Hay ocho posiciones, una en cada octante, para obtener una vista
isomtrica. Los tres ejes principales se acortan de forma igual en una proyeccin isomtrica, por lo que se
mantienen las proporciones relativas. Este no es el caso en una proyeccin axonomtrica general, donde los
factores de escala pueden ser diferentes para las tres direcciones principales.

Coordenadas de proyeccin ortogonal


Con la direccin de proyeccin paralela al eje zview, las ecuaciones de transformacin para una proyeccin
ortogonal son triviales. Para cualquier posicin (x, y, z), como en la Figura 7.26, las coordenadas de proyeccin sern:
(7.6)
x p = x, y p = y
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.

CAP07_HEARN_1P.qxd

370

28/09/2005

11:34

Pgina 370

CAPTULO 7 Visualizacin tridimensional

y
1

2
5

2
x

FIGURA 7.25. Una proyeccin


isomtrica de un cubo.

Plano de
visualizacin

yview

Plano de
visualizacin

zview

xview

(x, y)

FIGURA 7.26. Proyeccin ortogonal de un punto en el espacio


sobre un plano de visualizacin.

(x, y, z)

Ventana de recorte y volumen de visualizacin de proyeccin ortogonal


En la analoga de la cmara, el tipo del objetivo es uno de los factores que determina la cantidad de la escena que se transfiere al plano de la pelcula. Un objetivo de gran angular permite captar una parte mayor de la
escena comparado con un objetivo normal. En las aplicaciones infogrficas, empleamos para este propsito
la ventana de recorte rectangular. Al igual que la visualizacin bidimensional, los paquetes grficos slo suelen permitir utilizar rectngulos de recorte en posicin estndar. Por tanto, definimos una ventana de recorte
para la visualizacin tridimensional exactamente igual que lo hacamos para el caso bidimensional, seleccionando posiciones de coordenadas bidimensionales para las esquinas inferior izquierda y superior derecha.
Para visualizacin tridimensional, la ventana de recorte se posiciona sobre el plano de visualizacin, con sus
lados paralelos a los ejes xview e yview, como se muestra en la Figura 7.27. Si queremos utilizar alguna otra
forma geomtrica o alguna otra orientacin para la ventana de recorte, ser necesario que desarrollemos nuestros propios procedimientos de visualizacin.
Los lados de la ventana de recorte especifican los lmites x e y para la parte de la escena que queremos
mostrar. Estos lmites se emplean para formar los lados superior, inferior y laterales de una regin de recorte
denominada volumen de visualizacin de proyeccin ortogonal. Puesto que las lneas de proyeccin son
perpendiculares al plano de visualizacin, estos cuatro lmites son planos tambin perpendiculares al plano de
visualizacin y que pasan por las aristas de la ventana de recorte, formando una regin de recorte infinita,
como se ilustra en la Figura 7.28.
Podemos limitar la extensin del volumen de visualizacin ortogonal en la direccin zview seleccionando
las posiciones de uno o dos planos limitantes adicionales que sean paralelos al plano de visualizacin. Estos
dos planos se denominan plano de recorte prximo-lejano o planos de recorte frontal-posterior. Los planos prximo y lejano nos permiten excluir objetos que se encuentren delante o detrs de aquella parte de la
escena que queremos mostrar. Con la direccin de visualizacin definida segn el eje zview negativo, normal-

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 371

7.6 Proyecciones ortogonales

371

Plano de visualizacin

Ventana de
recorte

yview

(xwmax, ywmax)

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.

(xwmin, ywmin)

zview

xview
zview
zview
Ventana de
Ventana de
recorte

recorte

Vista superior
(b)

Vista lateral
(a)

FIGURA 7.28. Volumen de visualizacin infinito para proyeccin


ortogonal.

Volumen de visualizacin
para proyeccin ortogonal

Plano
lejano

Ventana
de recorte
Plano
prximo

yview

xview

zview

FIGURA 7.29. Un volumen de


visualizacin ortogonal finito con
el plano de visualizacin delante del plano prximo.

mente tendremos zfar < znear, de modo que el plano lejano est ms alejado segn el eje zview 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.

CAP07_HEARN_1P.qxd

372

28/09/2005

11:34

Pgina 372

CAPTULO 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.

Transformacin de normalizacin para una proyeccin ortogonal


Utilizando una transferencia ortogonal de las coordenadas sobre el plano de visualizacin, obtenemos la proyeccin proyectada de cualquier punto del espacio (x, y, z) como simplemente (x, y). As, una vez establecidos los lmites del volumen de visualizacin, las coordenadas dentro de este paraleleppedo rectangular sern
las coordenadas de proyeccin y pueden mapearse sobre un volumen de visualizacin normalizado sin necesidad de efectuar ningn procesamiento de proyeccin adicional. Algunos paquetes grficos utilizan un cubo
unitario para este volumen de visualizacin normalizado, normalizndose cada una de las coordenadas x, y y
z en el rango que va de 0 a 1. Otra tcnica para la transformacin de normalizacin consiste en utilizar un cubo
simtrico, con las coordenadas en el rango que va de 1 a 1.
Puesto que las coordenadas de pantalla se suelen especificar segn un sistema de referencia que cumple
con la regla de la mano izquierda (Figura 7.30), las coordenadas normalizadas tambin suelen especificarse
de la misma forma. Esto permite interpretar directamente las distancias en la direccin de visualizacin como
distancias con respecto a la pantalla (el plano de visualizacin). As, podemos convertir las coordenadas de
proyeccin en posiciones dentro de un sistema de referencia normalizado que cumple la regla de la mano
izquierda, y estas coordenadas se transformarn entonces mediante la transformacin de visor en coordenadas de pantalla segn un sistema que cumpla la regla de la mano izquierda.
Para ilustrar la transformacin de normalizacin vamos a suponer que el volumen de visualizacin para
proyeccin ortogonal debe asignarse al cubo de normalizacin simtrico dentro de un sistema de referencia
que cumpla la regla de la mano izquierda. Asimismo, las posiciones de la coordenada z para los planos prximo y lejano se designan mediante znear y zfar, respectivamente. La Figura 7.31 ilustra esta transformacin de
yscreen
Pantalla de vdeo

Una p
Ventana de
visualizacin

irmid

zscreen

Visor

xscreen

FIGURA 7.30. Un sistema de coordenadas de pantalla que cumple la regla de la mano izquierda.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 373

7.6 Proyecciones ortogonales

Volumen de visualizacin
para proyeccin ortogonal

373

(xwmax, ywmax, zfar)

ynorm

znorm
(1, 1, 1)

(xwmin, ywmin, znear)


xnorm
yview
(1, 1, 1)

Volumen de
visualizacin
normalizado

xview
zview

FIGURA 7.31. Transformacin de normalizacin desde un volumen de visualizacin 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 (xmin, ymin, znear) se mapea sobre la posicin normalizada (1, 1, 1) y la posicin (xmax, ymax, zfar) se mapea sobre (1, 1, 1).
La transformacin del volumen de visualizacin 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 e y dentro del volumen de visualizacin 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 znear a zfar al intervalo que va de 1 a 1, utilizando clculos similares.
Por tanto, la transformacin de normalizacin para el volumen de visualizacin ortogonal es:

M ortho, norm

2
xw xw
min
max

2
ywmax yw
wmin

2
znear zfar

xwmax + xwmin
xwmax xwmin

ywmax + ywmin

ywmax ywmin

znear + zfar

znear zfar

(7.7)

Esta matriz se multiplica a la derecha por la transformacin de visualizacin compuesta RT (Seccin 7.4)
para realizar la transformacin completa desde coordenadas universales a coordenadas normalizadas de proyeccin ortogonal.
En este etapa de la pipeline de visualizacin, 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.

CAP07_HEARN_1P.qxd

374

28/09/2005

11:34

Pgina 374

CAPTULO 7 Visualizacin tridimensional

7.7 PROYECCIONES PARALELAS OBLICUAS


En general, una vista en proyeccin paralela de una escena se obtiene transfiriendo las descripciones de los
objetos al plano de visualizacin segn unas trayectorias de proyeccin que pueden tener cualquier direccin
relativa seleccionada con respecto al vector normal del plano de visualizacin. Cuando la ruta de proyeccin
no es perpendicular al plano de visualizacin, esta proyeccin se denomina proyeccin paralela oblicua.
Utilizando este tipo de proyeccin, podemos combinar distintas vistas de un objeto, como la vista frontal, lateral y superior que se muestran en la Figura 7.32. Las proyecciones paralelas oblicuas se definen utilizando un
vector de direccin para las lneas de proyeccin, y esta direccin puede especificarse de varias formas.

Proyecciones paralelas oblicuas en diseo


Para aplicaciones de diseo de ingeniera y arquitectura, la proyeccin oblicua paralela se especifica a menudo mediante dos ngulos, y , como se muestra en la Figura 7.33. Una posicin del espacio (x, y, z) se proyecta sobre (xp, yp, zvp) en un plano de visualizacin, que estar situado en la ubicacin zvp segn el eje de
visualizacin z. La posicin (x, y, zvp) es el punto correspondiente de proyeccin ortogonal. La lnea de proyeccin paralela oblicua que va de (x, y, z) a (xp, yp, zvp) tiene un ngulo de interseccin con la lnea del
plano de proyeccin que une (xp, yp, zvp) y (x, y, zvp). Esta lnea del plano de visualizacin, de longitud L,
forma un ngulo con la direccin horizontal del plano de proyeccin. Al ngulo puede asignrsele un valor
entre 0 y 90 y el ngulo puede variar entre 0 y 360. Podemos expresar las coordenadas de proyeccin en
trminos de x, y, L y de la forma siguiente:
x p = x + L cos

(7.8)

y p = y + L sin
La longitud L depende del ngulo y de la distancia perpendicular del punto (x, y, z) con respecto al plano
de visualizacin:
(7.9)
zvp z
tan =
L
As,
(7.10)
zvp z
L=
tan
= L1 ( zvp z )
donde L1 cot , que tambin es el valor de L cuando zvp z 1. Podemos entonces escribir las Ecuaciones
7.8 de proyeccin paralela oblicua como:
(7.11)
x = x + L ( z z ) cos
p

vp

y p = y + L1 ( zvp z )sin
Podemos obtener una proyeccin ortogonal cuando L1 0 (lo que ocurre para el ngulo de proyeccin
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

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 375

7.7 Proyecciones paralelas oblicuas

Plano de visualizacin

Plano de visualizacin

(a)

(b)

375

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.
yview
Plano de
visualizacin

zview

xview

(xp, yp, zvp)

(x, y, zvp)

(x, y, z)

FIGURA 7.33. Proyeccin paralela oblicua del punto (x, y, z) a la posicin (xp, yp, zvp) sobre un plano de proyeccin situado en la posicin zvp segn el eje zview.

L1

Plano de visualizacin
(a)

Plano de visualizacin
(b)

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).

CAP07_HEARN_1P.qxd

376

28/09/2005

11:34

Pgina 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 L1 que formar un ngulo con una lnea horizontal del plano de proyeccin.

Perspectivas caballera y cabinet


Las selecciones tpicas para el ngulo son 30 y 45, lo que permite mostrar una vista combinada de las caras
frontal, lateral y superior (o frontal, lateral e inferior) de un objeto. Dos valores de comnmente utilizados
son aquellos para los que tan 1 y tan 2. Para el primer caso, 45 y las vistas obtenidas se denominan perspectiva caballera. Todas las lneas perpendiculares al plano de proyeccin se proyectan sin que
cambie su longitud. En la Figura 7.35 se muestran ejemplos de perspectiva caballera para un cubo.
Cuando el ngulo de proyeccin se selecciona de modo que tan 2, la vista resultante se denomina
perspectiva cabinet. Para este ngulo ( 63.4), las lneas perpendiculares a la superficie de visualizacin se
proyectan con la mitad de su longitud. La perspectiva isomtrica parece ms realista que la perspectiva caballera, debido a esta reduccin en la longitud de las perpendiculares. La Figura 7.36 muestra ejemplos de perspectiva cabinet para un cubo.

Vector de proyeccin paralela oblicua


En las bibliotecas de programacin grfica que soportan proyecciones paralelas oblicuas, la direccin de proyeccin sobre el plano de visualizacin se especifica mediante un vector de proyeccin paralela Vp. Este
vector de direccin puede definirse mediante una posicin de referencia relativa al punto de vista, como hicimos con el vector normal al plano de visualizacin, o mediante cualesquiera otros puntos. Algunos paquetes
utilizan un punto de referencia relativo al centro de la ventana de recorte con el fin de definir la direccin de
la proyeccin paralela. Si el vector de direccin se especifica en coordenadas universales, primero habr que
transformarlo a coordenadas de visualizacin utilizando la matriz de rotacin descrita en la Seccin 7.4 (el

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
altura.

FIGURA 7.36. Perspectiva cabinet de


un cubo sobre un plano de visualizacin
para dos valores del ngulo . La profundidad se proyecta con una longitud
igual a la mitad de la anchura y altura
del cubo.

45

30

(b)

(a)

45

(a)

30

(b)

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 377

7.7 Proyecciones paralelas oblicuas

377

yview
Plano de
visualizacin

zview

xview

(xp, yp, zvp)

Vp

FIGURA 7.37. Proyeccin paralela oblicua del punto (x, y, z) sobre n plano de
visualizacin, segn una lnea de proyeccin definida mediante el vector Vp.

(x, y, zvp)

(x, y, z)

vector de proyeccin no se ve afectado por el desplazamiento, ya que se trata simplemente de una direccin
sin ninguna posicin fija).
Una vez establecido el vector de proyeccin Vp 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 Vp (Vpx, Vpy, Vpz), donde Vpy/Vpx tan . Entonces, comparando los tringulos similares de
la Figura 7.37, tendremos:
xp x
zvp z
yp y
zvp z

=
=

Vpx
Vpz
Vpy
Vpz

Y podemos escribir el equivalente de las Ecuaciones 7.11 de proyeccin paralela oblicua en trminos del
vector de proyeccin, como:
x p = x + ( zvp z )
y p = y + ( zvp z )

Vpx
Vpz

(7.12)

Vpy
Vpz

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 Vpx Vpy 0.

Ventana de recorte y volumen de visualizacin de proyeccin paralela oblicua


El volumen de visualizacin para una proyeccin paralela oblicua se define utilizando los mismos procedimientos que en la proyeccin ortogonal. Seleccionamos una ventana de recorte sobre el plano de visualizacin con las coordenadas (xwmin, ywmin) y (xwmax, ywmax), que especifican las esquinas inferior izquierda y

CAP07_HEARN_1P.qxd

378

28/09/2005

11:34

Pgina 378

CAPTULO 7 Visualizacin tridimensional


Ventana de recorte
Plano de visualizacin
Plano prximo

Volumen de
visualizacin
Vp
Plano lejano

FIGURA 7.38. Vista superior de un volumen de visualizacin finito para una proyeccin paralela oblicua en la direccin
del vector Vp.

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.

Matriz de transformacin para proyeccin paralela oblicua


Utilizando los parmetros del vector de proyeccin de las Ecuaciones 7.12, podemos expresar los elementos
de la matriz de transformacin para una proyeccin paralela oblicua como:

M oblique

=0

0
0

0
1
0
0

Vpx
Vpz
Vpy
Vpz
1
0

Vpx

Vpz
Vpy

zvp
Vpz

0
1

zvp

(7.13)

Esta matriz desplaza los valores de las coordenadas x e y segn una cantidad proporcional a la distancia
con respecto al plano de visualizacin, que se encuentra en la posicin zvp sobre el eje zview. Los valores z de
los puntos del espacio no se ven modificados. Si Vpx Vpy 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

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 379

379

7.8 Proyecciones en perspectiva


Ventana de recorte

Plano de
visualizacin

Ventana de recorte

Plano prximo

Transformacin de inclinacin
Vp

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. El 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.

Transformacin de normalizacin para una proyeccin paralela oblicua


Puesto que las ecuaciones de proyeccin paralela oblicua convierten las descripciones de los objetos a coordenadas ortogonales, podemos aplicar los procedimientos de normalizacin despus de esta transformacin.
El volumen de visualizacin oblicuo habr sido convertido en un paraleleppedo rectangular, por lo que utilizaremos los mismos procedimientos que en la Seccin 7.6.
Siguiendo el ejemplo de normalizacin de la Seccin 7.6, volvemos a realizar el mapeo sobre el cubo normalizado simtrico, dentro de un sistema de coordenadas que cumpla la regla de la mano izquierda. As, la
transformacin completa desde coordenadas de visualizacin a coordenadas normalizadas para una proyeccin paralela oblicua ser:
M oblique,norm = M ortho,norm M oblique

(7.14)

La transformacin Moblique es la Matriz 7.13, que convierte la descripcin de la escena a coordenadas de


proyeccin ortogonal, y la transformacin Mortho,norm 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 MWC,VC 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.

7.8 PROYECCIONES EN PERSPECTIVA


Aunque una vista en proyeccin paralela de una escena es fcil de generar y preserva las proporciones relativas de los objetos, no proporciona una representacin realista. Para simular la imagen de una cmara, tene-

CAP07_HEARN_1P.qxd

380

28/09/2005

11:34

Pgina 380

CAPTULO 7 Visualizacin tridimensional

Punto de
referencia de
proyeccin
Plano de
visualizacin

FIGURA 7.40. Proyeccin en perspectiva de dos segmentos lineales de igual longitud situados a diferentes distancias del
plano de visualizacin.

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 visualizacin 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 visualizacin (Figura 7.40).

Transformacin de coordenadas para la proyeccin en perspectiva


En ocasiones, podemos seleccionar el punto de referencia de proyeccin como otro de los parmetros de
visualizacin dentro del paquete grfico, pero algunos sistemas sitan este punto de convergencia en una
posicin fija, como por ejemplo en el punto de vista. La Figura 7.41 muestra la trayectoria de proyeccin de
un punto en el espacio (x, y, z) hacia un punto de referencia de proyeccin cualquiera situado en (xprp, yprp,
zprp). La lnea de proyeccin intersecta el plano de visualizacin en el punto (xp, yp, zvp), donde zvp es alguna posicin seleccionada para el plano de visualizacin sobre el eje zview. Podemos escribir las ecuaciones
que describen las coordenadas a lo largo de esta lnea de proyeccin en perspectiva utilizando la forma paramtrica:
x = x ( x x prp )u
y = y ( y y prp )u

0 u 1

(7.15)

z = z ( z z prp )u
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 (x, y, z). En el otro extremo de la lnea, u 1 y tendremos las coordenadas del
punto de referencia de proyeccin (xprp, yprp, zprp). Sobre el plano de visualizacin, z zvp y podemos despejar el parmetro u en la ecuacin z en esta posicin de la lnea de proyeccin:

u=

zvp z
z prp z

(7.16)

Sustituyendo este valor de u en las ecuaciones correspondientes a x e y, obtenemos las ecuaciones generales de transformacin de perspectiva:

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 381

7.8 Proyecciones en perspectiva

381

yview

P (x, y, z)

(xprp, yprp, zprp)

(xp, yp, zvp)


xview

zview

Plano de visualizacin

FIGURA 7.41. Proyeccin en perspectiva de un punto P con coordenadas (x, y, z) hacia un punto de referencia de proyeccin seleccionado. La interseccin con el plano de visualizacin es (xp, yp, zvp).

z prp zvp
xp = x
z z
prp

zvp z
+ x prp

z prp z

z prp zvp
yp = y
z z
prp

zvp z
+ y prp

z prp z

(7.17)

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 visualizacin.
Pero echemos primero un vistazo a algunas de las propiedades de las Ecuaciones 7.17.

Ecuaciones de la proyeccin en perspectiva: casos especiales


A menudo se imponen diversas restricciones sobre los parmetros de la proyeccin en perspectiva.
Dependiendo de cada paquete grfico concreto, el posicionamiento del punto de referencia de proyeccin en
el plano de visualizacin puede no ser completamente arbitrario.
Para simplificar los clculos de la perspectiva, el punto de referencia de proyeccin puede limitarse a las
posiciones situadas a lo largo del eje zview, con lo que:
(1)
xprp yprp 0:
z prp zvp
xp = x
z z
prp

z prp zvp
yp = y
z z
prp

(7.18)

Y en ocasiones el punto de referencia de proyeccin est fijo en el origen de coordenadas, de modo que
(2)
(xprp, yprp, zprp) (0, 0, 0) :
zvp
xp = x
,
z

zvp
yp = y

(7.19)

CAP07_HEARN_1P.qxd

382

28/09/2005

11:34

Pgina 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)
zvp 0:
z prp
xp = x
z z
prp

z
x prp

z prp z

z prp
yp = y
z z
prp

z
y prp
z

prp z

(7.20)

Con el plano uv como plano de visualizacin y situando el punto de referencia de proyeccin en el eje
zview, las ecuaciones de la proyeccin en perspectiva son:
(4)
xprp yprp zvp 0:
z prp
xp = x
z z
prp

z prp
yp = y
z z
prp

(7.21)

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.

(xprp, yprp, zprp)

Plano de visualizacin

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.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 383

7.8 Proyecciones en perspectiva

Ventana
de recorte

Ventana
de recorte

Ventana
de recorte

Punto de
referencia de
proyeccin
(b)

Referencia de
proyeccin muy
alejada del plano
de visualizacin
(c)

383

Punto de
referencia de
proyeccin
(a)

FIGURA 7.43. Cambio de los efectos


de la perspectiva al alejar el punto de
referencia de proyeccin del plano de
visualizacin.

Puntos de fuga para las proyecciones en perspectiva


Cuando se proyecta una escena sobre un plano de visualizacin utilizando mapeo en perspectiva, las lneas
paralelas al plano de visualizacin se proyectan como lneas paralelas. Pero todas las dems lneas paralelas
de la escena que no sean paralelas al plano de visualizacin se proyectarn como lneas convergentes, como
podemos ver en la Figura 7.43. El punto en el que un conjunto de lneas paralelas proyectadas parece converger se denomina punto de fuga. Cada conjunto de lneas paralelas proyectadas tiene un punto de fuga propio.
Para un conjunto de lneas que son paralelas a uno de los ejes principales de un objeto, el punto de fuga
se denomina punto de fuga principal. Podemos controlar el nmero de puntos de fuga principales (uno, dos
o tres) con la orientacin de plano de proyeccin, y las proyecciones en perspectiva se clasifican por ello como
proyecciones de un punto, de dos puntos o de tres puntos. El nmero de puntos de fuga principales en una
proyeccin es igual al nmero de ejes principales que intersectan al plano de visualizacin. La Figura 7.44
ilustra la apariencia de sendas proyecciones en perspectiva de uno y dos puntos para un cubo. En la vista proyectada (b), el plano de visualizacin se alinea en paralelo al plano xy del objeto, de modo que slo se intersecta el eje z del objeto. Esta orientacin produce una proyeccin en perspectiva de un punto, estando el punto
de fuga situado en el eje z. Para la vista mostrada en (c), el plano de proyeccin intersecta tanto al eje x como
al eje z, pero no al eje y. La proyeccin en perspectiva de dos puntos resultante contiene puntos de fuga tanto
para el eje x como para el eje z. El realismo no se incrementa mucho en las proyecciones en perspectiva de
tres puntos si las comparamos con las de dos puntos, por lo que las de tres puntos no se utilizan tan a menudo en los diagramas de arquitectura e ingeniera.

Volumen de visualizacin para proyeccin en perspectiva


De nuevo, creamos un volumen de visualizacin especificando la posicin de una ventana de recorte rectangular sobre el plano de visualizacin. Pero ahora, los planos de contorno para el volumen de visualizacin, no
son paralelos, porque las lneas de proyeccin no son paralelas. La parte superior, la inferior y las laterales del
volumen de visualizacin son planos que pasan por los lados de la ventana y por el punto de referencia de
proyeccin. Esto forma un volumen de visualizacin que es una pirmide rectangular infinita con su vrtice
situado en el centro de proyeccin (Figura 7.45). Todos los objetos situados fuera de esta pirmide sern eliminados por las rutinas de recorte. Un volumen de visualizacin para proyeccin en perspectiva se suele denominar pirmide de visin, porque se aproxima al cono de visin de nuestros ojos o de una cmara. La imagen
mostrada de una escena incluir nicamente aquellos objetos que estn situados dentro de la pirmide, exac-

CAP07_HEARN_1P.qxd

384

28/09/2005

11:34

Pgina 384

CAPTULO 7 Visualizacin tridimensional


Punto de fuga
y

z
(a)
(b)
Proyeccin en
perspectiva de
un punto

Ejes principales
de un cubo

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 fuga (c).

FIGURA 7.45. Una pirmide de visin infinita


para una proyeccin en
perspectiva.

Punto de
fuga del
eje z

Punto de
fuga del
eje x

(c)
Proyeccin en
perspectiva de
dos puntos

Ventana de
recorte

Centro de
proyeccin

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 zview (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

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 385

7.8 Proyecciones en perspectiva

Frustrum
rectangular

Plano de
recorte lejano

385

Ventana de
recorte

Punto de
referencia de
proyeccin

Plano de
recorte prximo

FIGURA 7.46 . Frustrum de


proyeccin en perspectiva
con el plano de visualizacin
delante del plano de recorte prximo.

perspectiva, con un plano de visualizacin 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 visualizacin. 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.

Matriz de transformacin para la proyeccin en perspectiva


A diferencia de una proyeccin paralela, no podemos utilizar directamente los coeficientes de las coordenadas x e y en las Ecuaciones 7.17 para determinar los elementos de la matriz de proyeccin en perspectiva, porque los denominadores de los coeficientes son funcin de la coordenada z. Pero podemos emplear una
representacin en coordenadas homogneas tridimensionales para expresar las ecuaciones de la proyeccin en
perspectiva en la forma:

xp =

xh
,
h

yp =

yh
h

(7.22)

donde el parmetro homogneo tiene el valor:


h = z prp z

(7.23)

Los numeradores en 7.22 son iguales que en las Ecuaciones 7.17:


xh = x( z prp zvp ) + x prp ( zvp z )
yh = y( z prp zvp ) + y prp ( zvp z )

(7.24)

CAP07_HEARN_1P.qxd

386

28/09/2005

11:34

Pgina 386

CAPTULO 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:
(7.25)

Ph = M pers P

donde Ph es la representacin en forma de matriz columna del punto de coordenadas homogneas (xh, yh, zh,
h) y P es la representacin en forma de matriz columna de la posicin de coordenadas (x, y, z, 1). (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 xh e yh de coordenadas homogneas de 7.24, pero tambin debemos estructurar la matriz para preservar la informacin 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 zp 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 zp 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:

M pers

z prp zvp

=
0

x prp

z prp zvp

y prp

0
0

sz
1

x prp z prp

y prp z prp
tz

z prp

(7.26)

Los parmetros sz y tz 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 sz y tz 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 frustrum 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.

Frustrum de proyeccin en perspectiva simtrico


La lnea que parte del punto de referencia de proyeccin y que pasa por el centro de la ventana de recorte y
del volumen de visualizacin es la lnea central del frustrum de proyeccin en perspectiva. Si esta lnea central es perpendicular al plano de visualizacin, tendremos un frustrum simtrico (con respecto a su lnea central) como en la Figura 7.47.
Puesto que la lnea central del frustrum intersecta con el plano de visualizacin en el punto (xprp, yprp, zvp),
podemos expresar las posiciones de las esquinas de la ventana de recorte en trminos de las dimensiones de
la ventana:
anchura
anchura
xwmin = x prp
,
xwmax = x prp +
2
2

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 387

7.8 Proyecciones en perspectiva

387

Lnea central del frustum

Plano lejano
de recorte
Volumen de visualizacin

Plano prximo de recorte


(xprp, yprp, zvp)
Plano de visualizacin
Ventana
de recorte
(xprp, yprp, zprp)

ywmin = y prp

altura
,
2

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.

ywmax = x prp +

altura
2

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 campo 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 aspecto (anchura/altura) de la ventana de recorte. Fijndonos en
los tringulos rectos del diagrama de la Figura 7.49, vemos que:
altura / 2

tan =
2 z prp zvp

(7.27)

de modo que la altura de la ventana de recorte puede calcularse como:

altura = 2( z prp zvp ) tan


2

(7.28)

CAP07_HEARN_1P.qxd

388

28/09/2005

11:34

Pgina 388

CAPTULO 7 Visualizacin tridimensional

Por tanto, los elementos diagonales con el valor zprp zvp en la Matriz 7.26 pueden sustituirse por cualquiera de las dos siguientes expresiones:
z prp zvp =
=

altura
cot
2
2
anchura cot( / 2)
2 aspecto

(7.29)

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.

Frustum de
visualizacin

Ventana de
recorte

yview

xview

zview
Punto de
referencia de
proyeccin

FIGURA 7.48. ngulo del campo de visin 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

Punto de referencia
de proyeccin

yview

altura

zview
zprp zvp

FIGURA 7.49. Relacin entre el ngulo del campo visual , la altura de la ventana de recorte y la distancia entre el punto
de referencia de proyeccin y el plano de visualizacin.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 389

7.8 Proyecciones en perspectiva

389

Ventana de
recorte

20

Punto de
referencia de
proyeccin

(a)

40

(b)

60

(c)

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 sera 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-

CAP07_HEARN_1P.qxd

390

28/09/2005

11:34

Pgina 390

CAPTULO 7 Visualizacin tridimensional


Lnea central

Plano lejano
Frustrum de
visualizacin
simtrico

Volumen de
visualizacin
paralelepipdico

Mapeo de perspectiva
Plano prximo
Plano de visualizacin
Ventana
de recorte

Punto de referencia de proyeccin

FIGURA 7.51. Un frustrum de visualizacin simtrico se mapea 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 plano 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 (xp, yp) 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 vez convertido el frustrum simtrico en un volumen de visualizacin de proyeccin ortogonal, podemos pasar a aplicar la transformacin de normalizacin.

Frustrum de proyeccin en perspectiva oblicuo


Si la lnea central de un volumen de visualizacin para proyeccin en perspectiva no es perpendicular al plano
de visualizacin, lo que tendremos es un frustrum oblicuo. La Figura 7.52 ilustra la apariencia general de un
volumen de visualizacin oblicuo para proyeccin en perspectiva. En este caso, podemos transformar primero el volumen de visualizacin en un frustrum simtrico y luego en un volumen de visualizacin normalizado.
Lnea central del frustrum

Plano lejano de recorte


Volumen de
visualizacin

Plano prximo de recorte

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.

Plano de
visualizacin
Ventana
de recorte
(xprp, yprp, zprp)

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 391

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 zprp, 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 (xprp,
yprp) sobre el plano de visualizacin. Puesto que la lnea central del frustrum pasa por el centro de la ventana
de 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, as 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 sistema 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 (xprp, yprp, zprp) (0, 0, 0), obtenemos los elementos de la matriz de inclinacin requerida:

M z shear

1
0
=
0

0 sh zx
1 sh zy
0
0

1
0

0
0
0

(7.30)

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,
xwmin + xwmax

0
+
yw
min ywmax

=M
z shear
znear
2

z
near

(7.31)

Por tanto, los parmetros de esta transformacin de inclinacin son:


sh zx =

xwmin + xwmax
2 znear

(7.32)

yw + ywmax
sh zy = min
2 znear
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,

CAP07_HEARN_1P.qxd

392

28/09/2005

11:34

Pgina 392

CAPTULO 7 Visualizacin tridimensional

M pers

znear
0
=
0

0
znear
0
0

0
0 0
sz t z

1 0
0

(7.33)

Las expresiones para los parmetros de cambio de escala y de translacin de la coordenada z sern determinados por los requisitos de normalizacin.
Concatenando la matriz simplificada de proyeccin de perspectiva 7.33 con la matriz de inclinacin 7.30,
obtenemos la siguiente matriz de proyeccin de perspectiva oblicua, que podemos utilizar para convertir 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 obliquepers = M pers M z shear

znear

= 0

0
0

0
znear
0
0

xwmin + xwmax
2
ywmin + ywmax
2
sz
1

tz
0

(7.34)

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 xwmax xwmin y ywmax
ywmin, 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 zprp 0 y zvp znear, 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.

Coordenadas de transformacin normalizadas para proyeccin en perspectiva


La Matriz 7.34 transforma las posiciones de los objetos en coordenadas de visualizacin, para obtener coordenadas homogneas de proyeccin en perspectiva. Cuando dividimos las coordenadas homogneas con el
parmetro homogneo h, obtenemos las coordenadas reales de proyeccin, que son coordenadas de proyeccin ortogonal. As, esta proyeccin en perspectiva transforma todos los puntos situados dentro del frustrum
de visualizacin, obtenindose posiciones situadas dentro de un volumen de visualizacin paralelepipdico
rectangular. El paso final del proceso de transformacin de perspectiva consiste en mapear este paraleleppedo sobre un volumen de visualizacin normalizado.
Seguiremos el mismo procedimiento de normalizacin que ya hemos empleado para una proyeccin paralela. El frustrum de visualizacin transformado, que es un paraleleppedo rectangular, se mapea sobre un cubo
normalizado simtrico dentro de un sistema de referencia que cumple con la regla de la mano izquierda
(Figura 7.53). Ya hemos incluido los parmetros de normalizacin para las coordenadas z en la matriz de proyeccin en perspectiva 7.34, pero todava necesitamos determinar los valores de estos parmetros cuando se
realiza la transformacin al cubo de normalizacin simtrico. Asimismo, necesitamos determinar los parmetros de transformacin de normalizacin para las coordenadas x e y. Puesto que la lnea central del volumen

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 393

7.8 Proyecciones en perspectiva

Frustrum de
visualizacin
transformado

393

(xwmax, ywmax, zfar)


ynorm

(xwmin, ywmin, znear)

znorm

Ventana
de recorte

Norm

alizac

in

(1, 1, 1)

yview
xnorm

zview

xview

(1, 1, 1)

Punto de
referencia de
proyeccin

Volumen de
visualizacin
normalizado

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 zview, 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 xy es:

M xy scale

sx
0
=
0

0
sy
0
0

0 0
0 0
1 0

0 1

(7.35)

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 normpers = M xy scale M obliquepers

znear sx

= 0

0
0

0
znear sy
0
0

xwmin + xwmax
2
ywmin + ywmax
sy
2
sz
1

sx

tz
0

(7.36)

A partir de esta transformacin, obtenemos las coordenadas homogneas:


xh
y
h
zh

Y las coordenadas de proyeccin sern:

y
=M

normpers

(7.37)

CAP07_HEARN_1P.qxd

394

28/09/2005

11:34

Pgina 394

CAPTULO 7 Visualizacin tridimensional

xp =

xh znear sx x + sx ( xwmin + xwmax ) / 2


=
h
z

yp =

yh znear sy y + sy ( ywmin + ywmax ) / 2


=
h
z

zp =

z h sz z + t z
=
h
z

(7.38)

Para normalizar esta transformacin de perspectiva, queremos que las coordenadas de proyeccin sean (xp,
yp, zp) (1, 1, 1) cuando las coordenadas de entrada sean (x, y, z) (xwmin, ywmin, znear), y que las
coordenadas de proyeccin tengan el valor (xp, yp, zp) (1, 1, 1) cuando las coordenadas de entrada sean (x,
y, z) (xwmax, ywmax, zfar). Por tanto, cuando resolvemos las Ecuaciones 7.38 para calcular los parmetros de
normalizacin utilizando estas condiciones, se obtiene:
sx =

2
,
xwmax xwmin

sy =

z +z
sz = near far ,
znear zfar

2
ywmax ywmin

(7.39)

2z z
t z = near far
znear zfar

Y los elementos de la matriz de transformacin normalizada para una proyeccin en perspectiva general
sern:

M normpers

2 znear

xw xw
min
max

xwmax + xwmin
xwmax xwmin

2 znear
ywmax ywmin

ywmax + ywmin
ywmax ywmin

znear + zfar
znear zfar

2 znear zfar
znear zfar
0

(7.40)

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:

M normsymmpers

cot ( 2 )
0

aspecto

0
cot

=
2

0
0

0
0

znear + zfar
znear zfar
1

2 znear zfar
znear zfar
0

(7.41)

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 395

7.9 Transformacin del visor y coordenadas de pantalla tridimensionales

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 producto de transformacin 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.

7.9 TRANSFORMACIN DEL VISOR Y COORDENADAS DE PANTALLA


TRIDIMENSIONALES
Una vez completada la transformacin a coordenadas de proyeccin normalizadas, pueden aplicarse los procedimientos de recorte de manera eficiente al cubo simtrico (o al cubo unitario). Despus de aplicados esos
procedimientos de recorte, el contenido del volumen de visualizacin normalizado puede transferirse a coordenadas de pantalla. Para las posiciones x e y en la ventana de recorte normalizada, este procedimiento es igual
a la transformacin de visor bidimensional que hemos analizado en la Seccin 6.3. Pero las posiciones del
volumen de visualizacin tridimensional tambin tienen una profundidad (coordenada z) y necesitamos retener esta informacin de profundidad para realizar las comprobaciones de visibilidad y aplicar los algoritmos
de representacin de superficies. As que podemos considerar ahora la transformacin de visor como un
mapeo sobre las coordenadas de pantalla tridimensionales.
Las ecuaciones de transformacin x e y desde la ventana de recorte normalizada a las correspondientes
posiciones dentro de un visor rectangular estn dadas por la Matriz 6.10. Podemos adaptar dicha matriz a las
aplicaciones tridimensionales incluyendo los parmetros necesarios para la transformacin de los valores z a
coordenadas de pantalla. A menudo, los valores z normalizados dentro del cubo simtrico se renormalizan en
el rango que va de 0 a 1.0. Esto permite referenciar la pantalla de vdeo como z 0, con lo que el procesamiento de los valores de profundidad puede llevarse a cabo de manera conveniente sobre el intervalo unitario
que va de 0 a 1. Si incluimos esta renormalizacin de z, la transformacin del volumen de visualizacin normalizado a coordenadas de pantalla tridimensionales es:

M normviewvol,3D screen

xvmax xvmin

0
=

yvmax yvmin
2

0
0

1
2
0

xvmax + xvmin
2
yvmax + yvmin
2
1
2
1

(7.42)

En coordenadas normalizadas, la cara znorm 1 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 referenciado en zscreen 0. As, la esquina inferior izquierda del rea de pantalla del visor estar en la posicin
(xvmin, yvmin, 0) y la esquina superior izquierda se encontrar en (xvmax, yvmax, 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 de profundidad. En captulos posteriores, analizaremos los
algoritmos para determinar las posiciones de las superficies visibles y sus colores.
Posicionemos el visor rectangular sobre la 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.

CAP07_HEARN_1P.qxd

396

28/09/2005

11:34

Pgina 396

CAPTULO 7 Visualizacin tridimensional

7.10 FUNCIONES DE VISUALIZACIN TRIDIMENSIONAL O penGL


La biblioteca GLU (OpenGL Utility) incluye una funcin para especificar los parmetros de visualizacin tridimensional y otra funcin para configurar una transformacin de proyeccin en perspectiva simtrica. Otras
funciones, como las de proyeccin ortogonal, proyeccin en perspectiva oblicua y transformacin de visor
estn contenidas en la biblioteca bsica OpenGL. Adems, hay disponibles funciones GLUT para definir y
manipular ventanas de visualizacin (Seccin 6.4).

Funcin de transformacin de visualizacin OpenGL


Cuando especificamos los parmetros de visualizacin en OpenGL, se forma una matriz y se la concatena con
la matriz actual de visualizacin del modelo. En consecuencia, esta matriz de visualizacin se combina con
cualesquiera transformaciones geomtricas que hayamos podido tambin especificar. Despus, esta matriz
compuesta se aplica para transformar las descripciones de los objetos en coordenadas universales y expresarlas en coordenadas de visualizacin. Podemos activar el modo de visualizacin del modelo mediante la instruccin:
glMatrixMode (GL_MODELVIEW);

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 (x0, y0, z0, xref, 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 P0 (x0, y0,
z0) en coordenadas universales; la posicin de referencia se designa mediante Pref (xref, yref, zref)
y el vector vertical ser V (Vx, Vy, Vz). El eje zview positivo para el sistema de coordenadas de visualizacin estar en la direccin N P0 Pref 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 zview, la posicin de referencia Pref
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 gluLookAt 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 gluLookAt, los parmetros de visualizacin predeterminados en OpenGL
son:
P0 = (0, 0, 0)
Pref = (0, 0, 1)
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 zworld negativo. En muchas aplicaciones,
podemos usar sin problemas los valores predeterminados como parmetros de visualizacin.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 397

7.10 Funciones de visualizacin tridimensional OpenGL

397

Funcin de proyeccin ortogonal OpenGL


Las matrices de proyeccin se almacenan en el modo de proyeccin OpenGL. Por tanto, para definir una
matriz de transformacin de proyeccin, debemos primero invocar dicho modo con la instruccin,
glMatrixMode (GL_PROJECTION);

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 plano prximo del volumen de visualizacin.
La funcin glOrtho 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 dfar denotan las distancias en la direccin zview negativa, a partir del origen del
sistema de coordenadas de visualizacin. Por ejemplo, si dfar 55.0, entonces el plano lejano de recorte
estar en la posicin zfar 55.0. Un valor negativo de alguno de los parmetros denotar una distancia por
detrs del origen de visualizacin, segn el eje zview positivo. Podemos asignar los valores que queramos
(positivos, negativos o cero) a estos parmetros, siempre que se cumpla que dnear < dfar.
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 znear dnear y zfar 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:
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 znear 1.0 (por detrs de la posicin de
visualizacin) y zfar 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 gluOrtho2D para definir la ventana de recorte. Tambin podramos haber usado la funcin glOrtho para especificar la ventana de recorte, siempre y
cuando asignramos a los parmetros dnear y dfar valores situados en lados opuestos del origen de coordenadas. De hecho, una llamada a gluOrtho2D es equivalente a otra llamada a glOrtho con dnear 1.0 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 zview nos de la vista deseada.

CAP07_HEARN_1P.qxd

398

28/09/2005

11:34

Pgina 398

CAPTULO 7 Visualizacin tridimensional


yview

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 recorte
prximo est en znear 1 y el plano de recorte
lejano en zfar 1.

zview

Plano lejano de recorte

1
xview

Plano prximo de recorte

Funcin OpenGL de proyeccin en perspectiva simtrica


Hay dos funciones disponibles para generar una vista de proyeccin en perspectiva de una escena. Una de
estas funciones genera un frustrum de visualizacin simtrico en torno a la direccin de visualizacin (el eje
zview negativo). La otra funcin puede usarse para una proyeccin en perspectiva simtrica o una proyeccin
en perspectiva oblicua. Para ambas funciones, el punto de referencia de produccin se encuentra en el origen
del sistema de coordenadas de visualizacin y el plano prximo de recorte se encuentra sobre el plano de
visualizacin.
El frustrum de visualizacin simtrico para proyeccin en perspectiva se define mediante la funcin GLU,
gluPerspective (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 theta 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 aspect se le asigna el valor correspondiente a la relacin
de aspecto (anchura/altura) de la ventana de recorte.
Para una proyeccin en perspectiva OpenGL, los planos de recorte prximo y lejano deben estar situados
sobre el eje zview 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 dnear
como dfar deben tener valores numricos positivos y las posiciones de los planos prximo y lejano se calculan como znear dnear y zfar dfar.
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 gluPerspective es simtrico en torno al eje
zview negativo. Y la descripcin de la escena se convierte a coordenadas de proyeccin homogneas normalizadas mediante la Matriz 7.41.

Funcin general de proyeccin de perspectiva OpenGL


Podemos utilizar la siguiente funcin para especificar una proyeccin de perspectiva que tenga un frustrum
de visualizacin simtrico o un frustrum de visualizacin oblicuo:

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 399

7.10 Funciones de visualizacin tridimensional OpenGL

399

glFrustum (xwmin, xwmax, ywmin, ywmax, dnear, dfar);

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
zview negativo. Las ubicaciones de los planos prximo y lejano sern znear dnear y zfar dfar.
La ventana de recorte puede especificarse en cualquier punto de plano prximo. Si seleccionamos las coordenadas de la ventana de recorte de modo que xwmin xwmax y ywmin ywmax, obtendremos un frustrum
simtrico (teniendo como lnea central el eje zview 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).

Visores OpenGL y ventanas de visualizacin


Despus de haber aplicado las rutinas de recorte en coordenadas normalizadas, el contenido de la ventana de
recorte normalizada se transfiere a coordenadas de pantalla tridimensionales junto con la informacin de profundidad. El valor de color de cada posicin xy del visor se almacena en el bfer de refresco (bfer de color)
y la informacin de profundidad para cada posicin xy se almacena en el bfer de profundidad.
Como hemos indicado en la Seccin 6.4, un visor rectangular se define mediante la siguiente funcin
OpenGL:
glViewport (xvmin, yvmin, vpWidth, vpHeight);

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 GLUT 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.

Ejemplo de programa OpenGL para visualizacin tridimensional


Una vista de proyeccin en perspectiva de un cuadrado, como la que se muestra en la Figura 7.55, puede obtenerse utilizando el siguiente programa de ejemplo. El cuadrado est definido en el plano xy y seleccionamos
un origen de coordenadas de visualizacin con el fin de ver la cara frontal con un cierto ngulo. Seleccionando
el centro del cuadrado como punto observado, obtenemos una vista en perspectiva utilizando la funcin
glFrustum. Si movemos el origen de coordenadas de visualizacin al otro lado del polgono, se mostrara la
cara posterior como un objeto almbrico.
#include < GL/glut.h>
GLint winWidth = 600, winHeight = 600; // Tamao inicial ventana de visualizacin.
GLfloat x0 = 100.0, y0 = 50.0, z0 = 50.0; // Origen coordenadas de visualizacin.
GLfloat xref = 50.0, yref = 50.0, zref = 0.0; // Punto observado.
GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0; // Vector vertical.

CAP07_HEARN_1P.qxd

400

28/09/2005

11:34

Pgina 400

CAPTULO 7 Visualizacin tridimensional

/* Establecer lmites de coordenadas para ventana de recorte: */


GLfloat xwMin = -40.0, ywMin = -60.0, xwMax = 40.0, ywMax = 60.0;
/* Establecer posicin de los planos de recorte prximo y lejano: */
GLfloat dnear = 25.0, dfar = 125.0;
void init (void)
{
glClearColor (1.0, 1.0, 1.0, 0.0);
glMatrixMode (GL_MODELVIEW);
gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz);
glMatrixMode (GL_PROJECTION);
glFrustum (xwMin, xwMax, ywMin, ywMax, dnear, dfar);
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT);
/* Establecer parmetros para un rea de relleno cuadrada. */
glColor3f (0.0, 1.0, 0.0); // Seleccionar color de relleno verde.
glPolygonMode (GL_FRONT, GL_FILL);
glPolygonMode (GL_BACK, GL_LINE); // Cara posterior almbrica.
glBegin (GL_QUADS);
glVertex3f (0.0, 0.0, 0.0);
glVertex3f (100.0, 0.0, 0.0);
glVertex3f (100.0, 100.0, 0.0);
glVertex3f (0.0, 100.0, 0.0);
glEnd ( );
glFlush ( );
}
void reshapeFcn (GLint newWidth, GLint newHeight)
{
glViewport (0, 0, newWidth, newHeight);
winWidth = newWidth;
winHeight = newHeight;
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (50, 50);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Perspective View of A Square");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (reshapeFcn);
glutMainLoop ( );
}

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 401

7.11 Algoritmos de recorte tridimensional

401

FIGURA 7.55. Imagen generada


por el programa de ejemplo de
visualizacin tridimensional.

7.11 ALGORITMOS DE RECORTE TRIDIMENSIONAL


En el Captulo 6 hemos hablado de las ventajas de utilizar el contorno normalizado de la ventana de recorte
en los algoritmos de recorte bidimensionales. De forma similar, podemos aplicar los algoritmos de recorte tridimensionales al contorno normalizado del volumen de visualizacin. Esto permite implementar de manera
muy eficiente la pipeline de visualizacin y los procedimientos de recorte. Todas las transformaciones independientes del dispositivo (geomtricas y de visualizacin) se concatenan y aplican antes de ejecutar las rutinas de recorte. Y cada uno de los lmites de recorte para el volumen de visualizacin normalizado es un plano
paralelo a uno de los planos cartesianos, independientemente del tipo de proyeccin y de la forma original del
volumen de visualizacin. Dependiendo de si el volumen de visualizacin ha sido normalizado a un cubo unitario o a un cubo simtrico con lado de longitud igual a 2, los planos de recorte estarn situados en las coordenadas 0 y 1 o 1 y 1. Para el cubo simtrico, las ecuaciones de los planos de recorte tridimensionales sern:
xwmin = 1,

xwmax = 1

ywmin = 1,

ywmax = 1

zwmin = 1,

zwmax = 1

(7.43)

Los lmites de recorte x e y 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-

CAP07_HEARN_1P.qxd

402

28/09/2005

11:34

Pgina 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.

Recorte en coordenadas homogneas tridimensionales


Las bibliotecas de generacin de grficos por computadora procesan las posiciones en el espacio como coordenadas homogneas de cuatro dimensiones, de modo que todas las transformaciones pueden representarse
como matrices 4 por 4. A medida que cada conjunto de coordenadas entra en la pipeline de visualizacin, se
lo convierte a una representacin en cuatro dimensiones:
( x, y, z ) ( x, y, z,1)
Despus de que unas ciertas coordenadas han pasado a travs de las transformaciones geomtrica, de
visualizacin y de proyeccin, estarn en la forma homognea:
xh
y
h
zh


= M y

(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 h tiene el valor 1, las coordenadas homogneas sern iguales 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 splines regionales de las superficies de los 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 h, 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 normalizado, basta con implementar un nico procedimiento de recorte en el hardware para
recortar los objetos en coordenada homogneas de acuerdo con los planos de recorte normalizados.

Cdigos de regin tridimensional


Podemos ampliar el concepto de cdigo de regin (Seccin 6.7) a tres dimensiones aadiendo simplemente
un par de bits adicionales para tomar en consideracin los planos de recorte prximo y lejano. Por tanto, ahora
usaremos un cdigo de regin de seis bits, como se ilustra en la Figura 7.56. Las posiciones de los bits en este
ejemplo de cdigo de regin estn numeradas de derecha a izquierda, y hacen referencia a los planos de recorte izquierdo, derecho, inferior, superior, prximo y lejano, en dicho orden.
Las condiciones para asignar valores a los bits del cdigo de regin son bsicamente las mismas que las
de las Seccin 6.7, aadiendo simplemente las dos condiciones adicionales para los planos de recorte prximo y lejano. Sin embargo, para una escena tridimensional, necesitamos aplicar las rutinas de recorte a las

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 403

7.11 Algoritmos de recorte tridimensional

bit
6

bit
5

Lejano

bit
4

bit
3

bit
2

Superior
Prximo

bit
1

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.

Derecho
Inferior

403

Izquierdo

coordenadas de produccin, que habrn sido transformadas a un espacio normalizado. Despus de la transformacin de proyeccin, cada punto de una escena tiene la representacin de cuatro componentes P (xh, yh,
zh, h). 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:

xh
1,
h

yh
1,
h

zh
1
h

(7.45)

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 xh h,
h xh h,

h yh h,

h zh h

h yh h,

h zh h

si h > 0

(7.46)

si h < 0

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

si h + xh < 0

(izquierdo)

bit 2 = 1

si h xh < 0

(derecho)

bit 3 = 1

si h + yh < 0

(inferior)

bit 4 = 1

si h yh < 0

(superior)

bit 5 = 1

si h + zh < 0

(prximo)

bit 6 = 1

si h zh < 0

(lejano)

(7.47)

Estos valores de bit pueden definirse utilizando la misma tcnica que en el recorte bidimensional. Es decir,
simplemente utilizamos el bit de signo de uno de los clculos h xh, h yh o h zh 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.

Recorte tridimensional de puntos y lneas


Para puntos y segmentos de lnea recta que estn definidos en una escena y no se encuentran detrs del punto
de referencia de proyeccin, todos los parmetros homogneos son positivos y los cdigos de regin pueden

CAP07_HEARN_1P.qxd

404

28/09/2005

11:34

Pgina 404

CAPTULO 7 Visualizacin tridimensional


y
z

Superior

x
Lejamo
(c)

Prximo
Inferior
Izquierdo

(b)
Derecho

(a)

011001

011000

011010

001001

001000

001010

101001

101000

101010

010001

010000

010010

000001

000000

000010

100001

100000

100010

010101

010100

010110

000101

000100

000110

100101

100100

100110

Cdigos de regin
delante del plano prximo
(a)

Cdigos de regin
entre los planos prximo y lejano
(b)

Cdigos de regin
detrs del plano lejano
(c)

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 P3 a P4 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.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 405

7.11 Algoritmos de recorte tridimensional

405

P2 (001001)

Volumen de
visualizacin
normalizado

P1 (000010)
P4 (100110)

P3 (010101)

FIGURA 7.58. Cdigos de regin tridimensionales para dos segmentos de lnea. La lnea P1P2 intersecta los lmites de
recorte derecho y superior del volumen de visualizacin, mientras que la lnea P3P4 est completamente situada por debajo del plano de recorte inferior.

Las ecuaciones de los segmentos de lnea tridimensionales pueden expresarse de manera conveniente en
forma paramtrica y los mtodos de recorte de Cyrus-Beck o Liang-Barsky (Seccin 6.7) pueden ampliarse a
escenas tridimensionales. Para un segmento de lnea con extremos P1 (xh1, yh1, zh1, h1) y P2 (xh2, yh2, zh2,
h2), podemos escribir la ecuacin paramtrica que describe a los puntos situados a lo largo de la lnea como:
P = P1 + (P2 P1 )u

0 u 1

(7.48)

Cuando el parmetro de la lnea tiene el valor u 0, estaremos en la posicin P1, mientras que si u 1
estaremos en el otro extremo de la lnea, P2. Escribiendo la ecuacin paramtrica de la lnea explcitamente
en trminos de las coordenadas homogneas, tendremos,
xh = xh1 + ( xh 2 xh1 )u
yh = yh1 + ( yh 2 yh1 )u

0 u 1

(7.49)

zh = zh1 + ( zh 2 zh1 )u
h = h1 + (h2 h1 )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 lnea
P1P2 de la Figura 7.58. Esta lnea intersecta el plano de recorte derecho, que puede describirse con la ecuacin xmax 1. Por tanto, determinamos el valor de interseccin del parmetro u haciendo igual a 1 la coordenada de proyeccin x:

CAP07_HEARN_1P.qxd

406

28/09/2005

11:34

Pgina 406

CAPTULO 7 Visualizacin tridimensional

xp =

xh xh1 + ( xh 2 xh1 )u
=
=1
h
h1 + (h2 h1 )u

(7.50)

Despejando el parmetro u obtenemos:


u=

xh1 h1
( xh1 h1 ) ( xh 2 h2 )

(7.51)

A continuacin, determinamos los valores yp y zp en este plano de recorte utilizando el valor calculado de
u. En este caso, los valores de interseccin yp y zp 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
lnea, porque los puntos de interseccin con los planos de recorte superior y derecho identifican 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 lmite de recorte se elimina y actualizamos la informacin de cdigo de regin y los valores del parmetro u para la parte de la lnea 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 de recorte de superficie.

Recorte de polgonos tridimensionales


Los paquetes grficos normalmente tratan slo con escenas que contienen objetos grficos. Se trata de objetos cuyos contornos se describen mediante ecuaciones lineales, por lo que cada objeto est compuesto por un
conjunto de polgonos de superficie. Por tanto, para recortar los objetos de una escena tridimensional, aplicamos las rutinas de recorte a las superficies del polgono. La Figura 7.59, por ejemplo, resalta las secciones de
superficie de una pirmide que hay que recortar, mientras que las lneas discontinuas muestran las secciones
de las superficies de los polgonos que se encuentran dentro del volumen de visualizacin.

Volumen de
visualizacin
normalizado

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 objeto, pudiendo ser
necesario construir nuevas caras de la superficie.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 407

7.11 Algoritmos de recorte tridimensional

407

Podemos primero comprobar el poliedro para su aceptacin o rechazo triviales utilizando una caja de contorno, una esfera circunscrita o alguna otra medida de los lmites de sus coordenadas. Si los lmites de las
coordenadas del objetos se encuentran dentro de los lmites de recorte, conservamos el objeto completo. Si
los lmites 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-Atherton descrito en la Seccin 6.8.

Recorte de curvas tridimensionales


Como en el reparto de poliedros, primero comprobamos si los lmites de coordenadas de un objeto curvo,
como por ejemplo una esfera o una superficie de tipo spline, se encuentran completamente dentro del volumen de visualizacin. A continuacin tratamos de determinar si el objeto cae completamente fuera de algunos
de los seis planos de recorte.
Si estos test triviales de rechazo-aceptacin fallan, localizamos las intersecciones con los planos de recorte. Para ello, resolvemos el conjunto de ecuaciones formado por las ecuaciones de la superficie y la ecuacin
del plano de recorte. Por esta razn, la mayora de los paquetes grficos no incluyen rutinas de recorte para
objetos curvos. En su lugar, las superficies curvas se aproximan mediante un conjunto de parches poligonales y luego se recortan los objetos utilizando las rutinas de recorte de polgonos. Cuando se aplican procedimientos de representacin de superficies a los parches poligonales, estos pueden proporcionar una imagen
muy realista de una superficie curva.

Planos de recorte arbitrarios


Tambin es posible, en algunos paquetes grficos, recortar una escena tridimensional utilizando planos adicionales que pueden especificarse con cualquier orientacin espacial. Esta opcin resulta til en diversos tipos
de aplicaciones. Por ejemplo, puede que queramos aislar o recortar un objeto con forma irregular, o que queramos eliminar parte de una escena con un ngulo oblicuo para obtener algn tipo de efecto especial, o que
queramos cortar una seccin de un objeto segn un eje seleccionado para mostrar una vista de seccin transversal de su interior.
Los planos de recorte opcional pueden especificarse junto con la descripcin de la escena, de modo que
las operaciones de recorte se lleven a cabo antes de la transformacin de proyeccin. Sin embargo, esto quiere decir tambin que las rutinas de recorte debern implementarse en software.
Puede especificarse un plano de recorte mediante los parmetros del plano A, B, C y D. El plano divide
entonces el espacio tridimensional en dos partes, de modo que todas las partes de una escena que caigan en
un lado del plano se eliminan. Suponiendo que haya que eliminar los objetos situados detrs del plano, todo
punto en el espacio (x, y, z) que satisfaga la siguiente desigualdad ser eliminado de la escena:

CAP07_HEARN_1P.qxd

408

28/09/2005

11:34

Pgina 408

CAPTULO 7 Visualizacin tridimensional

(7.52)

Ax + By + Cz + D < 0

Como ejemplo, si el conjunto de parmetros del plano tiene los valores (A, B, C, D) (1.0, 0.0, 0.0, 8.0),
entonces todo punto que satisfaga x 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, B, C). Entonces, para un
segmento de lnea con extremos P1 y P2, recortaremos la lnea completa si ambos extremos satisfacen,
N Pk + D < 0,

(7.53)

k = 1, 2

Y conservaremos la lnea completa si ambos extremos satisfacen,


N Pk + D 0,

(7.54)

k = 1, 2

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 lnea:
P = P1 + (P2 P1 )u,

(7.55)

0 u 1

El punto P se hallar sobre el plano de recorte si satisface la ecuacin del plano,


(7.56)

NP + D = 0
Sustituyendo el valor de P dado en 7.55, tendremos:

(7.57)

N [P1 + (P2 P1 )u] + D = 0


Despejando el parmetro u en esta ecuacin, se obtiene:
u=

D N P1
N (P2 P1 )

(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

P1
N (A, B, C )

P2

FIGURA 7.60. Recorte de un segmento de lnea


mediante un plano con vector normal N.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 409

7.12 Planos de recorte opcionales en OpenGL

409

N (A, B, C)

FIGURA 7.61. Recorte de las superficies de una pirmide segn un plano


con vector normal N. Las superficies
delante del plano se conservan, mientras que las superficies de la pirmide
situadas detrs del plano se eliminan.

7.60, se recortara el segmento de lnea que va de P1 a P y se conservara la seccin de la lnea que va de P a


P2.
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
visualizacin, 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.

7.12 PLANOS DE RECORTE OPCIONALES EN O pen GL


Adems de los seis planos de recorte que encierran un volumen de visualizacin, OpenGL permite la especificacin de planos de recorte adicionales en una escena. A diferencia de los planos de recorte del volumen de
visualizacin, que son perpendiculares a alguno de los ejes de coordenadas, estos planos adicionales pueden
tener cualquier orientacin.
Para especificar un plano de recorte opcional y activar el recorte de acuerdo con dicho plano, se utilizan
las instrucciones:
glClipPlane (id, planeParameters);
glEnable (id);

El parmetro id se utiliza como identificador para un plano de recorte. A este parmetro se le asignan los
valores GL_CLIP_PLANE0, GL_CLIP_PLANE1, etc., hasta un mximo definido por cada implementacin. El

CAP07_HEARN_1P.qxd

410

28/09/2005

11:34

Pgina 410

CAPTULO 7 Visualizacin tridimensional

plano se define entonces utilizando la matriz de cuatro elementos planeParameters, cuyos elementos son
los valores de coma flotante y doble precisin de los cuatro parmetros de la ecuacin del plano A, B, C y D.
Para desactivar un plano de recorte activo al que se le haya asignado el identificador id se utiliza la instruccin:
glDisable (id);

Los parmetros del plano A, B, C 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. As,
una posicin (x, y, 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,
glGetIntegerv (GL_MAX_CLIP_PLANES, numPlanes);

El parmetro numPlanes es el nombre de una matriz de enteros a la que hay que asignar un valor entero
igual al nmero de planos de recorte opcionales que podemos utilizar. El comportamiento predeterminado
para la funcin glClipPlane es que se asigna un valor 0 a los parmetros A, B, C 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 transformar las descripciones de los objetos a un plano de visualizacin
antes de la transformacin 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 establece a lo largo del eje de visualizacin z 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-

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 411

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 lneas 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 1 para cada coordenada o en 1 y 1. Una serie de eficientes algoritmos 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 efectos 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.
TABLA 7.1. RESUMEN DE FUNCIONES DE VISUALIZACIN TRIDIMENSIONALES DE OpenGL
Funcin

Descripcin

gluLookAt

Especifica los parmetros de visualizacin tridimensional

glOrtho

Especifica los parmetros de una ventana de recorte y de los planos de recorte prximo
y lejano para una proyeccin ortogonal.

gluPerspective

Especifica el ngulo del campo visual de otros parmetros para una proyeccin en perspectiva simtrica.

glFrustum

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).

glClipPlane

Especifica los parmetros para un plano de recorte opcional.

CAP07_HEARN_1P.qxd

412

28/09/2005

11:34

Pgina 412

CAPTULO 7 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 Glassner (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.cs.utah.edu/
~narobins/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 P0, N y V. El vector vertical puede encontrarse en cualquier
direccin que no sea paralela a N.

7.2

Escriba un procedimiento para transformar los vrtices de un poliedro a coordenadas de proyeccin utilizando una
proyeccin paralela con cualquier vector de proyeccin especificado.

7.3

Escriba un procedimiento para obtener diferentes vistas de proyeccin paralela de un poliedro aplicando primero
una rotacin especificada.

7.4

Escriba un procedimiento para realizar una proyeccin en perspectiva de un punto de un objeto.

7.5

Escriba un procedimiento para realizar una proyeccin en perspectiva de dos puntos de un objeto.

7.6

Desarrolle una rutina para realizar una proyeccin en perspectiva de tres puntos de un objeto.

7.7

Escriba una rutina para convertir un frustrum de proyeccin en perspectiva en un paraleleppedo rectangular..

7.8

Modifique el algoritmo de recorte de lneas bidimensional de Cohen-Sutherland para recortar lneas tridimensionales segn el volumen de visualizacin simtrico normalizado.

7.9

Modifique el algoritmo de recorte de lneas bidimensional de Liang-Barsky para recortar lneas tridimensionales
segn un paraleleppedo regular especificado.

7.10

Modifique el algoritmo de recorte de lneas bidimensional de Liang-Barsky para recortar un poliedro de acuerdo
con un paraleleppedo regular especificado.

7.11

Escriba una rutina para realizar el recorte de lneas en coordenadas homogneas.

7.12

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.

7.13

Ample el algoritmo de recorte de polgonos de Sutherland-Hodgman para recortar un poliedro convexo de acuerdo con un volumen de visualizacin simtrico normalizado.

7.14

Escriba una rutina para implementar el ejercicio anterior.

7.15

Escriba una rutina para realizar el recorte de poliedros en coordenadas homogneas.

7.16

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.

7.17

Modifique el ejemplo de programa de la Seccin 7.10 para permitir que el usuario introduzca los parmetros de
visualizacin en perspectiva.

CAP07_HEARN_1P.qxd

28/09/2005

11:34

Pgina 413

Ejercicios

413

7.18

Modifique el ejemplo de programa de la Seccin 7.10 para generar una vista de cualquier poliedro de entrada.

7.19

Modifique el programa del ejercicio anterior para generar una vista del poliedro utilizando una proyeccin ortogrfica.

7.20

Modifique el programa del ejercicio anterior para generar una vista del poliedro utilizando una proyeccin paralela oblicua.

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 414

CAPTULO 8

Representaciones de
objetos tridimensionales

Una escena de una habitacin generada por computador que contiene objetos modelados
con varias representaciones tridimensionales. (Cortesa de Autodesk, Inc.).

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 415

8.1

Poliedros

8.2

Funciones para poliedros en OpenGL

8.3

Superficies curvadas

8.4

Superficies cudricas

8.5

Supercudricas

8.6

Funciones OpenGL para superficies cudricas y superficies cbicas

8.7

Objetos sin forma

8.8

Representaciones mediante splines

8.9

Mtodos de interpolacin mediante splines


cbicos

8.10

Curvas mediante splines de Bzier

8.11

Superficies de Bzier

8.12

Curvas mediante splines B

8.13

Superficies mediante splines B

8.14

Splines beta

8.15

Splines racionales

8.16
8.17
8.18
8.19
8.20
8.21
8.22
8.23
8.24
8.25
8.26
8.27
8.28

Conversin entre representaciones mediante


splines
Visualizacin de curvas y superficies
mediante splines
Funciones de splines de aproximacin en
OpenGL
Representaciones de barrido
Mtodos de geometra de slidos constructiva
rboles octales
rboles BSP
Mtodos de geometra fractal
Gramticas de formas y otros mtodos
procedimentales
Sistemas de partculas
Modelado basado en las caractersticas fsicas
Visualizacin de conjuntos de datos
Resumen

Las escenas grficas pueden contener muchas clases diferentes de objetos y superficies de materiales: rboles, flores, 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 objetos eucldeos simples, tales como los poliedros y los elipsoides; las superficies mediante 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 curvadas; los mtodos procedimentales, tales como las construcciones fractales 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 octales se utilizan para representar caractersticas internas de objetos, 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 objetos 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 entorno. 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-

CAP08_HEARN_1P.qxd

416

28/09/2005

12:49

Pgina 416

CAPTULO 8 Representaciones de objetos tridimensionales

cio de un objeto tridimensional es una representacin mediante un rbol octal. 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. Esto 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 partes 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 FUNCIONES PARA POLIEDROS EN O penGL


Disponemos de dos mtodos para especificar polgonos en un programa con OpenGL. Utilizando las primitivas para polgonos estudiadas en la Seccin 3.16, podemos generar una gran variedad de formas polidricas
y mallas de superficie. Adems, podemos utilizar las funciones de GLUT para mostrar los cinco poliedros
regulares.

Funciones de reas de relleno de polgonos en OpenGL


Un conjunto de parches de polgonos de una parte de la superficie de un objeto, o una descripcin completa
de un poliedro, se puede proporcionar utilizando las constantes de primitivas de OpenGL GL_POLYGON,
GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, y GL_QUAD_STRIP. Por ejemplo,
podramos teselar la superficie lateral (axial) de un cilindro utilizando una tira de cuadrilteros. De forma
similar, todas las caras de un paralelogramo se podran describir con un conjunto de rectngulos, y todas las
caras de una pirmide triangular se podran especificar utilizando un conjunto de superficies triangulares
conectadas.

Funciones para poliedros regulares de GLUT


Algunas formas estndar, los cinco poliedros regulares, estn predefinidos mediante subrutinas en la biblioteca GLUT. Estos poliedros, tambin llamados slidos platnicos, se distinguen por el hecho de que todas las
caras de cualquier poliedro regular son polgonos regulares idnticos. Por tanto, todas las aristas de un polie-

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 417

8.2 Funciones para poliedros en OpenGL

417

dro regular son iguales, todos los ngulos entre las aristas son iguales y todos 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 3 .
El hexaedro regular de seis caras (cubo) se visualiza con:
glutWireCube (edgeLength);

o
glutSolidCube

(edgeLength);

Al parmetro edgeLength se le puede asignar cualquier valor en punto flotante 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

( );

o
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.
glutWireIcosahedron

( );

o
glutSolidIcosahedron

( );

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.

CAP08_HEARN_1P.qxd

418

28/09/2005

12:49

Pgina 418

CAPTULO 8 Representaciones de objetos tridimensionales

Ejemplo de programa de poliedros con GLUT


Utilizando las funciones de GLUT para los slidos platnicos, el siguiente programa genera una visualizacin
en perspectiva, en malla de alambre y transformada de estos poliedros. Los cinco slidos se encuentran dentro de una ventana de visualizacin (Figura 8.1).

FIGURA 8.1. Una vista en perspectiva de


los cinco poliedros de GLUT, cambiados
de escala y posicionados dentro de una
ventana de visualizacin por el procedimiento displayWirePolyhedra.

#include <GL/glut.h>
GLsizei winWidth  500, winHeight  500;

void init (void)


{
glClearColor (1.0, 1.0, 1.0, 0.0);
}
void displayWirePolyhedra (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 1.0);

//Tamao inicial de la ventana de


//visualizacin.

// Ventana de visualizacin en blanco.

// Borra la ventana de visualizacin.


// Establece el color de las lneas en azul.

/* Establece la transformacin de visionado. */


gluLookAt (5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
/* Cambia de escala un cubo y lo muestra como paraleleppedo almbrico. */
glScalef (1.5, 2.0, 1.0);

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 419

8.2 Funciones para poliedros en OpenGL

419

glutWireCube (1.0);
/*

Cambia de escala, traslada, y muestra un dodecaedro almbrico. */

glScalef (0.8, 0.5, 0.8);


glTranslatef (-6.0, -5.0, 0.0);
glutWireDodecahedron ( );
/*

Traslada y muestra un tetraedro en modelo almbrico. */

glTranslatef (8.6, 8.6, 2.0);


glutWireTetrahedron ( );
/*

Traslada y visualiza un octaedro en modelo almbrico. */

glTranslatef (-3.0, -1.0, 0.0);


glutWireOctahedron ( );
/*

Cambia de escala, traslada y muestra un icosaedro en modelo almbrico. */

glScalef (0.8, 0.8, 1.0);


glTranslatef (4.3, -2.0, 0.5);
glutWireIcosahedron ( );
glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glFrustum (-1.0, 1.0, -1.0, 1.0, 2.0, 20.0);
glMatrixMode (GL_MODELVIEW);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Poliedros en modelo almbrico");
init ( );
glutDisplayFunc (displayWirePolyhedra);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

CAP08_HEARN_1P.qxd

420

28/09/2005

12:49

Pgina 420

CAPTULO 8 Representaciones de objetos tridimensionales

8.3 SUPERFICIES CURVADAS


Las ecuaciones de los objetos con lmites curvos se pueden expresar en forma paramtrica o en forma no paramtrica. El Apndice A proporciona un resumen y una comparacin de las representaciones paramtricas y no
paramtricas. Entre los mltiples objetos que son tiles a menudo en las aplicaciones grficas se pueden
incluir las superficies cudricas, las supercudricas, las funciones polinmicas y exponenciales, y las superficies mediante splines. Estas descripciones de objetos de entrada se teselan habitualmente para producir aproximaciones de las superficies con mallas de polgonos.

8.4 SUPERFICIES CUDRICAS


Una clase de objetos que se utiliza frecuentemente es la de las superficies cudricas, que se describen con
ecuaciones de segundo grado (cudricas). Entre ellas se incluyen las esferas, los elipsoides, los toros, los paraboloides y los hiperboloides. Las superficies cudricas, particularmente las esferas y los elipsoides, son elementos comunes en las escenas grficas, y las subrutinas para generar estas superficies estn disponibles a
menudo en los paquetes grficos. Tambin, las superficies cuadrticas se pueden producir con representaciones mediante splines racionales.

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:
x2  y2  z2  r2

(8.1)

Tambin podemos describir la superficie esfrica de forma paramtrica, utilizando los ngulos de la latitud y la longitud (Figura 8.2):
x  r cos cos ,
y  r cos sin ,
z  r sin

/2 /2


(8.2)

La representacin paramtrica de las Ecuaciones 8.2 propociona un rango simtrico para los parmetros
angulares y . Como alternativa, podramos escribir las ecuaciones paramtricas utilizando coordenadas
esfricas estndar, en las que el ngulo se especifica como colatitud (Figura 8.3). Entonces, se define dentro del rango 0 y se toma a menudo en el rango 0 2. Podramos tambin establecer la representacin utilizando parmetros u y v definidos sobre el rango que vara entre 0 y 1, haciendo las sustituciones  u y  2 v.
z
eje z

rz

eje z
P = (x, y, z)

eje y

FIGURA 8.2. Coordenadas paramtricas (r, , ) de la superficie


de una esfera de radio r.

ry
rx

eje y

eje x

eje x

FIGURA 8.3. Parmetros de las


coordenadas esfricas (r, , ), utilizando la colatitud para el ngulo .

FIGURA 8.4. Un elipsoide con


radios rx, ry y rz, centrado en el
origen de coordenadas.

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 421

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 tres 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:
2

x y z
+ +
rx ry rz

= 1

(8.3)

Una representacin paramtrica de un elipsoide en funcin del ngulo de la latitud y del ngulo de la
longitud de la Figura 8.2 es:
x  rx cos cos ,
y  ry cos sin ,
z  rz sin

/2 /2


(8.4)

Toro
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 crculo de radio r en el plano
yz alrededor del eje z. Con el centro del crculo en el eje y, el radio axial, raxial, 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:
(y  raxial)2  z2  r2
Al hacer girar este crculo alrededor del eje z se genera el toro cuya superficie se describe con la ecuacin
cartesiana:

x 2 + y 2 raxial

) +z
2

(8.5)

= r2

eje z
(0, y, z)
r
0

eje y

eje y

raxial

Vista lateral

(x, y, z)

eje x
Vista superior

FIGURA 8.5. Un toro centrado en el origen de coordenadas con una seccin recta circular y con el eje del toro segn el
eje z.

CAP08_HEARN_1P.qxd

422

28/09/2005

12:49

Pgina 422

CAPTULO 8 Representaciones de objetos tridimensionales

Y las ecuaciones paramtricas correspondientes del toro con una seccin recta circular son:
x  (raxial  r cos ) cos ,

y  (raxial  r cos ) sin ,

(8.6)

z  r sin
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 ry y rz, podemos escribir la ecuacin de la elipse como:
y raxial

ry

z
+
rz

= 1

en la que raxial es la distancia segn el eje y desde el eje de rotacin z al centro de la elipse. De este modo, se
genera un toro que se puede describir con la ecuacin cartesiana,
x 2 + y2 r
axial

ry

z
+
rz

= 1

(8.7)

La representacin paramtrica correspondiente del toro con una seccin recta elptica es
x  (raxial  ry cos ) cos ,

y  (raxial  ry cos ) sin ,

(8.8)

z  rz sin
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 x e y sea variable. Un modo de hacer esto es escribir la ecuacin cartesiana
de la superelipse en la forma:
x

rx

2/s

y
+
r
y

2/s

=1

(8.9)

en la que al parmetro s se le puede asignar cualquier valor real. Cuando s1, tenemos una elipse ordinaria.
Las ecuaciones paramtricas correspondientes a la superelipse de la Ecuacin 8.9 se pueden expresar como

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 423

8.5 Supercudricas

423

FIGURA 8.6. Superelipses dibujadas con valores del parmetro s variando desde 0.5 a 3.0 y con rx  ry.

x  rx coss ,
y  ry sins

(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 / s2 2 / s2
x + y
r
rx
y

s2 / s1

z
+
rz

2 / s1

=1

(8.11)

Con s1  s2 1, tenemos un elipsoide ordinario.


Podemos a continuacin escribir la representacin paramtrica correspondiente al superelipsoide de la
Ecuacin 8.11 como,
x = rx coss1 coss2 ,

/ 2 / 2

y = ry cos sin ,

s1

s2

(8.12)

z = rz sin
s1

FIGURA 8.7. Superelipsoides dibujados con


valores de los parrmetros s1 y s2 variando desde
0.0 a 2.5 y con rx  ry  rz.

CAP08_HEARN_1P.qxd

424

28/09/2005

12:49

Pgina 424

CAPTULO 8 Representaciones de objetos tridimensionales

La Figura 8.7 muestra las formas de los superelipsoides que se pueden generar utilizando varios valores
de los parmetros s1 y s2. Estas y otras formas de supercudricas se pueden combinar para crear estructuras
ms complejas, tales como descripciones de muebles, tornillos roscados y otros artculos de ferretera.

8.6 FUNCIONES OpenGL PARA SUPERFICIES CUDRICAS Y SUPERFICIES


CBICAS
Una esfera y un gran nmero de otros objetos de superficies cudricas tridimensionales se pueden representar utilizando funciones que estn incluidas en el conjunto de herramientas de OpenGL Utility Toolkit (GLUT)
y en OpenGL Utility (GLU). Adems, GLUT posee una funcin para mostrar la forma de una tetera que est
definida con parches de superficie bicbicos. Las funciones de GLUT, que son fcilmente incorporables a un
programa de aplicacin, tienen cada una dos versiones. Una versin de cada funcin muestra una superficie
almbrica y la otra versin muestra la superficie como un conjunto de parches poligonales coloreados. Con
las funciones de GLUT podemos mostrar una esfera, un cono, un toro o una tetera. Las funciones de GLU
para superficies cudricas son un poquito ms farragosas de configurar, pero proporcionan ms opciones. Con
las funciones de GLU, podemos representar una esfera, un cilindro, un cilindro con tapas, un cono, una corona circular (o disco hueco) y un sector de corona circular (o disco).

Funciones para superficies cudricas de GLUT


Generamos una esfera con GLUT con cualquiera de las dos funciones siguientes:
glutWireSphere

(r, nLongitudes, nLatitudes);

o
glutSolidSphere

(r, nLongitudes, nLatitudes);

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 nLongitudes y nLatitudes se utilizan para seleccionar el nmero
entero de lneas de longitud y de latitud que se utilizarn 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 rbase y height, respectivamente. Como en el caso de la esfera, a los
parmetros nLongitudes y nLatitudes 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 crculo, 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:

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 425

8.6. Funciones OpenGL para superficies cudricas y superficies cbicas


glutWireTorus

425

(rCrossSection, rAxial, nConcentrics, nRadialSlices);

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 rCrossSection alrededor del eje z coplanario, en la que la distancia del centro del crculo al eje z es rAxial (Seccin 8.4). Seleccionamos un tamao del toro utilizando
valores en punto flotante 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 nConcentrics y nRadialSlices. El parmetro nConcentrics especifica el nmero de crculos concntricos (con centro en el eje z) que se deben utilizar en la superficie del toro y el parmetro
nRadialSlices especifica el nmero de secciones radiales de la superficie del toro. Estos dos parmetros
hacen referencia al nmero de lneas de la cuadrcula ortogonal sobre la superficie del toro, que se visualizan
como segmentos de lnea recta (los lmites 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 todo 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, utililizando cualquira de las dos funciones siguientes de GLUT:
glutWireTeapot

(size);

o
glutSolidTeapot

(size);

La superficie de la tetera se genera utilizando funciones de curvas de Bzier de OpenGL (Seccin 8.11).
El parmetro size 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 eje y.

Funciones para la generacin de superficies cudricas de GLU


Para generar una superficie cudrica utilizando funciones de GLU, necesitamos asignar un nombre a la cudrica, activar el sombreador de cudricas de GLU y especificar los valores de los parmetros de la superficie.
Adems, podemos establecer otros parmetros para controlar la apariencia de una superficie cudrica con
GLU.
Las siguientes lneas de cdigo muestran la secuencia bsica de llamadas a funciones para mostrar una
esfera almbrica centrada en origen de coordenadas universal.
GLUquadricObj

*sphere1;

Sphere1  gluNewQuadric

( );

CAP08_HEARN_1P.qxd

426

28/09/2005

12:49

Pgina 426

CAPTULO 8 Representaciones de objetos tridimensionales


gluQuadricDrawStyle
gluSphere

(sphere1, GLU_LINE);

(sphere1, r, nLongitudes, nLatitudes);

En la primera lnea de cdigo se define un nombre para el objeto de tipo cudrica. En este ejemplo, hemos
elegido el nombre sphere1. 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
gluNewQuadric, entonces se selecciona el modo de visualizacin GLU_LINE para sphere1 con el comando gluQuadricDrawStyle. 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 caras poligonales mediante lneas de longitud y de latitud equiespaciadas. Especificamos el nmero entero de lneas de longitud y de lneas de latitud
como valores de los parmetros nLongitudes y nLatitudes.
Hay disponibles otros tres modos de visualizacin de superficies cudricas con GLU. Utilizando la constante simblica GLU_POINT en gluQuadricDrawStyle, 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. sta 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 gluSphere por
gluCylinder

(quadricName, rBase, rTop, height, nLongitudes, nLatitudes) ;

La base de este objeto se encuentra en el plano xy (z0) 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 rTop al radio de la tapa superior. Si stop  0.0, obtenemos un cono; si rTop  rBase obtenemos un
cilindro. En caso contrario, se obtiene un cilindro con tapas. Al parmetro height 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 nLongitudes y
nLatitudes.
Una corona circular plana o disco slido se visualiza en el plano xy (z0) y centrado en el origen de coordenadas universal con:
gluDisk (ringName, rInner, rOuter, nRadii, nRings);

Con los parmetros rInner y rOuter establecemos los valores de doble precisin del radio interior y del
radio exterior. Si rInner  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 nRadii y nRings, que especifican el nmero de rodajas radiales que hay que utilizar en la teselacin y el nmero de anillos circulares concntricos, respectivamente. La orientacin del anillo se define con respecto al eje z, 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, rInner, rOuter, nRadii, nRings, startAngle, sweepAngle);

El parmetro de doble precisin startAngle 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 startAngle. Por tanto, una parte de una
corona circular plana se visualiza desde el ngulo startAngle hasta startAngle  sweepAngle. Por

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 427

8.6. Funciones OpenGL para superficies cudricas y superficies cbicas

427

ejemplo, si startAngle  0.0 y sweepAngle  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

(quadricName);

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);

Al parmetro normalVectorDirection se le asigna GLU_OUTSIDE o GLU_INSIDE 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 GLU_OUTSIDE. La direccin
predeterminada de la cara frontal de una corona circular plana es la del semieje positivo z (por encima del
disco).
Otra opcin es la generacin de los vectores normales a la superficie.
gluQuadricNormals (quadricName, generationMode) ;

Al parmetro generationMode se le asigna una constante simblica para indicar cmo se deberan generar los vectores normales a la superficie. La constante predeterminada es GLU_NONE, 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 GLU_FLAT. Esta produce una normal a la superficie para cada cara poligonal.
Cuando hay que aplicar otras condiciones de iluminacin y sombreado, utilizamos la constante GLU_SMOOTH,
que genera un vector normal para cada vrtice de la superficie.

FIGURA 8.8. Visualizacin 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 procedimiento
wireQuadSurfs.

CAP08_HEARN_1P.qxd

428

28/09/2005

12:49

Pgina 428

CAPTULO 8 Representaciones de objetos tridimensionales

Entre otras opciones para las superficies cudricas con GLU 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 cudrica:
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.

#include <GL/glut.h>
GLsizei winWidth  500, winHeight  500;

void init (void)


{
glClearColor (1.0, 1.0, 1.0, 0.0);

// Tamao inicial de la ventana de


// visualizacin.

// Establece el color de la ventana


// de visualizacin.

}
void wireQuadSurfs (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 1.0);

/*
*

// Borra la ventana de visualizacion.


// Establece el color de las lneas
// en azul.

Establece los parametros de visualizacin con el eje z universal como


direccin vista arriba. */

gluLookAt (2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
/*

Posiciona y muestra una esfera almbrica de GLUT.

glPushMatrix ( );
glTranslatef (1.0, 1.0, 0.0);
glutWireSphere (0.75, 8, 6);
glPopMatrix ( );
/*

Posiciona y muestra un cono almbrico de GLUT.

glPushMatrix ( );
glTranslatef (1.0, -0.5, 0.5);
glutWireCone (0.7, 2.0, 7, 6);
glPopMatrix ( );

*/

*/

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 429

8.7 Objetos sin forma (Blobby)

429

/* Posiciona y muestra un cilindro almbrico de GLUT. */


GLUquadricObj *cylinder;
// Establece el nombre del objeto de cudrica de
GLU.
glPushMatrix ( );
glTranslatef (0.0, 1.2, 0.8);
cylinder  gluNewQuadric ( );
gluQuadricDrawStyle (cylinder, GLU_LINE);
gluCylinder (cylinder, 0.6, 0.6, 1.5, 6, 4);
glPopMatrix ( );
glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glOrtho (-2.0, 2.0, -2.0, 2.0, 0.0, 5.0);
glMatrixMode (GL_MODELVIEW);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Superficies Cudricas con modelo almbrico");
init ( );
glutDisplayFunc (wireQuadSurfs);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

8.7 OBJETOS SIN FORMA (BLOBBY)


Se han desarrollado varias tcnicas para modelar objetos no rgidos en aplicaciones de grficos por computadora. En la Seccin 8.26 se estudian mtodos para visualizar las caractersticas de materiales tales como la
ropa y la goma. Pero otros objetos, como las estructuras moleculares, los lquidos y las gotitas de agua, objetos que se funden y las formas de los msculos de los animales y de los humanos muestran un cierto grado de
fluidez. Estos objetos cambian las caractersticas de su superficie con algunos movimientos o cuando se aproximan a otros objetos, y poseen superficies curvadas que no se pueden representar fcilmente con formas
estndar. Generalmente, esta clase de objetos se denominan objetos sin forma (blobby).

CAP08_HEARN_1P.qxd

430

28/09/2005

12:49

Pgina 430

CAPTULO 8 Representaciones de objetos tridimensionales

(a)

(b)

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 esferas.

FIGURA 8.10. Formas de msculos sin forma de un


brazo humano.

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. Esto 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. Habitualmente, 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:
f ( x, y, z ) = bk e ak rk T = 0
2

(8.13)

donde r2k  x2k  y2k  z2k, el parmetro T es algn umbral especificado, y los parmetros ak y bk se utilizan
para ajustar la cantidad de sin forma de las componentes individuales de la superficie. Los valores negativos de bk 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.
b

a 0

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.

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 431

8.8 Representaciones con splines

431

FIGURA 8.13. Una distribucin de pantalla, utilizada en


los paquetes Blob Modeler y Blob Animador, para modelar objetos con metabolas. (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 metabolas describe los objetos compuestos como
combinaciones de funciones de densidad cudricas de la forma:
3r 2
d

b
1

,
si 0 < r

2

3
d

2
3
r
d
f (r ) = b 1
, si < r d
2
3
d

si r > d
0,

(8.14)

Y el modelo de objeto suave utiliza la funcin:

22r 2 17r 4 4r 6
+ 4 6 , si 0 < r d
1
f (r ) =
9d 2
9d
9d
0,
si r > d

(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 metabolas.

8.8 REPRESENTACIONES CON SPLINES


En el dibujo de bocetos, un spline es una banda flexible que se utiliza para producir una curva suave que pasa
por unos puntos concretos. Se distribuyen varios pesos pequeos a lo largo de la banda para mantenerla en su
posicin sobre la mesa de dibujo mientras se traza la curva. El trmino curva con spline en principio haca
referencia a una curva dibujada de este modo. Podemos describir matemticamente tal curva con una funcin
creada por tramos de polinomios cbicos, cuya primera y segunda derivadas son continuas en las diferentes
partes de la curva. En los grficos por computadora, el trmino curva con spline ahora se refiere a cualquier
curva compuesta formada por partes polinmicas que satisfacen condiciones de continuidad especficas en
los lmites de las mismas. Una superficie con splines se puede describir con dos conjuntos de curvas ortogonales con splines. Existen varias clases diferentes de especificaciones de splines que se utilizan en

CAP08_HEARN_1P.qxd

432

28/09/2005

12:49

Pgina 432

CAPTULO 8 Representaciones de objetos tridimensionales

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 CAD 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.

Splines de interpolacin y de aproximacin


Especificamos un curva con spline proporcionando un conjunto de coordenadas de puntos, llamados puntos
de control, que marcan la forma general de la curva. Estas coordenadas se ajustan mediante funciones polinmicas paramtricas y continuas por tramos de uno de estos dos modos. Cuando las partes polinmicas se
ajustan para que todos los puntos de control estn conectados, como en la Figura 8.14, se dice que la curva
resultante interpola el conjunto de puntos de control. En cambio, cuando la curva de polinomios generada se
dibuja para que algunos, o todos, los puntos de control no estn en la trayectoria de la curva, se dice que la
curva aproxima el conjunto de puntos de control (Figura 8.15). Se utilizan mtodos similares para construir
superficies de interpolacin o de aproximacin con splines.
Los mtodos de interpolacin se utilizan habitualmente para digitalizar dibujos o para especificar trayectorias de animacin. Los mtodos de aproximacin se utilizan fundamentalmente como herramientas de diseo para crear formas de objetos. La Figura 8.16 muestra la visualizacin por pantalla de una superficie de
aproximacin con splines, de una aplicacin de diseo. Lneas rectas conectan los puntos de control situados
por encima de la superficie.
Una curva o una superficie con splines se define, modifica y manipula con operaciones sobre los puntos
de control. Seleccionando interactivamente posiciones espaciales para los puntos de control, un diseador
puede establecer una forma inicial. Despus de que se visualiza el polinomio de ajuste para un conjunto concreto de puntos de control, el diseador puede volver a posicionar algunos o todos los puntos de control para
reestructurar la forma del objeto. Las transformaciones geomtricas (traslacin, rotacin y cambio de escala)
se aplican al objeto transformando los puntos de control. Adems, los paquetes de CAD insertan puntos de
control adicionales para ayudar al diseador en el ajuste de las formas de los objetos.
Un conjunto de puntos de control define un lmite de una regin del espacio que se denomina armazn
(hull) convexo. Una manera de imaginarse la forma de un armazn convexo para una curva bidimensional
consiste en imaginar una banda de goma estirada alrededor de los puntos de control para que cada punto de
control est sobre el permetro de ese lmite o dentro de ste (Figura 8.17). Por tanto, el armazn convexo de
una curva bidimensional con spline es un polgono convexo. En el espacio tridimensional, el armazn convexo de un conjunto de puntos de control de splines forma un poliedro convexo. El armazn convexo

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 433

8.8 Representaciones con splines

433

FIGURA 8.16. Una superficie de aproximacin con splines de una aplicacin de CAD de diseo de automviles. Los contornos de la superficie se dibujan con partes de curvas polinmicas y los puntos de control de la superficie estn conectados mediante segmentos de lnea recta. (Cortesa de Evans & Sutherland.)

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.
p2
p2

p3

p0
p3

p0

p1
(b)
p1
(a)

FIGURA 8.17. Formas de los armazones convexas


(lneas discontinuas) de dos conjuntos de puntos de
control en el plano xy.

CAP08_HEARN_1P.qxd

434

28/09/2005

12:49

Pgina 434

CAPTULO 8 Representaciones de objetos tridimensionales


p2

p2
p0

p3

p3

p0

p1
p1

(b)

(a)

FIGURA 8.18. Formas de los grafos de control (lneas


discontinuas) de dos conjuntos de puntos de control en
el plano xy.

Condiciones de continuidad paramtricas


Para garantizar una transicin suave de una parte de un spline paramtrico por tramos a la siguiente, podemos
imponer varias condiciones de continuidad en los puntos de conexin. Si cada parte de la curva con spline
se describe con un conjunto de funciones de coordenadas paramtricas de la forma,
x  x(u),

y  y(u),

z  z(u),

u1 u u2

(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 C0, significa que las curvas
se encuentran. Es decir, los valores de x, y y z evaluados en u2 en la primera parte de la curva son iguales, respectivamente, a los valores de x, y y z evaluados en u1 en la siguiente parte de la curva. La continuidad paramtrica de primer orden, referenciada como continuidad C1, 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 C2, 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 C0, C1 y C2.
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 tasa 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 CAD de precisin. Una cmara desplazndose segn
la trayectoria curva de la Figura 8.19(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.19(c), la secuencia de cuadros del movimiento sufrira una transicin suave en la frontera.

Condiciones de continuidad geomtrica


Otro mtodo para unir dos partes sucesivas de una curva consiste en especificar condiciones de continuidad
geomtrica. En este caso, requerimos slo que las derivadas paramtricas de las dos partes sean proporcionales entre s en su frontera comn, en lugar de requerir igualdad.

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 435

8.8 Representaciones con splines

(a)

(b)

435

(c)

FIGURA 8.19. Construccin por partes de una curva uniendo dos segmentos de curva utilizando rdenes diferentes de continuidad: (a) slo continuidad de orden cero, (b) continuidad de primer orden y (c) continuidad de segundo orden.
C3
C2
p0
C1

p2

p1

p0
C1

(a)

p1

p2

(b)

FIGURA 8.20. Tres puntos de control ajustados mediante dos partes de curva unidas con (a) continuidad paramtrica y con
(b) continuidad geomtrica, en la que el vector tangente de la curva C3 en el punto P1 tiene una mayor magnitud que el
vector tangente de la curva C1 en P1.

La continuidad geomtrica de orden cero, descrita como continuidad G0, 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 G1, significa que las primeras derivadas paramtricas son proporcionales en la interseccin de dos partes sucesivas. Si hacemos referencia a la posicin paramtrica en la curva como P(u), la direccin del vector tangente P(u), pero no
necesariamente su magnitud, ser la misma en dos partes sucesivas de la curva en su punto comn con continuidad G1. La continuidad geomtrica de segundo orden, o continuidad G2, significa que tanto la primera como las segundas derivadas paramtricas de las dos partes de la curva son proporcionales en su frontera.
Con continuidad G2, 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.

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 funciones de combinacin (o funciones 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
polinmica cbica paramtrica para la coordenada x a lo largo de la trayectoria de una parte de una curva con
spline:
x(u)  axu3  bxu2  cxu  dx,

0u1

(8.17)

Las condiciones de la frontera de esta curva se pueden establecer en los puntos extremos x(0) y x(1) y en
las primeras derivadas paramtricas en los puntos extremos: x(0) y x(1). Estas cuatro condiciones de la frontera son suficientes para determinar los valores de los cuatro coeficientes ax, bx, cx y dx.
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:

CAP08_HEARN_1P.qxd

436

28/09/2005

12:49

Pgina 436

CAPTULO 8 Representaciones de objetos tridimensionales

x(u) = [u3 u 2

ax
b
u 1] x
cx

dx

= U C

(8.18)

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.18, podemos escribir las condiciones en la frontera en forma matricial y resolver para
la matriz de coeficientes C de este modo,
C  Mspline Mgeom

(8.19)

donde Mgeom es una matriz columna de cuatro elementos que contiene los valores de las restricciones geomtricas (condiciones en la frontera) del spline, y Mspline 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 Mgeom 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:
x(u)  U Mspline Mgeom

(8.20)

La matriz Mspline, 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 gk, como las coordenadas de los puntos de control y la pendiente de la curva en los puntos de control:
3

x(u) = gk BFk (u)

(8.21)

k =0

Los polinomios BFk(u), 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.

Superficies con splines


El procedimiento habitual para definir una superficie con splines consiste en especificar dos conjuntos de curvas ortogonales con splines, utilizando una malla de puntos de control sobre una regin del espacio. Si hacemos referencia a los puntos de control como pku,kv, cualquier punto de la superficie con splines se puede calcular como el producto cartesiano de las funciones de combinacin de la curva con splines:
P(u, v) =

ku , kv

BFku (u)BFkv (v)

(8.22)

ku . kv

Los parmetros de superficie u y v a menudo varan dentro del rango de 0 a 1, 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.

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 437

8.9 Mtodos de interpolacin con splines cbicos

437

Curvas de
recorte

FIGURA 8.21. Modificacin de una parte de una superficie utilizando curvas de recorte.
p1

pk

p0

pk1

pn

p2

FIGURA 8.22. Interpolacin con splines cbicos continuos por tramos de n  1 puntos de control.

Recorte de superficies con splines


En aplicaciones CAD, un diseo de una superficie puede requerir algunas caractersticas que no se implementan fcilmente simplemente ajustando los puntos de control. Por ejemplo, una parte de una superficie con splines puede necesitar un recorte para encajar dos piezas del diseo, o se puede necesitar un agujero para que un
conducto pueda pasar a travs de la superficie. Para estas aplicaciones, los paquetes grficos a menudo proporcionan funciones para generar curvas de recorte que se pueden utilizar para extraer partes de una superficie con splines, como se muestra en la Figura 8.21. Las curvas de recorte se definen habitualmente con coordenadas paramtricas uv de la superficie y, a menudo, se deben especificar como curvas cerradas.

8.9 MTODOS DE INTERPOLACIN CON SPLINES CBICOS


Esta clase de splines se usa muy a menudo para establecer trayectorias para el movimiento de objetos o para
proporcionar una representacin de un objeto o dibujo existente, pero los splines de interpolacin tambin se
utilizan a veces para disear las formas de objetos. Los polinomios cbicos ofrecen un compromiso razonable entre flexibilidad y velocidad de computacin. Comparados con polinomios de mayor grado, los splines
cbicos requieren menos clculos y espacio de almacenamiento, y son ms estables. Comparados con los polinomios cuadrticos y los segmentos de lnea recta, los polinomios cbicos son ms flexibles para modelado
de formas de objetos.
Dado un conjunto de puntos de control, los splines de interpolacin cbicos se obtienen ajustando los puntos de entrada con una curva polinmica por tramos cbica que pasa a travs de cada punto de control.
Suponga que tenemos n  1 puntos de control especificados con las coordenadas:
pk  (xk, yk, zk),

k  0, 1, 2, . . ., n

CAP08_HEARN_1P.qxd

438

28/09/2005

12:49

Pgina 438

CAPTULO 8 Representaciones de objetos tridimensionales

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:
x(u)  axu3  bxu2  cxu  dx
y(u)  ayu3  byu2  cyu  dy,
z(u)  azu3  bzu2  czu  dz

(0 u 1)

(8.23)

Para cada una de estas tres ecuaciones, necesitamos determinar los valores de los cuatro coeficientes a, b,
c y d de la representacin polinmica de cada una de las n partes de la curva, entre los n  1 puntos de control. Hacemos esto estableciendo suficientes 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 lmites de los splines cbicos
de interpolacin.

Splines cbicos naturales


Una de las primeras curvas con splines que se desarroll para aplicaciones grficas es el spline cbico natural. Esta curva de interpolacin es una representacin matemtica del spline original de generacin de borradores. Formulamos un spline cbico natural imponiendo que dos partes adyacentes de la curva posean la mismas primera y segunda derivadas paramtricas en su lmite comn. Por tanto, los splines cbicos naturales tienen continuidad C2.
Si tenemos n  1 puntos de control, como en la Figura 8.22, entonces tenemos n partes de la curva con
un total de 4n coeficientes de polinomio que hay que determinar. En cada uno de los n  1 puntos de control
interiores tenemos cuatro condiciones en el lmite: las dos partes de la curva a cada lado de un punto de control deben tener las mismas primera y segunda derivadas paramtricas en dicho punto de control, y cada curva
debe pasar por ese punto de control. Esto nos proporciona 4n  4 ecuaciones que hay que satisfacer con 4n
coeficientes de polinomio. Obtenemos una ecuacin adicional a partir del primer punto de control p0, la posicin de comienzo de la curva y otra condicin a partir del punto de control pn, que debe ser el ltimo punto
de la curva. Sin embargo, todava necesitamos dos condiciones ms para ser capaces de determinar los valores de todos los coeficientes. Un mtodo para obtener las dos condiciones adicionales consiste en establecer
las segundas derivadas en p0 y pn en el valor 0. Otra tcnica es aadir dos puntos de control extra (llamados
puntos ficticios), uno en cada extremo de la secuencia original de puntos de control. Es decir, aadimos un
punto de control etiquetado como p1 en el comienzo de la curva y un punto de control etiquetado como pn1
en el final. Entonces todos los puntos de control originales son puntos interiores y tenemos las 4n condiciones necesarias en el lmite.
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 parte 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 localmente porque cada parte
de la curva slo depende de las restricciones de sus puntos extremos.
Si P(u) representa una funcin paramtrica cbica de punto para la parte de la curva entre los puntos de
control pk y pk1, como se muestra en la Figura 8.23, entonces las condiciones en los lmites que definen esta
parte de curva de Hermite son:

CAP08_HEARN_1P.qxd

28/09/2005

12:49

Pgina 439

8.9 Mtodos de interpolacin con splines cbicos

pk

439

P(u)  (x(u), y(u), z(u))

FIGURA 8.23. Funcin paramtrica de punto P(u) para una parte de curva de
Hermite entre los puntos de control pk y pk1.

pk  1

P(0)  pk
P(1)  pk1

(8.24)

P(0)  Dpk
P(1)  Dpk1
donde Dpk y Dpk1 especifican los valores de las derivadas paramtricas (pendientes de la curva) en los puntos de control pk y pk1, respectivamente.
Podemos escribir el vector equivalente a las Ecuaciones 8.23 para esta parte de la curva de Hermite como:
P(u)  a u3  b u2  c u  d,

0u1

(8.25)

donde la componente x de P(u) es x(u)  ax u  bx u  cx u  dx, y de forma similar para las componentes
y y z. La matriz equivalente a la Ecuacin 8.25 es:
3

P(u) = [u3 u 2

a
b
u 1]
c

d

(8.26)

y la derivada de la funcin de punto se puede expresar como,

P (u) = [3u 2

a
b
2u 1 0 ]
c

d

(8.27)

Sustituyendo los valores de los puntos extremos 0 y 1 en el parmetro u de las dos ecuaciones anteriores,
podemos expresar las condiciones 8.24 de Hermite en los lmites en forma matricial:
pk 0
p
k +1 = 1
Dp k 0


Dp k +1 3

0
1
0
2

0
1
1
1

1 a
1 b

0 c

0 d

(8.28)

Resolviendo esta ecuacin para los coeficientes de los polinomios, tenemos:


a 0
b 1
=
c 0

d 3

0
1
0
2

0
1
1
1

1 p k 2 2 1 1 p k
pk

p
1 p k +1 3 3 2 1 p k +1
=

= M H k +1

Dpk
0 Dp k 0 0
1 0 Dp k



0 Dp k +1 1 0
0 0 Dp k +1
Dpk +1

(8.29)

CAP08_HEARN_1P.qxd

440

28/09/2005

12:49

Pgina 440

CAPTULO 8 Representaciones de objetos tridimensionales

donde MH, 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:
pk
p
u 1] M H k +1
Dp k

Dp k +1

P(u) = [u3 u 2

(8.30)

Finalmente, podemos determinar las expresiones de las funciones de combinacin de los polinomios de
Hermite, Hk(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:
P(u)  pk(2u3  3u2  1)  pk1 (2u3  3u2)  Dpk (u3  2u2  u)
 Dpk1(u3  u2)
 pk H0(u)  pk1 H1  Dpk H2  Dpk1 H3

(8.31)

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
H0(u)
1

H1(u)
1

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.2

0.4

0.6

0.8

u
0

0.2

0.4

(a)

0.8

0.6

0.8

(b)

H2(u)
1

H3(u)
1

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.6

0.2

0.4

0.6

0.8

0.2

0.4

0.2
(c)

FIGURA 8.24.

Funciones de combinacin de Hermite.

(d)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 441

8.9 Mtodos de interpolacin con splines cbicos

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 especficas 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 extremos. En un spline cardinal, la pendiente en el punto de control se calcula a partir de las coordenadas de los dos puntos 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(u) como la representacin de la
funcin de punto paramtrica cbica de la seccin de curva entre los puntos de control pk y pk1, como en la
Figura 8.25, entonces los cuatro puntos de control desde pk1 hasta pk1 se utilizan para establecer las condiciones en los lmites de la seccin de spline cardinal de este modo:
P(0 ) = p k
P(1) = p k +1
1
P (0) = (1 t )(p k +1 p k 1 )
2

(8.32)

1
P (1) = (1 t )(p k + 2 p k )
2
Por tanto, las pendientes en los puntos de control pk y pk1 se toman proporcionales, respectivamente, a
las cuerdas p k 1 p k +1 y p k p k + 2 (Figura 8.26). El parmetro t 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 t.
Cuando t  0, esta clase de curvas se denomina splines de Catmull-Rom, o splines de Overhauser.
pk

p(u)
pk  1
pk  2

pk  1

pk

pk  1

t0
(Curva ms abierta)

pk  1
pk  2

t0
(Curva ms cerrada)

FIGURA 8.25. Funcin paramtrica de punto P(u) de una seccin de


spline cardinal entre los puntos de control pk y pk1.

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).

FIGURA 8.27. Efecto del parmetro de tensin sobre la forma de una


seccin de spline cardinal.

CAP08_HEARN_1P.qxd

442

28/09/2005

12:50

Pgina 442

CAPTULO 8 Representaciones de objetos tridimensionales

CAR0(u)

CAR1(u)

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.2

0.4

0.6

0.8

0.2

0.4

0.6

0.8

0.6

0.8

0.2
(a)

(b)

CAR2(u)

CAR3(u)

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.2

0.4

0.6

0.8

0.2

0.2

(c)

0.4

(d)

FIGURA 8.28. Funciones de combinacin de splines cardinales con t  0 (s  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(u) = [u3 u 2

p k 1
p
u 1] MC k
p k +1

pk + 2

(8.33)

donde la matriz cardinal es:


s 2 s s 2 s
2s s 3 3 2s s

MC =
s
0
s
0

1
0
0
0

con s  (1  t)/2.
Desarrollando la Ecuacin matricial 8.33 en forma polinmica, tenemos:

(8.34)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 443

8.9 Mtodos de interpolacin con splines cbicos

P(u)  pk1(s u3  2s u2  s u)  pk [(2  s)u3  (s  3)u2  1]


 pk1 [(s  2)u3  (3  2s)u2  s u]  pk2(s u3  s u2)
 pk1 CAR0(u)  pk CAR1(u)  pk1 CAR2(u)  pk2 CAR3(u)

443

(8.35)

donde los polinomios CARk(u) con k  0, 1, 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 t  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 parte de la curva se genera utilizando el conjunto de puntos de control {p0,
p1, p2, p3}, la segunda curva se produce con el conjunto de puntos de control {p1, p2, p3, p0}, la tercera curva
tienen los puntos de control {p2, p3, p0, p1} y la ltima seccin de la curva tiene los puntos de control {p3, p0,
p1, p2}. 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 autointerseccin que resulta es debida a las restricciones en la pendiente de la curva en los puntos extremos p1 y p2.
7
p2

p1

6
5
4
3
2
1

p3

p0
2

10

1

FIGURA 8.29. Una curva cerrada con cuatro secciones de spline cardinal, obtenida con una permutacin circular de los
puntos de control y con un parmetro de tensin t  0.

10

p1  p 2

8
6
4
2
p0
0

p3
2

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.

CAP08_HEARN_1P.qxd

444

28/09/2005

12:50

Pgina 444

CAPTULO 8 Representaciones de objetos tridimensionales


2.50
2.25
p1

2.00

p2

1.75
1.50
1.25
1.00

p0

10
p3

FIGURA 8.31. Una parte de una curva con spline cardinal que se autointersecta 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 pk1, pk, pk1 y pk2, definimos las condiciones de los lmites de una seccin de curva de Kochanek-Bartels entre pk y pk1 del modo siguiente:
P(0 ) = p k
P(1) = p k +1
1
P (0)in = (1 t )[(1 + b)(1 c)(p k p k 1 )
2
+ (1 b)(1 + c)(p k +1 p k )]
P (1)out =

(8.36)

1
(1 t )[(1 + b)(1 + c)(p k +1 p k )
2
+ (1 b)(1 c)(p k + 2 p k +1 )]

donde t es el parmetro de tensin, b 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 t 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, b, 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.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 445

8.10 Curvas con splines de Bzier

p2

p0

p1

p3

445

p2

p4

p0

p1

b0

FIGURA 8.32. Efecto del parmetro de desplazamiento sobre la forma de una seccin de un spline de Kochanek-Bartels.

p4

p3

b0

8.10 CURVAS CON SPLINES DE BZIER


Este mtodo de aproximacin con spline fue desarrollado por el ingeniero francs Pierre Bzier para su uso
en el diseo de las carroceras de automviles Renault. Los splines de Bzier disponen de unas propiedades
que los hacen especialmente tiles y convenientes para el diseo de curvas y superficies. Adems, son fciles
de implementar. Por estas razones, los splines de Bzier estn disponibles con mucha frecuencia en diversos
sistemas CAD, en paquetes para grficos generales y en paquetes heterogneos de dibujo y pintura.
Por lo general, una parte de una curva de Bzier se puede ajustar a cualquier nmero de puntos de control,
aunque algunos paquetes grficos limitan el nmero de puntos de control a cuatro. El grado del polinomio de
Bzier se determina con el nmero de puntos de control que hay que aproximar y con su posicin relativa.
Como en los splines de interpolacin, podemos especificar la trayectoria de la curva de Bzier en las proximidades de los puntos de control utilizando funciones de combinacin, una matriz de caracterizacin, o las
condiciones en los lmites. En las curvas generales de Bzier, sin restricciones en el nmero de puntos de control, la especificacin de la funcin de fundido es la representacin ms conveniente.

Ecuaciones de las curvas de Bzier


En primer lugar consideraremos el caso general con n  1 puntos de control, indicados como pk  (xk, yk, zk),
donde k vara desde 0 a n. Estos puntos se combinan para producir el siguiente vector de posicin P(u), que
describe la trayectoria de una funcin de aproximacin polinmica de Bzier entre p0 y pn.
n

P(u) = p k BEZ k , n (u),

0 u 1

(8.37)

k =0

Las funciones de combinacin de Bzier BEZk,n(u) son los polinomios de Berstein,


BEZk,n(u)  C(n, k)uk(1  u)nk

(8.38)

donde los parmetros C(n, k) son los coeficientes binomiales:

C (n, k ) =

n!
k !(n k )!

(8.39)

La Ecuacin vectorial 8.37 representa un sistema de tres ecuaciones paramtricas en las coordenadas individuales de la curva:
n

x(u) = xk BEZ k , n (u)


k =0
n

y(u) = yk BEZ k , n (u)


k =0
n

z(u) = zk BEZ k , n (u)


k =0

(8.40)

CAP08_HEARN_1P.qxd

446

28/09/2005

12:50

Pgina 446

CAPTULO 8 Representaciones de objetos tridimensionales

En la mayora de los casos, una curva de Bzier 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 as sucesivamente. La Figura 8.33 muestra la apariencia de algunas curvas de Bzier 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 Bzier degenerados. Por ejemplo, una curva de Bzier 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 Bzier 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 ) =

n k +1
C (n, k 1)
k

(8.41)

para n k. Tambin, las funciones de combinacin de Bzier satisfacen la relacin recursiva,


BEZk,n(u)  (1  u)BEZk,n1(u)  u BEZk1,n1(u),

n>k1

(8.42)

donde BEZk,k  u y BEZ0,k  (1  u) .


k

Ejemplo de un programa de generacin de curvas de Bzier


En el siguiente programa se proporciona una implementacin para el clculo de las funciones de combinacin
de Bzier y la generacin de una curva bidimensional con splines de Bzier cbicos. Se definen cuatro puntos de control en el plano xy, y se dibujan 1000 posiciones de pxeles a lo largo de la trayectoria de la curva
utilizando un grosor de pxel de 4. En el procedimiento binomialCoeffs se calculan los valores de los
coeficientes binomiales y en el procedimiento computeBezPt se calculan las coordenadas a lo largo de la
p1

p1

p2

p1

p3

p0

p0
p0
p2

p3

(a)

p2

(b)

(c)
p1

p2

p3

p0

p0

p4

p1
p3
(d)

p2
(e)

FIGURA 8.33. Ejemplos de curvas de Bzier bidimensionales generadas con tres, cuatro y cinco puntos de control. Las
lneas discontinuas conectan los puntos de control.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 447

8.10 Curvas con splines de Bzier

447

FIGURA 8.34. Una curva de Bzier visualizada mediante el programa de ejemplo.

trayectoria de la curva. Estos valores se pasan al procedimiento bezier, y se dibujan las posiciones de los
pxeles 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.

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
/* Establece el tamao inicial de la ventana de visualizacion.
GLsizei winWidth  600, winHeight  600;

*/

/* Establece el tamao de la ventana de recorte en coordenadas universales.


GLfloat xwcMin  -50.0, xwcMax  50.0;
GLfloat ywcMin  -50.0, ywcMax  50.0;

*/

CAP08_HEARN_1P.qxd

448

28/09/2005

12:50

Pgina 448

CAPTULO 8 Representaciones de objetos tridimensionales

class wcPt3D {
public:
GLfloat x, y, z;
};
void init (void)
{
/* Establece el color de la ventana de visualizacion en blanco.
glClearColor (1.0, 1.0, 1.0, 0.0);
}

*/

void plotPoint (wcPt3D bezCurvePt)


{
glBegin (GL_POINTS);
glVertex2f (bezCurvePt.x, bezCurvePt.y);
glEnd ( );
}
/* Calcula los coeficientes binomiales C para un valor dado de n.
void binomialCoeffs (GLint n, GLint * C)
{
GLint k, j;

*/

for (k  0; k <= n; k++) {


/* Compute n!/(k!(n - k)!). */
C [k]  1;
for (j  n; j >= k  1; j--)
C [k] *= j;
for (j  n - k; j >= 2; j--)
C [k] /= j;
}
}
void computeBezPt (GLfloat u, wcPt3D * bezPt, GLint nCtrlPts,
wcPt3D * ctrlPts, GLint * C)
{
GLint k, n  nCtrlPts - 1;
GLfloat bezBlendFcn;
bezPt->x  bezPt->y  bezPt->z  0.0;
/*

Calcula las funciones de combinacin y los puntos de control de


combinacin. */
for (k  0; k < nCtrlPts; k++) {
bezBlendFcn  C [k] * pow (u, k) * pow (1 - u, n - k);
bezPt->x += ctrlPts [k].x * bezBlendFcn;
bezPt->y += ctrlPts [k].y * bezBlendFcn;
bezPt->z += ctrlPts [k].z * bezBlendFcn;
}
}

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 449

8.10 Curvas con splines de Bzier

449

void bezier (wcPt3D * ctrlPts, GLint nCtrlPts, GLint nBezCurvePts)


{
wcPt3D bezCurvePt;
GLfloat u;
GLint *C, k;
/* Reserva espacio para los coeficientes binomiales
C  new GLint [nCtrlPts];

*/

binomialCoeffs (nCtrlPts - 1, C);


for (k  0; k <= nBezCurvePts; k++) {
u  GLfloat (k) / GLfloat (nBezCurvePts);
computeBezPt (u, &bezCurvePt, nCtrlPts, ctrlPts, C);
plotPoint (bezCurvePt);
}
delete [ ] C;
}
void displayFcn (void)
{
/* Establece un nmero de puntos de control de ejemplo y un nmero de
* puntos de curva que se deben dibujar a lo largo de la curva de Bezier.
*/
GLint nCtrlPts  4, nBezCurvePts  1000;
wcPt3D ctrlPts [4]  { {-40.0, -40.0, 0.0}, {-10.0, 200.0, 0.0},
{10.0, -200.0, 0.0}, {40.0, 40.0, 0.0} };
glClear (GL_COLOR_BUFFER_BIT);
glPointSize (4);
glColor3f (1.0, 0.0, 0.0);

//
//

Borra la ventana de visualizacin.


Establece el color de los puntos en rojo.

bezier (ctrlPts, nCtrlPts, nBezCurvePts);


glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Mantiene una relacin de aspeto de valor 1.0.
glViewport (0, 0, newHeight, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (xwcMin, xwcMax, ywcMin, ywcMax);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{

*/

CAP08_HEARN_1P.qxd

450

28/09/2005

12:50

Pgina 450

CAPTULO 8 Representaciones de objetos tridimensionales

glutInit (&argc, argv);


glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (50, 50);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Curva de Bezier");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

Propiedades de las curvas de Bzier


Una propiedad muy til de una curva de Bzier es que la curva une el primer punto de control con el ltimo.
Por tanto, una caracterstica bsica de cualquier curva de Bzier es que,
P(0)  p0
P(1)  pn

(8.43)

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)  np0  np1
P(1)  npn1  npn

(8.44)

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(0)  n(n  1)[(p2  p1)  (p1  p0)]
P(1)  n(n  1)[(pn2  pn1)  (pn1  pn)]

(8.45)

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,
n

BEZ

k ,n

(u) = 1

(8.46)

k =0

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.

Tcnicas de diseo utilizando curvas de Bzier


Una curva de Bzier cerrada se genera cuando establecemos el ltimo punto de control en la posicin del primer punto de control, como en el ejemplo mostrado en la Figura 8.35. Tambin, especificando mltiples

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 451

8.10 Curvas con splines de Bzier

451

p3
p1  p2

p3

p2
p0
p1

p0  p5

p4

p4

FIGURA 8.35. Una curva de Bzier cerrada generada


especificando el primer y el ltimo 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 curva 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 p0
y p1 para la siguiente seccin de la curva de forma que estn sobre la misma lnea que los puntos de control
pn1 y pn de la parte anterior (Figura 8.37). Si la primera seccin de la curva tiene n puntos de control y la
siguente seccin tiene n puntos de control, entonces hacemos coincidir las tangentes a la curva colocando el
punto de control p1 en la posicin
p1 = p n +

n
(p n p n 1 )
n

(8.47)

Para simplifiar la colocacin de p1, podemos requerir slo continuidad geomtrica y colocar p1 en cualquier sitio sobre la lnea que une pn1 y pn.
Obtenemos continuidad C2 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 p2, adems de las posiciones fijadas para p0 y p1 que necesitamos para obtener continuidad C0 y C1.
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 fija 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.

Curvas de Bzier cbicas


Muchos paquetes grficos proporcionan funciones para visualizar nicamente splines cbicos. Esto permite
una flexibilidad de diseo razonable en tanto que evita el incremento de clculos que necesitan los polinomios
de orden ms elevado. Las curvas de Bzier cbicas se generan con cuatro puntos de control. Las cuatro

CAP08_HEARN_1P.qxd

452

28/09/2005

12:50

Pgina 452

CAPTULO 8 Representaciones de objetos tridimensionales


p1

p0 p 2

p0

p3

p1

p2

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 p0  p2 y definiendo p1 sobre la lnea formada
por los puntos p1 y p2.

BEZ 0,3(u)

BEZ 1,3(u)

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.2

0.4

0.6

0.8

0.2

0.4

(a)

0.8

0.6

0.8

(b)
BEZ 3,3(u)

BEZ 2,3(u)
1

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.6

0.2

0.4

0.6

0.8

0.2

(c)

FIGURA 8.38. Las cuatro funciones de combinacin para curvas cbicas (n  3).

0.4
(d)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 453

8.10 Curvas con splines de Bzier

453

funciones de combinacin para curvas de Bzier cbicas, obtenidas sustituyendo n  3 en la Ecuacin 8.38,
son:
BEZ0,3  (1  u)3
BEZ1,3  3u(1  u)2

(8.48)

BEZ2,3  3u (1  u)
2

BEZ3,3  u3
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 1. Para u  0, la nica funcin de fundido distinta de cero es BEZ0,3, que tiene el valor 1. Para u  1, la nica funcin de fundido distinta de cero es BEZ3,3
(1)  1. Por tanto, una curva de Bzier cbica siempre comienza por el punto de control p0 y termina en el
punto de control p3. Las otras funciones, BEZ1,3 y BEZ2,3, influyen en la forma de la curva para valores intermedios del parmetro u, de modo que la curva resultante tiende hacia los puntos p1 y p2. La funcin de fundido BEZ1,3 tiene su mximo en u  1/3, y BEZ2,3 en u  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 afectada
toda la curva.
En los puntos extremos de la curva de Bzier cbica, las primeras derivadas (pendientes) paramtricas son:
P(0)  3(p1  p0),

P(1)  3(p3  p2)

Y las segundas derivadas paramticas son


P(0)  6(p0  2p1 p2),

P(1)  6(p1  2p2 p3)

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 C1 entre las secciones de la curva. Y podramos utilizar las expresiones para las segundas
derivadas para obtener continuidad C2, 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,
p0
p
(8.49)
P(u) = [u3 u2 u 1] M Bez 1
p2

p3
donde la matriz de Bzier es:

M Bez

1 3 3
3 6 3
=
3 3 0

1 0 0

1
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 , se proporcionan a menudo con esta capacidad.

CAP08_HEARN_1P.qxd

454

28/09/2005

12:50

Pgina 454

CAPTULO 8 Representaciones de objetos tridimensionales

8.11 SUPERFICIES DE BZIER


Dos familias de curvas de Bzier ortogonales se pueden utilizar para disear una superficie de un objeto. La
funcin paramtrica del vector de una superficie de Bzier se crea con el producto cartesiano de las funciones de combinacin de Bzier:
m

P(u, v) = p j , k BEZ j , m (v)BEZ k , n (u)

(8.51)

j =0 k =0

donde pj,k especifica la localizacin de los (m  1) 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 lneas continuas muestran las curvas con u 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 u 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 mtodo 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.

8.12 CURVAS CON SPLINES B


Esta clase de splines es la ms profusamente utilizada y las funciones de splines B estn disponibles habitualmente en los sistemas CAD y en muchos paquetes de programacin de grficos. Al igual que los splines de
Bzier, los splines B se generan aproximando un conjunto de puntos de control. Pero los splines B presentan
dos ventajas frente a los splines de Bzier: (1) el grado de un polinomio de un spline B se puede establecer
de forma independiente al nmero de puntos de control (con ciertas limitaciones), y (2) los splines B permiten control local sobre la forma de un spline. La desventaja es que los splines B son ms complejos que los
splines de Bzier.

Ecuaciones de una curva con splines B


Podemos escribir una expresin general para el clculo de las coordenadas a lo largo de una curva con splines B utilizando la formulacin con funciones de combinacin del siguiente modo:
n

P(u) = p k Bk , d (u),
k =0

umin u umax ,

2 d n +1

(8.52)

donde pk define un conjunto de entrada de n  1 puntos de control. Existen varias diferencias entre esta formulacin con splines B y las expresiones de una curva con splines de Bzier. El rango de variacin del parmetro u ahora depende de cmo elijamos los otros parmetros de los splines B. Y las funciones de combina-

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 455

8.12 Curvas con splines B

455

cin de los splines B Bk,d son polinomios de grado d  1, donde d es el parmetro de grado. (A veces al parmetro d se le llama orden del polinomio, pero esto puede confundir, ya que el trmino orden se utiliza a
menudo tambin para indicar simplemente el grado del polinomio, que es d  1.) Al parmetro de grado d se
le puede asignar cualquier valor entero dentro del rango que vara desde 2 hasta el nmero de puntos de control 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.

(a)

(b)

FIGURA 8.39. Superficies de Bzier 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 lneas discontinuas unen los puntos de control.

L2

L1
Lnea lmite

FIGURA 8.40. Un superficie de Bzier compuesta construida con dos secciones de Bzier, 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 L1 y la longitud L2 sea constante para cada lnea colineal de puntos de control en el lmite entre las
secciones de la superficie.

CAP08_HEARN_1P.qxd

456

28/09/2005

12:50

Pgina 456

CAPTULO 8 Representaciones de objetos tridimensionales

(a)

(b)

FIGURA 8.41. Modificacin local de una curva con splines 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 splines B se definen mediante las frmulas recursivas
de Cox-deBoor:
1 si uk u uk +1
Bk ,1 (u) =
0 traducir

(8.53)

u uk
u u
Bk , d (u) =
Bk , d 1 (u) + k + d
Bk +1, d 1 (u)
uk + d 1 uk
uk + d uk +1
donde cada funcin de fundido se define sobre d subintervalos del rango total de variacin de u. 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 uj uj1. Los valores de umin y umax 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.
La Figura 8.41 muestra las caractersticas de control local de los splines B. Adems del control local, 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 n.
Las curvas con splines B tienen las siguientes propiedades:
La curva polinmica tiene grado d 1 y continuidad Cd2 sobre el rango de variacin de u.
En los n  1 puntos de control, la curva se describe con n  1 funciones de combinacin.
Cada funcin de fundido Bk,d se define sobre d subintervalos del rango total de variacin de u, comenzando por el nodo de valor uk.
El rango de variacin del parmetro u se divide en n  d subintervalos con los n  d  1 valores especificados en el vector de nudos.
Dado que los valores de los nodos estn etiquetados como {u0, u1, . . ., und}, la curva con splines B
resultante est definida nicamente en el intervalo que vara desde el valor de nudo ud1 hasta el valor
de nudo un1. (Algunas funciones de combinacin no estn definidas fuera de este intervalo.)
Cada seccin de la curva con splines (entre dos valores de nodo sucesivos) se ve influenciada por d
puntos de control.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 457

8.12 Curvas con splines B

457

Cualquier punto de control puede afectar a la forma de a lo sumo d secciones de la curva.


Adems, una curva con splines B se encuentra dentro del casco convexo de a lo sumo d  1 puntos de
control, de modo que los splines B estn ajustadamente ligados a las posiciones de entrada. Para algn valor
de u del intervalo desde el valor de nudo ud1 a un1, la suma sobre todas las funciones base es 1:
n

k ,d

(u) = 1

(8.54)

k =0

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
recurrencia 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.

Curvas con splines B peridicos y uniformes


Cuando el espaciado entre valores de nudos es constante, la curva resultante se denomina spline B uniforme.
Por ejemplo, podemos establecer un vector uniforme de nudos como el siguiente:
{1.5, 1.0, 0.5, 0.0, 0.5, 1.0, 1.5, 2.0}
A menudo los valores de los nudos estn normalizados en el rango que vara entre 0 y 1, como en,
{0.0, 0.2, 0.4, 0.6, 0.8, 1.0}
Es conveniente en muchas aplicaciones establecer valores uniformes de nudos con una separacin de 1 y
un valor inicial de 0. El siguiente vector de nudos es un ejemplo de este modo de especificacin.
{0, 1, 2, 3, 4, 5, 6, 7}
B0,3(u)

B1,3(u)

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

(a)

B2,3(u)

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

(c)

(b)

B3,3(u)

(d)

FIGURA 8.42. Funciones de combinacin de splines B peridicos para n  d  3 y un vector de nudos uniforme y entero.

CAP08_HEARN_1P.qxd

458

28/09/2005

12:50

Pgina 458

CAPTULO 8 Representaciones de objetos tridimensionales

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:
Bk,d(u)  Bk1,d(u  u)  Bk2,d(u  2u)

(8.55)

donde u 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 Splines B uniformes y cuadrticos


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  d  1  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 n  d  6 subintervalos.
Cada una de las cuatro funciones de combinacin abarca d  3 subintervalos del rango total de
variacin de u. Utilizando las relaciones de recurrencia 8.53, obtenemos la primera funcin de fundido:
1 u2 ,
2

1
1
B0,3 (u) = u(2 u) + (u 1)(3 u),
2
2
1
2
(3 u)
2

para 0 u < 1
para 1 u < 2
para 2 u < 3

Obtenemos la siguiente funcin peridica de fundido utilizando la relacin 8.55, sustituyendo u por
u  1 en B0,3 y desplazando las posiciones de comienzo hacia arriba una unidad:
1 (u 1)2 ,
2

1
1
B1,3 (u) = (u 1)(3 u) + (u 2)(4 u),
2
2

1
2
( 4 u)
2

para 1 u < 2
para 2 u < 3
para 3 u < 4

Similarmente, las dos restantes funciones peridicas se obtienen desplazando sucesivamente B1,3
hacia la derecha:
1 (u 2)2 ,
2

1
1
B2,3 (u) = (u 2)(4 u) + (u 3)(5 u),
2
2

1
2
(5 u )
2

para 2 u < 3
para 3 u < 4
para 4 u < 5

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 459

8.12 Curvas con splines B

1
2
2 (u 3) ,

1
1
B3,3 (u) = (u 3)(5 u) + (u 4)(6 u),
2
2

1
2
(6 u)
2

459

para 3 u < 4
para 4 u < 5
para 5 u < 6

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. El primer punto de control se multiplica
por la funcin de fundido B0,3(u). Por tanto, el cambio de la posicin del primer punto de control slo
afecta a la forma de la curva hasta u  3. De forma similar, el ltimo punto de control influye en la
forma de la curva con splines en el intervalo donde B3,3 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 ud1  2 hasta un1  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 final de la curva evaluando las funciones de combinacin en estos puntos para obtener:
Pini =

1
(p0 + p1 ),
2

Pfin =

1
( p 2 + p3 )
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 paramtricas en el punto inicial y en el punto final de
la curva. Tomando las derivadas de las funciones de combinacin y sustituyendo el parmetro u por su
valor en los puntos extremos, encontramos que:
Pini  p1  p0,

Pfin  p3  p2

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 cuadrticos y peridicos
para cuatro puntos de control situados en el plano xy.
p1

p0

p2

p3

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-

CAP08_HEARN_1P.qxd

460

28/09/2005

12:50

Pgina 460

CAPTULO 8 Representaciones de objetos tridimensionales

nes B cuadrticos y peridicos ajustados a cualquier nmero de puntos 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  1 puntos de control. Podemos aproximar a cualquier punto de control cualquier curva con splines especificando dicho punto mltiples veces.
Las expresiones generales de las condiciones en los lmites de los splines 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.

Curvas con splines B cbicos y peridicos


Ya que los splines B cbicos y peridicos se utilizan habitualmente en los paquetes grficos, tendremos en
cuenta la formulacin de esta clase de splines. Los splines peridicos son particularmente tiles para generar
ciertas curvas cerradas. Por ejemplo, la curva cerrada de la Figura 8.44 se puede generar por secciones especificando cclicamente cuatro de los seis puntos de control de cada seccin. Tambin, si las posiciones en coordenadas de tres puntos de control son idnticas, la curva pasa a travs de dicho punto.
En curvas con splines B cbicos, d  4 y cada funcin de fundido abarca cuatro subintervalos del rango
total de variacin de u. Si tenemos que ajustar la cbica a cuatro puntos de control, entonces podramos utilizar el vector entero de nudos:
{0, 1, 2, 3, 4, 5, 6, 7}
y las relaciones de recurrencia 8.53 para obtener las funciones peridicas de fundido, como hicimos en la ltima seccin de los splines B cuadrticos y peridicos.
Para obtener las ecuaciones de la curva para un spline B peridico y cbico, consideraremos una formulacin alternativa comenzando por las condiciones en los lmites y obteniendo las funciones de combinacin
normalizadas al intervalo 0 u 1. Utilizando esta formulacin, tambin podemos obtener fcilmente la
matriz caracterstica. Las condiciones en los lmites para splines B cbicos y peridicos con cuatro puntos de
control, etiquetados como p0, p1, p2 y p3 son:
1
P(0) = (p0 + 4 p1 + p2 )
6
1
P(1) = (p1 + 4 p2 + p3 )
6

(8.56)

1
P (0) = (p2 p0 )
2
P (1) =

p1

1
(p3 p1 )
2

p2

p0

p3

p5

p4

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.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 461

8.12 Curvas con splines B

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 p1 y termina en una posicin cercana a p2.
Una formulacin matricial de un spline B cbico y peridico con cuatro puntos de control se puede escribir del siguiente modo:

P(u) = [u3 u 2

p0
p
u 1] M B 1
p2

p3

(8.57)

donde la matriz del spline B para polinomios cbicos y peridicos es:


1 3 3

1 3 6 3
MB =
6 3 0 3

1 4 1

1
0
0

(8.58)

Esta matriz se puede obtener resolviendo los coeficientes en una expresin general polinomial cbica, utilizando las cuatro condiciones especficas en los lmites.
Tambin podemos modificar las ecuaciones del spline B para incluir un parmetro de tensin t (como en
los splines cardinales). La matriz de un spline B peridico y cbico, en la que se incluye el parmetro de tensin t, es:
t 12 9t 9t 12 t

1 3t 12t 18 18 15t 0
M Bt =
0
3t
0
6 3t

t
6 2t
0
t

(8.59)

que coincide con MB cuando t  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 t  1, tenemos:
1
B0,3 (u) = (1 u)3 ,
6
1
B1,3 (u) = (3u3 6u 2 + 4)
6
1
B2,3 (u) = (3u3 + 3u 2 + 3u + 1)
6
1
B3,3 (u) = u3
6

0 u 1

(8.60)

Curvas con splines B abiertos y uniformes


Esta clase de splines B es una combinacin de splines B uniformes y splines B no uniformes. A veces se trata
como un tipo especial de spline B uniforme y otras se considera como un spline B no uniforme. En los spli-

CAP08_HEARN_1P.qxd

462

28/09/2005

12:50

Pgina 462

CAPTULO 8 Representaciones de objetos tridimensionales

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}

donde d  2 y n  3

{0, 0, 0, 0, 1, 2, 2, 2, 2}

donde d  4 y n  4

(8.61)

Podemos normalizar estos vectores de nudos al intervalo que vara desde 0 a 1 del siguiente modo:
{0, 0, 0.33, 0.67, 1, 1}

donde d  2 y n  3

{0, 0, 0, 0, 0.5, 1, 1, 1, 1}

donde d  4 y n  4

(8.62)

Para valores cualesquiera de los parmetros d y n, podemos generar un vector de nudos abierto y uniforme con valores enteros utilizando los clculos:
0

uj = j d + 1
n d + 2

para 0 j < d
para d j n
para j > 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 n), los splines B son idnticos a los splines de Bzier, y
todos los valores de los nudos son 0 o 1. Por ejemplo, para un spline B abierto y cbico (d  4) y cuatro puntos de control, el vector de nudos es:
{0, 0, 0, 0, 1, 1, 1, 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 abiertos, uniformes y cuadrticos


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:
{u0, u1, u2, u3, u4, u5, u6, u7}  {0, 0, 0, 1, 2, 3, 3, 3}
El rango total de variacin de u se divide en siete subintervalos, y cada una de las cinco funciones
de combinacin Bk,3 estn definidas sobre tres subintervalos, comenzando por el nudo uk. Por tanto, B0,3
est definido desde u0  0 hasta u3  1, B1,3 est definido desde u1  0 hasta u4  2 y B4,3 est definido desde u4  2 hasta u7  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:

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 463

8.12 Curvas con splines B


B1,3(u)

B0,3(u)
1

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2

0.5

1.5

2.5

(a)

B2,3(u)
1

0.8

0.6

0.6

0.4

0.4

0.2

0.2
0.5

0.5

1.5

1.5

2.5

0.5

1.5

(c)

(d)
B4,3(u)
1
0.8
0.6
0.4
0.2

0.5

1.5

2.5

2.5

(b)

B3,3(u)
1

0.8

463

2.5

(e)

FIGURA 8.45. Funciones de combinacin de splines B abiertos y uniformes con n  4 y d  3.

B0,3 (u) = (1 u)2

0 u <1

1 u(4 3u)
2
B1,3 (u) =
1 (2 u )2
2
1 u2
2

1
1
B2,3 (u) = u(2 u) + u(u 1)(3 u)
2
2
1
2
2 (3 u)

0 u <1
1 u < 2
0 u <1
1 u < 2
2u<3

CAP08_HEARN_1P.qxd

464

28/09/2005

12:50

Pgina 464

CAPTULO 8 Representaciones de objetos tridimensionales

1 (u 1)2

B3,3 (u) = 2
1 (3 u)(3u 5)
2
B4,3 (u) = (u 2)2

1 u < 2
2u<3
2u<3

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 B0,3 es distinta de cero slo en el
subintervalo 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 B4,3 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.

Las formulaciones matriciales 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.

Curvas con splines B no uniformes


En esta clase de splines, podemos especificar cualesquiera valores e intervalos en el vector de nudos. En los
splines B no uniformes, podemos elegir mltiples valores de nudos internos y espaciados desiguales entre los
valores de los nudos. Algunos ejemplos son:
{0, 1, 2, 3, 3, 4}
{0, 2, 2, 3, 3, 6}
{0, 0, 0, 1, 1, 3, 3, 3}
{0, 0.2, 0.6, 0.9, 1.0}
Los splines B no uniformes proporcionan una mayor flexibilidad en el control de la forma de la curva. Con
los intervalos desigualmente espaciados en el vector de nudos, obtenemos formas diferentes en las funciones
de combinacin en intervalos diferentes, que se pueden utilizar para disear las caractersticas de los splines.
Al incrementar la multiplicidad de los nudos, podemos producir variaciones sutiles en la trayectoria de la
curva e introducir discontinuidades. Los valores mltiples de los nodos tambin reducen la continuidad en una
unidad con cada repeticin de valor concreto.
Obtenemos las funciones de combinacin de un spline B no uniforme utilizando mtodos similares a los
estudiados para los splines B uniformes y abiertos. Dado un conjunto de n  1 puntos de control, establecemos el grado del polinomio y seleccionamos los valores de los nudos. A continuacin, utilizando las relaciones de recurrencia, podramos obtener el conjunto de funciones de combinacin o evaluar directamente los
puntos de la curva para su visualizacin. Los paquetes grficos a menudo restringen los intervalos de los
nodos a 0 o 1 para reducir los clculos. Un conjunto de matrices caractersticas se puede almacenar entonces
y utilizar para calcular los valores a lo largo de la curva con splines sin evaluar las relaciones de recurrencia
en cada punto de la curva que hay que dibujar.

8.13 SUPERFICIES CON SPLINES B


La formulacin de una superficie con splines B es similar a la de la superficie con splines de Bzier. Podemos
obtener una funcin vectorial del punto sobre una superficie con splines B utilizando el producto cartesiano
de las funciones de combinacin de los splines B de este modo:

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 465

8.14 Splines beta

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 abultamientos y mapas de reflexin. (Cortesa de Silicon Graphics, Inc.)

P(u, v) =

nu

nv

ku = 0 kv = 0

ku , kv

Bku , du (u) Bkv , dv (v)

(8.64)

donde los valores del vector pku, kv especifican las posiciones de los (nu1) por (nv1) puntos de control.
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 du y dv, que
establecen los grados de los polinomios ortogonales de la superficie en du  1 y dv  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.

8.14 SPLINES BETA


Los splines beta son una generalizacin de los splines B, tambin denominados splines , que se formulan
imponiendo condiciones de continuidad geomtrica en la primera y segunda derivadas paramtricas. Los parmetros de continuidad en los splines beta se denominan parmetros beta.

Condiciones de continuidad de los splines beta


En un vector especfico de nudos, nombramos las secciones del spline de izquierda a derecha de un nudo particular uj con los vectores de posicin Pj1(u) y Pj(u) (Figura 8.47). La continuidad de orden cero (continuidad posicional), G0, en uj se obtiene requiriendo que:
Pj1(uj)  Pj(uj)

(8.65)
1

La continuidad de primer orden (continuidad de tangente unitaria), G , se obtiene requiriendo que los vectores tangente sean proporcionales:

1Pj1 (u j ) = Pj (u j ),

1 > 0

(8.66)

En este punto, las primeras derivadas paramtricas son proporcionales y los vectores unitarios tangentes
son continuos a travs del nudo.

CAP08_HEARN_1P.qxd

466

28/09/2005

12:50

Pgina 466

CAPTULO 8 Representaciones de objetos tridimensionales


Pj  1(u)

FIGURA 8.47. Vectores de posicin a lo largo de las secciones de la curva a


la izquierda y a la derecha del nudo uj.

1  1

uj  1

uj

Pj (u)
uj  1

1  1

FIGURA 8.48. Efecto del parmetro 1 sobre la forma de una curva con splines beta.

2  0

2  1

FIGURA 8.49. Efecto del parmetro 2 en la forma de una curva con splines beta.

La continuidad de segundo orden (continuidad de vector de curvatura), G2, se impone con la condicin:

12 Pj1 (u j ) + 2 Pj1 (u j ) = Pj(u j )

(8.67)

donde a 2 se le puede asignar cualquier nmero real y 1 > 0. El vector de curvatura proporciona una medida de la cantidad que se dobla la curva en la posicin uj. Cuando 1  1 y 2  0, los splines beta se convierten en splines B.
El parmetro 1 se denomina parmetro de desplazamiento ya que controla el desplazamiento de la curva.
Para 1 > 1, la curva tiende a alisarse a la derecha en la direccin del vector unitario tangente en los nudos.
Para 0 < 1 < 1, la curva tiende a alisarse hacia la izquierda. El efecto de 1 sobre la forma de la curva con
splines se muestra en la Figura 8.48.
El parmetro 2 se denomina parmetro de tensin ya que controla cmo de tenso o suelto se ajusta el spline al grafo de control. A medida que 2 crece, la curva se aproxima a la forma del grafo de control, como se
muestra en la Figura 8.49.

Representacin matricial de splines beta cbicos y peridicos


Aplicando las condiciones en los lmites de un spline beta a un polinomio cbico con un vector uniforme de
nudos, obtenemos la representacin matricial de un spline beta peridico.
2 13

3
1 6 1
M =
6 13

3
2 1

2( 2 + 13 + 12 + 1 ) 2( 2 + 12 + 1 + 1) 2

3( 2 + 2 12 )
0
3( 2 + 2 13 + 2 12 )

6( 13 1 )
6 1
0

2 + 4( 12 + 1 )
2
0

donde  2  213  412  41  2.

(8.68)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 467

8.15 Splines racionales

467

Obtenemos la matriz MB del spline B cuando 1  1 y 2  0. Y tenemos la matriz MBt de tensin del spline B (Ecuacin 8.59) cuando,

1 = 1,

2 =

12
(1 t )
t

8.15 SPLINES RACIONALES


Una funcin racional es simplemente el cociente de dos polinomios. Por tanto, un spline racional es el cociente de dos funciones de splines. Por ejemplo, una curva con splines B racionales se puede describir con el vector de posicin:
P(u) =

nk = 0 k p k Bk , d (u)
nk = 0 k Bk , d (u)

(8.69)

donde pk define un conjunto de n  1 puntos de control. Los parmetros k son los factores de ponderacin
de los puntos de control. Cuanto mayor es valor de un k concreto, tanto ms es atrada la curva hacia el punto
de control pk ponderado por aquel parmetro. Cuando todos los factores de ponderacin tienen el valor 1, 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 visualizacin (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.
Habitualmente, los paquetes de diseo de grficos utilizan representaciones con vectores no uniformes de
nudos para construir splines B racionales. Estos splines se denominan NURBS (nonuniform rational B-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 factor homogneo h en una representacin de cuatro dimensiones de los puntos
de control. Por tanto, un spline 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 empleamos 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 tipo de cnica seleccionado.
Como ejemplo de la descripcin de secciones de cnicas con splines racionales, podemos utilizar una funcin de splines B cuadrticos (d  3), tres puntos de control y un vector abierto de nudos,
{0, 0, 0, 1, 1, 1}
que es el mismo que el del spline cuadrtico de Bzier. Despus establecemos las funciones de ponderacin
en los valores:

CAP08_HEARN_1P.qxd

468

28/09/2005

12:50

Pgina 468

CAPTULO 8 Representaciones de objetos tridimensionales

0 = 2 = 1
1 =

r
1 r

0 r <1

(8.70)

y la representacin del spline B racional es:

P(u) =

p0 B0,3 (u) + [r /(1 r )]p1 B1,3 (u) + p2 B2,3 (u)

(8.71)

B0,3 (u) + [r /(1 r )]B1,3 (u) + B2,3 (u)

Posteriormente, obtenemos las distintas cnicas (Figura 8.50) con los siguientes valores del parmetro r.
r > 1/2,

1 > 1

seccin de hiprbola

r  1/2,

1  1

seccin de parbola

r < 1/2,

1 < 1

seccin de elipse

r  0,

1  0

segmento de lnea recta

Podemos generar un arco formado por un cuarto de un crculo unidad del primer cuadrante del plano xy
(Figura 8.51) estableciendo el valor de 1 en cos y eligiendo los siguientes puntos de control:
p0  (0, 1),

p1  (1, 1),

p2  (1, 0)
p1

Hiprbola
(r  1/2, 1  1)
p0

Parbola
(r  1/2, 1  1)

Lnea recta
(r  0, 1  0)

Elipse
(r  1/2, 1  1)

FIGURA 8.50. Secciones de cnicas generadas utilizando varios valores del factor de
ponderacin de splines racionales 1.

p2

y
p 0  (0, 1)

FIGURA 8.51. Un arco circular en el primer cuadrante del plano xy.

p 1  (1, 1)

p 2  (1, 0) x

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 469

8.16 Conversin entre representaciones de splines

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.
sta es una representacin homognea de un arco circular unidad del primer cuadrante del plano xy.
xh (u) 1 u 2

y (u)
h = 2u
zh (u) 0


2
h(u) 1 + u

(8.72)

Esta representacin homognea conduce a las ecuaciones paramtricas del crculo en el primer cuadrante.
xh (u) 1 u 2
=
h(u) 1 + u 2
y (u)
2u
y= h
=
h(u) 1 + u 2

x=

(8.73)

8.16 CONVERSIN ENTRE REPRESENTACIONES DE SPLINES


A veces es conveniente ser capaz de pasar de una representacin de un spline a otra. Por ejemplo, una representacin de Bzier es ms conveniente para subdividir una curva con splines, mientras que una representacin con splines B ofrece una mayor flexibilidad en el diseo. Por lo que podramos disear una curva utilizando secciones de splines B, despus realizar una conversin a una representacin equivalente de Bzier para
visualizar el objeto utilizando un procedimiento de subdivisin recursivo para posicionar los puntos a lo largo
de la curva.
Supngase que tenemos una descripcin mediante splines de un objeto que se puede expresar con el
siguiente producto matricial:
P(u)  U Mspline1 Mgeom1

(8.74)

donde Mspline1 es la matriz que caracteriza la representacin con splines y Mgeom1 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 Mspline2, debemos determinar la matriz de restricciones geomtricas Mgeom2 que produce la misma funcin vectorial de punto para el objeto. Es decir,
P(u)  U Mspline2 Mgeom2

(8.75)

U Mspline2 Mgeom2  U Mspline1 Mgeom1

(8.76)

o
Resolviendo en Mgeom2, tenemos:
1
M geom2 = M spline
2 M spline1 M geom1

= M s1, s 2 M geom1

(8.77)

Por tanto, la matriz requerida de transformacin que convierte la primera representacin con splines a la
segunda es:
1
M s1, s 2 = M spline
2 M spline1

(8.78)

CAP08_HEARN_1P.qxd

470

28/09/2005

12:50

Pgina 470

CAPTULO 8 Representaciones de objetos tridimensionales

Un spline B no uniforme no se puede caracterizar con una matriz general de splines. Pero podemos reorganizar la secuencia de nudos para convertir 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.

M B,Bez

1
1 3 3

0 1 3 6 3

0 6 3 0 3

0
1 4 1

1 3 3
3 6 3
=
3 3 0

1 0 0
1
0
=
0

1
0
0

(8.79)

4 1 0
4 2 0
2 4 0

1 4 1

Y la matriz de transformacin para convertir desde una representacin de Bzier cbica a una representacin con spline B peridico y cbico es:

M Bez,B

1
6

= 2
1

2
1

1
2

1
2
1
2
1
2
1
6

1
0
2
3

6 7 2
0 2 1
=
0 1 2

0 2 7

1
6
1 3 3
0
3 6 3
3 3 0
0
1 0 0

1
0
0

(8.80)

0
0
0

8.17 VISUALIZACIN DE CURVAS Y SUPERFICIES CON SPLINES


Para visualizar una curva o una superficie con splines, debemos determinar las coordenadas de la curva o de
la superficie que se proyectan en los pxeles del dispositivo de visualizacin. Esto significa que debemos evaluar las funciones polinmicas paramtricas del spline en ciertos incrementos sobre el rango de las funciones.
Se han desarrollado varios mtodos para realizar esta evaluacin de forma eficiente.

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 Horner, que realiza los clculos mediante una factorizacin sucesiva. Esto requiere una
multiplicacin y una suma en cada paso. Para un polinomio de grado n, hay n pasos.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 471

8.17 Visualizacin de curvas y superficies con splines

471

A modo de ejemplo, suponga que tenemos una representacin con spline cbico donde la coordenada x se
expresa como:
x(u)  axu3  bxu2  cxu  dx
(8.81)
Las expresiones para las coordenadas y y z son similares. Para un valor concreto del parmetro u, evaluamos este polinomio en el siguiente orden factorizado.
x(u)  [(axu  bx)u  cx]u  dx

(8.82)

El clculo de cada valor de x requiere tres multiplicaciones y tres sumas, de modo que la determinacin
de cada posicin en coordenadas (x, y, 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.

Clculos de diferencias hacia adelante


Un mtodo rpido para evaluar funciones polinmicas consiste en generar valores sucesivos de forma recursiva incrementando los valores previamente calculados, por ejemplo, de este modo:
xk1  xk  xk

(8.83)

Por tanto, una vez que conocemos el incremento y el valor de xk de un paso cualquiera, obtenemos el valor
siguiente simplemente aadiendo el incremento a xk. El incremento xk 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 fijo , entonces dos valores sucesivos de x son xk  x(uk) y xk1  x(uk1), donde:
uk1  uk  ,
k  0, 1, 2, . . .
(8.84)
y u0  0.
Para ilustrar este mtodo, consideraremos en primer lugar la representacin polinmica x(u)  ax u  bx
para las coordenadas a lo largo de una curva con spline lineal. Dos valores sucesivos de la coordenada x se
representan como:
xk  axuk  bx
(8.85)
xk1  ax(uk  )  bx
Restando las dos ecuaciones, obtenemos la siguiente diferencia hacia delante:
xk  xk1  xk  ax

(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 u. 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 x
tienen las representaciones polinmicas:
xk = a x uk3 + bx uk2 + cx uk + d x

(8.87)

xk +1 = a x (uk + ) + bx (uk + ) + cx (uk + ) + d x


3

El resultado de la evaluacin de la diferencia hacia adelante ahora es:

CAP08_HEARN_1P.qxd

472

28/09/2005

12:50

Pgina 472

CAPTULO 8 Representaciones de objetos tridimensionales

xk = 3a x uk2 + (3a x 2 + 2bx )uk + (a x 3 + bx 2 + cx )

(8.88)

que es una funcin cuadrtica del parmetro uk. Ya que xk es una funcin polinmica de u, podemos utilizar
el mismo procedimiento incremental para obtener valores sucesivos de xk. Es decir,
xk1  xk  2xk

(8.89)

donde la segunda diferencia hacia adelante es la funcin lineal:


2xk  6ax 2uk  6ax 3  2bx

(8.90)

Repitiendo este proceso una vez ms, podemos escribir,


2xk1  2xk  3xk

(8.91)

en la que la tercera diferencia hacia adelante es la expresin constante:


3xk  6ax

(8.92)

Las Ecuaciones 8.83, 8.89, 8.91 y 8.92 proporcionan un clculo incremental de las diferencias hacia delante de los puntos a lo largo de la curva cbica. Comenzando por u0  0 con un paso constante de tamao , los
valores iniciales de la coordenada x y sus primeras dos diferencias hacia adelante son:
x0  dx
x0  ax 3  bx 2  cx
2x0  6ax 3  2bx

(8.93)

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 3n sumas. Para
las superficies, los clculos incrementales 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 grafo 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)

Conversin de la representacin actual con splines en una representacin de Bzier.

(2)

Aplicacin del algoritmo de subdivisin de Bzier.

(3)

Conversin de la representacin de Bzier en la representacin original con splines.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 473

8.17 Visualizacin de curvas y superficies con splines

p1

p2
p11

p0

p3
Antes de la
subdivisin

p12 p13  p20 p21

p10

p22
p23

473

FIGURA 8.52. Subdivisin de una seccin de curva de


Bzier cbica en dos segmentos, cada uno con cuatro
puntos de control.

Despus de la
subdivisin

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(u) con
0 u 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 P1(s) y el segundo
segmento se describe con P2(t), donde
s  2u,

para 0.0 u 0.5

t  2u  1,

para 0.5 u 1.0

(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 orignial P(u). 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:
p1,0 = p0
p1,1 =

1
(p0 + p1 )
2

p1,2 =

1
(p0 + 2 p1 + p2 )
4

(8.95)

1
p1,3 = (p0 + 3p1 + 3p2 + p3 )
8
Y para el segundo segmento de curva, obtenemos los cuatro puntos de control:
1
p2,0 = (p0 + 3p1 + 3p2 + p3 )
8
p2,1 =

1
(p1 + 2 p2 + p3 )
4

p2,2 =

1
(p2 + p3 )
2

(8.96)

p 2 ,3 = p3
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:
p1,0 = p0
p1,1 =

1
(p0 + p1 )
2

1
T = (p1 + p2 )
1

CAP08_HEARN_1P.qxd

474

28/09/2005

12:50

Pgina 474

CAPTULO 8 Representaciones de objetos tridimensionales

p1,2 =

1
(p1,1 + T)
2

p 2 ,3 = p3
p2,2 =
p2,1

1
(p2 + p3 )
2

(8.97)

1
= (T + p2,2 )
2

p2,0 =

1
(p1,2 + p2,1 )
2

p1,3 = p2,0
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 visualizacin, 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:
p1, k =
p2, k =

1
2k

C ( k , j )p ,
j

k = 0, 1, 2, . . ., n

j =0

1
2nk

(8.98)

C (n k, n j )p

j =k

donde C(k, j) y C(n  k, n  j) son los coeficientes 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 FUNCIONES O pen GL DE APROXIMACIN CON SPLINES


Tanto los splines de Bzier como los splines B se pueden visualizar utilizando funciones de OpenGL, as como
curvas de recorte de superficies con splines. La biblioteca de ncleo contiene funciones de Bzier y la biblioteca GLU (OpenGL Utility) contiene las funciones para splines B y curvas de recorte. A menudo, las funciones de Bzier se implementan en el hardware, y las funciones de GLU proporcionan una interfaz que accede
a las funciones de dibujo de puntos y de dibujo de lneas de OpenGL.

Funciones OpenGL para curvas con splines de Bzier


Especificamos los parmetros y activamos las subrutinas para la visualizacin de curvas de Bzier con las
siguientes funciones OpenGL:

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 475

8.18 Funciones OpenGL de aproximacin con splines

475

glMap1* (GL_MAP1_VERTEX_3, uMin, uMax, stride, nPts, *ctrlPts);


glEnable (GL_MAP1_VERTEX_3);

Y desactivamos las subrutinas con:


glDisable (GL_MAP1_VERTEX_3);

Se emplea el sufijo f o d en glMap1 para indicar que los valores de 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 uMin y uMax, 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 flotante de los puntos
de control de Bzier se enumeran en la matriz ctrlPts, y el nmero de elementos de esta matriz se proporciona como un entero positivo utilizando el parmetro nPts. Al parmetro stride se le asigna un entero de
incremento (offset) que indica el nmero de datos entre el comienzo de una posicin en coordenadas en la
matriz ctrlPts y el comienzo de la siguiente posicin de coordenadas. Para una lista de puntos de control
tridimensionales, planteamos que stride  3. Un valor mayor en stride 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 (x, y, z, h), slo necesitamos cambiar el valor de
stride y de la constante simblica en glMap1 y en glEnable a GL_MAP1_VERTEX_4.
Despus de que hayamos establecido los parmetros de Bzier y activado las subrutinas de generacin de
curvas, 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:
glEvalCoord1* (uValue);

donde al parmetro uValue se le asigna algn valor dentro del intervalo que vara desde uMin a uMax. 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 glEvalCoord1 calcula una
posicin de coordenadas utilizando la Ecuacin 8.37 con el valor del parmetro:
u=

uvalue umin
umax umin

(8.99)

que mapea el valor uValue al intervalo que vara 0 a 1.0.


Cuando glEvalCoord1 procesa un valor del parmetro de la curva u, genera una funcin glVertex3.
Para obtener una curva de Bzier, invocamos por tanto repetidamente la funcin glEvalCoord1 para producir un conjunto de puntos a lo largo de la trayectoria de la curva, utilizando valores seleccionados del rango
de variacin desde uMin a uMax. Uniendo estos puntos con segmentos de lnea recta, podemos aproximar la
curva con splines mediante 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 8.53 en
escala de grises).
GLfloat ctrlPts [4][3]  { {-40.0, 40.0, 0.0}, {-10.0, 200.0, 0.0},
{10.0, -200.0, 0.0}, {40.0, 40.0, 0.0} };
glMap1f (GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, *ctrlPts);
glEnable (GL_MAP1_VERTEX_3);

CAP08_HEARN_1P.qxd

476

28/09/2005

12:50

Pgina 476

CAPTULO 8 Representaciones de objetos tridimensionales

GLint k;
glColor3f (0.0, 0.0, 1.0);
// Establece el color de lnea en azul.
glBegin (GL_LINE_STRIP);
// Genera la curva de Bzier.
for (k  0; k <= 50; k++)
glEvalCoord1f (GLfloat (k) / 50.0);
glEnd ( );
glColor (1.0, 0.0, 0.0);

//
//
//
//

Establece el color de los puntos en


rojo.
Establece el tamao del punto en 5.0.
Dibuja los puntos de control.

glPointSize (5.0);
glBegin (GL_POINTS);
for (k  0; k < 4; k++);
glVertex3fv (&ctrlPts [k][0]);
glEnd ( );

FIGURA 8.53. Un conjunto de cuatro puntos de control y la curva de Bzier asociada, visualizados con las subrutinas de
OpenGL como una polilnea de aproximacin.

Aunque el ejemplo anterior gener una curva con splines con valores del parmetro espaciados uniformemente, podemos utilizar la funcin glEvalCoord1f para obtener cualquier espaciado del parmetro u.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 477

8.18 Funciones OpenGL de aproximacin con splines

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.
glMapGrid1* (n, u1, u2);
glEvalMesh1 (mode, n1, n2);

El cdigo de sufijo de glMapGrid1 puede ser f o d. El parmetro n especifica el nmero entero de subdivisiones iguales sobre el rango de variacin de u1 a u2, y los parmetros n1 y n2 especifican un rango entero correspondiente a u1 y u2. Al parmetro mode se le asigna GL_POINT o GL_LINE, 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 como una polilnea, la salida de estas dos funciones es la misma
que la salida del siguiente cdigo, excepto que el argumento de glEvalCoord1 se establece en u1 o u2 si
k  0 o si k  n, respectivamente, para evitar errores de redondeo. En otras palabras, con mode  GL_LINE,
los comandos anteriores de OpenGL son equivalentes a:
glBegin (GL_LINE_STRIP);
for (k  n1; k <= n2; k++)
lEvalCoord1f (u1  k * (u2 - u1) / n);
glEnd ( );

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, 0.0, 1.0);
glMapGrid1f (50, 0.0, 1.0);
glEvalMesh1 (GL_LINE, 0, 50);

Mediante el uso de las funciones glMapGrid1 y g1EvalMesh1, 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 glMap1 para especificar valores para
otras clases de datos. Hay disponibles otras siete constantes simblicas de OpenGL para este propsito. Con
la constante simblica GL_MAP1_COLOR_4, utilizamos la matriz ctrlPts 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 GL_MAP1_INDEX. Y una lista de vectores tridimensionales normales a la superficie se especifica en
la matriz ctrlPts cuando utilizamos la constante simblica GL_MAP1_NORMAL. Las cuatro restantes constantes simblicas se utilizan con listas de informacin sobre la textura de la superficie.
Se pueden activar simultneamente mltiples funciones glMap1, y las llamadas a glEvalCoord1 o
glMapGrid1 y glEvalMesh1 producen entonces puntos con datos para cada tipo de datos habilitado. Esto
nos permite generar combinaciones de posiciones en coordenadas, valores de color, vectores normales a la
superficie y datos de la textura de la superficie. Pero no podemos activar simultneamente GL_MAP1_VERTEX_3 y MAP1_VERTEX_4. Slo podemos activar uno de los generadores de texturas de la superficie en cualquier momento.

Funciones OpenGL para superficies con splines de Bzier


La activacin y la especificacin de parmetros de las subrutinas de OpenGL para superficies de Bzier se
realizan con:

CAP08_HEARN_1P.qxd

478

28/09/2005

12:50

Pgina 478

CAPTULO 8 Representaciones de objetos tridimensionales


glMap2* (GL_MAP2_VERTEX_3, uMin, uMax, uStride, nuPts,
vMin, vMax, vStride, nvPts, *ctrlPts);
glEnable (GL_MAP2_VERTEX_3);

Se utiliza un cdigo de sufijo f o d en glMap2 para indicar si los valores de los datos se especifican en
punto flotante o de doble precisin. Para una superficie, especificamos los valores mnimo y mximo tanto
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 ctrlPts, y el tamao entero de la matriz se proporciona
con los parmetros nuPts y nvPts. Si hay que specificar los puntos de control con coordenadas homogneas de cuatro dimensiones, utilizamos la constante simblica GL_MAP2_VERTEX_4 en lugar de GL_MAP2_
VERTEX_3. El incremento entero entre el comienzo de los valores de las coordenadas del punto de control pj,k
lo proporciona uStride. Y el incremento entero entre el comienzo de las coordenadas del punto de control
pj,k y las coordenadas del punto de control pj,k1 lo proporciona vStride. 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:
glDisable {GL_MAP2_VERTEX_3}

Las posiciones de coordenadas sobre la superficie de Bzier se pueden calcular con:


glEvalCoord2* (uValue, vValue);

o con
glEvalCoord2*v (uvArray);

Al parmetro uValue se le asigna algn valor dentro del intervalo que vara desde uMin a uMax, y al parmetro vValue se le asigna un valor dentro del intervalo que vara desde vMin a vMax. El vector de versin
es uvArray  (uValue, vValue). El cdigo de sufijo para cualquiera de las dos funciones puede ser f o d.
La funcin glEvalCoord2 calcula una posicin de coordenadas utilizando la Ecuacin 8.51 con los valores
de los parmetros:
u=

uValue uMin
,
uMax uMin

v=

vValue vMin
vMax vMin

(8.100)

que mapea cada uno de los valores uValue y vValue al intervalo que vara de 0 a 1.0.
Para visualizar una superficie de Bzier, invocamos repetidamente glEvalCoord2, que genera una serie
de funciones glVertex3. Esto es similar a la generacin de una curva con splines, excepto en que ahora tenemos dos parmetros, u 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 es 12. Cada posicin en coordenadas se especifica con tres valores, siendo la coordenada y de
cada grupo de cuatro posiciones constante.
GLfloat ctrlPts [4][4][3]
{ {-1.5, -1.5, 4.0},
{-0.5, -1.5, -1.0},
{ {-1.5, -0.5, 1.0},
{ 0.5, -0.5, 0.0},
{ {-1.5, 0.5, 4.0},
{ 0.5, 0.5, 3.0},
{ {-1.5, 1.5, -2.0},
{ 0.5, 1.5, 0.0},
};

 {
{-0.5,
{ 1.5,
{-0.5,
{ 1.5,
{-0.5,
{ 1.5,
{-0.5,
{ 1.5,

-1.5, 2.0},
-1.5, 2.0} },
-0.5, 3.0},
-0.5, -1.0} },
0.5, 0.0},
0.5, 4.0} },
1.5, -2.0},
1.5, -1.0} }

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 479

8.18 Funciones OpenGL de aproximacin con splines

479

glMap3f (GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4,


0.0, 1.0, 12, 4, &ctrlPts[0][0][0]);
glEnable (GL_MAP2_VERTEX_3);
GLint k, j;
glColor3f (0.0, 0.0, 1.0);
for (k  0; k <= 8; k++)
{
glBegin (GL_LINE_STRIP);

// Genera las lneas de la superficie


Bzier.

for (j  0; j <= 40; j++)


glEvalCoord2f (GLfloat (j) / 40.0, GLfloat (k) / 8.0);
glEnd ( );
glBegin (GL_LINE_STRIP);
for (j  0; j <= 40; j++)
glEvalCoord2f (GLfloat (k) / 8.0, GLfloat (j) / 40.0);
glEnd ( );
}

En lugar de utilizar la funcin glEvalCoord2, podemos generar valores del parmetro uniformemente
espaciados sobre la superficie con:
glMapGrid2* (nu, u1, u2, nv, v1, v2);
glEvalMesh2 (mode, nu1, nu2, nv1, nv2);

El cdigo de sufijo para glMapGrid2 es de nuevo f o d, y al parmetro mode se le puede asignar el valor
GL_POINT, GL_LINE o GL_FILL. Se produce una cuadrcula bidimensional de puntos, con nu intervalos
igualmente espaciados entre u1 y u2, y con nv intervalos igualmente espaciados entre v1 y v2. El rango entero correspondiente al parmetro u vara desde nu1 a nu2, y el rango entero correspondiente al parmetro v
vara desde nv1 a nv2.
Para una superficie que hay que visualizar como una cuadrcula de polilneas, la salida de glMapGrid2 y
glEvalMesh2 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 glEvalCoord1 se establece en (u1, v1). Y al final del bucle, el argumento de
glEvalCoord1 se establece en (u2, v2).

for (k  nu1; k <= nu2; k++) {


glBegin (GL_LINES);
for (j  nv1; j <= nv2; j++)
glEvalCoord2f (u1  k * (u2 - u1) / nu,
v1  j * (v2 - v1) / nv);
glEnd ( );
}
for (j  nv1; j <= ov2; j++) {
glBegin (GL_LINES);
for (k  nu1; k <= nu2; k++)

CAP08_HEARN_1P.qxd

480

28/09/2005

12:50

Pgina 480

CAPTULO 8 Representaciones de objetos tridimensionales

glEvalCoord2f (u1  k * (u2 - u1) / nu,


v1  j * (v2 - v1) / nv);
glEnd ( );
}

De forma similar, para una superficie visualizada como un conjunto de caras poligonales rellenas (mode
 GL_FILL), la salida de glMapGrid2 y glEvalMesh2 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.

for (k  nu1; k < nu2; k++) {


glBegin (GL_QUAD_STRIP);
for (j  nv1; j <= nv2;
glEvalCoord2f (u1 
v1
glEvalCoord2f (u1 
v1

j ++) {
k * (u2  j * (v2
(k  1) *
 j * (v2

u1) /
- v1)
(u2 - v1)

nu,
/ nv);
u1) / nu,
/ nv);

Podemos utilizar la funcin glMap2 para especificar los valores de otras clases de datos, del mismo modo
que hicimos con glMap1. Para este propsito hay disponibles constantes simblicas similares, tales como
GL_MAP2_COLOR_4 y GL_MAP2_NORMAL. Y podemos activar mltiples funciones glMap2 para generar
varias combinaciones de datos.

Funciones GLU para curvas con splines B


Aunque las subrutinas de GLU para splines B se denominan funciones nurbs, se pueden utilizar para generar splines B que no son ni no uniformes ni racionales. Por tanto, podemos utilizar estas subrutinas para visualizar un spline B polinmico que tiene un espaciado uniforme de nudos. Y tambin se puede utilizar las subrutinas de GLU para producir splines de Bzier, racionales y no racionales. Para generar un spline B (o spline
de Bzier), necesitamos definir el nombre del spline, activar el sombreador de splines B de GLU, y entonces
definir los parmetros del spline.
Las lneas siguientes ilustran la secuencia bsica de llamadas para visualizar una curva con splines B.

GLUnurbsObj *curveName;
curveName  gluNewNurbsRenderer ( );
gluBeginCurve (curveName);
gluNurbsCurve (curveName, nknots, *knotVector, stride, *ctrlPts,
degParam, GL_MAP1_VERTEX_3);
gluEndCurwe (curveName);

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 gluNewNurbsRenderer. Se asigna un

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 481

8.18 Funciones OpenGL de aproximacin con splines

481

valor 0 a curveName cuando no hay memoria disponible suficiente para crear una curva con splines B. Dentro
de un par gluBeginCurve/gluEndCurve, 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 knotVector hace referencia al conjunto de valores de
los nudos en punto flotante, y el parmetro entero nknots especifica el nmero de elementos del vector de
nudos. El grado del polinomio es degParam  1. Enumeramos los valores de las coordenadas de los puntos
de control tridimensionales en el argumento ctrlPts, 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 ctrlPts se especifica con el parmetro entero stride. Si las posiciones de los puntos de control
son contiguas (no entrelazadas con otros tipos de datos), el valor de stride 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 knotVector [8]  {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0};
GLfloat ctrlPts [4][3]  { {-4.0, 0.0, 0.0}, {-2.0, 8.0, 0.0},
{2.0, -8.0, 0.0}, {4.0, 0.0, 0.0} };
GLUnurbsObj *cubicBezCurwe;
cubicBezCurve  gluNewNurbsRenderer ( );
gluBeginCurve (cubicBezCurve);
gluNurbsCurve (cubicBezCurve, 8, knotVector, 3, &ctrlPts [0][0],
4, GL_MAP1_VERTEX_3);
gluEndCurve(cubicBezCurve);

Para crear una curva con splines B racionales, sustituimos la constante simblica GL_MAP1_VERTEX_3
por GL_MAP1_VERTEX_4. A continuacin, se utilizan las coordenadas homogneas de cuatro dimensiones
(xh, yh, zh, 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 glMap1 y glMap2 . Cualquiera de las constantes simblicas, tales como GL_MAP1_COLOR_4 o
GL_MAP1_NORMAL, se pueden utilizar como ltimo argumento en la funcin gluNurbsCurve. Cada llamada
se enumera a continuacin dentro del par gluBeginCurve/gluEndCurve, 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.
gluNurbsProperty (splineName, property, value);

Al parmetro splineName se le asigna el nombre del spline B, al parmetro property se le asigna una
constante simblica de GLU que identifica la propiedad de sombreado que queremos cambiar y al parmetro
value se le asigna un valor numrico en punto flotante o una constante simblica de GLU que establece el

CAP08_HEARN_1P.qxd

482

28/09/2005

12:50

Pgina 482

CAPTULO 8 Representaciones de objetos tridimensionales

valor de la propiedad seleccionada. Se pueden especificar varias funciones gluNurbsProperty despus de


la lnea con gluNewNurbsRenderer. Muchas de las propiedades que se pueden cambiar usando la funcin
gluNurbsProperty son parmetros de la superficie, como se describe en la seccin siguiente.

Funciones GLU para la creacin de superficies con splines B


El siguiente fragmento de cdigo ilustra la secuencia bsica de llamadas para generar una superficie con splines B.

GLUnurbsObj *surfName
surfName  gluNewNurbsRenderer ( );
gluNurbsProperty (surfName, property1, value1);
gluNurbsProperty (surfName, property2, value2);
gluNurbsProperty (surfName, property3, value3);
.
.
.
gluBeginSurface (surfName);
gluNurbsSurface (surfName, nuKnots, uKnotVector, nvKnots,
vKnotVector, uStride, vStride, &ctrlPts [0][0][0],
uDegParam, vDegParam, GL_MAP2_VERTEX_3);
gluEndSurface (surfName);

Por lo general, el cdigo y los parmetros de GLU para definir una superficie con splines B es similar al
de una curva con splines B. 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 gluNurbsSurface. De 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
B. Los parmetros uKnotVector y vKnotVector hacen referencia a las matrices con los valores de los
nudos en punto flotante en las direcciones de los parmetros u y v. Podemos especificar el nmero de elementos de cada vector de nudos con los parmetros nuKnots y nvKnots. El grado del polinomio en el parmetro u lo proporciona el valor de uDegParam  1, 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 ctrlPts, que es un vector y que contiene (nuKnots - uDegParam) 
(nvKnots - vDegParam) elementos. El desplazamiento entero inicial entre el comienzo de los sucesivos puntos de control en la direccin paramtrica u se especifica con el parmetro entero uStride, y el desplazamiento en la direccin paramtrica v se especifica con el parmetro entero vStride. Borramos una superficie con splines para liberar su memoria reservada con la misma funcin gluDeleteNurbsRenderer que
usamos para una curva con splines B.
De forma predeterminada, una superficie con splines B 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 splines B. Como ejemplo de definicin de propiedades, el siguiente fragmento
de cdigo especifica una visualizacin de una superficie en su modelo almbrico teselada con tringulos.
gluNurbsProperty (surfName, GLU_NURBS_MODE,
GLU_NURBS_TESSELLATOR);

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 483

8.18 Funciones OpenGL de aproximacin con splines

483

gluNurbsProperty (surfName, GLU_DISPLAY_MODE,


GLU_OUTLINE_POLYGON};

Las subrutinas de teselacin 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 gluNurbsCallback . Otros valores de la propiedad GLU_DISPLAY_MODE son
GLU_OUTLINE_PATCH y GLU_FILL (el valor predeterminado). Mediante el valor GLU\_OUTLINE\_PATCH,
tambin obtenemos una visualizacin en modelo almbrico, pero la superficie no se divide en secciones triangulares. En su lugar, se dibuja el contorno 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 GLU_U_STEP
y GLU_V_STEP. 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 GLU_SAMPLING_METHOD con el valor
GLU_DOMAIN_DISTANCE. Se pueden utilizar otros valores con la propiedad GLU_SAMPLING_METHOD para
especificar cmo se lleva a cabo la teselacin de la superficie. Las propiedades GLU_SAMPLING_TOLERANCE
y GLU_PARAMETRIC_TOLERANCE se utilizan para establecer las longitudes mximas de muestreo.
Modificando la propiedad GLU_CULLING con el valor GL_TRUE, 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 GLU es GL_FALSE. Y la propiedad GLU_AUTO_LOAD_MATRIX permite que se descarguen del servidor de OpenGL las matrices de visualizacin y proyeccin cuando su valor es GL_TRUE (el
valor predeterminado). De lo contrario, si cambiamos el valor a GL_FALSE, una aplicacin debe proporcionar
estas matrices empleando la funcin gluLoadSamplingMatrices.
Para determinar el valor actual de una propiedad de un spline B, utilizamos la siguiente funcin de consulta.
gluGetNurbsProperty (splineName, property, value);

Para nombre de spline splineName y una propiedad property especificadas el valor correspondiente se
obtiene en el parmetro value.
Cuando la propiedad GLU_AUTO_LOAD_MATRIX se establece en el valor GL_FALSE, 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 glGetFloatv, y la vista actual
se puede obtener con una llamada a glGetIntegerv.
Varios eventos asociados a los objetos de tipo spline se procesan empleando,
gluNurbsCallback (splineName, event, fcn);

Al parmetro event se le asigna una constante simblica de GLU, y el parmetro fcn especifica una funcin que hay que invocar cuando el evento correspondiente a la constante de GLU se produce. Por ejemplo,
si establecemos el parmetro event en GLU_NURBS_ERROR, entonces se llama a fcn cuando se produce un
error. Las subrutinas para splines de GLU utilizan otros eventos para devolver los polgonos de OpenGL generados por el proceso de teselacin. La constante simblica GL_NURBS_BEGIN indica el comienzo de primitivas tales como segmentos de lnea, 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 GL_LINE_
STRIP, GL_TRIANGLES o GL_QUAD_STRIP. La constante simblica indica que aquellos datos 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 gluNurcsCallback se proporcionan mediante:

CAP08_HEARN_1P.qxd

484

28/09/2005

12:50

Pgina 484

CAPTULO 8 Representaciones de objetos tridimensionales


gluNurbsCallbackData (splineName, dataValues);

Al parmetro splineName se le asigna el nombre de objeto de tipo spline que hay que teselar, y al parmetro dataValues se le asigna una lista con los valores de los datos.

Funciones GLU para el recorte de superficies


Se especifica un conjunto de una o ms curvas de recorte bidimensionales de una superficie con splines B
mediante el siguiente fragmento de cdigo.

gluBeginTrim (surfName);
gluPwlCurve (surfName, nPts, *curvePts, stride, GLU_MAP1_TRIM_2);
.
.
.
gluEndTrim (surgName);

El parmetro surfName es el nombre de la superficie con splines B que hay que recortar. En el parmetro curvePts, que es un vector ya que contiene nPts posiciones de coordenadas, se especifica un conjunto
de coordenadas en punto flotante para la curva de recorte. En el parmetro stride 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 (u, v, h), entonces el argumento final de
gluPwlCurve se establece en la constante simblica de GLU GLU_MAP1_TRIM_3.
Tambin podemos utilizar una o ms funciones gluNurbsCurve como en el caso del recorte de curvas.
Y podemos construir curvas de recorte que sean combinaciones de funciones gluPwlCurve y
gluNurbsCurve. 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
1.0

0.8

0.6

0.4

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

0.0

0.2

0.4

0.6

0.8

1.0

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 485

8.19 Representaciones de barrido

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 Bzier. En la Figura 8.54 se muestra un dibujo de las curvas de recorte interior y exterior sobre el cuadrado unidad.

GLUnurbsObj *bezSurface;
GLfloat outerTrimPts [5][2]  { {0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0),
{0.0, 1.0}, {0.0, 0.0} };
GLfloat innerTrimPts1 [3][2]  { {0.25, 0.5}, {0.5, 0.75},
{0.75, 0.5) };
GLfloat innerTrimPts2 [4][2]  { {0.75, 0.5}, {0.75, 0.25},
{0.25, 0.25), {0.25, 0.5} };
GLfloat surfKnots [8]  (0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0);
GLfloat trimCurveKnots [8]  (0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0);
bezSurface  gluNewNurbsRenderer ( );
gluBeginSurface (bezSurface);
gluNurbsSurface (bezSurface, 8, surfKnots, 8, surfKnots, 4 * 3, 3,
&ctrlPts [0][0][0], 4, 4, GL_MAP2_VERTEX_3);
gluBeginTrim (bezSurface);
/* Curva de recorte exterior en sentido contrario */
/* a las agujas del reloj.*/
gluPwlCurve (bezSurface, 5, &outerTrimPts [0][0], 2,
GLU_MAP1_TRIM_2);
gluEndTrim (bezSurface);
gluBeginTrim (bezSurface);
/* Secciones de la curva de recorte interior*/
/* en el sentido de las agujas del reloj.*/
gluPwlCurve (bezSurface, 3, &innerTrimPts1 [0][0], 2,
GLU_MAP1_TRIM_3);
gluNurbsCurve (bezSurface, 8, trimCurweKnots, 2,
&innerTrimPts2 [0][0], 4, GLU_MAP1_TRIM_2):
gluEndTrim (bezSurface);
gluEndSurface (bezSurface);

8.19 REPRESENTACIONES DE BARRIDO


Los paquetes de modelado de slidos proporcionan a menudo un gran nmero de tcnicas de construccin.
Las representaciones de barrido son tiles para construir objetos tridimensionales que poseen simetras de
traslacin, de rotacin o de otra clase. Podemos representar tales objetos especificando una forma bidimensional y un recorrido por el que se mueve la forma a travs de una regin del espacio. Se puede disponer de

CAP08_HEARN_1P.qxd

486

28/09/2005

12:50

Pgina 486

CAPTULO 8 Representaciones de objetos tridimensionales


p1

p2

P(u)

p0

Eje de
rotacin

p3

P(u, v)
p1

(a)

p2

P(u, v)
(b)

FIGURA 8.55. Construccin de un slido


con un barrido de traslacin. La traslacin
de los puntos de control de una curva con
splines peridicos de (a) genera el slido
mostrado en (b), cuya superficie se puede
describir con la funcin de punto P(u, v).

P(u)

p0

p3

(a)

(b)

FIGURA 8.56. Construccin de un slido con un barrido de rotacin. La


rotacin de los puntos de control de una curva con splines peridicos (a)
alrededor del eje de rotacin dado genera el slido mostrado en (b), cuya
superficie se puede describir con la funcin de punto P(u, 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 p0 a p3 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).
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
recta, 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.

8.20 MTODOS DE GEOMETRA CONSTRUCTIVA DE SLIDOS


Otra tcnica de modelado de slidos consiste en generar un nuevo objeto a partir de dos objetos tridimensionales utilizando una operacin de conjuntos. Este mtodo de modelado, llamado geometra constructiva de
slidos (Constructive Solid Geometry; CSG), crea el nuevo objeto aplicando las operaciones de unin, interseccin o diferencia de dos slidos seleccionados.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 487

Mtodos de geometra constructiva de slidos

(a)

(b)

(a)

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).

(b)

487

(c)

FIGURA 8.58. Dos objetos que se superponen (a) se pueden combinar para producir el objeto con forma de cua de (b), utilizando
la operacin de interseccin, o el bloque modificado mostrado en
(c), utilizando la operacin diferencia.

Objeto
CSG

oper1

obj1

oper3

obj2

oper2

obj4

obj2

obj3

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.

CAP08_HEARN_1P.qxd

488

28/09/2005

12:50

Pgina 488

CAPTULO 8 Representaciones de objetos tridimensionales


Plano de
disparo

FIGURA 8.60. Implementacin de operaciones CSG utilizando trazado de rayos.

Rayo de
pxel

x, y
obj1

obj2
C

D
B

A
Plano de
disparo

Rayo de
pxel

Lmites de la
superficie

Operacin

A, D
C, B
B, D

Unin
Interseccin
Diferencia
(obj2  obj1)

z
(a)

(b)

FIGURA 8.61. Determinacin de los lmites de la superficie a lo largo de un rayo de pxel.

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
(firing plane) 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 CSG, 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. En 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 CSG, 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 Vij de una seccin transversal del objeto de rea Aij en la direccin de la trayectoria de un rayo de pxel
de la posicin (i, j) de este modo:
Vij Aijzij

(8.101)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 489

8.21 rboles octales

489

Plano de
disparo
y

FIGURA 8.62. Determinacin del volumen de un objeto en la direccin de la trayectoria


de un rayo de un rea de pxel Aij del plano de disparo.

zij
x

Aij

donde zij es la profundidad del objeto en la direccin del rayo desde la posicin (i, j). Si el objeto tiene agujeros internos, zij 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:
(8.102)
V Vij
i, j

Dada la funcin de densidad, (x, y, z), del objeto, podemos aproximar la masa en la direccin del rayo
desde la posicin (i, j) con esta integral:
mij Aij ( xij , yij , z )dz

(8.103)

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:
m mij

(8.104)

i, j

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
octantes del espacio. Este procedimiento, descrito en la seccin siguiente, busca en los octantes y los suboctantes de un cubo unidad para localizar las regiones ocupadas por los dos objetos que hay que combinar.

8.21 RBOLES OCTALES


Las estructuras jerrquicas con rboles, llamadas rboles octales, se utilizan para representar objetos slidos
en algunos sistemas grficos. La generacin de imgenes mdicas y otras aplicaciones que requieran la visualizacin de secciones rectas de objetos utilizan a menudo representaciones con rboles octales. La estructura
de un rbol est organizada de modo que cada nodo se corresponde con una regin del espacio tridimensional. Esta representacin de slidos se aprovecha de la coherencia espacial para reducir los requerimientos de
almacenamiento de los objetos tridimensionales. Tambin proporciona una representacin adecuada para
almacenar informacin acerca del interior de los objetos.
La representacin mediante rboles octales de un objeto tridimensional es una ampliacin de una tcnica
de representacin bidimensional similar, llamada codificacin con rboles cuaternarios. Los rboles cuaternarios se generan mediante divisiones sucesivas de una regin bidimensional (habitualmente un cuadrado) en
cuadrantes. Cada nodo del rbol cudrico tiene cuatro elementos de datos, uno por cada uno de los cuadrantes de la regin (Figura 8.63). Si todos los puntos contenidos en un cuadrante tienen el mismo color (un cuadrante homogneo), el elemento correspondiente de datos del nodo almacena dicho color. Adems, se modifica un indicador (flag) en el elemento de datos para indicar que el cuadrante es homogneo. Si, por ejemplo,

CAP08_HEARN_1P.qxd

490

28/09/2005

12:50

Pgina 490

CAPTULO 8 Representaciones de objetos tridimensionales

Cuadrante
0

Cuadrante
1
0

Cuadrante
3

Elementos de datos
en el modo representativo
del rbol cuaternario

Cuadrante
2

Regin de un espacio
bidimensional

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.

Representacin del
rbol cuaternario
Regin de un espacio
bidimensional

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 continuan 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.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 491

8.21 rboles octales

491

1
0

0
3

FIGURA 8.65. Una representacin mediante rbol cuaternario de una regin cuadrada del plano xy que contiene una nica
rea de color de primer plano sobre un fondo de color liso.
6
5
4
1
0
7

0
2

Elementos de datos en
el nodo representativo
del rbol octal

Regin de un espacio
tridimensional

FIGURA 8.66. Un cubo dividido en octantes 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 subdividido 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 region 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 octante 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-

CAP08_HEARN_1P.qxd

492

28/09/2005

12:50

Pgina 492

CAPTULO 8 Representaciones de objetos tridimensionales

les de partida. Para establecer una representacin de interseccin de dos rboles octales, construimos el nuevo
rbol utilizando los octantes 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 octantes ocupados. Para localizar los objetos visibles de una escena, podemos determinar en
primer lugar si cualquiera de los octantes frontales estn ocupados. Si no, proseguimos con los octantes situados detrs de los octantes frontales. Este proceso contina hasta que los octantes 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 octantes 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.

8.22 RBOLES BSP


Esta estrategia de representacin es similar a la codificacin mediante rboles octales, excepto que ahora dividimos el espacio en dos particiones en lugar de ocho en cada etapa. Mediante un rbol de particionamiento
binario del espacio (binary space-particioning; BSP), subdividimos una escena en dos partes en cada etapa
mediante un plano que puede estar en cualquier posicin y con cualquier orientacin. En una codificacin
mediante un rbol octal, la escena se subdivide en cada paso mediante tres planos perpendiculares entre s,
alineados con los planos de coordenadas cartesianas.
En la sudivisin adaptativa del espacio, los rboles BSP pueden proporcionar un particionamiento ms eficiente, ya que podemos posicionar y orientar los planos de corte para acomodarnos a la distribucin espacial
de los objetos. Esto puede reducir la profundidad de la representacin de la escena mediante un rbol, en comparacin con un rbol octal y, por tanto, reducir el tiempo de bsqueda en el rbol. Adems, los rboles BSP
son tiles para identificar la superficie visible y para el particionamiento del espacio en algoritmos de trazado de rayos.

8.23 MTODOS DE GEOMETRA FRACTAL


Todas las representaciones de objetos que hemos considerado en las secciones anteriores usaban mtodos de
geometra eucldea; es decir, las formas de los objetos se han descrito mediante ecuaciones. Estos mtodos
son adecuados para describir objetos fabricados: aquellos que tienen superficies suaves y formas regulares.
Pero los objetos naturales, tales como las montaas y las nubes, tienen caractersticas irregulares o fragmentadas, y los mtodos eucldeos no proporcionan representaciones realistas de tales objetos. Los objetos naturales se pueden describir de forma realista mediante mtodos de geometra fractal, en donde se utilizan procedimientos en lugar de ecuaciones para modelar los objetos. Como es lgico pensar, los objetos definidos
mediante procedimientos tienen caractersticas bastante diferentes de los objetos descritos con ecuaciones.
Las representaciones de geometra fractal de objetos se aplican habitualmente en muchos campos para describir y explicar las caractersticas de fenmenos naturales. En grficos por computadora, utilizamos los mtodos fractales para generar visualizaciones de objetos naturales y de sistemas matemticos y fsicos.
Un objeto fractal posee dos caractersticas bsicas: detalle infinito en cada punto, y una cierta autosimilitud entre las partes del objeto y las caractersticas totales del objeto. Las propiedades de autosimilitud de un
objeto pueden presentar formas diferentes, dependiendo de la representacin que elijamos del fractal.
Describimos un objeto fractal mediante un procedimiento que especifica una operacin repetida para producir el detalle en las subpartes del objeto. Los objetos naturales se representan con procedimientos que se repiten tericamente un nmero infinito de veces. Las visualizaciones grficas de objetos naturales se generan,
por supuesto, mediante un nmero finito de pasos.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 493

8.23 Mtodos de geometra fractal

493

Montaa
lejana

Vista ms
prxima

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
contorno 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 lmite, pero las amplitudes de las coordenadas del objeto permanecen confinadas dentro de una regin finita del
espacio.
Podemos caracterizar la cantidad de variacin del detalle de un objeto mediante un nmero llamado dimensin 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 fraccional, 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 flora, 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.

Procedimientos para generacin de fractales


Un objeto fractal se genera por aplicacin repetida de una funcin de transformacin especfica a puntos dentro de una regin del espacio. Si P0  (x0, y0, z0) se selecciona como posicin inicial, cada iteracin de una
funcin de transformacin F genera niveles sucesivos de detalle mediante los clculos:
P1  F(P0),

P2  F(P1).

P3  F(P2),

...

(8.105)

Por lo general, la funcin de transformacin se puede aplicar a un conjunto de puntos especfico o a un


conjunto inicial de primitivas, tales como lneas rectas, curvas, reas de color o superficies. Tambin, pode-

CAP08_HEARN_1P.qxd

494

28/09/2005

12:50

Pgina 494

CAPTULO 8 Representaciones de objetos tridimensionales

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, sx, sy, y sz,
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.

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.
Mediante analoga con la subdivisin de un objeto eucldeo se obtiene una expresin de la dimensin fractal de un fractal autosimilar construido con un nico factor de escala s. 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 = 12 , 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 sDE  1. En analoga con
los objetos eucldeos, la dimensin fractal D de objetos autosimilares se puede obtener a partir de:
nsD  1
Resolviendo esta expresin en D, la dimensin de similitud fractal, tenemos:

(8.106)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 495

8.23 Mtodos de geometra fractal

495

L
L  n
1
n

L
1
DE  1,

1
s n , n2
n s1  1
(a)
A
A  n

DE  2,
n s2  1

s  11/2 , n  4
n

(b)

V 

V
n

DE  3,
n s3  1

s  11/3 , n  8
n

(c)

FIGURA 8.68. Subdivisin de una lnea unidad (a), un cuadrado unidad (b), y un cubo unidad (c). La dimensin ecucldea
se representa como DE, y el factor de escala de cada objeto es s = 12 .

D=

ln n
ln(1 / s)

(8.107)

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:
n

D
k

=1

(8.108)

k =1

donde sk es el factor de escala de la subparte k.


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 subdividida, 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 habitualmente
en matemticas para determinar propiedades geomtricas tales como la longitud, el rea, o el volumen de un

CAP08_HEARN_1P.qxd

496

28/09/2005

12:50

Pgina 496

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.69. Caja de 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 crculos
o esferas condujo a la idea de dimensin de Hausdorff-Besicovitch, o dimensin fraccional. La dimensin de
Hausdorff-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 cobertura con cajas que utilizan retngulos o paraleleppedos. La Figura 8.69 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.
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. En objetos autosimilares estadsticamente con un nico factor de escala s, podemos cubrir el objeto con cuadrados o cubos. A continuacin contamos
el nmero n 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. En este caso, estimamos la dimensin fractal 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 un parmetro, u. Una
superficie eucldea es bidimensional, con parmetros de superficie u y v. Y un slido eucldeo, que requiere
tres 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 Peano ; 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 fractales espaciales (aquellas que no se encuentran completamente dentro de un nico plano)
tambin tienen dimensin fractal D mayor que 1, pero D puede ser mayor que 2 sin interseccin consigo
misma. Una curva que rellena un volumen del espacio tiene dimensin D  3, y una curva en el espacio que
se intersecta a s misma tiene una dimensin fractal D > 3.
Las superficies fractales tienen habitualmente 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. El
terreno, las nubes y el agua se modelan habitualmente con superficies fractales.
La dimensin de un fractal slido se encuentra habitualmente 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.

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 497

8.23 Mtodos de geometra fractal

497

Construccin geomtrica de fractales deterministas autosimilares


Para construir geomtricamente un fractal determinista (no aleatorio) autosimilar, comenzamos por una forma
geomtrica dada, llamada iniciador. Las subpartes del iniciador se reemplazan a continuacin por un patrn,
llamado generador. A modo de ejemplo, si utilizamos el iniciador y el generador mostrados en la Figura 8.70,
podemos construir el patrn de copo de nieve, o curva de Koch, mostrada en la Figura 8.71. Cada segmento
de lnea recta del iniciador se reemplaza por el patrn del generador, que consta de cuatro segmentos de lnea
de igual longitud. Despus se cambia de escala el generador y se aplica a los segmentos de lnea del iniciador
1
modificado, y este proceso se repite un nmero de pasos. El factor de escala en cada paso es 3 , por lo que la
dimensin fractal es D  ln 4/ln 3  1.2619. Tambin, la longitud de cada segmento de lnea del iniciador se
incrementa en un factor 43 en cada paso, de modo que la longitud de la curva fractal tiende a infinito a medida que se aade ms detalle a la curva (Figura 8.72). La Figura 8.73 ilustra los patrones adicionales de generador que se podran utilizar para construir curvas fractales autosimilares. Los generadores de la Figura
8.73(b) y (c) contienen ms detalle que el generador de la curva de Koch y tienen mayores dimensiones fractales.

Generador

FIGURA 8.70. Iniciador y generador de la


curva de Koch.

Iniciador

FIGURA 8.71. Tres primeras iteraciones de


la generacin de la curva de Koch.

CAP08_HEARN_1P.qxd

498

28/09/2005

12:50

Pgina 498

CAPTULO 8 Representaciones de objetos tridimensionales


Longitud del segmento  1

Longitud  1

Longitud del segmento  1


3

Longitud del segmento  1


9

Longitud  4
3

Longitud  16
9

FIGURA 8.72. La longitud de cada lado de la curva de Koch se incrementa en un factor de


las longitudes de los segmentos de lnea se reducen en un factor de 13 .

FIGURA 8.73. Generadores de curvas


fractales autosimilares y sus dimensiones fractales asociadas.

FIGURA 8.74. Generadores de fractales


con partes mltiples y disjuntas.

Longitud del
segmento  1/
D  1.129
(a)

4
3

en cada paso, mientras que

Longitud del
segmento  1/4
D  1.500
(b)

Longitud del
segmento  1/6
D  1.613
(c)

Longitud del
segmento  1/3

Longitud del
segmento  1/8

Longitud del
segmento  1/8

D  0.631

D  1.333

D  1.333

FIGURA 8.75. La aplicacin de este generador a las aristas de un tringulo equiltero produce
una curva 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 fractal. Por tanto, la dimensin fractal de la curva generada se
determina a partir de la Ecuacin 8.108.
Las visualizaciones de rboles y otras plantas se pueden construir mediante mtodos de construccin geomtrica autosimilar. Cada rama del contorno del helecho mostrada en la Figura 8.76(a) es una versin cambiada de escala de la forma del helecho total. En la parte (b) de esta figura, el helecho 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

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 499

8.23 Mtodos de geometra fractal

(a)

499

(b)

FIGURA 8.76. Construcciones autosimilares de un helecho. (Cortesa de Meter Oppenheimer, Computer Graphics Lab,
New York Institute of Technology.)

Cara frontal

Copia a escala
del tetraedro

(a)

(b)

FIGURA 8.77. Cambio de escala del tetraedro (a) en un factor de 1/2 y posicionando 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=

ln 6
2.58496
ln 2

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.

Construccin geomtrica de fractales estadsticamente autosimilares


Para introducir variabilidad en la construccin geomtrica de un fractal autosimilar, podramos seleccionar de
forma aleatoria un generador en cada paso a partir de un men de patrones. O podramos construir un fractal
autosimilar calculando pequeos desplazamientos de las coordenadas mediante pequeas variaciones aleato-

CAP08_HEARN_1P.qxd

500

28/09/2005

12:50

Pgina 500

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.78. Fractales autosimilares tridimensionales formados con generadores que sustraen subpartes de un iniciador.
(Cortesa de John C. Hart, Department of Computer Science, Universidad de Illinois en Urbana-Champaign.)

FIGURA 8.79. Un patrn modificado de copo de nieve que utiliza un desplazamiento aleatorio del punto 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 parte 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 (bump mapping) y variaciones fractales brownianas de los patrones de abultamiento. Los mtodos de generacin de curvas fractales 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 Peter Oppenheimer, Computer Graphics
Lab, New York Institute of Technology.)

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 501

8.23 Mtodos de geometra fractal

501

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. El csped se modela mediante instancias mltiples de conos verdes. (Cortesa de John C.
Hart, Department of Computer Science, Universidad de Illinois en Urbana-Champaign.)

FIGURA 8.82. Un bosque fractal creado con instancias mltiples de hojas, agujas de pino, csped y corteza de rbol. (Cortesa de John C. Hart, Department
of Computer Science, Universidad de Illinois en
Urbana-Champaign.)

Mtodos de construccin de fractales afines


Podemos obtener representaciones altamente realistas del terreno y de otros objetos naturales utilizando mtodos con fractales afines que modelan las caractersticas de los objetos como el movimiento browniano fraccional. Este es una ampliacin del movimiento browniano estndar, una forma de paseo aleatorio, que describe el movimiento en zigzag y errtico de partculas de gas u otro fluido. La Figura 8.85 ilustra la trayectoria de un paseo aleatorio en el plano xy. Comenzando por una posicin dada, generamos un segmento de lnea
recta segn una direccin aleatoria y con una longitud aleatoria. Otra lnea aleatoria se construye a continuacin desde el extremo de esta primera lnea, y el proceso se repite un nmero concreto de segmentos de lnea.

CAP08_HEARN_1P.qxd

502

28/09/2005

12:50

Pgina 502

CAPTULO 8 Representaciones de objetos tridimensionales

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.85. Un ejemplo de movimiento


browniano (paseo aleatorio) en el plano xy.

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. Voss 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 fraccionales 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-

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 503

8.23 Mtodos de geometra fractal

503

as, los valles, y los ocanos de un planeta. En la Figura 8.86 el movimiento browniano se utiliz 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 azul (los ocanos) y las alturas ms elevadas en blacon (nieve sobre las montaas). El movimiento browniano fraccional 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 fractales 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.

(a)

(b)

(c)

FIGURA 8.87. Variaciones de las caractersticas del terreno modeladas mediante movimiento browniano fraccional.
(Cortesa de (a) R. V. Voss and B. B. Mandelbrot, adaptado a partir de The Fractal Geometry of Nature de Benoit B.
Mandelbrot (W. H. Freeman and Co., New York, 1983); y (b) y (c) Ken Musgrave y Benoit B. Mandelbrot, Mathematics
and Computer Science, Universidad de Yale)

CAP08_HEARN_1P.qxd

504

28/09/2005

12:50

Pgina 504

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.88. Una escena modelada mediante nubes fractales


y montaas fractales. (Cortesa de Ken Musgrave y Benoit B.
Mandelbrot, Mathematics and Computer Science, Universidad
de Yale.)
y

y(b)

y(b)

y(a)

y(a)
ymid
a

ab
2

FIGURA 8.89. Desplazamiento aleatorio del punto medio de un segmento de lnea recta.

Mtodos de desplazamiento aleatorio del punto medio


Los clculos del movimiento browniano fraccional requieren tiempo, ya que las coordenadas de la elevacin
del terreno sobre un plano de tierra se calculan mediante series de Fourier, que son sumas de trminos con
senos y cosenos. Los mtodos que utilizan la transformada rpida de Fourier (Fast Fourier Transform; FFT)
se utilizan habitualmente, pero son an un proceso lento para generar escenas con montaas fractales. Por
tanto, mtodos de desplazamiento aleatorio del punto medio ms rpidos, similares a los mtodos de desplazamiento utilizados en las construcciones geomtricas, se han desarrollado para aproximar las representaciones con movimiento brownianno aleatorio del terreno y otros fenmenos naturales. Estos mtodos se
utilizaron originariamente para generar cuadros de animacin en pelculas de ciencia ficcin que involucraban caractersticas inusuales de terrenos y planetas. Los mtodos de desplazamiento del punto medio ahora se
utilizan habitualmente en muchas otras aplicaciones de grficos por computadora, entre las que se incluyen
las animaciones para anuncios de televisin.
Aunque los mtodos de desplazamiento aleatorio del punto medio son ms rpidos que los clculos del
movimiento browniano fraccional, producen caractersticas de terrenos de apariencia menos realista. La
Figura 8.89 ilustra el mtodo del desplazamiento del punto medio para generar una trayectoria de un paseo
aleatorio en el plano xy. Comenzando por un segmento de lnea recta, calculamos un valor de la ordenada y
desplazado de la posicin del punto medio de la lnea como el valor medio de los valores de la ordenada y del
extremo ms un desplazamiento aleatorio:
1
ymid = [ y(a ) + y(b)] + r
2

(8.109)

Para aproximar el movimiento browniano fraccional, seleccionamos un valor para r de la distribucin


gaussiana de media 0 y una varianza proporcional a |(b  a)|2H, donde H  2  D y D > 1 es la dimensin
fractal. Otro mtodo para obtener un desplazamiento aletorio consiste en tomar r  srg|b  a|, donde el par-

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 505

8.23 Mtodos de geometra fractal

505

metro s es un factor seleccionado de rugosidad de la superficie y rg es un valor aleatorio gaussiano de media


0 y varianza 1. Se pueden utilizar tablas de bsqueda para obtener los valores gaussianos. El proceso despus
se repite calculando un valor desplazado de la ordenada y para la posicin media de cada mitad de la lnea
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. En cada paso, el
valor de la variable aleatoria r disminuye, ya que es proporcional al ancho |b  a| 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 m. 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 ze 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:
ze  ( za  zb)/2  re,

zf  ( zb  zc)/2  rf

Los valores aleatorios re y rf 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 2H, donde H  3  D y 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
aleatorios 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 zm 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 zm utilizando las alturas asignadas a las cuatro esquinas del plano de tierra y un desplazamiento aleatorio del siguiente modo:
zm  (za  zb  zc  zd )/4  rm
y

FIGURA 8.90. Una trayectoria de un paseo aleatorio


generada a partir de un segmento de lnea recta con
cuatro iteraciones del procedimiento de desplazamiento aleatorio del punto medio.

x
(a)

(b)

Plano
de tierra

c
(a)

(b)

FIGURA 8.91. Un plano rectangular de tierra (a) 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.

CAP08_HEARN_1P.qxd

506

28/09/2005

12:50

Pgina 506

CAPTULO 8 Representaciones de objetos tridimensionales


y
a

FIGURA 8.92. Ocho 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 partes 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 utlizando 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 medio se puede aplicar para generar otros componentes
de una escena adems 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.

Control de la topografa del terreno


Un modo de controlar la colocacin de los picos y de los valles en una escena con terreno fractal que se modela con un mtodo de desplazamiento de punto medio, consiste en restringir las alturas calculadas a ciertos
intervalos sobre varias secciones del plano de tierra. Podemos realizar esto designando un conjunto de superficies de control sobre el plano de tierra, como se ilustra en la Figura 8.93. Despus calculamos una altura
aleatoria en cada punto medio de la cuadrcula del plano de tierra que depende de la diferencia entre la altura de control y la altura media calculada para dicho punto. Este procedimiento obliga a las alturas a pertenecer a un intervalo preseleccionado en torno a las alturas de la superficie de control.
Las superficies de control se pueden utilizar para modelar caractersticas existentes del terreno en las
Montaas Rocosas, o en alguna otra regin, construyendo las facetas del plano utilizando las alturas de un
plano topogrfico de una regin concreta. O podramos establecer las alturas de los vrtices de los polgonos
de control para disear nuestras propias caractersticas del terreno. Tambin, las superficies de control pueden
tener cualquier forma. Los planos son los ms fciles de utilizar, pero podramos utilizar superficies esfricas
u otras formas curvas.
Utilizamos el mtodo de desplazamiento aleatorio del punto medio para calcular las alturas de la cuadrcula, pero ahora seleccionamos valores aleatorios a partir de una distribucin gaussiana en la que la media
y la desviacin estndar son funciones de las alturas de control. Un mtodo para obtener los valores y
consiste en hacer ambos proporcionales a la diferencia entre la altura media calculada y la altura de control
predefinida en cada punto de la rejilla. Por ejemplo, para el punto de la rejilla e de la Figura 8.91, establecemos la media y la desviacin estndar del siguiente modo:

e  zce  (za  zb)/2, e  s|e|


donde zce es la altura de control del punto e del plano de tierra y 0 < s < 1 es el factor de escala. Los valores
pequeos de s, tales como s < 0.1, producen una concordancia ms ajustada a la envolvente del terreno, y valores ms grandes de s permiten mayores fluctuaciones 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 partmetros del plano A, B, C y D. En cualquier punto del plano de tierra (x, y), la altura en el plano que contiene aquel polgono de control se calcula entoces del siguiente modo:

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 507

8.23 Mtodos de geometra fractal

507

FIGURA 8.93. Superficies de control sobre un plano


de tierra.
y

FIGURA 8.94. Proyeccin de una superficie triangular de control


sobre una cuadrcula del plano de tierra.

zc  (Ax By D)/C


Se pueden utilizar mtodos incrementales para calcular las alturas de control sobre los puntos de la cuadrcula del plano de control. Para llevar a cabo estos clculos eficientemente, subdividimos el plano de tierra
con una cuadrcula ms pequea de puntos xy y proyectamos cada polgono de la superficie de control sobre
el plano de tierra, como se muestra en la Figura 8.94. A partir de esta proyeccin, determinamos los puntos
de la cuadrcula que se encuentran por debajo de cada polgono de control. Esto se puede realizar utilizando
procedimientos similares a los empleados en el relleno de reas mediante lneas de barrido. Es decir, para cada
lnea de barrido y de la malla del plano de tierra que cruza las aristas del polgono, calculamos las intersecciones de la lnea de barrido y determinamos qu puntos de la cuadrcula estn dentro de la proyeccin del
polgono de control. Los clculos de las alturas de control en estos puntos de la cuadrcula se realizan de forma
incremental de este modo:
zci1,j  zci,j  x(A/C),

zci,j1  zci,j  y(B/C),

(8.110)

donde x y y son los incrementos de la cuadrcula en las direcciones de los ejes x 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.95 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 z  x
 iy, donde x e y son nmeros reales e i2  1. En el espacio tridimensional y de cuatro dimensiones, los

CAP08_HEARN_1P.qxd

508

28/09/2005

12:50

Pgina 508

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.95. Una escena compuesta modelada mediante 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, Encentuate, Inc., Cupertino, California.)

puntos se representan mediante cuaternios. Una funcin cuadrtica compleja f (z) es aquella que implica el
clculo de z2. Podemos utilizar algunas funciones autocuadrticas para generar formas fractales.
Dependiendo del punto inicial seleccionado para iterar, la aplicacin repetida de una funcin autocuadrtica producir uno de los tres resultados posibles:
El punto transformado puede diverger hacia infinito.
El punto transformado puede converger hacia un punto lmite finito, llamado punto de atraccin (atractor).
El punto transformado permanece en el lmite de alguna regin.
Como ejemplo, la operacin cuadrtica no fractal f(z)  z2 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 1 se
transforma mediante una secuencia de puntos que tienden hacia infinito. Un punto con | z |<1 se transforma
hacia el origen de coordenadas. Los puntos que estn originariamente en el crculo, | z |=1, permanecen en el
mismo. Aunque la transformacin z2 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.
z
z
z
(punto de atraccin)

FIGURA 8.96. Posibles resultados de la aplicacin repetida de


una transformacin autocuadrtica f (z) al plano complejo,
dependiendo de la posicin del punto inicial seleccionado.

Conjunto
de Julia

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 509

8.23 Mtodos de geometra fractal

509

y
z  1
z  1
z  1
x

FIGURA 8.97. Un crculo unidad en el plano complejo. La funcin compleja cuadrtica no fractal f(z)  z2 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.

z

z

FIGURA 8.98. Localizacin de la curva frontera fractal utilizando la funcin autocuadrtica inversa z  f1(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. Repetimos 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 funcin 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:
z  f (z)  z (1  z)

(8.111)

donde 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:
z2  z  z/  0

(8.112)

La transformacin inversa es entonces la frmula cuadrtica:


z = f 1 ( z ) =

1
(1 1 (4 z ) / )
2

(8.113)

Utilizando operaciones aritmticas complejas, resolvemos esta ecuacin en las partes real e imaginaria de
z del siguiente modo:
x = Re( z ) =

1
1
2

y = Im( z ) =

1
2

discr + Re(discr)

(8.114)

discr Re(discr)
2

donde el discriminante de la frmula cuadrtica es discr  1  4z/. 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

CAP08_HEARN_1P.qxd

510

28/09/2005

12:50

Pgina 510

CAPTULO 8 Representaciones de objetos tridimensionales

que esta funcin produce dos posibles puntos transformados (x, y), 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 e y 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.

(a)

(b)

FIGURA 8.99. Dos curvas fractales generadas


con la inversa de la funcin f (z)  z (1  z)
mediante el procedimiento selfSqTransf,
utilizando (a)  3 y (b)  2  i. Cada curva
se ha dibujado con 10000 puntos.

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
/* Establece el tamao inicial de la ventana de visualizacin.
GLsizei winWidth  600, winHeight  600;
/* Establece los lmites de las coordenadas del plano complejo.
GLfloat xComplexMin  -0.25, xComplexMax  1.25;
GLfloat yComplexMin  -0.75, yComplexMax  0.75;
struct complexNum
{
GLfloat x, y;
};

*/

*/

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 511

8.23 Mtodos de geometra fractal

void init (void)


{
/* Establece el color de la ventana de visualizacin en blanco.
glClearColor (1.0, 1.0, 1.0, 0.0);
}

*/

void plotPoint (complexNum z)


{
glBegin (GL_POINTS);
glVertex2f (z.x, z.y);
glEnd ( );
}
void solveQuadraticEq (complexNum lambda, complexNum * z)
{
GLfloat lambdaMagSq, discrMag;
complexOum discr;
static complexOum fourOverLambda  { 0.0, 0.0 };
static GLboolean firstPoint  true;
if (firstPoint) {
/* Calcula el nmero complejo: 4.0 dividido por lambda. */
lambdaMagSq  lambda.x * lambda.x  lambda.y * lambda.y;
fourOverLambda.x  4.0 * lambda.x / lambdaMagSq;
fourOverLambda.y  -4.0 * lambda.y / lambdaMagSq;
firstPoint  false;
}
discr.x  1.0 - (z->x * fourOverLambda.x - z->y * fourOverLambda.y);
discr.y  {->x * fourOverLambda.y  z->y * fourOverLamcda.x;
discrMag  sqrt (discr.x * discr.x  discr.y * discr.y);
/*

Actualiza z, comprobando para evitar la raz cuadrada de un nmero


negativo. */
if (discrMag  discr.x < 0)
z->x  0;
else
z->x  sqrt ((discrMag  discr.x) / 2.0);
if (discrMag - discr.x < 0)
z->y  0;
else
z->y  0.5 * sqrt ((discrMag - discr.x) / 2.0);
/* Para la mitad de los puntos, utiliza la raz negativa,
* situando el punto en el cuadrante 3.
*/
if (rand ( ) < RAND_MAX / 2) {
z->x  -z->x;
z->y  -z->y;
}

511

CAP08_HEARN_1P.qxd

512

28/09/2005

12:50

Pgina 512

CAPTULO 8 Representaciones de objetos tridimensionales

/* Cuando la parte imaginaria del discriminante es negativa, el punto


* debera estar en el cuadrante 2 o 4, para invertir el signo de x.
*/
if (discr.y < 0)
z->x  -z->x;
/* Completa el clculo de la parte real de z. */
z->x  0.5 * (1 - z->x);
}
void selfSqTransf (complexNum lambda, complexNum z, GLint numPoints)
{
GLint k;
/*

Salta los primeros puntos.

*/

for (k  0; k < 10; k++)


solveQuadraticEq (lambda, &z);
/* Dibuja el nmero especfico de puntos de transformacin.
for (k  0; k < numPoints; k++) {
solveQuadraticEq (lambda, &z);
plotPoint (z);
}

*/

}
void displayFcn (void)
{
GLint numPoints  10000;// Establece el nmero de puntos que hay que dibujar.
complexNum lambda  { 3.0, 0.0 }; // Establece el valor complejo de lambda.
complexNum z0  { 1.5, 0.4 };
// Establece el punto incial del plano
complejo. */
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 0.0, 1.0);

//
//

Borra la ventana de visualizacin.


Establece el color de los puntos en azul.

selfSqTransf (lambda, z0, numPoints);


glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Mantiene una relacin de aspecto de 1.0, asumiendo que
* el ancho de la ventana compleja  altura de la ventana compleja.
*/
glViewport (0, 0, newHeight, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 513

8.23 Mtodos de geometra fractal

513

gluOrtho2D (xComplexMin, xComplexMax, yComplexMin, yComplexMax);


glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (50, 50);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Self-Squasing Fractal#);
init ( );
glutDisplayGunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

En la Figura 8.100 se proporciona un grfico tridimensional de las variables x, y y correspondiente a la


funcin autocuadrtica f (z)  z (1  z), donde ||  1. 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 z2 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:
z0 = z
zk = zk21 + z0

k = 1, 2, 3, . . .

(8.115)

Por tanto, en primer lugar seleccionamos un punto z del plano complejo, despus calculamos el punto
transformado z2  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, Benoit Mandelbrot 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 vdeo (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

CAP08_HEARN_1P.qxd

514

28/09/2005

12:50

Pgina 514

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.100. La funcin f (z)  z (1  z) dibujada en tres


dimensiones, con valores normalizados de que varan segn el
eje vertical. (Cortesa de Alan Norton, IBM Research.)

Ventana de
visualizacin
eje
imaginario
pxel
z

eje real

Plano complejo

Pantalla de vdeo

FIGURA 8.101. Mapeo de puntos desde un rea rectangular del plano complejo a pxeles codificados con color dentro de
una ventana de visualizacin.

hasta que el mdulo del nmero complejo sea mayor que 2 o hayamos alcanzado un nmero preseleccionado
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. Este valor se establece a menudo en algn valor entre 100
y 1000, 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 de 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 0 al valor mximo. Eligiendo diferentes mapeos de color y diferentes partes del
plano complejo, podemos generar una gran variedad de visualizaciones dramticas de los puntos de la vecin-

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 515

8.23 Mtodos de geometra fractal

515

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.
En el programa siguiente se proporciona una implementacin 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.00 Re(z) 0.50
1.20 Im(z) 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 seleccionadas 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.

(a)

(b)

(c)

(d)

(e)

(f)

FIGURA 8.102. Ampliacin de las fronteras fractales de la transformacin 8.115. Comenzando por una visualizacin del
conjunto de Mandelbrot, la regin negra de (a) y sus reas circundantes, ampliamos regiones seleccionadas de la frontera desde (b) hasta (f). El 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 de Brian
Evans, Vanderbilt University.).

CAP08_HEARN_1P.qxd

516

28/09/2005

12:50

Pgina 516

CAPTULO 8 Representaciones de objetos tridimensionales

#include <GL/glut.h>
/* Establece el tamao inicial de la ventana de visualizacin.
GLsizei winWidth  500, winHeight  500;

*/

/* Establece los lmites del rea rectangular del plano complejo.


GLfloat xComplexMin  -2.00, xComplexMax  0.50;
GLfloat yComplexMin  -1.25, yComplexMax  1.25;

*/

GLfloat complexWidth  xComplexMax - xComplexMin;


GLfloat complexHeight  yComplexMax - yComplexMin;
class complexNum {
public:
GLfloat x, y;
};
struct color { GLfloat r, g, b; };
void init (void)
{
/* Establece el color de la ventana de visualizacin en blanco.
glClearColor (1.0, 1.0, 1.0, 0.0);
}
woid plotPoint (complexNum z)
{
glBegin (GL_POINTS);
glVertex2f (z.x, z.y);
glEnd ( );
}
/* Calcula el cuadrado de un nmero complejo.
complexNum complexSquare (complexNum z)
{
complexNum zSquare;

*/

zSquare.x  z.x * z.x - z.y * z.y;


zSquare.y  2 * z.x * z.y;
return zSquare;
}
GLint mandelSqTransf (complexNum z0, GLint maxIter)
{
complexNum z  z0;
GLint count  0;
/* Sale cuando z * z > 4 */
while ((z.x * z.x  z.y * z.y <= 4.0) && (count < maxIter)) {

*/

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 517

8.23 Mtodos de geometra fractal

z  complexSquare (z);
z.x += z0.x;
z.y += z0.y;
count++;
}
return count;
}
void mandelbrot (GLint nx, GLint ny, GLint maxIter)
{
complexNum z, zIncr;
color ptColor;
GLint iterCount;
zIncr.x 
zIncr.y 

complexWidth / GLfloat (nx);


complexHeight / GLfloat (ny);

for (z.x  xComplexMin; z.x < xComplexMax; z.x += zIncr.x)


for (z.y  yComplexMin; z.y < yComplexMax; z.y += zIncr.y) {
iterCount  mandelSqTransf (z, maxIter);
if (iterCount >= maxIter)
/* Establece el color de los puntos en negro. */
ptColor.r  ptColor.g  ptColor.b  0.0;
else if (iterCount > (maxIter / 8)) {
/* Establece el color de los puntos en naranja. */
ptColor.r  1.0;
ptColor.g  0.5;
ptColor.b  0.0;
}
else if (iterCount > (maxIter / 10)) {
/* Establece el color de los puntos en rojo. */
ptColor.r  1.0;
ptColor.g  ptColor.b  0.0;
}
else if (iterCount > (maxIter /20)) {
/* Establece el color de los puntos en azul
oscuro. */
ptColor.b  0.5;
ptColor.r  ptColor.g  0.0;
}
else if (iterCount > (maxIter / 40)) {
/* Establece el color de los puntos en
amarillo. */
ptColor.r  ptColor.g  1.0;
ptColor.b  0.0;
}
else if (iterCount > (maxIter / 100)) {

517

CAP08_HEARN_1P.qxd

518

28/09/2005

12:50

Pgina 518

CAPTULO 8 Representaciones de objetos tridimensionales

/* Establece el color de los puntos en


* verde oscuro. */
ptColor.r  ptColor.b  0.0;
ptColor.g  0.3;
}
else {
/* Establece el color de los
* puntos en cian. */
ptColor.r  0.0;
ptColor.g  ptColor.b  1.0;
}
/* Dibuja el punto coloreado. */
glColor3f (ptColor.r, ptColor.g, ptColor.b);
plotPoint (z);
}
}
void displayFcn (void)
{
/* Establece el nmero de subdivisiones en los ejes x e y y las iteraciones
mximas. */
GLint nx  1000, ny  1000, maxIter  1000;
glClear (GL_COLOR_BUFFER_BIT);

//

Borra la pantalla de visualizacin.

mandelbrot (nx, ny, maxIter);


glFlush ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Mantiene la relacin de aspecto en 1.0, asumiendo que
* complexWidth  complexHeight.
*/
glViewport (0, 0, newHeight, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (xComplexMin, xComplexMax, yComplexMin, yComplexMax);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);

CAP08_HEARN_1P.qxd

28/09/2005

12:50

Pgina 519

8.23 Mtodos de geometra fractal

519

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);


glutInitWindowPosition (50, 50);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Mandelbrot Set");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}

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 utilizan 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
cuaternio de la siguiente forma, como ampliacin del concepto de nmero del plano complejo,
q  s  ia  jb  kc

(8.116)

donde i2  j2  k2  1. El nmero real s se denomina tambin parte escalar del cuaternio, y los nmeros
imaginarios se llaman parte vectorial del cuaternio v  (a, b, c).
Utilizando las reglas de la multiplicacin y suma de cuaternios estudiadas en el Apndice A, podemos aplicar las funciones autocuadrticas 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 fractal 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 lmites 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.

CAP08_HEARN_1P.qxd

520

28/09/2005

12:51

Pgina 520

CAPTULO 8 Representaciones de objetos tridimensionales

(b)

(a)

Figura 8.103. Proyecciones tridimensionales de fractales de cuatro dimensiones generados mediante la funcin autocuadrtica representada con cuaternios f (q)  q (1  q), que utilizan (a)  1.475  0.9061i y (b)  0.57  i.
(Cortesa de Alan Norton, IBM Research.)

P
P

Pc

FIGURA 8.104. Una proyeccin sobre una superficie tridimensional de un objeto de cuatro dimensiones generado mediante
una funcin autocuadrtica representada con cuaternios f(q) 
q2  1. (Cortesa de Alan Norton, IBM Research.)

FIGURA 8.105. Inversin del punto P al punto


P situado dentro de un crculo de radio r.

Como ejemplo, consideremos una transformacin bidimensional de inversin con respecto a un crculo de
radio r y su centro Pc  (xc, yc). Un punto P situado fuera del crculo se invierte en un punto P situado dentro del crculo (Figura 8.105) mediante la transformacin:
(PC P)(PC P ) = r 2

(8.117)

donde ambos puntos P y P se encuentran situados en una lnea recta que pasa por el centro del crculo Pc.
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  xc)2  (y  yc)2]1/2[(x  xc)2  (y  yc)2]1/2  r2

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 521

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 (y  yc)/ (x  xc)  (y  yc)/ (x  xc). Por tanto, los valores de las coordenadas transformadas del
punto P son:
x = xc +

r 2 ( x xc )
,
( x xc )2 + ( y yc )2

y = yc +

r 2 ( y yc )
( x xc )2 + ( y yc )2

(8.118)

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 puntos distantes situados fuera del crculo. A medida que nos alejamos del centro del crculo, los puntos se mapean a puntos ms cercanos a la circunferencia del crculo, situados fuera 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 , se mapean a valores x dentro del rango que vara desde r/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
r 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 mapea
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 Pc. Y cualquier crculo que pase por el centro del crculo de referencia se invierte
en una lnea recta que no pasa por el centro del crculo. 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 crculos 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.

8.24 GRAMTICAS DE FORMAS Y OTROS MTODOS PROCEDIMENTALES


Se puede utilizar un gran nmero de otros mtodos procedimentales para disear formas de objetos o niveles
de detalle de la superficie. Las gramticas de formas son conjuntos de reglas de produccin que se pueden
aplicar a un objeto inicial, para aadir capas de detalle que son armoniosas con la forma original. Las transformaciones se pueden aplicar para alterar la geometra (forma) del objeto, o las reglas de transformacin se
pueden aplicar para aadir detalles del color o la textura de la superficie.

Crculo
original

Crculo
invertido

r
Pc
Crculo de
referencia

FIGURA 8.106. Inversin de un crculo que no pasa por


el origen del crculo de referencia.

CAP08_HEARN_1P.qxd

522

28/09/2005

12:51

Pgina 522

CAPTULO 8 Representaciones de objetos tridimensionales

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.108(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.

(a)

(b)

(c)

(d)

FIGURA 8.108. Un tringulo equiltero (a) se convierte en la forma mostrada en (b) utilizando las reglas de sustitucin 1
y 2 de la Figura 8.107. La regla 3 se utiliza a continuacin para convertir (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 Center). 1992.)

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 523

8.24 Gramticas de formas y otros mtodos procedimentales

523

FIGURA 8.109. Un diseo creado mediante reglas


geomtricas de sustitucin para alterar formas de
tringulos. [Cortesa de Andrew Glassner, Xerox
PARC (Palo Alto Research Center). 1992.]

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
Andrew Glassner, Xerox PARC (Palo Alto Research
Center). 1992.]

FIGURA 8.111. Diseos creados sobre la superficie de una esfera utilizando reglas de sustitucin de tringulos aplicadas
a las caras planas de un icosaedro, seguidas de proyecciones sobre la superficie de la esfera. [Cortesa de Andrew Glassner,
Xerox PARC (Palo Alto Research Center). 1992.]

CAP08_HEARN_1P.qxd

524

28/09/2005

12:51

Pgina 524

CAPTULO 8 Representaciones de objetos tridimensionales

Otro conjunto de reglas de produccin para describir la forma de los objetos se llaman gramticas L, o
graftales. Estas reglas se utilizan habitualmente para generar visualizacines 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.

8.25 SISTEMAS DE PARTCULAS


Para algunas aplicaciones, a menudo es til describir uno o ms objetos empleando una coleccin de partes
disjuntas, llamada sistema de partculas. Esta tcnica se puede aplicar para describir objetos con propiedades semejantes a las de los fluidos que pueden cambiar en el tiempo mediante flujo, ondulacin, pulverizacin, expansin, contraccin o explosin. Entre los objetos con estas caractersticas se incluyen las nubes, el
humo, el fuego, los fuegos artificiales, las cascadas de agua y el agua pulverizada. Los sistemas de partculas
se han empleado, por ejemplo, para modelar la explosin de un planeta y la expansin del frente de fuego
debidos a la bomba del gnesis de la pelcula Star Trek II: La Ira de Khan. Y los mtodos basados en sistemas de partculas se han utilizado para modelar otras clases de objetos, entre las que se incluye la hierba.

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
Image.)

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 525

8.25 Sistemas de partculas

525

x
z

FIGURA 8.113. Modelado de fuegos artificiales como un sistema de partculas que viajan radialmente hacia fuera desde
el centro de una esfera.
y

x
z

FIGURA 8.114. Modelado de hierba mediante el lanzamiento de partculas hacia arriba desde dentro de un cilindro con
tapas. Las trayectorias de las partculas son parbolas debido a la fuerza 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 gravitatorio.
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 radialmente 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.116 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.

CAP08_HEARN_1P.qxd

526

28/09/2005

12:51

Pgina 526

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.115. Simulacin del comportamiento


de una cascada que golpea una piedra (crculo).
Las partculas de agua se desvan mediante la
roca y a continuacin rebotan en el suelo.
(Cortesa de M. Brooks and T. L. J. Howard,
Department of Computer Science, Universidad
de Manchester.)

FIGURA 8.116. Un objeto que se desintegra en


una nube de partculas. (Cortesa de Autodesk,
Inc.)

8.26 MODELADO BASADO EN LAS CARACTERSTICAS FSICAS


Un objeto no rgido, tal como una cuerda, una tela o una pelota de goma, se puede representar mediante mtodos de modelado basado en las caractersticas fsicas que describen el comportamiento del objeto en funcin
de la interaccin de las fuerzas externas y las fuerzas internas. Una descripcin precisa de la forma de una toalla de felpa colocada sobre el respaldo de una silla, por ejemplo, se obtiene al considerar el efecto de la silla
sobre las ondas de la tela de la toalla y la interaccin entre los hilos de sta.
Un mtodo comn para modelar un objeto no rgido consiste en aproximar el objeto mediante una red de
nodos de puntos con conexiones flexibles entre los nodos. Un tipo sencillo de unin es un muelle. La Figura
8.118 muestra una seccin de una red bidimensional de muelles que se podra utilizar para aproximar el comportamiento de una toalla o de una lmina de goma. Se podran establecer redes similares de muelles en tres
dimensiones para modelar una pelota de goma o un bloque de gelatina. Para un objeto homogneo, podemos
utilizar muelles idnticos en toda la red. Si queremos que el objeto posea diferentes propiedades segn direcciones diferentes, podemos utilizar distintas propiedades del muelle en las diferentes direcciones. Cuando se
aplican fuerzas externas a la red de muelles, la cantidad de estiramiento o compresin de los muelles individuales depende del conjunto de valores de la constante de elasticidad k, que tambin se llama constante de
fuerza del muelle.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 527

8.26 Modelado basado en las caractersticas fsicas

527

FIGURA 8.117. Una escena, titulada Camino a Point Reyes, que muestra hierba con sistema de partculas, montaas fractales y superficies con texturas mapeadas. (Cortesa de Pixar. 1983 Pixar.)
k
(posicin sin
alargamiento)
k

k
x

k
k

k
Fx

FIGURA 8.118. Una red bidimensional de muelles,


construida con constantes de elasticidad k idnticas.

FIGURA 8.119. Una fuerza externa Fx 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 Fx se ilustra en


la Figura 8.119. 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:
Fs  Fx  kx

(8.119)

donde Fs 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 x, 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 externas 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.

CAP08_HEARN_1P.qxd

528

28/09/2005

12:51

Pgina 528

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.120. Modelado del comportamiento flexible


de la piel de un pltano mediante una red de muelles.
(Cortesa de David Laidlaw, John Snyder, Adam
Woodbury, and Alan Barr, Computer Graphics Lab,
California Institute of Technology. 1992.)

(a)

FIGURA 8.121. Modelado del comportamiento flexible


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 .)

(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 la minimizacin de la funcin de energa. (Cortesa de David 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 externas 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.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 529

8.27 Visualizacin de conjuntos de datos

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.

8.27 VISUALIZACIN DE CONJUNTOS DE DATOS


El uso de mtodos de grficos por computadora como ayuda en el anlisis cientfico y de ingenieria se denomina habitualmente visualizacin cientfica. sta involucra la visualizacin de conjuntos de datos y procesos que pueden ser difciles o imposibles de analizar sin mtodos grficos. Por ejemplo, las tcnicas de
visualizacin se necesitan para tratar la salida de fuentes de grandes volmenes de datos como los monitores
de las computadoras, escneres de satlites y naves espaciales, telescopios de radioastronoma y escneres
mdicos. Se generan con frecuencia millones de puntos de datos a partir de soluciones numricas de simulaciones por computadora y a partir de equipos de observacin, y es difcil determinar tendencias y relaciones
mediante la simple exploracin de los datos sin tratar. De forma similar, las tcnicas de visualizacin son tiles para analizar procesos que ocurren durante un largo perodo de tiempo o que no se pueden observar directamente, tales como fenmenos mecnico-cunticos y efectos de la relatividad especial producidos por objetos
que viajan a velocidades cercanas a la de la luz. La visualizacin cientfica emplea mtodos de los grficos
por computadora, procesamiento de imgenes, visin por computadora y otras reas para mostrar visualmente, mejorar y manipular informacin para permitir una mejor comprensin de los datos. Mtodos similares
empleados por el comercio, la industria y otras reas no cientficas se denominan a veces visualizacin
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 multivariables.

Representaciones visuales de campos escalares


Una cantidad escalar es aquella que tiene un nico valor. Los conjuntos de datos escalares contienen valores
que se pueden distribuir en el tiempo, as como en el espacio, y los valores de los datos tambin pueden ser
funciones de otros parmetros escalares. Algunos ejemplos de cantidades fsicas escalares son la energa, la
densidad, la masa, la temperatura, la presin, la carga elctrica, la resistencia elctrica, la reflexividad, la frecuencia y el contenido de agua.
Un mtodo habitual para visualizar un conjunto de datos escalares consiste en utilizar grficas o diagramas que muestren la distruibucin de los valores de los datos en funcin de otros parmetros, tales como la
posicin y el tiempo. Si los datos se distribuyen sobre una superficie, podramos dibujar los valores de los
datos como barras verticales que se elevan desde la superficie, o podemos interpolar los valores de los datos
de algn otro modo en los puntos seleccionados de la superficie. Tambin se utilizan mtodos de pseudocolor para distinguir los valores diferentes del conjunto de datos escalares, y las tcnicas de codificacin de color
se pueden combinar con mtodos de grficas y diagramas. Para codificar con colores un conjunto de datos
escalares, elegimos un rango de colores y mapeamos el rango de los valores de los datos al rango de color.
Por ejemplo, el color azul se podra asignar al valor escalar ms bajo, y el color rojo se podra asignar al valor
ms elevado. La Figura 8.123 proporciona un ejemplo de un grfico de superficie codificado con color, aun-

CAP08_HEARN_1P.qxd

530

28/09/2005

12:51

Pgina 530

CAPTULO 8 Representaciones de objetos tridimensionales

FIGURA 8.123. Un grfico de superficie financiero, que muestra un crecimiento potencial de las acciones durante la cada
de la bolsa de octubre de 1987. El color rojo indica alta rentabilidad, y el grfico muestra que las acciones de bajo crecimiento se comportaron mejor en la cada. (Cortesa de Eng-Kiat Koh, Information Technology Institute, Republica de
Singapur y Encentuate, Inc., Cupertino, California.)

que la figura se muestra en escala de grises. La codificacin con color de un conjunto de datos 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. Habitualmente, 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 lneas equiespaciadas, 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 cuadrculas no regulares, pero las distribuciones no regulares de datos se convierten a menudo en cuadrculas regulares. Un algoritmo bidimensional de nivel traza las lneas 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.
m

y

FIGURA 8.124. Una cuadrcula regular y bidimensional con los valores de los
datos en las intersecciones de las lneas de la cuadrcula. Las lneas x de la cuadrcula tienen un espaciado constante x y las lneas y de la cuadrcula tienen un
espaciado constante y, en donde el espaciado segn los ejes x e y pueden no coincidir.

1
0

x

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 531

8.27 Visualizacin de conjuntos de datos

531

FIGURA 8.125. La trayectoria de una lnea de nivel


a travs de cinco celdas de la cuadrcula.

FIGURA 8.126. Grficos de nivel codificados con


color de tres conjuntos de datos dentro de la misma
regin del plano xy. (Cortesa de National Center
for Supercomputing Applications, Universidad de
Illinois en Urbana-Champaign.)

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 Spyglass, Inc.)

CAP08_HEARN_1P.qxd

532

28/09/2005

12:51

Pgina 532

CAPTULO 8 Representaciones de objetos tridimensionales

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 the 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 datos 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 cuadrcula. 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. En 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 cuadrcula 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-

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 533

8.27 Visualizacin de conjuntos de datos

533

Rayo de
pxel

Volumen
de datos

Plano de
pxeles

FIGURA 8.131. Visualizacin de volumen de una cuadrcular 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 datos del


corazn de un perro, obtenida mediante el dibujo de la distancia codificada con color al valor mximo de vxel para
cada pxel. (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 1 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.

Representaciones visuales de campos vectoriales


Una cantidad vectorial V en el espacio tridimensional tiene tres valores escalares (Vx, Vy, Vz), uno para cada
eje de coordenadas, y un vector bidimensional tiene dos componentes (Vx, Vy). Otro modo de describir una
cantidad vectorial consiste en proporcionar su mdulo |V| y su direccin como un vector unitario u. Como en
el caso de los escalares, las cantidades vectoriales pueden ser funcin de la posicin, del tiempo y de otros
parmetros. Algunos ejemplos de cantidades fsicas vectoriales son la velocidad, la aceleracin, la fuerza, la
corriente elctrica y los campos elctrico, magntico y gravitatorio.
Un modo de visualizar un campo vectorial consiste en dibujar cada punto de datos como una pequea flecha que muestra la magnitud y la direccin del vector. Este mtodo se utiliza con mayor frecuencia en seccio-

CAP08_HEARN_1P.qxd

534

28/09/2005

12:51

Pgina 534

CAPTULO 8 Representaciones de objetos tridimensionales

Ms alto
Ms bajo

FIGURA 8.133. Representacin mediante flechas de un


campo vectorial sobre secciones rectas. (Cortesa del National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)

FIGURA 8.134. Representacin mediante lneas de


campo de un conjunto de datos vectorial.

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 lneas de flujo. 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.)

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 535

8.27 Visualizacin de conjuntos de datos

535

FIGURA 8.136. Patrones retorcidos de flujo de aire, visualizados mediante lneas de flujo anchas dentro de un grfico
transparente de nivel de una tormenta. (Cortesa de Bob
Wilhelmson, Department of Atmospheric Sciences and the
National Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)

FIGURA 8.137. Patrones de flujo 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
naranja y las que caen color azul. (Cortesa de Bob Wilhelmson, Department of Atmospheric Sciences y del National
Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)

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.

Representaciones visuales de campos de tensores


Una cantidad tensorial en un espacio tridimensional tiene nueve componentes y se puede representar mediante una matriz 3 por 3. En realidad, esta representacin se utiliza para un tensor de segundo orden. Los tensores de orden ms elevado se utilizan en algunas aplicaciones, particularmente en estudios de relatividad general. Algunos ejemplos de tensores fsicos de segundo orden son la tensin de un material sometido a fuerzas
externas, la conductividad (o resistividad) de un conductor elctrico y el tensor mtrico, que proporciona las
propiedades de un espacio de coordenadas particular. El tensor presin en coordenadas cartesianas, por ejemplo, se puede representar del siguiente modo:
x

yx

zx

xy xz

y yz

zy z

(8.120)

CAP08_HEARN_1P.qxd

536

28/09/2005

12:51

Pgina 536

CAPTULO 8 Representaciones de objetos tridimensionales

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 for Supercomputing Applications,
Universidad de Illinois en Urbana-Champaign.)

Las magnitudes tensoriales se encuentran frecuentemente en materiales anisotrpicos, que presentan propiedades diferentes en distintas direcciones. Los elementos x, 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.
Las tcnicas de visualizacin para representar las seis componentes de una magnitud tensorial 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 tensorial 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).

Representaciones visuales de campos de datos multivariantes


En algunas aplicaciones, podemos querer representar valores de datos mltiples en cada punto de la cuadrcula sobre alguna regin del espacio. Estos datos a menudo contienen una mezcla de valores escalares, vectoriales y tensoriales. Como ejemplo, los datos del flujo de un fluido incluyen la velocidad del fluido, la temperatura y los valores de la densidad en cada punto tridimensional. Por tanto, tenemos que visualizar cinco
valores en cada punto, y la situacin es similar a la de la visualizacin de un campo tensorial.
Un mtodo para visualizar campos de datos multivariantes consiste en construir objetos grficos, que a
veces se denominan glifos, con partes mltiples. Cada parte de un glifo representa una magnitud fsica particular. El tamao y el color de cada parte se puede utilizar para visualizar informacin a cerca de las magnitudes escalares. Para proporcionar informacin sobre las direcciones en un campo vectorial, podemos utilizar
una cua, un cono o alguna otra forma para apuntar en la parte del glifo que representa el vector. En la Figura
8.140 se muestra un ejemplo de la visualizacin de un campo de datos multivariantes, que emplea una estructura de glifo en unos puntos seleccionados de una cuadrcula.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 537

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 Bob Haber,
the National Center 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 multivariables
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 los 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

CAP08_HEARN_1P.qxd

538

28/09/2005

12:51

Pgina 538

CAPTULO 8 Representaciones de objetos tridimensionales

TABLA 8.1. RESUMEN DE LAS FUNCIONES OpenGL PARA POLIEDROS.


Funcin

Descripcin

glutWireTetrahedron

Muestra una pirmide (tetraedro) triangular con malla de alambre.

glutSolidTetrahedron

Muestra un tetraedro con superficie sombreada.

glutWireCube

Muestra un cubo con malla de alambre.

glutSolidCube

Muestra un cubo con superficie sombreada.

glutWireOctahedron

Muestra un octaedro con malla de alambre.

glutSolidOctahedron

Muestra un octaedro con superficie sombreada.

glutWireDodecahedron

Muestra un dodecaedro con malla de alambre.

glutSolidDodecahedron

Muestra un dodecaedro con superficie sombreada.

glutWireIcosahedron

Muestra un icosaedro con malla de alambre.

glutSolidIcosahedron

Muestra un icosaedro con superficie sombreada.

un conjunto de puntos de control y las condiciones en los lmites de las secciones del spline. Las lneas que
conectan la secuencia de puntos de control forman el grafo de control, 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 los que se incluyen los splines de Hermite, cardinales y de Kochanek-Bartels. 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 control 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. Un 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 octales 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 octales 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 terreno, 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

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 539

Resumen

539

autocuadrticas 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 graftales.
Los objetos que muestran fluidez, tales como las nubes, el humo, el fuego, 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
fuerzas que actan sobre el objeto.
TABLA 8.2. RESUMEN DE FUNCIONES OpenGL PARA SUPERFICIES CUDRICAS Y SUPERFICIES CBICAS.
Funcin

Descripcin

glutWireSphere

Muestra una esfera de GLUT almbrica.

glutSolidSphere

Muestra una esfera de GLUT con superficie sombreada.

glutWireCone

Muestra un cono de GLUT almbrico.

glutSolidCone

Muestra un cono de GLUT con superficie sombreada.

glutWireTorus

Muestra un toro de GLUT de seccin recta circular con malla de


alambre.

glutSolidTorus

Muestra un toro de GLUT de seccin recta circular con superficie


sombreada.

glutWireTeapot

Muestra una tetera de GLUT almbrica.

glutSolidTeapot

Muestra una tetera de GLUT con superficie sombreada.

gluNewQuadric

Activa el sombreador de cudricas de GLU para un objeto cuyo


nombre se haya definido mediante la declaracin: GLUquadricObj
*nameOfObject;

gluQuadricDrawStyle

Selecciona un modo de visualizacin de objeto de GLU con nombre


predefinido.

gluSphere

Muestra una esfera de GLU.

gluCylinder

Muestra un cono, un cilindro o un cilindro con tapas de GLU.

gluDisk

Muestra una corona circular plana o un disco de GLU.

gluPartialDisk

Muestra una seccin de una corona circular plana o un disco de GLU.

gluDeleteQuadric

Elimina un objeto de cudrica de GLU.

gluQuadricOrientation

Define las orientaciones de dentro y fuera de un objeto de cudrica de


GLU.

gluQuadricNormals

Especifica cmo se deberan generar los vectores normales a la superficie de un objeto de cudrica de GLU.

gluQuadricCallback

Especifica una funcin de atencin a errores de un objeto de cudrica


de GLU.

CAP08_HEARN_1P.qxd

540

28/09/2005

12:51

Pgina 540

CAPTULO 8 Representaciones de objetos tridimensionales

TABLA 8.3. RESUMEN DE FUNCIONES DE BZIER DE OpenGL.


Funcin

Descripcin

glMap1

Especifica los parmetros de visualizacin de curvas de Bzier, los valores de


los colores, etc., y activa estas subrutinas empleando glEnable.

glEvalCoord1

Calcula un punto en coordenadas de una curva de Bzier.

glMapGrid1

Especifica el nmero de subdivisiones equiespaciadas entre dos parmetros de


una curva de Bzier.

glEvalMesh1

Especifica el modo de visualizacin y el rango entero de una visualizacin de


una curva de Bzier.

glMap2

Especifica los parmetros de visualizacin de superficies de Bzier, los valores


de los colores, etc., y activa estas subrutinas empleando glEnable.

glEvalCoord2

Calcula un punto en coordenadas de una superficie de Bzier.

glMapGrid2

Especifica una cuadrcula bidimensional con subdivisiones equiespaciadas


sobre una superficie de Bzier.

glEvalMesh2

Especifica el modo de visualizacin y el rango entero de una cuadrcula bidimensional de una superficie de Bzier.

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 funciones de primitivas de polgonos, tringulos y cuadrilteros. Tambin, las subrutinas de
GLUT se encuentran disponibles para mostrar los cinco poliedros regulares. Se pueden visualizar con las funciones de GLUT y GLU esferas, conos y otros objetos con superficies cudricas, y se proporciona una subrutina de GLUT 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 representaciones 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), Rogers 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.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 541

Referencias

541

TABLA 8.4. RESUMEN DE FUNCIONES OpenGL PARA SPLINES B.


Funcin

Descripcin

gluNewNurbsRenderer

Activa el sombreador de GLU para splines B para un objeto cuyo


nombre se ha definido mediante la declaracin GLUnurbsObj
*bsplineName.

gluBeginCurve

Comienza la asignacin de valores de los parmetros de una curva


especfica de una o ms secciones con splines B.

gluEndCurve

Seala el fin de las especificaciones de los parmetros de una curva


con splines B.

gluNurbsCurve

Especifica los valores de los parmetros de una seccin de una curva


con nombre con splines B.

gluDeleteNurbsRenderer

Elimina un spline B especfico.

gluNurbsProperty

Especifica las opciones de sombreado de un spline B.

gluGetNurbsProperty

Determina el valor actual de una propiedad de un spline B.

gluBeginSurface

Comienza la asignacin de valores de los parmetros de una superficie


especfica de una o ms secciones con splines B.

gluEndSurface

Seala el fin de las especificaciones de los parmetros de una superficie con splines B.

gluNurbsSurface

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.

gluNurbsCallback

Especifica la funcin de atencin a un evento para un spline B.

gluNurbsCallbackData

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, consulte Mandelbrot (1977 y 1982),
Fournier, Fussel, y Carpenter (1982), Norton (1982), Peitgen y Richter (1986), Peitgen y Saupe (1988), Hart,
Sandin, y Kauffman (1989), Koh y Hearn (1992), y Barnsley (1993). En Fournier y Reeves (1986) y en
Fowler, Meinhardt y Prusinkiewicz (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

CAP08_HEARN_1P.qxd

542

28/09/2005

12:51

Pgina 542

CAPTULO 8 Representaciones de objetos tridimensionales

y Cline (1987), Drebin, Carpenter y Hanrahan (1988), Sabella (1988), Upson y Keeler (1988), Frenkel (1989),
Nielson, Shriver y Rosenblum (1990), y Nielson (1993). En Tufte (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
(1991), Kirk (1992), Heckbert (1994), y Paeth (1995). Se pueden encontrar ejemplos de programcin adicionales de splines de Bzier, splines B y funciones para curvas de recorte con OpenGL en Woo, Neider, Davis
y Shreiner (1999). Kilgard (1996) estudia las funciones de GLUT para visualizar poliedros, superficies cudricas y la tetera de Utah. Y en Shreiner (2000) se muestra un listado completo de las funciones OpenGL de
la biblioteca del ncleo y de GLU.

EJERCICIOS
8.1

Establezca un algoritmo para convertir una esfera en una representacin mediante una malla poligonal.

8.2

Establezca un algoritmo para convertir un elipsoide en una representacin mediante una malla poligonal.

8.3

Establezca un algoritmo para convertir un cilindro en una representacin mediante una malla poligonal.

8.4

Establezca un algoritmo para convertir un superelipsoide en una representacin mediante una malla poligonal.

8.5

Establezca un algoritmo para convertir una metabola en una representacin mediante una malla poligonal.

8.6

Escriba una subrutina para visualizar una curva bidimensional con splines cardinales, que utilice un conjunto de
puntos de control del plano xy como entrada.

8.7

Escriba una subrutina para visualizar una curva bidimensional de Kochanek-Bartels, que utilice un conjunto de
puntos de control del plano xy como entrada.

8.8

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.

8.9

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.

8.10

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.

8.11

Modifique el ejemplo de la Seccin 8.10 para visualizar un curva de Bzier de grado n  1, utilizando como entrada un conjunto de n puntos de control del plano xy.

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 conjunto 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.

8.15

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.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.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 543

Ejercicios

543

8.17

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 diferencias hacia adelante para calcular los puntos de la curva.

8.18

Cules son las funciones de combinacin de una curva con splines B bidimensional, uniforme, peridica y con
d  5?

8.19

Cules son las funciones de combinacin de una curva con splines B bidimensional, uniforme, peridica y con
d  6?

8.20

Modifique el programa de ejemplo de la Seccin 8.10 para visualizar una curva con spline B bidimensional, uniforme y peridica, utilizando como entrada un conjunto de puntos de control del plano xy. Emplee diferencias
hacia adelante para calcular los puntos de la curva.

8.21

Modifique el programa del ejemplo anterior para visualizar la curva con splines B empleando funciones OpenGL.

8.22

Escriba una subrutina para visualizar cualquier cnica en el plano xy utilizando una representacin mediante un
spline racional de Bzier.

8.23

Escriba una subrutina para visualizar cualquier cnica en el plano xy utilizando una representacin mediante un
spline B racional.

8.24

Desarrolle un algoritmo para calcular el vector normal a una superfice de Bzier en un punto P(u, v).

8.25

Obtenga las expresiones para calcular las diferencias hacia delante para una curva cuadrtica.

8.26

Obtenga las expresiones para calcular las diferencias hacia delante para una curva cbica.

8.27

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.

8.28

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

Idee un algoritmo para generar objetos slidos como combinaciones de formas primitivas tridimensionales, tales
como un cubo y una esfera, empleando los mtodos de la geometra constructiva de slidos.

8.30

Modifique el algoritmo del ejercicio anterior de manera que las formas primitivas se definan con estructuras con
rboles octales.

8.31

Desarrolle un algoritmo para codificar una escena bidimensional como una representacin mediante un rbol cuaternario.

8.32

Desarrolle un algoritmo para transformar una representacin mediante rboles cuaternarios en pxeles del bfer de
imagen.

8.33

Escriba una subrutina para convertir una descripcin mediante una malla poligonal de un objeto tridimensional en
un rbol octal.

8.34

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 xy.

8.35

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.

8.36

Escriba un programa para visualizar un copo fractal de nieve (curva de Koch) para un nmero de iteraciones dado.

8.37

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?

8.38

Escriba un programa para generar curvas fractales empleando la funcin autocuadrtica f (z)  z2  , donde la
constante se especifica como entrada.

8.39

Escriba un programa que genere curvas fractales usando la funcin autocuadrtica f (z)  i(z2  1), donde i = 1 .

8.40

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.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 544

544

CAPTULO 8 Representaciones de objetos tridimensionales

8.41

Modifique el programa del ejercicio anterior para permitir que los colores y el nmero de niveles de color se proporcionen como entradas.

8.42

Modifique el programa del ejercicio anterior para seleccionar y visualizar cualquier regin frontera rectangular (el
rea de ampliacin) alrededor del conjunto de Mandelbrot.

8.43

Escriba una subrutina para implementar la inversin de puntos, Ecuacin 8.118, para un crculo y un conjunto de
puntos especficos.

8.44

Idee un conjunto de reglas de sustitucin geomtricas para alterar la forma de un tringulo equiltero.

8.45

Escriba un programa para el ejercicio anterior que muestre las etapas de la conversin del tringulo.

8.46

Escriba un programa para modelar y visualizar una esfera del plano xy que explota, utilizando un sistema de partculas.

8.47

Modifique el programa del ejercicio anterior para explotar un petardo (cilindro).

8.48

Idee una subrutina para modelar un trozo pequeo rectangular de tela como una cuadrcula de muelles idnticos.

8.49

Escriba una subrutina para visualizar un conjunto bidimensional de datos escalares empleando una representacin
mediante pseudocolor.

8.50

Escriba una subrutina para visualizar un conjunto bidimensional de datos empleando lneas de nivel.

8.51

Escriba una subrutina para visualizar un conjunto bidimensional de datos vectoriales, empleando una representacin con flechas para los valores vectoriales. Utilice una flecha de tamao fijo con diferentes codificaciones de
color.

CAP08_HEARN_1P.qxd

28/09/2005

12:51

Pgina 545

CAP09_HEARN_1P.qxd

28/09/2005

13:09

Pgina 546

CAPTULO 9

Mtodos de deteccin de
superficies visibles

Un paisaje infogrfico que muestra los rboles visibles dispuestos entorno a un claro del bosque.
(Cortesa de Thomson Digital Image, Inc.)

CAP09_HEARN_1P.qxd

9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8

28/09/2005

13:09

Pgina 547

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

9.9
9.10
9.11
9.12
9.13
9.14
9.15

Mtodos de rboles octales


Mtodo de proyeccin de rayos
Comparacin de los mtodos de deteccin
de visibilidad
Superficies curvas
Mtodos de visibilidad para imgenes
almbricas
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 tarea 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
factores 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.

9.1 CLASIFICACIN DE LOS ALGORITMOS DE DETECCIN DE SUPERFICIES


VISIBLES
Podemos clasificar los algoritmos de deteccin de superficies visibles en sentido amplio dependiendo de si
tratan con las definiciones de los objetos o con sus imgenes proyectadas. Estas dos tcnicas se denominan
mtodos del espacio de objetos y mtodos del espacio de imagen, respectivamente. Un mtodo del espacio
de objetos compara los objetos y las partes de los objetos entre s, dentro de la definicin de la escena, para
determinar qu superficies debemos etiquetar como visibles en su conjunto. En un algoritmo del espacio de
imagen, la visibilidad se decide punto a punto en cada posicin de pxel del plano de proyeccin. La mayora
de los algoritmos para deteccin de superficies visibles utilizan mtodos del espacio de imagen, aunque los
mtodos del espacio de objetos pueden usarse de manera efectiva para localizar las superficies visibles en
algunos casos. Por ejemplo, los algoritmos de visualizacin de lneas utilizan generalmente mtodos del espacio de objetos para identificar las lneas visibles en las imgenes almbricas, pero muchos algoritmos de
deteccin de superficies visibles en el espacio de imgenes pueden adaptarse fcilmente para la deteccin de
lneas visibles.

CAP09_HEARN_1P.qxd

548

28/09/2005

13:09

Pgina 548

CAPTULO 9 Mtodos de deteccin de superficies visibles

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.

9.2 DETECCIN DE CARAS POSTERIORES


Un mtodo rpido y simple en el espacio de objetos para localizar las caras posteriores de un poliedro se
basa en los tests frontal-posterior que hemos presentado en la Seccin 3.15. Un punto (x, y, z) est detrs de
una superficie poligonal si
(9.1)
Ax + By + Cz + D < 0
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 Vview es un vector en la direccin de visualizacin procedente de nuestra posicin de
cmara, como se muestra en la Figura 9.1, un polgono ser una cara posterior si,
(9.2)

Vview N > 0

Adems, si las descripciones de los objetos han sido convertidas a coordenadas de proyeccin y nuestra
direccin de visualizacin es paralela al eje zv, slo ser necesario tener en cuenta la componente z del vector
normal N.
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 zv 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. As, en general, podemos etiquetar cualquier polgono como una cara posterior si su vector normal
tiene una componente z cuyo valor satisfaga la desigualdad:
C0

(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, B, 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 9.1 continuar entonces siendo vlida para los puntos situados detrs del

N  (A, B, C)

FIGURA 9.1. Un vector normal de superficie N y el vector de direccin


de visualizacin Vview.

Vview

CAP09_HEARN_1P.qxd

28/09/2005

13:09

Pgina 549

9.3 Mtodo del bfer de profundidad

N  (A, B, C)

549

yv
xv
Vview
zv

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 zv negativo.

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 zv positivo.
Examinando el parmetro C para 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 o 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.

9.3 MTODO DEL BFER DE PROFUNDIDAD


Una tcnica del espacio de imagen comnmente utilizada para la deteccin de superficies visibles es el mtodo del bfer de profundidad, que compara los valores de profundidad de las superficies en una escena para
cada posicin de pxel sobre el plano de proyeccin. Cada superficie de la escena se procesa por separado,
procesando una posicin de pxel de la superficie cada vez. El algoritmo se suele aplicar nicamente a aquellas escenas que slo contienen superficies poligonales, porque los valores de profundidad pueden calcularse
muy rpidamente y el mtodo resulta fcil de implementar. Pero tambin podramos aplicar los mismos procedimientos a superficies no planas. Esta tcnica de deteccin de visibilidad tambin se denomina frecuentemente como mtodo del bfer z, ya que la profundidad del objeto se suele medir a lo largo del eje z de un
sistema de visualizacin.
La Figura 9.4 muestra tres superficies situadas a distancias diferentes segn la lnea de proyeccin ortogrfica que va del punto (x, y) al plano de visualizacin. Estas superficies pueden procesarse en cualquier
orden. A medida que se procesa cada superficie, su profundidad con respecto al plano de visualizacin se compara con las superficies previamente procesadas. Si una superficie est ms prxima que todas las anteriormente procesadas, se calcula y almacena su color de superficie, junto con su profundidad. Las superficies
visibles de una escena estarn representadas por el conjunto de colores de superficie que estn almacenados

CAP09_HEARN_1P.qxd

550

28/09/2005

13:09

Pgina 550

CAPTULO 9 Mtodos de deteccin de superficies visibles

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.
Como el nombre de este mtodo indica, se requieren dos zonas de bfer. Se utiliza un bfer de profundidad para almacenar los valores de profundidad de cada posicin (x, 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.
Inicialmente, 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 lnea en lnea, calculando el valor de
profundidad en cada posicin de pxel (x, 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.

Algoritmo del bfer de profundidad


1. Inicializar el bfer de profundidad y el bfer de imagen de modo que para todas las posiciones de
bfer (x, y),
depthBuff (x, y) = 1.0, frameBuff (x, y) = backgndColor

2. Procesar cada polgono de una escena consecutivamente.


Para cada posicin de pxel (x, y) proyectada de un polgono, calcular la profundidad z (si no
se conoce ya).
Si z < depthBuff (x, y), calcular el color de superficie para dicha posicin y hacer
depthBuff (x, y) = z, frameBuff (x, y) = surfColor (x, y)

Despus de que todas las superficies hayan sido procesadas, el bfer de profundidad contendr los
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. En la posicin de superficie
(x, y), la profundidad se calcula a partir de la ecuacin del plano:
z=

Ax By D
C

(9.4)

Para cualquier lnea de barrido (Figura 9.5) las posiciones x horizontales adyacentes para lnea difieren en
1 y los valores verticales y en lneas de barrido adyacentes difieren en 1. Si la profundidad de la posicin
(x, y) es z, entonces la profundidad z de la siguiente posicin (x + 1, y) de la lnea de barrido se obtendr a
partir de la Ecuacin 9.4 como:

CAP09_HEARN_1P.qxd

28/09/2005

13:09

Pgina 551

9.3 Mtodo del bfer de profundidad

551

S3

S2

Plano de
visualizacin
S1

(x, y)

yv

xv

zv

FIGURA 9.4. Tres superficies que se solapan para la posicin de pxel (x, y) del plano de visualizacin. La superficie visible S1, tiene el menor de los valores de profundidad.

z =

A( x + 1) By D
C

(9.5)

o
z = z

A
C

(9.6)

El cociente 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

1
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,

y
y1

x x1

Figura 9.5. A partir de la posicin (x, y) en una lnea de barrido, la siguiente posicin de la lnea tiene las coordenadas (x  1, y) y la posicin situada inmediatamente debajo en la siguiente lnea de barrido tiene coordenadas (x, y 1).

CAP09_HEARN_1P.qxd

552

28/09/2005

13:09

Pgina 552

CAPTULO 9 Mtodos de deteccin de superficies visibles


lnea de barrido superior
lnea de barrido y

interseccin con
arista izquierda

lnea de barrido inferior

FIGURA 9.6.

Lneas de barrido que intersectan una cara poligonal.

lnea de barrrido y
lnea de barrido y 1

x x

FIGURA 9.7. Posiciones de interseccin en lneas de barrido sucesivas a lo largo de una arista izquierda de un polgono.

z = z +

A/m+ B
C

(9.7)

Si el procesamiento se efecta descendiendo por una arista vertical, la pendiente es infinita y los clculos
recursivos se reducen a:
B
z = z +
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 bfer 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.

CAP09_HEARN_1P.qxd

28/09/2005

13:09

Pgina 553

9.4 Mtodo del bfer A

553

9.4 MTODO DEL BFER A


Una extensin de los conceptos del bfer de profundidad es el algoritmo de bfer A (letra situada en el otro
extremo del alfabeto con respecto al bfer z, donde z representa la profundidad). Esta extensin del bfer
de profundidad es un mtodo de deteccin de visibilidad, promediado de rea y antialiasing desarrollado en
Lucasfilm Studios para su inclusin en el sistema de representacin de superficies denominado REYES (un
acrnimo de Renders Everything You Ever Saw, que podra traducirse por capaz de representar cualquier
cosa que hayas visto). La regin de bfer para este algoritmo se denomina bfer de acumulacin, porque se
utiliza para almacenar diversos datos de la superficie, adems de los valores de profundidad.
Una desventaja del mtodo del bfer de profundidad es que identifica nicamente una superficie visible
en cada posicin de pxel. En otras palabras, slo es capaz de manejar superficies opacas y no puede acumular valores de color para ms de una superficie, tal como hace falta si se quieren representar superficies transparentes (Figura 9.8). El mtodo del bfer A extiende el algoritmo del bfer de profundidad para que cada
posicin del bfer pueda hacer referencia a una lista enlazada de superficies. Esto permite calcular un color
de pxel como combinacin de diferentes colores de superficie, para aplicar efectos de transparencia o de
antialiasing.
Cada posicin del bfer A tiene dos campos:
Campo de profundidad: almacena un nmero real (positivo, negativo o cero).
Campo de datos de la superficie: almacena datos de la superficie o un puntero.
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

superficie
transparente de
primer plano

profundidad  0

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.

RGB y otra
informacin
(a)

profundidad  0

info
Superf1

info
Superf2



(b)

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 pxel, 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).

CAP09_HEARN_1P.qxd

554

28/09/2005

13:09

Pgina 554

CAPTULO 9 Mtodos de deteccin de superficies visibles

componentes 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 implementarse 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 los 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.

9.5 MTODO DE LA LNEA DE BARRIDO


Este mtodo del espacio de imagen para la identificacin de superficies visibles calcula y compara los valores de profundidad a lo largo de las diversas lneas de barrido de una escena. A medida que se procesa cada
lnea de barrido, se examinan todas las proyecciones de superficies poligonales que intersectan dicha lnea
para determinar cules son visibles. A lo largo de cada lnea de barrido, se realizan clculos de profundidad
para determinar qu superficie est ms prxima al plano de visualizacin en cada posicin de pxel. Una vez
determinada la superficie visible para un pxel, se introduce el color de superficie correspondiente a dicha
posicin en el bfer de imagen.
Las superficies se procesan utilizando la informacin almacenada en la tabla de polgonos (Seccin 3.15).
La tabla de aristas contiene las coordenadas de los extremos de cada lnea en la escena, la inversa de la pendiente de cada lnea y punteros a la tabla de caras de la superficie con el fin de identificar las superficies delimitadas por cada lnea. La tabla de caras de la superficie contiene los coeficientes del plano, las propiedades
del material de la superficie, otros datos de la superficie y posiblemente punteros a la tabla de aristas. Para
facilitar la bsqueda de las superficies que cruzan una determinada lnea de barrido, se forma una lista de aristas activas para cada lnea de barrido a medida que sta es procesada. La lista de aristas activas contiene nicamente aquellas aristas que cruzan la lnea de barrido actual, ordenadas en sentido ascendente segn la
coordenada x. Adems, se define un indicador para cada superficie que se configura como on u off para
indicar si una posicin de una lnea de barrido est dentro o fuera de la superficie. Las posiciones de pxel de
cada lnea de barrido se procesan de izquierda a derecha. En la interseccin de la izquierda con la proyeccin
de un polgono convexo, se pone a on el indicador de la superficie, ponindose luego a off en el punto
de interseccin derecho a lo largo de la lnea de barrido. Para un polgono cncavo, las intersecciones de la
lnea de barrido pueden ordenarse de derecha a izquierda, poniendo el indicador de superficie a on entre
cada par de intersecciones.
La Figura 9.10 ilustra el mtodo de la lnea de barrido para la localizacin de las partes visibles de las
superficies para cada posicin de pxel de una lnea de barrido. La lista activa para la lnea de barrido 1 contiene informacin extrada de la tabla de aristas y correspondiente a las aristas AB, BC, EH y FG. Para las
posiciones a lo largo de esta lnea de barrido entre las aristas AB y BC, slo estar activado el indicador de la
superficie S1. Por tanto, no hacen falta clculos de profundidad y los valores de color se determinan a partir
de las propiedades y de las condiciones de iluminacin de la superficie S1. De forma similar, entre las aristas
EH y FG slo est activado el indicador de la superficie S2. No hay ninguna otra posicin de pxel a lo largo
de la lnea de barrido 1 que intersecte ninguna superficie, por lo que el color de dichos pxeles ser el color
de fondo, que puede cargarse en el bfer de imagen como parte de la rutina de inicializacin.

CAP09_HEARN_1P.qxd

28/09/2005

13:09

Pgina 555

9.5 Mtodo de la lnea de barrido

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 S1, 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 S1 es menor que la de S2, por lo que se asignarn los valores de color de la superficie S1 a todos los
pxeles de la lnea de barrido hasta encontrar la arista BC. Entonces, el indicador de superficie de S1 se desactiva, almacenndose los colores correspondientes a la superficie S2 hasta alcanzar la arista FG. Ya no hacen
falta ms clculos de profundidad, porque asumimos que la superficie S2 permanece detrs de S1 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 S1 sin necesidad de clculos adicionales de profundidad.
yv
B
E
A

S1

S2

Lnea de
barrido 1
Lnea de
barrido 2
Lnea de
barrido 3

C
D

G
xv

FIGURA 9.10. Lneas de barrido que cruzan la proyeccin de dos superficies S1 y S2 sobre el plano de visualizacin. Las
lneas punteadas indican los contornos de secciones ocultas de una superficie.

Lnea
subdivisora

(a)

Lnea
subdivisora

Lnea
subdivisora

(b)

(c)

FIGURA 9.11. Superficies solapadas que se intersectan o que se superponen de forma cclica y que se ocultan alternativamente unas a otras.

CAP09_HEARN_1P.qxd

556

28/09/2005

13:09

Pgina 556

CAPTULO 9 Mtodos de deteccin de superficies visibles

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.11). 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 MTODO DE ORDENACIN DE LA PROFUNDIDAD


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)
Se ordenan las superficies en orden decreciente de profundidades.
(2)
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 los 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 z, 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 es la superficie ms distante y se procede a digitalizarla. La Figura 9.12 muestra dos superficies que se solapan en el plano xy, 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
S. 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)
Los rectngulos de contorno (extensiones de coordenadas) en las direcciones xy de las dos superficies
no se solapan.
(2)
La superficie S est completamente detrs de la superficie solapada, en relacin con la posicin de
visualizacin.
(3)
La superficie solapada est completamente delante de S en relacin con la posicin de visualizacin.
(4)
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 salta a la siguiente superficie solapada en cuanto se detecte que alguno de los tests es cierto. Si todas las superficies solapadas pasan al menos uno de estos tests, S ser

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 557

9.6 Mtodo de ordenacin de la profundidad

557

zmax
S
zmin
zmax
S
zmin
xv

zv

FIGURA 9.12. Dos superficies sin solapamiento de profundidad.

S
S
S

xmin

S
xmax

xmin

xmax

xv

xv

zv

FIGURA 9.13. Dos superficies con solapamiento de


profundidad pero que no se solapan en la direccin x.

zv

FIGURA 9.14. La superficie S est completamente


detrs de la superficie solapada S.

la superficie ms distante, no siendo necesario efectuar ninguna reordenacin y pudiendo por tanto digitalizar S.
El test 1 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 S estn en la parte posterior de S (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 S no est completamente detrs de S(el 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 S y 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

CAP09_HEARN_1P.qxd

558

28/09/2005

13:10

Pgina 558

CAPTULO 9 Mtodos de deteccin de superficies visibles

S
xv

zv

(a)

FIGURA 9.15. La superficie solapada


S est completamente delante de la
superficie S, pero sta no est completamente detrs de S.

S

(b)

FIGURA 9.16. Dos superficies poligonales con rectngulos de contorno solapados en el plano xy.
S

S

xv

xv
zv

FIGURA 9.17. La superficie S llega hasta una profundidad mayor, pero tapa completamente a la superficie
S.

S

zv

FIGURA 9.18. Tres superficies que han sido introducidas en la lista ordenada de superficies con el orden S,
S, S y que deben reordenarse como S, S, S.

alejada del plano de visualizacin. La Figura 9.18 ilustra una situacin en la que primero intercambiaramos
S y S. Pero como S oculta parte 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 partes para eliminar los solapamientos cclicos. La superficie original se sustituye entonces por las dos nuevas superficies y el procesamiento contina como antes.

9.7 MTODO DEL RBOL BSP


Un rbol de particionamiento del espacio binario (BSP, binary space-partitioning) es un mtodo eficiente
para determinar la visibilidad de los objetos pintando las superficies en el bfer de imagen desde atrs hacia
adelante, como en el algoritmo del pintor. El rbol BSP resulta particularmente til cuando el punto de referencia de visualizacin cambia pero los objetos de la escena se encuentran en posiciones fijas.
Aplicar un rbol BSP a las comprobaciones de visibilidad implica identificar las superficies que se encuentren detrs o delante del plano de particionamiento en cada paso de subdivisin del espacio, con respecto a la

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 559

9.8 Mtodo de la subdivisin de reas


P2

559

P1

C
D
A

frontal
posterior

posterior
frontal

(a)

P1
frontal

posterior

P2
frontal
A

P2
posterior frontal
B

C
(b)

posterior
D

FIGURA 9.19. Una regin del espacio (a) se particiona con dos
planos P1 y P2 para formar la representacin en rbol BSP que se
muestra en (b).

direccin de visualizacin. La Figura 9.19 ilustra el concepto bsico de este algoritmo. Con el plano P1, primero particionamos el espacio en dos conjuntos de objetos. Uno de los conjuntos de objetos se encuentra
detrs del plano P1 en relacin con la direccin de visualizacin, mientras que el otro conjunto se encuentra
delante de P1. Puesto que hay un objeto intersectado por el plano P1, dividimos dicho objeto en dos objetos
separados, etiquetados como A y B. Los objetos A y C estn delante de P1, mientras que los objetos B y D se
encuentran detrs de P1. A continuacin, particionamos de nuevo el espacio en el plano P2 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 particionamiento
coincidan con planos de las superficies poligonales. Entonces se utilizan las ecuaciones de los polgonos para
identificar los polgonos frontales y posteriores y el rbol se construye utilizando el plano de particionamiento para cada cara poligonal. Todo polgono intersectado por un plano de particionamiento ser dividido en dos
partes. 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 por
las 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 implementaciones rpidas en hardware para construir y procesar rboles BSP.

9.8 MTODO DE LA SUBDIVISIN DE REAS


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-

CAP09_HEARN_1P.qxd

560

28/09/2005

13:10

Pgina 560

CAPTULO 9 Mtodos de deteccin de superficies visibles

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 pxel.
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 pxel.
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).
Superficie circundante: una superficie que encierra completamente el rea.
Superficie 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: un rea no tiene superficies interiores, solapadas o circundantes (todas las superficies
estn fuera del rea).
Condicin 2: un rea slo tiene una superficie interior, solapada o circundante.
Condicin 3: 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 tamao en


cada paso.

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 561

9.8 Mtodo de la subdivisin de reas

Superficie
circundante

Superficie
solapada

Superficie
interior

561

Superficie
exterior

FIGURA 9.21. Posibles relaciones entre las superficies poligonales y una seccin rectangular del plano de visualizacin.

zmax
(Superficie
circundante)
zv

rea

xv

FIGURA 9.22. Dentro de un rea especificada, una superficie circundante con


una profundidad mxima zmax oculta todas las dems superficies que tienen una
profundidad mnima mayor que zmax.

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 visualizacin. 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 visualizacin 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 e interiores. Si 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 pxel, 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.
Como variacin del proceso de subdivisin bsico, podramos subdividir las reas segn los contornos 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 A1 y A2. Entonces, la superficie S
ser una superficie circundante para A1 y pueden comprobarse las condiciones de visibilidad 2 y 3 para deter-

CAP09_HEARN_1P.qxd

562

28/09/2005

13:10

Pgina 562

CAPTULO 9 Mtodos de deteccin de superficies visibles


yv

S
rea A

A2
A1

FIGURA 9.23. El rea A se subdivide en A1 y A2


utilizando el contorno de la superficie S sobre el
plano de visualizacin.

xv

zv

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.

9.9 MTODOS DE RBOLES OCTALES


Cuando se utiliza una representacin en rbol octal para el volumen de visualizacin, la identificacin de las
superficies visibles se lleva a cabo explorando los nodos del rbol octal en orden de parte frontal a parte trasera. En la Figura 9.24, el primer plano de una escena est contenido en los octantes 0, 1, 2 y 3. Las superficies en la parte frontal de estos octantes son visibles para el observador. Las superficies situadas en la parte
posterior de los octantes frontales o en los octantes posteriores (4, 5, 6 y 7) pueden estar ocultas por las superficies frontales.
Podemos procesar los nodos del rbol octal de la Figura 9.24 en el orden 0, 1, 2, 3, 4, 5, 6, 7. Esto da como
resultado un recorrido del rbol octal que se realiza primero segn el orden de profundidad, visitndose los
nodos de los cuatro suboctantes frontales del octante 0 antes que los nodos de los cuatro suboctantes posteriores. El recorrido del rbol octal contina en este orden para cada subdivisin de los octantes.
6
5
4
1
0
7

2
3

FIGURA 9.24. Los objetos de los octantes 0, 1, 2 y 3 ocultan a los objetos de los octantes posteriores (4, 5, 6, 7) cuando la direccin de visualizacin es como se muestra.

Octantes
numerados
de una regin
Direccin de
visualizacin

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 563

9.10 Mtodo de proyeccin de rayos

563

6
5
4

1
0
7

2
3

Octantes en el espacio

Cuadrantes para el
plano de visualizacin

FIGURA 9.25. Divisin en octantes 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 octantes en una regin del espacio y los correspondientes cuadrantes en el
plano de visualizacin. Las contribuciones al cuadrante 0 vienen de los cuadrantes 0 y 4. Los valores de color
del cuadrante 1 se obtienen a partir de las superficies de los octantes 1 y 5 y los valores de cada uno de los
otros 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 octante
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 octante posterior y otra para el octante frontal.
Puede obtenerse diferentes vistas de objetos representados como rboles octales aplicando transformaciones a la representacin en rbol que hagan que se reoriente el objeto de acuerdo con la vista seleccionada. Los
octantes 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.

9.10 MTODO DE PROYECCIN DE RAYOS


Si consideramos la lnea de visin que atraviesa una escena partiendo de una posicin de pxel en el plano de
visualizacin, como en la Figura 9.26, podemos determinar qu objetos de una escena intersectan dicha lnea
(si es que hay alguna). Despus de calcular todas las intersecciones entre el rayo y las superficies, identificaremos la superficie visible como aquella cuyo punto de interseccin est ms prximo al pxel. Este esquema
de deteccin de visibilidad utiliza procedimientos de proyeccin de rayos que ya hemos presentado en la
Seccin 8.20. La proyeccin de rayos, como herramienta de deteccin de visibilidad, est basada en mtodos
de ptica geomtrica que trazan los trayectos de los rayos luminosos. Puesto que hay un nmero infinito de
rayos luminosos en una escena y slo nos interesan aquellos que pasan a travs de las posiciones de los pxe-

CAP09_HEARN_1P.qxd

564

28/09/2005

13:10

Pgina 564

CAPTULO 9 Mtodos de deteccin de superficies visibles

pxel

FIGURA 9.26. Un rayo trazado a lo largo de la lnea de visin que


atraviesa una escena partiendo de una posicin de pxel.

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.

9.11 COMPARACIN DE LOS MTODOS DE DETECCIN DE VISIBILIDAD


La efectividad de un mtodo de deteccin de superficies visibles depende de las caractersticas de cada aplicacin concreta. Si las superficies de una escena estn ampliamente distribuidas a lo largo de la direccin de
visualizacin, por lo que hay muy poco solapamiento en profundidad, lo ms eficiente suele ser utilizar un
algoritmo de ordenacin de profundidad o de rbol BSP. Cuando hay pocos solapamientos de las proyecciones de las superficies sobre el plano de visualizacin, los algoritmos de lneas de barrido o de subdivisin de
reas constituyen una forma rpida de localizar las superficies visibles.
Como regla general, el algoritmo de ordenacin de profundidades o el mtodo del rbol BSP constituyen
tcnicas altamente efectivas para aquellas escenas que slo tengan unas pocas superficies. Esto se debe a que
dichas escenas suelen tener pocas superficies que se solapen en profundidad. El mtodo de la lnea de barrido tambin funciona bien cuando una escena contiene un pequeo nmero de superficies. Podemos utilizar
los mtodos de la lnea de barrido, de ordenacin de profundidades o del rbol BSP para identificar las superficies visibles de manera efectiva en escenas que tengan hasta unos pocos miles de superficies poligonales.
Con escenas que contengan un nmero mayor de superficies, los mtodos ms adecuados son el del bfer de

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 565

9.12 Superficies curvas

565

profundidad o el del rbol octal. 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 de 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 visualizacin. Si una escena contiene superficies curvas, podemos
utilizar los mtodos del rbol octal o de proyeccin de rayos para identificar las partes 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 octales es que almacenan ms informacin
que simplemente la geometra de la superficie. Tenemos disponible toda la regin slida de un objeto para la
visualizacin, 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.

9.12 SUPERFICIES CURVAS


Los mtodos ms eficientes para determinar la visibilidad de objetos con superficies curvas son la proyeccin
de rayos y los mtodos basados en rbol octal. Con la proyeccin de rayos, calculamos las intersecciones entre
los rayos y las superficies y localizamos la distancia de interseccin ms pequea a lo largo del trayecto del
rayo. Con los rboles octales, simplemente exploramos los nodos de adelante hacia atrs para localizar los
valores de color de superficie. Una vez definida una representacin en un rbol octal a partir de las definiciones de entrada de los objetos, todas las superficies visibles se identifican con el mismo tipo de procesamiento. No es necesario realizar ningn tipo especial de consideracin para diferentes tipos de superficies, ya sean
curvas o de cualquier otra clase.
Una superficie curva tambin puede aproximarse mediante una malla poligonal, y entonces podemos utilizar algunos de los mtodos de identificacin de superficies visibles previamente expuestos. Pero para algunos objetos, como las esferas, puede que sea ms eficiente, adems de ms preciso utilizar el mtodo de
proyeccin de rayos y las ecuaciones que describen la superficie curva.

Representacin de superficies curvas


Podemos representar una superficie como una ecuacin implcita de la forma f (x, y, z) = 0 o con una representacin paramtrica (Apndice A). Las superficies de tipo spline, por ejemplo, se suelen describir mediante ecuaciones paramtricas. En algunos casos, resulta til obtener una ecuacin explcita de la superficie,
como por ejemplo una ecuacin que nos de la altura con respecto a un plano de tierra xy:
z  f (x, y)
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 implementaciones hardware de gran velocidad, para resolver las ecuaciones de interseccin con superficies curvas para los
objetos ms comnmente utilizados.

CAP09_HEARN_1P.qxd

566

28/09/2005

13:10

Pgina 566

CAPTULO 9 Mtodos de deteccin de superficies visibles

Diagramas de contorno de superficies


Para muchas aplicaciones en Matemticas, Fsica, Ingeniera y otros campos, resulta til mostrar una funcin
de superficie mediante un conjunto de lneas de contorno que muestren la forma de la superficie. La superficie puede describirse mediante una ecuacin o mediante tablas de datos, como por ejemplo datos topogrficos sobre las elevaciones del terreno o datos de densidad de poblacin. Con una representacin funcional
explcita, podemos dibujar las lneas de contorno de las superficies visibles y eliminar aquellas secciones de
contorno que estn ocultas por las partes visibles de la superficie.
Para obtener un diagrama xy de una superficie de una funcin, podemos escribir la representacin de la
superficie en la forma:
y  f (x, z)

(9.8)

Entonces, podemos dibujar una curva en el plano xy para los valores de z que caigan dentro del rango
seleccionado, utilizando un intervalo especificado z. Comenzando con el valor mayor de z, dibujamos las
curvas desde atrs hacia adelante y eliminamos 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, tomamos
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 ymin y ymax 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 ymin y ymax para el siguiente pxel. Si ymin y ymax, 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 nx por ny 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 contorno 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 lneas de contorno previamente dibujadas (visibles).

9.13 MTODOS DE VISIBILIDAD PARA IMGENES ALMBRICAS


Las escenas no suelen contener secciones de lnea aisladas, a menos que estemos mostrando un grafo, un diagrama o un esquema de una red. Pero a menudo surge la necesidad de ver una escena tridimensional en esbozo, con el fin de hacerse una idea rpida de las caractersticas de los objetos. La forma ms rpida de generar
una vista almbrica de una escena consiste en mostrar los bordes de todos los objetos. Sin embargo, puede
resultar difcil determinar la posicin frontal o posterior de los objetos en ese tipo de imagen. Una solucin a
este problema consiste en aplicar tcnicas de regulacin de la intensidad del color segn la profundidad, de
modo que la intensidad mostrada de una lnea est en funcin de la distancia con respecto al observador.
Alternativamente, podemos aplicar tests de visibilidad, de modo que las secciones de lnea oculta se eliminen
o se muestren con unas propiedades distintas de las de las aristas visibles. Los procedimientos para determinar la visibilidad de las aristas de los objetos se denominan mtodos de visibilidad almbrica. Tambin se
llaman mtodos de deteccin de lneas visibles o mtodos de deteccin de lneas ocultas. Adems tambin
pueden usarse algunos de los mtodos de determinacin de superficies visibles analizados en la seccin anterior para comprobar la visibilidad de las aristas.

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 567

9.13 Mtodos de visibilidad para imgenes almbricas

567

FIGURA 9.27. Una grfica de contorno de superficie


con codificacin de colores. (Cortesa de Los Alamos
National Laboratory.)

Algoritmos de visibilidad de superficies para representaciones almbricas


Una tcnica directa para identificar las secciones de lnea visibles consiste en comparar las posiciones de las
aristas con las posiciones de las superficies en una escena. Este proceso implica la utilizacin de los mismos
mtodos que se usan en los algoritmos de recorte de lneas. Es decir, comprobamos la posicin de los extremos de la lnea con respecto al contorno de un rea especificada pero en el caso de la comprobacin de visibilidad tambin necesitamos comparar los valores de profundidad de la arista y de la superficie. Cuando
ambos extremos proyectados de un segmento de lnea caen dentro del rea proyectada de una superficie, comparamos la profundidad de los extremos con la de la superficie en dichas posiciones (x, y). Si ambos extremos
estn detrs de la superficie, se trata de una arista oculta. Si ambos extremos estn delante de la superficie, la
arista ser visible con respecto a esa superficie. En caso contrario, debemos calcular los puntos de interseccin y determinar los valores de profundidad en dichos puntos de interseccin. Si la arista tiene una mayor
facilidad que la superficie en las intersecciones correspondientes al permetro, parte de la arista estar oculta
por la superficie, como en la Figura 9.28(a). Otra posibilidad es que una arista tenga una mayor profundidad
en la interseccin con una de las lneas de contorno y una menor profundidad que la superficie en la interseccin con otra lnea de contorno (suponiendo que las superficies sean convexas). En dicho caso, tendremos que
determinar si la arista penetra por el interior de la superficie, como en la Figura 9.28(b). Una vez identificada una seccin oculta de una arista, podemos eliminarla, mostrarla en forma de lnea punteada o utilizar alguna otra caracterstica para distinguirla de las secciones visibles.
Algunos de los mtodos de deteccin de superficies visibles pueden adaptarse fcilmente a las pruebas de
visibilidad para visualizacin almbrica de las aristas de los objetos. Utilizando un mtodo de la cara posterior, podramos identificar todas las superficies traseras de un objeto y mostrar nicamente los contornos de
las superficies visibles. Con la ordenacin de profundidad, podemos pintar las superficies en el bfer de
refresco de modo que los interiores de las superficies estn en el color de fondo mientras que el contorno se
dibuja en el color de primer plano. Procesando las superficies desde atrs hacia adelante, las lneas ocultas
sern borradas por las superficies ms prximas. Un mtodo de subdivisin de reas puede adaptarse para la
eliminacin de lneas ocultas mostrando nicamente los contornos de las superficies visibles. Finalmente, los
mtodos de lneas de barrido pueden utilizarse para mostrar las posiciones de interseccin de las lneas de
barrido con los contornos de las superficies visibles.

Algoritmo de variacin de intensidad con la profundidad para representaciones almbricas


Otro mtodo para mostrar la informacin de visibilidad consiste en variar el brillo de los objetos de una escena en funcin de su distancia con respecto a la posicin de visualizacin. Este mtodo de variacin de la
intensidad con la profundidad se suele aplicar utilizando la funcin lineal:

CAP09_HEARN_1P.qxd

568

28/09/2005

13:10

Pgina 568

CAPTULO 9 Mtodos de deteccin de superficies visibles

(a)

(b)

FIGURA 9.28. Secciones de lnea ocultas (discontinuas) de una lnea (a) que tiene mayor profundidad que una superficie
y una lnea (b) que est parcialmente detrs de una superficie y parcialmente delante de la misma.

fdepth (d ) =

dmax d
dmax dmin

(9.9)

donde d es la distancia de un punto con respecto a la posicin de visualizacin. Los valores de profundidad
mnima y mxima, dmin y dmax, 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: dmin = 0.0 y dmax = 1.0. A medida que se procesa cada posicin de pxel, su color se multiplica por
fdepth(d). As, los puntos ms prximos se mostrarn con intensidades mayores y los puntos de profundidad
mxima tendrn una intensidad igual a cero.
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.

9.14 FUNCIONES O pen GL DE DETECCIN DE VISIBILIDAD


Podemos aplicar a nuestras escenas tanto el mtodo de eliminacin de caras ocultas como las pruebas de visibilidad basadas en bfer z utilizando funciones incluidas en la biblioteca bsica de OpenGL. Adems, podemos utilizar funciones OpenGL para construir una imagen almbrica de una escena en la que se hayan
eliminado las lneas ocultas, o bien podemos mostrar las escenas con mecanismos de variacin de la intensidad en funcin de la profundidad.

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 569

9.14 Funciones OpenGL de deteccin de visibilidad

569

Funciones OpenGL de eliminacin de polgonos


La eliminacin de caras posteriores se lleva a cabo mediante las funciones,
glEnable (GL_CULL_FACE);
glCullFace (mode);

donde al parmetro mode se le asigna el valor GL_BACK. 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 GL_FRONT o podramos cambiar la definicin de qu cara de los polgonos es la frontal
utilizando la funcin glFrontFace 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 GL_FRONT_AND_BACK.
De manera predeterminada, el parmetro mode en la funcin glCullFace tiene el valor GL_BACK. Por
tanto, si activamos la eliminacin de caras posteriores mediante la funcin glEnable sin invocar explcitamente la funcin glCullFace, se eliminarn las caras posteriores de la escena. La rutina de eliminacin se
desactiva mediante,
glDisable (GL_CULL_FACE);

Funciones OpenGL de gestin del bfer de profundidad


Para usar las rutinas OpenGL de deteccin de visibilidad mediante bfer de profundidad, primero necesitamos modificar la funcin de inicializacin GLUT para que el modo de visualizacin incluya una solicitud de
configuracin del bfer de profundidad, adems de la del bfer de refresco. Podemos hacer esto, por ejemplo,
con la instruccin,
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

Los valores del bfer de profundidad pueden entonces inicializarse mediante,


glClear (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
1.0 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);

CAP09_HEARN_1P.qxd

570

28/09/2005

13:10

Pgina 570

CAPTULO 9 Mtodos de deteccin de superficies visibles

Al 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 glClear (GL_DEPTH_BUFFER_BIT). En caso contrario, el bfer de profundidad se inicializar 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 ajustar estos valores de normalizacin con,
glDepthRange (nearNormDepth, farNormDepth);

De manera predeterminada nearNormDepth = 0.0 y farNormDepth = 1.0, pero con la funcin


glDepthRange 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
glDepthRange, podemos restringir las comprobaciones de bfer en profundidad a cualquier regin del volumen de visualizacin, 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 testCondition cualquiera de las siguientes ocho constantes simblicas:
GL_LESS, GL_GREATER, GL_EQUAL, GL_NOTEQUAL, GL_LEQUAL, GL_GEQUAL, GL_NEVER (no se procesa
ningn punto), GL_ALWAYS (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 testCondition es GL_LESS, 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 pxel.
Tambin podemos establecer el estado del bfer de profundidad, configurndolo como de slo lectura o
de lectura-escritura. Esto se realiza mediante la funcin:
glDepthMask (writeStatus);

Cuando writeStatus = GL_TRUE (el valor predeterminado), podemos tanto leer como escribir en el
bfer de profundidad. Con writeStatus = 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).

Mtodos OpenGL para visibilidad de superficies en representaciones almbricas


En OpenGL, podemos obtener una visualizacin almbrica de un objeto grfico estndar solicitando que slo se
generen sus aristas. Podemos hacer esto utilizando la funcin de modo poligonal (Seccin 4.14), por ejemplo:

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 571

9.15 Resumen

571

glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);

pero esto 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.14. 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 (GL_DEPTH_TEST);
glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
glColor3f (1.0, 1.0, 1.0);
\* Invocar la rutina de descripcin del objeto. */
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
glEnable (GL_POLYGON_OFFSET_FILL);
glPolygonOffset (1.0, 1.0);
glColor3f (0.0, 0.0, 0.0);
\* Invocar de nuevo la rutina de descripcin del objeto. */
glDisable (GL_POLYGON_OFFSET_FILL);

Funcin OpenGL para variacin de la intensidad con la profundidad


Podemos variar el brillo de un objeto en funcin de su distancia a la posicin de visualizacin mediante,
glEnable (GL_FOG);
glFogi (GL_FOG_MODE, GL_ LINEAR);

Esto aplica la funcin de profundidad lineal de la Ecuacin 9.9 a los colores de los objetos utilizando
dmin = 0.0 y dmax = 1.0. Pero podemos establecer diferentes valores para dmin y dmax mediante las siguientes
llamadas a funcin:
glFogf (GL_FOG_START, minDepth);
glFogf (GL_FOG_END, maxDepth);

En estas dos funciones, a los parmetros minDepth 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 glFog 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 deteccin de caras posteriores elimina todas las superficies ocultas, pero en
general la deteccin de caras posteriores no puede identificar todas las superficies ocultas completamente.

CAP09_HEARN_1P.qxd

572

28/09/2005

13:10

Pgina 572

CAPTULO 9 Mtodos de deteccin de superficies visibles

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 pxeles 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 lnea 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 octales. Las superficies visibles tambin pueden detectarse 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 lneas proyectadas. Los mtodos de proyeccin de rayos
son un caso particular de los algoritmos de trazado de rayos, que permiten mostrar los sistemas con efectos
globales de iluminacin.
Los mtodos de deteccin 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

Descripcin

glCullFace

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).

glutInitDisplayMode

Especifica las operaciones de bfer de profundidad utilizando el argumento GLUT_DEPTH.

glClear (GL_DEPTH_BUFFER_BIT)

Inicializa los valores del bfer de profundidad con el valor predeterminado


(1.0) o con un valor especificado por la funcin glClearDepth.

glClearDepth

Especifica un valor inicial del bfer de profundidad.

glEnable (GL_DEPTH_TEST)

Activa las operaciones de comprobacin de profundidad.

glDepthRange

Especifica un rango para la normalizacin de los valores de profundidad.

glDepthFunc

Especifica una condicin de comprobacin de profundidad.

glDepthMask

Establece el estado de escritura del bfer de profundidad.

glPolygonOffset

Especifica un desplazamiento para eliminar lneas ocultas en una imagen


almbrica cuando se aplica un color de fondo de relleno.

glFog

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.

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 573

Ejercicios

573

Podemos implementar cualquier esquema deseado de deteccin de visibilidad en un programa de aplicacin creando nuestras propias rutinas, pero las bibliotecas grficas suelen proporcionar funciones 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 grficos 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 Cohen
(1990), Franklin y Kankanhalli (1990), Segal (1990) y Naylor, Amanatides y Thibault (1990). Los mtodos
de bfer A se presentan en Cook, Carpenter y Catmull (1987), Haeberli y Akeley (1990) y Shilling y Strasser
(1993). Puede encontrar un resumen de los mtodos de dibujo de contornos en Earnshaw (1985).
Si quiere aprender ms sobre tcnicas de programacin para pruebas de visibilidad puede consultar
Glassner (1990), Arvo (1991), Kirk (1992), Heckbert (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
9.1

Defina un procedimiento de deteccin de caras posteriores que permita identificar todas las caras visibles de cualquier poliedro convexo de entrada que tenga superficies con diferentes colores. El poliedro debe definirse en un
sistema de visualizacin que cumpla la regla de la mano derecha y la direccin de visualizacin es uno de los parmetros de entrada que debe especificar el usuario.

9.2

Implemente 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.1 utilizando una proyeccin de perspectiva para ver las caras visibles
del poliedro convexo proporcionado como entrada. Suponga que todas 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 incrementalmente 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 visualizacin. Utilice una proyeccin ortogrfica paralela para mapear las vistas sucesivamente sobre el plano de visualizacin.

9.5

Escriba una rutina para implementar el mtodo del bfer de profundidad para la visualizacin de las caras 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?

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 574

574

CAPTULO 9 Mtodos de deteccin de superficies visibles

9.6

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.

9.7

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.

9.8

Ample el procedimiento desarrollado en el ejercicio anterior para incluir tcnicas de antialiasing.

9.9

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.

9.10

Escriba un programa para implementar el algoritmo de lnea 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.

9.11

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.

9.12

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.

9.13

Disee un programa de ordenacin de profundidad para mostrar las superficies visibles en una escena que contenga varios poliedros.

9.14

Escriba un programa para mostrar las superficies visibles de un poliedro convexo utilizando el mtodo del rbol
BSP.

9.15

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.

9.16

Desarrolle un algoritmo que compruebe si una superficie plana dada es circundante, solapada, interior o exterior
con respecto a una determinada rea rectangular.

9.17

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.

9.18

Disee un algoritmo para almacenar una representacin en rbol cudrico de un objeto dentro de un bfer de imagen.

9.19

Defina un procedimiento para mostrar las superficies visibles de un objeto descrito mediante una representacin
en rbol octal.

9.20

Disee un algoritmo para visualizar una nica esfera utilizando el mtodo de proyeccin de rayos.

9.21

Explique cmo pueden incorporarse los mtodos de antialiasing en los diversos algoritmos de eliminacin de
superficies ocultas.

9.22

Escriba una rutina para generar un diagrama de contorno de una superficie, dada la funcin de superficie f (x, y).

9.23

Desarrolle un algoritmo para detectar las secciones de lnea visible en una escena comparando cada lnea de la
escena con cada faceta poligonal de una superficie.

9.24

Explique cmo pueden generarse imgenes almbricas con los diversos mtodos de deteccin de superficies visibles expuestos en este captulo.

9.25

Disee un procedimiento para generar una imagen almbrica de un poliedro en la que se muestren las aristas ocultas del objeto como lneas punteadas.

9.26

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 visualizacin y los dems parmetros de visualizacin.

CAP09_HEARN_1P.qxd

28/09/2005

13:10

Pgina 575

Ejercicios

575

9.27

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.

9.28

Modifique el programa del ejercicio anterior para poder especificar tambin como entrada el rango de profundidades y la condicin de test de profundidad.

9.29

Genere una imagen almbrica de un poliedro utilizando las funciones glPolygonMode y glPolygonOffset
expuestas en la Seccin 9.14.

9.30

Modifique el programa del ejercicio anterior para mostrar el poliedro utilizando la funcin glFogi de variacin
de la intensidad con la profundidad.

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.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 576

CAPTULO 10

Modelos de iluminacin y
mtodos de representacin
superficial

Una escena de la pelcula de animacin por computadora Final Fantasy: The Spirits Within, donde se
muestran los efectos de iluminacin utilizados para simular la explosin de un espritu.
(Cortesa de Square Pictures, Inc. 2001 FFFP. Todos los derechos reservados.)

CAP10_HEARN_1P.qxd

10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9

09/10/2005

14:31

Pgina 577

Fuentes luminosas
Efectos de iluminacin superficial
Modelos bsicos de iluminacin
Superficies transparentes
Efectos atmosfricos
Sombras
Parmetros de la cmara
Visualizacin de la intensidad de la luz
Patrones de semitono y tcnicas de
aleatorizacin
10.10 Mtodos de representacin de polgonos
10.11 Mtodos de trazado de rayos

10.12
10.13
10.14
10.15
10.16
10.17
10.18
10.19
10.20
10.21
10.22

Modelo de iluminacin de radiosidad


Mapeado de entorno
Mapeado de fotones
Adicin de detalles a las superficies
Modelado de los detalles superficiales
mediante polgonos
Mapeado de texturas
Mapeado de relieve
Mapeado del sistema de referencia
Funciones OpenGL de iluminacin y representacin de superficies
Funciones de texturas OpenGL
Resumen

Pueden obtenerse imgenes realistas de una escena generando proyecciones en perspectiva de los objetos y
aplicando efectos 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 terminologa similar, denominaremos modelo de iluminacin al modelo utilizado para calcular la intensidad luminosa en cada punto de una superficie, y emplearemos
el trmino representacin superficial para referirnos a un procedimiento mediante el cual se aplica un modelo de iluminacin con 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-

CAP10_HEARN_1P.qxd

578

09/10/2005

14:31

Pgina 578

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

cin 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 brillantes 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 infografa 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 infogrficos, 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.

10.1 FUENTES LUMINOSAS


Cualquier objeto que emita energa radiante es una fuente luminosa que contribuye a los efectos de iluminacin que afectan a otros objetos de la escena. Podemos modelar fuentes luminosas con diversas formas y
caractersticas, y la mayora de los emisores sirven nicamente como fuente de iluminacin de una escena.
Sin embargo, en algunas aplicaciones, puede que nos interese crear un objeto que sea a la vez una fuente luminosa y un reflector de luz. Por ejemplo, un globo de plstico que rodee a una bombilla emite luz, pero tambin los rayos luminosos procedentes de otras fuentes se reflejan en la superficie del globo. Tambin
podramos modelar el globo como una superficie semitransparente dispuesta en torno a una fuente luminosa,
pero para algunos objetos, como por ejemplo un panel fluorescente de gran tamao, puede que sea ms conveniente describir la superficie simplemente como una combinacin de un emisor y un reflector.
Las fuentes luminosas pueden definirse con diversas propiedades. Podemos definir su posicin, el color
de la luz emitida, la direccin de emisin y la forma de la fuente. Si la fuente es tambin una superficie reflectora de la luz, necesitaremos indicar sus propiedades de reflectividad. Adems, podemos definir una fuente
luminosa que emita diferentes colores en diferentes direcciones. Por ejemplo, se podra especificar una fuente que emitiera luz roja por uno de sus lados y luz verde por el otro.
En la mayora de las aplicaciones, y particularmente en los grficos en tiempo real, se utiliza un modelo
simple de fuentes luminosas para evitar complicar demasiado los clculos. Las propiedades de emisin de luz
se definen utilizando un nico valor para cada uno de los componentes de color RGB, que se corresponde con
la intensidad de dicha componente de color. Los parmetros de color y los modelos de fuentes de iluminacin se analizan con ms detalle en el Captulo 12.

Fuentes luminosas puntuales


El modelo ms simple para un objeto que emite energa radiante es la fuente luminosa puntual de un nico
color, el cual se especifica mediante las tres componentes RGB. Podemos definir una fuente puntual para una
escena indicando su posicin y el color de la luz emitida. Como se muestra en la Figura 10.1, los rayos luminosos se generan segn una serie de trayectorias radialmente divergentes a partir de esa nica fuente puntual
monocromtica. Este modelo de fuente luminosa constituye una aproximacin razonable para aquellas fuentes cuyas dimensiones sean pequeas comparadas con el tamao de los objetos de la escena. Tambin pode-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 579

10.1 Fuentes luminosas

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.

Fuentes luminosas infinitamente distantes


Una fuente luminosa de gran tamao, como por ejemplo el Sol, pero que est muy lejos de una escena puede
tambin aproximarse como un emisor puntual, aunque en este caso la variacin que existe en sus efectos direccionales es muy pequea. Por contraste con una fuente luminosa situada en mitad de una escena, que ilumina los objetos situados en todas las direcciones con respecto a la fuente, las cuentas remotas iluminan la escena
desde una nica direccin. El trayecto del rayo luminoso que va desde una fuente distante hasta cualquier
posicin de la escena es prcticamente constante, como se ilustra en la Figura 10.2.
Podemos simular una fuente luminosa infinitamente distante asignndola un valor de color y una direccin fija para los rayos luminosos que emanan de la fuente. En los clculos de iluminacin slo hace falta
conocer el color de la fuente luminosa y el vector correspondiente a la direccin de emisin, siendo completamente irrelevante cul sea la posicin de la fuente.

Atenuacin radial de la intensidad


A medida que la energa radiante de una fuente luminosa viaja a travs del espacio, su amplitud a cualquier
distancia dl de la fuente se atena segn el factor 1 / dl2 . Esto significa que una superficie prxima a la fuente luminosa recibe una intensidad de luz incidente mayor que otra superficie ms distante. Por tanto, para producir efectos de iluminacin realistas, tenemos que tener en cuenta esta atenuacin de la intensidad. En caso
contrario, todas las superficies seran iluminadas con la misma intensidad por las fuentes luminosas y podran
obtenerse, como resultado efectos deseables en las imgenes. Por ejemplo, si dos superficies con los mismos

FIGURA 10.2. Los rayos luminosos procedentes de una fuente infinitamente distante iluminan a los objetos segn una
serie de trayectos prcticamente paralelos.

CAP10_HEARN_1P.qxd

580

09/10/2005

14:31

Pgina 580

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 1 / dl2 con una fuente puntual no siempre
produce imgenes realistas. El factor 1 / dl2 tiende a producir una variacin excesiva de la intensidad para
objetos que se encuentren prximos a la fuente luminosa, y muy poca variacin cuando dl 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 dl que incluya un trmino lineal:
fradatten (dl ) =

1
a0 + a1 dl + a2 dl2

(10.1)

Los valores numricos de los coeficientes a0, a1 y a2 pueden entonces ajustarse para producir unos efectos de atenuacin ptimos. Por ejemplo, podemos asignar un gran valor a a0 cuando dl es muy pequea con
el fin de prevenir que fradatten(dl) 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.
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:

fl, radatten

1.0,

=
1

,
2
a
+
a
d
0 1 l + a2 dl

si la fuente est en el infinito


(10.2)
si la fuente es local

Fuentes de luz direccionales y efectos de foco


Una fuente luminosa local puede modificarse fcilmente para que acte como un foco, generando un haz
luminoso direccional. Si un objeto est fuera de los lmites direccionales de la fuente luminosa, lo excluiremos de los clculos de iluminacin correspondientes a dicha fuente. Una forma de definir una fuente direccional luminosa consiste en asignarla un vector de direccin y un lmite angular l medido con respecto a
dicho vector de direccin, adems de definir la posicin en color de la fuente. Esto especifica una regin cnica del espacio en la que el vector de la fuente luminosa est dirigido segn el eje del cono (Figura 10.3). De
esta forma, podramos modelar una fuente luminosa puntual multicolor utilizando mltiples vectores de direccin y un color de emisin diferente para cada una de esas direcciones.
Si denominamos Vlight al vector unitario que define la direccin de la fuente luminosa y Vobj al vector unitario que apunta desde la posicin de la fuente hasta la posicin de un objeto, tendremos que:
Vobj Vlight  cos

(10.3)

donde el ngulo 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 < l 90, entonces el
objeto estar dentro del rango de iluminacin del foco si cos cos l, como se muestra en la Figura 10.4.
Por el contrario, si Vobj Vlight < cos l, el objeto estar fuera del cono de luz.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 581

10.1 Fuentes luminosas

581

Vlight
(Vector de direccin
de la luz)

Fuente
luminosa

FIGURA 10.3. Una fuente luminosa puntual direccional. El vector unitario de direccin de la luz define el eje de un cono
luminoso y el ngulo l define la extensin angular del cono circular.

Al vrtice
del objeto

Vector del eje


del cono

l
Fuente
luminosa

FIGURA 10.4. Un objeto iluminado por una fuente luminosa puntual direccional.

Atenuacin angular de la intensidad


Para una fuente luminosa direccional, podemos atenuar angularmente la intensidad de la luz de la fuente, adems de atenuarla radialmente con respecto a la posicin de la fuente puntual. Esto nos permite simular un cono
de luz que sea ms intenso a lo largo del eje del cono, decreciendo la intensidad a medida que nos alejamos
de dicho eje. Una funcin comnmente utilizada para la atenuacin angular de la intensidad de una fuente
luminosa direccional es:
(10.4)
f
( ) = cosal , 0
angatten

CAP10_HEARN_1P.qxd

582

09/10/2005

14:31

Pgina 582

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 Camaro. (Cortesa de David R.
Warn, General Motors Research Laboratories.)

donde al exponente de atenuacin al 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 y fangatten()  1.0. Cuanto mayor sea el valor del exponente
de atenuacin al, ms pequeo ser el valor de la funcin de atenuacin angular de la intensidad para un cierto valor del ngulo > 0.
Hay varios casos especiales que es necesario considerar en la implementacin 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 Vlight al vector unitario que
indica la direccin de la fuente luminosa (a lo largo del eje del cono) y Vobj al vector unitario correspondiente a la lnea que une la fuente luminosa con la posicin de un objeto y si suponemos que 0 <l 90, podemos expresar la ecuacin general de la atenuacin angular como:

fl,angatten

1.0,

0.0,
=

(Vobj Vlight )al ,

si la fuente no es un foco
si Vobj Vlight = cos < cos l
(el objeto est fuera del cono del foco)

(10.5)

en caso contrario

Fuentes luminosas complejas y el modelo de Warn


Cuando necesitemos incluir una fuente luminosa de gran tamao en una posicin prxima a los objetos de una
escena, como por ejemplo la gran lmpara de nen de la Figura 10.5. Podemos aproximarla mediante una
superficie emisora de luz. Una forma de hacer esto consiste en modelar la superficie luminosa como una cua-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 583

10.2 Efectos de iluminacin superficial

583

drcula 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 x,
y y z con el fin de restringir an ms el trayecto de los rayos luminosos emitidos. Esta simulacin de fuentes
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.

10.2 EFECTOS DE ILUMINACIN SUPERFICIAL


Un modelo de iluminacin calcula los efectos luminosos sobre una superficie utilizando las distintas propiedades pticas que se hayan asignado a dicha superficie. Esas propiedades incluyen el grado de transparencia,
los coeficientes de reflexin del color y diversos parmetros relativos a la textura de la superficie.
Cuando la luz incide sobre una superficie opaca, parte de la misma se refleja y parte se absorbe. La cantidad de luz incidente reflejada por la superficie depender del tipo de material. Los materiales brillantes reflejan un mayor porcentaje de la luz incidente, mientras que las superficies mates absorben ms la luz. Para una
superficie transparente, parte de la luz incidente tambin se transmite a travs del material.
Las superficies rugosas o granulosas tienden a dispersar la luz reflejada en todas las direcciones. Esta luz
dispersada se denomina reflexin difusa. Una superficie mate muy rugosa produce principalmente reflexiones difusas, de modo que la superficie parece igualmente brillante desde cualquier ngulo. La Figura 10.7 ilustra la dispersin difusa de la luz en una superficie. Lo que denominamos el color de un objeto es el color de
la reflexin difusa cuando el objeto se ilumina con luz blanca, que est compuesta de una combinacin de
todos los colores. Un objeto azul, refleja la componente azul de la luz blanca y absorbe todas las dems componentes de color. Si el objeto azul se contempla bajo una luz roja, parecer negro, ya que toda la luz incidente ser absorbida.
Adems de la dispersin difusa de la luz, parte de la luz reflejada se concentra en lo que se denomina un
resalte, llamndose a este fenmeno reflexin especular. Este efecto de resalte es ms pronunciado en las
superficies brillantes que en las mates. Podemos ver la reflexin especular cuando observamos una superficie
brillante iluminada, como por ejemplo un trozo de metal pulido, una manzana o la frente de una persona, pero
slo podemos percibir esa reflexin especular cuando contemplamos la superficie desde una direccin concreta. En la Figura 10.8 se muestra una representacin del fenmeno de la reflexin especular.

FIGURA 10.7. Reflexiones difusas en una superficie.

FIGURA 10.8. Reflexin especular superpuesta sobre los vectores de reflexin


difusa.

CAP10_HEARN_1P.qxd

584

09/10/2005

14:31

Pgina 584

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Fuente
luminosa

FIGURA 10.9. Los efectos 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 reflejada por otros objetos iluminados.

10.3 MODELOS BSICOS DE ILUMINACIN


Los modelos ms precisos de iluminacin superficial calculan los resultados de las interacciones entre la energa radiante incidente y la composicin material de un objeto. Para simplificar los clculos de iluminacin
superficial, podemos utilizar representaciones aproximadas de los procesos fsicos que producen los efectos
de iluminacin expuestos en la seccin anterior. El modelo emprico descrito en esta seccin produce unos
resultados razonablemente buenos y es el que se implementa en la mayora de los sistemas grficos.
Los objetos emisores de luz en un modelo bsico de iluminacin suelen estar limitados, generalmente, a
fuentes puntuales. Sin embargo, muchos paquetes grficos proporcionan funciones adicionales para incluir
fuentes direccionales (focos) y fuentes luminosas complejas.

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 uniforme 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 Ia. 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.

Reflexin difusa
Podemos modelar las reflexiones difusas de una superficie asumiendo que la luz incidente se dispersa con
igual intensidad en todas las direcciones, independientemente de la posicin de visualizacin. Tales superfi-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 585

10.3 Modelos bsicos de iluminacin

585

cies se denominan reflectores difusos ideales. Tambin se les denomina reflectores lambertianos, porque la
energa luminosa radiante reflejada por cualquier punto de la superficie se calcula mediante la ley del coseno
de Lambert. Esta ley establece que la cantidad de energa radiante procedente de cualquier pequea rea de
superficie dA en una direccin N relativa a la normal a la superficie es proporcional a cos N (Figura 10.10).
La intensidad de la 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:
Intensidad =

energa radiante por unidad de tiempo


rea proyectada
cos N
dA cos N

(10.6)

= constante
As, para la reflexin lambertiana, la intensidad de la luz es la misma en todas las direcciones de visualizacin.
Suponiendo que haya que tratar a todas las superficies como un reflector difuso ideal (lambertiano), podemos definir un parmetro kd para 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 kd 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 kd 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.
Para los efectos de iluminacin de fondo, podemos asumir que todas las superficies estn completamente
iluminadas por la luz ambiente Ia 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:
Iambdiff  kd Ia

(10.7)

La luz ambiente sola, sin embargo, produce un sombreado plano y poco interesante de las superficies
(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 Il, 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
N

N
dA

Direccin de la
energa radiante

FIGURA 10.10. La energa radiante de un elemento de


rea superficial dA en la direccin N relativa a la normal a la superficie es proporcional a cos N.

CAP10_HEARN_1P.qxd

586

09/10/2005

14:31

Pgina 586

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

(a)

FIGURA 10.11. Una superficie perpendicular a la direccin de la


luz incidente (a) estar ms iluminada que una superficie de igual
tamao que forme un ngulo oblicuo (b) con la direccin de la luz.

(b)

Sol. Al girar lentamente la hoja de papel con respecto a la direccin de la ventana, el brillo de la superficie
disminuye. La Figura 10.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 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 cos . Por tanto, podemos modelar la cantidad de luz incidente sobre una superficie
para una fuente de intensidad Il mediante la frmula:
Il,incident  Il cos

(10.8)

Utilizando la Ecuacin 10.8, podemos modelar las reflexiones difusas para una fuente luminosa con intensidad Il utilizando la frmula:
Il,diff  kd Il,incident
 kd Il cos

(10.9)

Cuando la luz que incide desde la fuente es perpendicular a la superficie en un punto concreto,  90 y
Il,diff  kd Il. A medida 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 cos est en el intervalo que va de 0.0 a 1.0). Cuando
cos < 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, cos  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:
kd I l (N L), si N L > 0

I l ,diff =
0, 0,
si N L 0

(10.10)

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:
L=

Psource Psurf
Psource Psurf

(10.11)

N
A
luz
incidente

A cos

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 cos .

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 587

10.3 Modelos bsicos de iluminacin

A la fuente
luminosa L

587

FIGURA 10.13. ngulo de incidencia 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 luminosa 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 kd comprendidos entre 0 y 1. Para kd  0, no se
refleja nada de luz y la superficie del objeto parece negra. Los valores crecientes de kd 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 ka que puede asignarse a cada superficie
para modificar la intensidad Ia de la luz ambiente. Esto simplemente nos proporciona un parmetro adicional
para ajustar los efectos de iluminacin de nuestro modelo emprico. Utilizando el modelo ka, podemos escribir la ecuacin total de reflexin difusa para una nica fuente puntual en la forma
ka I a + kd I l (N L), si N L > 0
I diff =
si N L 0
ka I a ,

(10.12)

donde ka y kd 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

kd, con ka = 0.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 kd 1.

CAP10_HEARN_1P.qxd

588

09/10/2005

14:31

Pgina 588

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 ka y kd comprendidos entre 0.0 y 1.0.

esfera con intensidades superficiales calculadas segn la Ecuacin 10.12, para valores de los parmetros ka y
kd comprendidos entre 0 y 1.0.

Reflexin especular y modelo de Phong


El resalte o reflexin especular que podemos ver en las superficies brillantes es el resultado de una reflexin
total, o casi total, de la luz incidente en una regin concentrada alrededor del ngulo de reflexin especular.
La Figura 10.16 muestra la direccin de reflexin especular para una determinada posicin de una superficie
iluminada. El ngulo de reflexin especular es igual al ngulo de la luz incidente, midiendo ambos ngulos
en lados opuestos del vector unitario N normal a la superficie. En esta figura, R representa el vector unitario
en la direccin de la reflexin especular ideal, L es el vector unitario dirigido hacia la fuente luminosa puntual y V es el vector unitario que apunta hacia el observador desde la posicin seleccionada de la superficie.
El ngulo es el ngulo de visualizacin relativo a la direccin de reflexin especular R. Para un reflector
ideal (un espejo perfecto), la luz incidente se refleja slo en la direccin de reflexin especular, y slo podramos ver la luz reflejada cuando los vectores V y R coincidieran (  0).
Todos los objetos que no sean reflectores ideales exhiben reflexiones especulares en un rango finito de
posiciones de visualizacin en torno al vector R. Las superficies brillantes tienen un rango de reflexin especular estrecho, mientras que las superficies mates tienen un rango de reflexin ms amplio. Un modelo emprico para el clculo de reflexin especular, desarrollado por Phong Bui Tuong y denominado modelo de
reflexin especular de Phong o simplemente modelo de Phong, define las intensidad de la reflexin especular como proporcionales a cosns . Al ngulo pueden asignrsele valores en el rango de 0 a 90, de modo
que cos vara de 0 a 1.0. El valor asignado al exponente de reflexin especular ns estar determinado por
el tipo de superficie que queramos mostrar. Una superficie muy brillante se modelar con un valor de ns muy

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 589

10.3 Modelos bsicos de iluminacin

Superficie brillante
(ns grande)

589

FIGURA 10.16. El ngulo de reflexin


especular es igual al ngulo de incidencia .

Superficie mate
(ns pequea)

FIGURA 10.17. Modelado de las reflexiones especulares (rea sombreada)


mediante el parmetro ns.

grande (por ejemplo, 100 o ms), mientras que los valores ms pequeos (hasta como mnimo 1) se utilizan
para las superficies ms mates. Para un reflector perfecto, ns es infinita. Para una superficie rugosa, a ns se le
asigna un valor prximo a 1. Las Figuras 10.17 y 10.18 muestran el efecto de ns 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(), para cada superficie. La Figura 10.19 muestra la variacin general
de W() en el rango que va de  0 a  90 para unos cuantos materiales. En general, W() tiende a incrementarse a medida que aumenta el ngulo de incidencia. Para  90, toda la luz incidente se refleja (W()
 1). 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(), podemos escribir el modelo de reflexin especular de Phong de la forma siguiente:
I l ,spec = W ( )I l cosns

(10.13)

donde Il es la intensidad de la fuente luminosa y 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 se aproxima a 90. Para  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
, 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() por un coeficiente constante de
reflexin especular ks. Entonces, simplemente asignamos a ks algn valor en el rango de 0 a 1.0 para cada
superficie.
Puesto que V y R son vectores unitarios en las direcciones de visualizacin y de reflexin especular, podemos calcular el valor de cos 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 determinar la intensidad de la reflexin especular debida a una fuente de iluminacin
puntual sobre una posicin de la superficie mediante la frmula:

CAP10_HEARN_1P.qxd

590

09/10/2005

14:31

Pgina 590

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


cos
1
0.8
0.6
0.4
0.2
0

10 20 30 40 45

90

cos8

cos64

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2
0

10 20 30 40 45

90

cos128

90

cos256

0.8

0.8

0.6

0.6

0.4

0.4

0.2

0.2
0

10 20 30 40 45

10 20 30 40 45

90

10 20 30 40 45

90

FIGURA 10.18. Grficas de cosns utilizando cinco valores diferentes para el exponente de reflexin especular ns.

I l ,spec

ks I l (V R)ns , si V R > 0 y N L > 0

=
0, 0,
si V R < 0 o N L 0

(10.14)

La direccin de R, el vector de reflexin, 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.
Por tanto, a partir de este diagrama, vemos que:
R  L  (2N L)N
y el vector de reflexin especular puede calcularse como:
R  (2N L)N  L

(10.15)

La Figura 10.21 ilustra el fenmeno de la reflexin especular para diversos valores de ks y ns, en una esfera iluminada mediante una nica fuente puntual.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 591

10.3 Modelos bsicos de iluminacin

591

W()
1

0.5

Plata

Oro

Dielctrico (cristal)
0

90

FIGURA 10.19. Variacin aproximada del coeficiente de


reflexin especular para diferentes materiales, en funcin del
ngulo de incidencia.

L
N
L

R
N L

FIGURA 10.20. La proyeccin de L o R sobre la direccin del


vector normal N tiene una magnitud igual a N L.

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
fija 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 cos por el clculo emprico cos (Figura 10.22).
El vector medio se obtiene como:

CAP10_HEARN_1P.qxd

592

09/10/2005

14:31

Pgina 592

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

N H

R
V

FIGURA 10.22. Vector medio H segn la bisectriz del ngulo formado por L y V.

H=

L+V
L+V

(10.16)

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 tiene el valor /2. Cuando V, L y N no son
coplanares, > /2, dependiendo de la relacin espacial de los tres vectores.

Reflexiones difusa y especular combinadas


Para una nica fuente luminosa puntual, podemos modelar las reflexiones difusa y especular combinadas para
una posicin de una superficie iluminada mediante la frmula:
I = I diff + I spec
= ka I a + kd I l (N L) + ks I l (N H )ns

(10.17)

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.

Reflexiones especular y difusa para mltiples fuentes luminosas


Podemos colocar cualquier nmero de fuentes luminosas que deseemos en una escena. Para mltiples fuentes puntuales, calculamos las reflexiones difusa y especular como la suma de las contribuciones debidas a las
diversas fuentes:
n

I = I ambdiff + [ I l ,diff + I l ,spec ]


l =1

= ka I a + I l [ kd (N L) + ks (N H )ns ]

(10.18)

l =1

Emisin de luz superficial


Algunas superficies en una escena pueden emitir luz, adems de reflejar la luz procedente de otras fuentes.
Por ejemplo, una escena de una habitacin puede contener lmparas, mientras que una escena nocturna de

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 593

10.3 Modelos bsicos de iluminacin

(a)

(b)

(c)

(d)

593

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, ks  0 para todas las superficies. En (d) se muestran reflexiones tanto difusas como especulares
para la iluminacin con una nica fuente puntual y con luz ambiente.

exteriores podra incluir farolas, anuncios luminosos y focos de coches. Podemos modelar empricamente las
emisiones de luz superficial incluyendo simplemente un trmino de emisin Isurfemission 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.

CAP10_HEARN_1P.qxd

594

09/10/2005

14:31

Pgina 594

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Modelo bsico de iluminacin con focos y con atenuacin de la intensidad


Podemos formular un modelo general de iluminacin monocromtica para las reflexiones superficiales que
incluya mltiples fuentes luminosas puntuales, factores de atenuacin, efectos de luz direccional (focos),
fuentes situadas en el infinito y emisiones superficiales mediante la frmula:
n

I = I surfemission + I ambdiff + fl ,radatten fl ,angatten ( I l ,diff + I l ,spec )

(10.19)

l =1

La funcin radial de atenuacin fl,radatten 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 frmula:
0, 0,
I l ,diff =
kd I l (N Ll ),

si N Ll 0.0 (fuente luminosa detrs del objeto)


en caso contrario

(10.20)

Y el trmino de reflexin especular debido a la iluminacin mediante una fuente puntual se calcula con
expresiones similares:

I l ,spec

si N Ll 0.0

0.0,
(fuente luminosa detrs del objeto)
=
ks I l max 0.0, (N H l )ns , en caso contrario

(10.21)

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 trmino
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.

Consideraciones relativas al color RGB


Para un modelo de color RGB, cada especificacin de intensidad en el modelo de iluminacin es un vector de
tres elementos que indica las componentes roja, verde y azul de dicha intensidad. As, para cada fuente luminosa, Il  (IlR, IlG, IlB). De modo similar, los coeficientes de reflexin tambin se especifican mediante componentes RGB: ka  (kaR, kaG, kaB), kd  (kdR, kdG, kdB) y ks  (ksR, ksG, ksB). Cada componente de color de
la superficie se calcula entonces mediante una frmula separada. Por ejemplo, la componente azul de las reflexiones difusa y especular para una fuente puntual se calcula a partir de las Ecuaciones 10.20 y 10.21 modificadas, de la forma siguiente:
IlB,diff  kdB IlB(N Ll)
(10.22)
y
(10.23)
I l ,spec = ksB I lB max 0.0,(N H l )ns

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 595

10.3 Modelos bsicos de iluminacin

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 continuacin, 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, kdB, mientras que a las componentes de reflectividad roja
y verde les asignaremos el valor cero (kdR  kdG  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 ks 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 color en superficies metlicas. En la Figura 10.27 se muestran reflexiones de luz en las superficies de los objetos debidas a mltiples
fuentes 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 (SdR, SdG, SdB) y (SsR, SsG, SsB). La componente azul de la reflexin difusa (Ecuacin 10.22) se calculara entonces como:
IlB,diff  kd SdB IlB(N Ll)

(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. (Cortesa de
Stephen H. Westin, Program of Computer Graphics,
Cornell University.)

FIGURA 10.25. Reflexiones 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-Carlo para
trazado de rayos. (Cortesa de Stephen H. Westin,
Program of Computer Graphics, Cornell University.)

CAP10_HEARN_1P.qxd

596

09/10/2005

14:31

Pgina 596

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

FIGURA 10.26. Reflexiones luminosas en trompetas


cuyos parmetros de reflexin se han definido para
simular superficies brillantes de cobre. (Cortesa de
SOFTIMAGE, Inc.)

FIGURA 10.27. Reflexiones luminosas debidas a mltiples fuentes de luz de varios colores. (Cortesa de Sun
Micro-systems.)

los clculos de reflexin difusa, mientras que un tercer color de la fuente podra emplearse en los clculos de
la reflexin especular.

Otras representaciones del color


Podemos describir los colores utilizando otros modelos distintos de la representacin RGB. Por ejemplo, un
color puede representarse utilizando las componentes cyan, magenta y amarillo, o bien describirlo en trminos de un tono concreto y los niveles percibidos de brillo y de saturacin del color. Podemos incorporar cualquiera de estas representaciones, incluyendo especificaciones de color con ms de tres componentes, en
nuestro modelo de iluminacin. Como ejemplo, la Ecuacin 10.24 puede expresarse en trminos de cualquier
color espectral de longitud de onda como:
Il,diff  kd Sd Il(N Ll)

(10.25)

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 la luminancia, 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 medida psicolgica de nuestra percepcin del brillo que, vara con la cantidad de iluminacin que observemos.
Fsicamente, el color se describe en trminos del rango de frecuencias de la energa radiante visible (luz)
y la luminancia 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:
luminancia =

p( f ) I ( f ) df

(10.26)

visible f

El parmetro I ( f ) de este clculo representa la intensidad de la componente luminosa de frecuencia f que


est radiando en una direccin concreta. El parmetro p( f ) es una funcin de proporcionalidad experimen-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 597

10.4 Superficies transparentes

597

talmente determinada que vara tanto con la frecuencia como con el nivel de iluminacin. La integral se realiza para todas 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  0.299R  0.587G  0.114B

(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.2125R
 0.7154G  0.0721B. El parmetro de luminancia suele representarse mediante el smbolo Y, que se corresponde con la componente Y del modelo de color XYZ (Seccin 12.3).

10.4 SUPERFICIES TRANSPARENTES


Podemos describir un objeto, como el cristal de una ventana, como transparente si podemos ver las cosas que
estn situadas detrs del objeto. De forma similar, si no podemos ver las cosas que estn detrs del objeto,
diremos que el objeto es opaco. Adems, algunos objetos transparentes, como el cristal esmerilado y ciertos
materiales plsticos, son translcidos, de modo que la luz transmitida se difunde en todas direcciones. Los
objetos visualizados a travs de materiales translcidos parecen borrosos y a menudo no se les puede identificar claramente.
Una superficie transparente, en general, produce luz tanto reflejada como transmitida. La luz transmitida
a travs de la superficie es el resultado de emisiones y reflexiones de los objetos y de las fuentes situadas
detrs del objeto transparente. La Figura 10.28 ilustra las contribuciones de intensidad a la iluminacin superficial para un objeto transparente que se encuentre delante de un objeto opaco. La Figura 10.29, por su parte,
muestra los efectos de transparencia que pueden conseguirse en una escena generada por computadora.

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.
Luz
incidente

Objeto
transparente

FIGURA 10.28. La emisin de luz de una superficie transparente es, en general, una combinacin de luz reflejada y transmitida.

CAP10_HEARN_1P.qxd

598

09/10/2005

14:31

Pgina 598

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 del vaso como reflexiones luminosas producidas en la superficie del vaso. (Cortesa de Eric Haines, 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 luz
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. El ngulo de refraccin r se calcula aplicando la
ley de Snell:
sin r =

i
sin i
r

(10.28)

donde i es el ngulo de incidencia, i es el ndice de refraccin del material a travs del que viajaba la luz y
r 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 reflaccin, 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.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 599

10.4 Superficies transparentes

A la fuente
luminosa
L

i
r

Luz
incidente Aire Cristal Aire

i i

599

R
Direccin de
reflexin

r Direccin de
refraccin
T

FIGURA 10.30. Direccin de reflexin R y direccin de


refraccin (transmisin) T para un rayo de luz que incide sobre una superficie con un ndice de refraccin r .

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 10.1. NDICE PROMEDIO DE REFRACCIN PARA ALGUNOS MATERIALES COMUNES.


Material

ndice de refraccin

Vaco (aire u otro gas)

1.00

Cristal comn

1.52

Cristal pesado

1.61

Cristal de slex comn

1.61

Cristal de slex pesado

1.92

Sal cristalina

1.55

Cuarzo

1.54

Agua

1.33

Hielo

1.31

La Figura 10.31 ilustra las modificaciones del trayecto debidas a la refraccin para un rayo de luz que atraviesa una fina 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 r mediante la frmula:

T = i cos i cos r N i L
r
r

(10.29)

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).

CAP10_HEARN_1P.qxd

600

09/10/2005

14:31

Pgina 600

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Modelo bsico de transparencia


Un procedimiento ms simple para modelar los objetos transparentes consiste en ignorar los desplazamientos
de los trayectos debidos a la refraccin. En la prctica, este enfoque equivale a suponer que no hay ningn
cambio en el ndice de refraccin de un material a otro, de modo que el ngulo de refraccin es siempre igual
al ngulo de incidencia. Este mtodo acelera los clculos de las intensidades y puede producir efectos de transparencia razonables para superficies poligonales finas.
Podemos combinar la intensidad transmitida Itrans a travs de una superficie transparente desde un objeto
situado en segundo plano con la intensidad reflejada Irefl por la propia superficie (Figura 10.32) utilizando un
coeficiente de transparencia kt. Al parmetro kt se le asigna un valor entre 0.0 y 1.0 para especificar qu porcentaje de la luz procedente de los objetos situados en segundo plano hay que transmitir. La intensidad total
en la superficie se calcula entonces como:
I  (1  kt)Irefl  kt Itrans

(10.30)

El trmino (1  kt) 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 kt 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 kt un
valor prximo a 0.0 para estos materiales. Tambin se puede hacer que kt sea funcin de la posicin concreta
de la superficie, de tal forma que las diferentes partes 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 pxel 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. Esto 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 pxel 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
pxel.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 601

10.6 Sombras

601

Objeto de
segundo plano
Objeto
transparente

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).

10.5 EFECTOS ATMOSFRICOS


Otro factor que a veces se incluye en los modelos de iluminacin es el efecto de la atmsfera sobre el color
de un objeto. Una atmsfera neblinosa hace que los colores se difuminen y que los objetos parezcan ms
tenues. Por tanto, podramos especificar una funcin que modificara los colores de las superficies de acuerdo
con la cantidad de polvo, humo o niebla que queramos simular en la atmsfera. El efecto de atmsfera neblinosa se suele simular mediante una funcin exponencial de atenuacin tal como:
(10.31)

fatmo (d ) = e d
o
fatmo (d ) = e ( d )

(10.32)

El valor asignado a d es la distancia hasta el objeto desde la posicin de visualizacin. El parmetro en


estas funciones exponenciales se utiliza para definir un valor de densidad positivo para la atmsfera. Los valores mayores de 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 cierto 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:
I  fatmo(d)Iobj  [1  fatmo(d)]Iatmo

(10.33)

donde fatmo es una funcin exponencial o lineal de atenuacin atmosfrica.

10.6 SOMBRAS
Pueden utilizarse mtodos de deteccin 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. stas 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

CAP10_HEARN_1P.qxd

602

09/10/2005

14:31

Pgina 602

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

FIGURA 10.33. Patrones de sombra mapeados sobre la cara de Aki Ross, un carcter animado de la pelcula Final Fantasy:
The Spirits Within. (Cortesa de Square Pictures, Inc. 2001 FFFP. Todos los derechos reservados.)

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.7 PARMETROS DE LA CMARA


Los procedimientos de visualizacin e iluminacin que hemos considerado hasta ahora producen imgenes
ntidas, que son equivalentes a fotografiar una escena con una cmara tradicional. Sin embargo, cuando fotografiamos una escena real, podemos ajustar la cmara de modo que slo algunos de los objetos estn enfocados. Los dems objetos estarn ms o menos desenfocados, dependiendo de la distribucin en profundidad de
los objetos de la escena. Podemos simular la apariencia de los objetos desenfocados en un programa infogrfico proyectando cada posicin de esos objetos sobre un rea que cubra mltiples posiciones de pxel, mezclando los colores del objeto con los de otros objetos con el fin de producir un patrn de proyeccin borroso.
Este procedimiento es similar a los mtodos utilizados en antialiasing, y podemos incorporar estos efectos de
la cmara tanto en los algoritmos de lnea de proyeccin como en los de trazado de rayos. Las escenas generadas por computadora parecen ms realistas cuando se incluyen los efectos de enfoque, pero estos clculos
de enfoque requieren mucho tiempo de procesamiento. En la Seccin 10.11 se analizan los mtodos de especificacin de los parmetros de la cmara y del objetivo para simular los efectos de enfoque.

10.8 VISUALIZACIN DE LA INTENSIDAD DE LA LUZ


Una intensidad superficial calculada mediante un modelo de iluminacin puede tener cualquier valor en el
rango que va de 0.0 a 1.0, pero un sistema de grficos por computadora slo puede mostrar un conjunto limitado de intensidades, por tanto, los valores de intensidad calculados deben convertirse a uno de los valores

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 603

10.8 Visualizacin de la intensidad de la luz

603

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.

Distribucin de los niveles de intensidad del sistema


Para cualquier sistema, el nmero de niveles de intensidad permitidos puede distribuirse en el rango de 0.0 a
1.0 de modo que esta distribucin se corresponda con nuestra percepcin de lo que son intervalos de intensidad iguales entre niveles. Los humanos percibimos las intensidades relativas de la luz de la misma forma en
que percibimos las intensidades relativas de sonido. Segn una escala logartmica. Esto significa que si el
cociente de dos valores de intensidad es igual al cociente de otras dos intensidades, percibiremos que la diferencia entre cada par de intensidades es la misma. Como ejemplo, el hombre percibe la diferencia entre las
intensidades 0.20 y 0.22 igual que la diferencia entre 0.80 y 0.88. Por tanto, para mostrar n1 niveles de
intensidad sucesivos con una diferencia percibida de brillo igual, los niveles de intensidad en el monitor deben
espaciarse de modo que el cociente de las intensidades sucesivas sea constante:
I
I1 I 2
= = = n = r
I 0 I1
I n 1

(10.34)

donde I representa la intensidad de una de las componentes de color de un haz luminoso. El nivel ms bajo
que puede mostrarse se representa como I0 y el nivel ms alto como In. Cualquier nivel de intensidad intermedio podr entonces expresarse en trminos de I0 como:
Ik = r k I0

(10.35)

Podemos calcular el valor de r a partir de los valores de I0 y n de un sistema concreto efectuando la sustitucin k  n en la expresin anterior. Puesto In  1.0, tendremos:
1/ n

1.0
r =

I0

(10.36)

Por tanto, la frmula de Ik de la Ecuacin 10.35 puede reescribirse como:


I k = I 0(n k ) / n

(10.37)

Como ejemplo, si I 0 = 81 para un sistema con n  3, tendremos r  2 y los cuatro valores de intensidad
sern 81 , 14 , 12 y 1.0.
El valor de intensidad ms bajo I0 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 I0  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:
(10.38)
I = rk I
Bk

donde,

B0

CAP10_HEARN_1P.qxd

604

09/10/2005

14:31

Pgina 604

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


1/ n

1.0
rB =

I B0

(10.39)

y n es el nmero de niveles de intensidad.

Correccin gamma y tablas de sustitucin de vdeo


Cuando mostramos imgenes en color o monocromticas sobre un monitor de vdeo, las variaciones de brillo
percibidas son no lineales, mientras que los modelos de iluminacin producen una variacin lineal de los valores de intensidad. El color RGB (0.25, 0.25, 0.25) obtenido a partir del modelo de iluminacin representa la
mitad de intensidad del color (0.5, 0.5, 0.5). Usualmente, estas intensidades calculadas se almacenan en un
archivo de imagen en forma de valores enteros que van de 0 a 255, con un byte para cada una de las tres componentes RGB. Este archivo de imagen que describe las intensidades tambin es lineal, por lo que un pxel
con el valor (64, 64, 64) representar la mitad de intensidad de un pxel que tenga el valor (128, 128, 128).
Las tensiones del can de electrones, que controla el nmero de electrones que inciden sobre la pantalla de
fsforo, produce niveles de brillo que estn determinados por la curva de respuesta del monitor que se
muestra en la Figura 10.34. Por tanto, el valor de intensidad mostrado (64, 64, 64) no parecer la mitad de brillante que el valor (128, 128, 128).
Para compensar las no linealidades del monitor, los sistemas grficos utilizan una tabla de consulta de
vdeo que ajusta los valores lineales de intensidad de entrada. La curva de respuesta del monitor est descrita mediante la funcin exponencial:
(10.40)

I = aV

La variable I representa la intensidad mostrada y el parmetro V 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 I, el valor de tensin que
permitir generar esta intensidad es:
1/

I
V =
a

(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 2.3. El estndar de seal de NTSC (National Television System
Committee) es 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 I es un valor de intensidad de entrada producido por un modelo de iluminacin, primero
localizamos la intensidad ms prxima Ik 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:

I
k = round logr

I0

(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 Ik, podemos calcular la tensin del can de electrones mediante la ecuacin:

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 605

10.8 Visualizacin de la intensidad de la luz

1.0
Tensin normalizada del can de electrones

Intensidad

1.0

0.5

605

0.5
1.0
Tensin normalizada del can de electrones

 2.2

0.5

0.5
Intensidad

1.0

FIGURA 10.35. Una curva de consulta de vdeo para


correccin de las intensidades que mapea un valor de
intensidad normalizado a una tensin normalizada del
can de electrones, utilizando una coleccin gamma
con  2.2.

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.

1/

I
Vk = k
a

(10.43)

Los valores Vk pueden entonces almacenarse en las tablas de sustitucin, almacenando los valores de k en
las posiciones de pxel 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 Vk. La transformacin combinada a una escala logartmica de intensidad, seguida del clculo de Vk utilizando la Ecuacin 10.43 se
denomina tambin en ocasiones correccin gamma.
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 Ik deben
precalcularse y almacenarse en el bfer de imagen (o en la tabla de colores).

Visualizacin de imgenes de plano continuo


Los sistemas infogrficos de alta calidad proporcionan generalmente 256 niveles de intensidad para cada componente de color, pero en muchas aplicaciones pueden obtenerse imgenes aceptables con un menor nmero
de niveles. Un sistema de cuatro niveles proporciona unas capacidades de sombreado mnimas para las imgenes de tono continuo, mientras que pueden generarse imgenes fotorrealistas en sistemas capaces de proporcionar entre 32 y 256 niveles de intensidad por pxel.
La Figura 10.36 muestra una fotografa en tono continuo impresa con diversos niveles de intensidad.
Cuando se utiliza un pequeo nmero de niveles de intensidad para reproducir una imagen de tono continuo,
los bordes entre las diferentes regiones de intensidad (denominados contornos) son claramente visibles. En la
reproduccin de dos niveles, las caractersticas faciales de la mujer que aparece en la fotografa apenas son
identificables. Utilizando cuatro niveles de intensidad, comenzamos a identificar los patrones de sombreado
originales, pero los efectos de contorneado son excesivos. Con 8 niveles de intensidad, los efectos de contorneado siguen siendo obvios, pero comenzamos a disponer de una mejor indicacin del sombreado original.

CAP10_HEARN_1P.qxd

606

09/10/2005

14:31

Pgina 606

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

(b)

(c)

(a)

(d)

FIGURA 10.36. Una fotografa de tono continuo (a) impresa con 2 niveles de intensidad (b), cuatro niveles de intensidad
(c) 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.

10.9 PATRONES DE SEMITONO Y TCNICAS DE ALEATORIZACIN


Con un sistema que tenga muy pocos niveles de intensidad disponibles, podemos crear un incremento aparente en el nmero de niveles visualizados incorporando mltiples posiciones de pxel en la visualizacin de cada
valor de intensidad de una escena. Cuando contemplamos una pequea regin compuesta de varias posiciones de pxel, nuestros ojos tienden a integrar o promediar los detalles menores, obteniendo una intensidad global. Los monitores e impresoras monocromos, en concreto, pueden aprovechar este efecto visual para generar
imgenes que parecen mostradas con mltiples valores de intensidad.
Las fotografas de tono continuo se reproducen en peridicos, revistas y libros mediante un proceso de
impresin denominado impresin por semitonos y las imgenes reproducidas se denominan semitonos. Para

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 607

10.9 Patrones de semitono y tcnicas de aleatorizacin

607

FIGURA 10.37. Una seccin ampliada de una fotografa reproducida mediante 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 infografa, las reproducciones de semitonos se simulan utilizando regiones de pxeles rectangulares que se
denominan patrones de aproximacin de semitonos o simplemente patrones de pxeles. El nmero de niveles de intensidad que podemos mostrar con este mtodo depender de cuntos pxeles incluyamos en la cuadrcula rectangular y de cuntos niveles pueda visualizar el sistema. Con n por n pxeles por cada cuadrcula
en un sistema monocromo, podemos representar n2  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 pxeles estn desactivados; en el patrn 1, hay un pxel activado; y en el patrn 4, los cuatro pxeles estn activados. Un valor de intensidad I 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 I < 0.2, el patrn 1 para 0.2 I < 0.4 y el patrn 4 para 0.8 I 1.0.
Con cuadrculas de 3 por 3 pxeles 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 pxeles 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 cuadrcula de pxeles, podemos representar los patrones de pxeles para las
diversas intensidades posibles mediante una mscara (matriz) de posiciones de pxel. Como ejemplo, podramos usar la siguiente mscara para generar los nueve patrones de cuadrcula 3 por 3 para niveles de intensidad por encima de 0 que se muestran en la Figura 10.40.

CAP10_HEARN_1P.qxd

608

09/10/2005

14:31

Pgina 608

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

(a)

(b)

(c)

FIGURA 10.38. Patrones de puntos para semitonos en color. La parte superior de la esfera del reloj en el semitono en color
(a) se muestra agrandada segn un factor 10 en (b) y segn un factor 50 en (c). (Cortesa de IRIS Graphics, Inc., Bedford,
Massachusetts.)

8 3 7
5 1 2

4 9 6

(10.44)

Para mostrar una intensidad concreta cuyo nmero de nivel sea k, 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 1/n en las direcciones x e y.
Utilizando patrones de cuadrcula de 2 por 2 en un rea de pantalla de 512 por 512, 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 512 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

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 609

10.9 Patrones de semitono y tcnicas de aleatorizacin

0
0.0  I  0.2

1
0.2  I  0.4

2
0.4  I  0.6

3
0.6  I  0.8

609

4
0.8  I  1.0

FIGURA 10.39. Un conjunto de patrones de cuadrcula de 2 por 2 pxeles que puede utilizarse para mostrar cinco niveles
de intensidad en un sistema monocromo, indicndose los pxeles activados como crculos rojos. Los valores de intensidad asignados a cada uno de los patrones de cuadrcula se indican debajo de las matrices de pxeles.

0
0.0  I  0.1

1
0.1  I  0.2

2
0.2  I  0.3

3
0.3  I  0.4

4
0.4  I  0.5

5
0.5  I  0.6

6
0.6  I  0.7

7
0.7  I  0.8

8
0.8  I  0.9

9
0.9  I  1.0

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.

tanto, para los sistemas de menor resolucin (menos pxeles por centmetro), nos tendremos que dar por satisfechos 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 8 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  8  480 puntos por centmetro. Algunos dispositivos, como por ejemplo las filmadoras de alta calidad, son capaces de obtener esta resolucin.
Los patrones de cuadrcula de pxeles para las aproximaciones de semitono deben tambin construirse de
forma que se minimicen el contorneado y otros efectos 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 pxel est activada para un determinado
nivel de intensidad, tambin lo estar para todos los niveles superiores (Figuras 10.39 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.41(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 filmadoras 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.
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 pxel. Por
ejemplo, en un sistema de escala de grises que pueda visualizar cuatro valores de intensidad por pxel, podemos utilizar cuadrculas de 2 por 2 pxeles para representar 13 diferentes niveles de intensidad. La Figura

CAP10_HEARN_1P.qxd

610

09/10/2005

14:31

Pgina 610

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

FIGURA 10.41. Para una cuadrcula de 3 por


3 pxeles, el patrn de (a) es mejor que cualquiera de los patrones simtricos de (b) para
representar el tercer nivel de intensidad por
encima de 0.

(a)

(b)

FIGURA 10.42. Patrones de cuadrcula de


semitono con pxeles aislados que no pueden
reproducirse de manera adecuada en algunos
dispositivos de impresin.

10

11

12

FIGURA 10.43. Representaciones de las intensidades 0 a 12 obtenidas mediante patrones de aproximacin de semitonos
utilizando cuadrculas 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 cuadrcula de 2 por 2 pxeles para la visualizacin de colores RGB.

10.43 ilustra una forma de definir los 13 patrones de cuadrcula 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

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 611

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 ruido de aleatorizacin. 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 aleatorizacin ordenada genera variaciones de intensidad mediante una aplicacin biyectiva de los puntos de una escena a las posiciones de pxel utilizando una matriz de aleatorizacin
Dn para seleccionar cada nivel de intensidad. La matriz Dn contiene n por n elementos a los que se asignan
valores enteros positivos diferentes en el rango que va de 0 a n2 1. Por ejemplo, podemos generar cuatro
niveles de intensidad mediante:
3 1
D2 =

0 2

(10.45)

y podemos generar nueve niveles de intensidad mediante:


7 2 6
D3 = 4 0 1
3 8 5

(10.46)

Los elementos de las matrices D2 y D3 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 I n2. Si hay
que aplicar la intensidad I a la posicin de pantalla (x, y), 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 I > Dn(j, k), activaremos el pxel situado en la posicin (x, y). En caso contrario, el pxel permanecer
desactivado. En las aplicaciones de color RGB, este procedimiento se implementa 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 cuadrculas 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:
4 D + D2 (1,1)U n / 2
Dn = n / 2
4 D n / 2 + D2 (2,1)U n / 2

4 D n / 2 + D2 (1, 2)U n / 2
4 D n / 2 + D2 (2, 2)U n / 2

(10.48)

El parmetro Un/2 representa la matriz unidad (todos los elementos iguales a 1). Como ejemplo, si se
especifica D2 como en la Ecuacin 10.45, la relacin recursiva 10.48 nos da:

CAP10_HEARN_1P.qxd

612

09/10/2005

14:31

Pgina 612

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

15 7 13 5
3 11 1 9

D4 =
12 4 10 6

0 8 2 10

(10.49)

Otro mtodo para mapear una imagen con m por n puntos a un rea de visualizacin de m por n pxeles es
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 pxel se dispersa, o difunde, a las posiciones de pxel
situadas a la derecha y por debajo de la posicin de pxel actual. Comenzando con una matriz M de valores
de intensidad obtenida escaneando una fotografa, podemos tratar de construir una matriz I de valores de
intensidad de pxel para un rea de la pantalla. En este caso, podemos hacerlo leyendo las filas de M de
izquierda a derecha, comenzando por la fila superior, y determinando el nivel de intensidad de pxel 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 pxel se distribuye a los elementos vecinos utilizando el
siguiente algoritmo simplificado:
for (j  0; j < m; j)
for (k  0; k < n; k) {
\* Determinar el valor de intensidad del sistema disponible
* que est ms prximo al valor de M [j][k] y
* asignar este valor a I [j][k].
*/
error  M [j][k] - I [j][k];
I [j][k1]  M [j][k1]  alpha * error;
I [j1][k-1]  M [j1][k-1]  beta * error;
I [j1][k]  M [j1][k]  gamma * error;
I [j1][k1]  M [j1][k1]  delta * error;
}

Una vez asignados los niveles de intensidad a los elementos de la matriz I, mapeamos 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 fila de la matriz (j  m) y para un sistema monocromo los valores de intensidad del sistemas son
simplemente 0 y 1. Los parmetros para distribuir el error pueden elegirse de modo que se satisfaga la relacin:

1

(10.50)

Una posible eleccin para los parmetros de difusin de errores que produce muy buenos resultados es
( , , , ) = ( 167 , 163 , 165 , 161 ) . 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 lnea 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.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 613

10.10 Mtodos de representacin de polgonos

613

Columna k

3
16

5
16

7
16

Fila j

1
16

Fila j  1

FIGURA 10.45. Fraccin del error de intensidad que puede distribuirse a las posiciones de pxel adyacentes utilizando un
esquema de difusin de errores.
34

48

40

32

29

15

23

31

42

58

56

53

21

10

50

62

61

45

13

18

38

46

54

37

25

17

26

28

14

22

30

35

49

41

33

20

11

43

59

57

52

12

19

51

63

60

44

24

16

27

39

47

55

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.

10.10 MTODOS DE REPRESENTACIN DE POLGONOS


Los clculos de intensidad de un modelo de iluminacin pueden aplicarse a los procedimientos de representacin superficial de varias formas. Podemos utilizar un modelo de iluminacin para determinar la intensidad
superficial en cada posicin de pxel proyectada, o bien podemos aplicar el modelo de iluminacin a unos
pocos puntos seleccionados y aproximar la intensidad en el resto de las posiciones de la superficie. Los paquetes grficos realizan normalmente la representacin superficial utilizando algoritmos de lnea de barrido que
reducen el tiempo de procesamiento tratando slo con superficies poligonales y calculando las intensidades
superficiales exclusivamente en los vrtices. Despus, se interpolan las intensidades de los vrtices para las
otras posiciones de la superficie poligonal. Se han desarrollado otros mtodos de representacin poligonal
basados en lneas de barrido ms precisos y asimismo los algoritmos de trazado de rayos permiten calcular la
intensidad en cada punto proyectado de la superficie para el caso de superficies tanto planas como curvas.
Vamos a considerar primero los esquemas de representacin de superficies basados en lneas de barrido que
se suelen aplicar al caso de los polgonos. Despus, en la Seccin 10.11, examinaremos los mtodos que pueden utilizarse en los procedimientos de trazado de rayos.

CAP10_HEARN_1P.qxd

614

09/10/2005

14:31

Pgina 614

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Representacin superficial con intensidad constante


El mtodo ms simple para representar una superficie poligonal consiste en asignar el mismo color a todas las
posiciones proyectadas de superficie. En este caso, utilizamos el modelo de iluminacin para determinar la
intensidad de las tres componentes de color RGB en una nica posicin de la superficie, como por ejemplo
en un vrtice o en el centroide del polgono. Esta tcnica, denominada representacin superficial de intensidad constante o representacin superficial plana, proporciona un mtodo rpido y simple para mostrar
las caras poligonales de un objeto y que puede ser til para generar rpidamente una imagen que nos indique
la apariencia general de una superficie curva, como en la Figura 10.50(b). La representacin plana tambin
resulta til durante las tareas de diseo o en otras aplicaciones en las que queramos identificar rpidamente
las caras poligonales individuales utilizadas para modelar una superficie curva.
En general, la representacin plana de una superficie poligonal proporciona una imagen precisa de la
superficie si se cumplen todas las siguientes suposiciones:
El polgono es una cara de un poliedro y no una malla de aproximacin de una superficie curva.
Todas las fuentes luminosas que iluminan el polgono estn lo suficientemente lejos de la superficie,
de modo que N L y la funcin de atenuacin son constantes para toda el rea del polgono.
La posicin de visualizacin est lo suficientemente lejos del polgono, de modo que V R es constante para toda el rea del polgono.
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.

Representacin de superficies por el mtodo de Gouraud


Este esquema, desarrollado por Henri Gouraud y denominado representacin de superficies por el mtodo
de Gouraud o representacin de superficies por interpolacin de la intensidad, interpola linealmente los
valores de intensidad de los vrtices en las caras poligonales de un objeto iluminado. Desarrollado para representar una superficie curva que est aproximada mediante una malla poligonal, el mtodo de Gouraud efecta una transicin suave entre los valores de intensidad de una cara poligonal y los valores de las caras
poligonales adyacentes, a lo largo de las aristas comunes. Esta interpolacin de intensidades en el rea del
polgono elimina las discontinuidades de intensidad que pueden aparecer en la representacin plana de superficies.
Cada seccin poligonal de una superficie curva teselada se procesa mediante el mtodo de representacin
de superficies de Gouraud utilizando los siguientes procedimientos:
(1)
Se determina el vector unitario normal promedio en cada vrtice del polgono.
(2)
Se aplica un modelo de iluminacin en cada vrtice del polgono para obtener la intensidad luminosa
en dicha posicin.
(3)
Se interpolan linealmente las intensidades de los vrtices para el rea proyecta del polgono.
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:
n
(10.51)
Nk

k =1
NV =
n
k =1 N k
Una vez obtenido el vector normal en el vrtice, invocamos el modelo de iluminacin para calcular la
intensidad superficial en dicho punto.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 615

615

10.10 Mtodos de representacin de polgonos


y
3

N2
N3
N1

Lnea de barrido
5

4
N4

V
2

FIGURA 10.48. Para representar la superficie de Gouraud, la


intensidad en el punto 4 se interpola linealmente a partir de las
intensidades en los vrtices 1 y 2. La intensidad en el punto 5
se interpola linealmente a partir de las intensidades en los vrtices 2 y 3. En un punto interior p se asigna un valor de intensidad que se interpole linealmente a partir de las intensidades
en las posiciones 4 y 5.

FIGURA 10.47. El vector normal en el vrtice V se calcula como promedio de las


normales de superficie para cada uno de
los polgonos que comparten dicho vrtice.

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 lnea 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 1 y 2 utilizando nicamente el desplazamiento vertical de la lnea de barrido:
I4 =

y4 y2
y y
I1 + 1 4 I 2
y1 y2
y1 y2

(10.52)

En esta expresin, el smbolo I 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 pxel en las distintas posiciones que componen la
lnea 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:
Ip =

x5 x p
x5 x 4

I4 +

x p x4
x5 x 4

I5

(10.53)

En la implementacin de los mecanismos de representacin de Gouraud, podemos realizar los clculos de


intensidad representado por las Ecuaciones 10.52 y 10.53 de manera eficiente utilizando mtodos incrementales. 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 incrementales para obtener las intensidades de pxel en la lnea de barrido.

CAP10_HEARN_1P.qxd

616

09/10/2005

14:31

Pgina 616

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Como ejemplo del clculo incremental de las intensidades, vamos a considerar las lneas de barrido y e
y  1 de la Figura 10.49, que intersectan la arista izquierda de un polgono. Si la lnea de barrido y es la lnea
de barrido situada inmediatamente por debajo del vrtice de y1 con intensidad I1, es decir y  y1  1, podemos calcular la intensidad I en la lnea de barrido y a partir de la Ecuacin 10.52, de la manera siguiente:
I = I1 +

(10.54)

I 2 I1
y1 y2

Si continuamos bajando por la arista del polgono, la intensidad en la arista para la siguiente lnea de barrido, y  1, ser:
(10.55)
I I
I = I + 2 1
y1 y2
As, cada valor sucesivo de intensidad al descender por la arista se calcula simplemente sumando el trmino constante (I2  I1)/(y1  y2) al valor de intensidad anterior. Se utilizan clculos incrementales similares
para obtener las intensidades en las sucesivas posiciones de pxel 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.

y
y1

I1

I
lneas de barrido
I
I2

FIGURA 10.49. Interpolacin incremental de los


valores de intensidad a lo largo de una arista de
un polgono para lneas de barrido sucesivas.

x1

(a)

(b)

(c)

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).

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 617

10.10 Mtodos de representacin de polgonos

617

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 bandas de Mach, sobre la superficie. Estos efectos pueden reducirse
dividiendo la superficie en un nmero mayor de caras poligonales o utilizando clculos de intensidad ms precisos.

Representacin superficial de Phong


Un mtodo ms preciso de interpolacin para la representacin de un malla poligonal fue el que desarroll
posteriormente Phong Bui Tuong. Esta tcnica, denominada representacin superficial de Phong o representacin por interpolacin de los vectores normales, realiza una interpolacin de los vectores normales en
lugar de interpolar los valores de intensidad. El resultado es un clculo ms preciso de los valores de intensidad, una imagen ms realista de los resaltes de la superficie y una enorme reduccin en los efectos de bandas
de Mach. Sin embargo, el mtodo de Phong requiere realizar ms clculos que el mtodo de Gouraud.
Cada seccin poligonal de una superficie curva teselada se procesa mediante el mtodo de representacin
superficial de Phong utilizando los siguientes procedimientos:
(1)
Se determina el vector unitario normal promedio en cada vrtice del polgono.
(2)
Se interpolan linealmente las normales a los vrtices para el rea proyectada del polgono.
(3)
Se aplica un modelo de iluminacin en las distintas posiciones de las lneas de barrido para calcular las
intensidades de los pxeles utilizando los vectores normales interpolados.
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 10.51 se interpola
verticalmente a partir de los vectores normales en los vrtices 1 y 2 mediante la frmula:
N=

y y2
y y
N1 + 1
N2
y1 y2
y1 y2

(10.56)

Despus, aplicamos los mismos mtodos incrementales 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.

Representacin superficial rpida de Phong


Podemos reducir el tiempo de procesamiento en el mtodo de representacin de Phong realizando ciertas
aproximaciones en los clculos del modelo de iluminacin. Los algoritmos de representacin superficial
rpida de Phong llevan a cabo los clculos de intensidad utilizando una expansin en serie de Taylor truncada y limitando las caras poligonales a parches de superficie triangulares.
N3

N1

N
Lnea de barrido y

N2

FIGURA 10.51. Interpolacin de las normales a la superficie a lo


largo de una arista de un polgono.

CAP10_HEARN_1P.qxd

618

09/10/2005

14:31

Pgina 618

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Puesto que el mtodo de Phong interpola los 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  By  C
(10.57)
donde los vectores A, B y C se determinan a partir de las tres ecuaciones de los vrtices:
Nk  Axk  Byk  C,

k  1, 2, 3

(10.58)

donde (xk, yk) denota una posicin proyectada de un vrtice del tringulo sobre el plano de pxeles.
Si omitimos los parmetros de reflectividad 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:
I diff ( x, y) =

LN
L N

L ( Ax + By + C)
L Ax + By + C

( L A ) x + ( L B) y + L C
L Ax + By + C

(10.59)

Esta expresin puede escribirse en la forma:


I diff ( x, y) =

ax + by + c
[ dx + exy + fy 2 + gx + hy + i ]1 / 2
2

(10.60)

donde se utilizan parmetros como a, b, c y d para representar los diversos productos escalares. Por ejemplo,
a=

LA
L

(10.61)

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 e y. Esto nos da:
Idiff(x, y)  T5 x2  T4 xy  T3 y2  T2 x  T1 y  T0

(10.62)

donde cada Tk es funcin de los diversos parmetros de la Ecuacin 10.60, como a, b y c.


Utilizando diferencias finitas, podemos evaluar la Ecuacin 10.62 con slo dos sumas para cada posicin
de pxel (x, y), 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 difusa pueden ampliarse para incluir
reflexiones especulares utilizando aproximaciones similares para evaluar los trminos especulares tales como
(N H)ns. Adems, podemos generalizar el algoritmo para incluir una posicin de visualizacin finita y otros
polgonos distintos de los tringulos.

10.11 MTODOS DE TRAZADO DE RAYOS


En la Seccin 8.20, hemos presentado la nocin de proyeccin de rayos, que es una tcnica que se utiliza en
geometra constructiva de slidos para localizar las intersecciones con las superficies a lo largo de la trayec-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 619

10.11 Mtodos de trazado de rayos

Punto de
referencia
de proyeccin

Posiciones de
pxel en el plano
de proyeccin

619

FIGURA 10.52. Trayectos mltiples de reflexin 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 Evans &
Sutherland.)

toria de un rayo trazado desde una posicin de pxel. Tambin hemos hablado de los mtodos de proyeccin
de rayos en la Seccin 9.10 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 limitarnos 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 Figura 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 reflexin y transmisin. Adems, el algoritmo bsico de trazado de rayos detecta las superficies 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
clculo considerable. En la Figura 10.53 se muestra un ejemplo de los efectos globales de reflexin y transmisin que pueden conseguirse mediante las tcnicas de trazado de rayos.

CAP10_HEARN_1P.qxd

620

09/10/2005

14:31

Pgina 620

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Algoritmo bsico de trazado de rayos


El sistema de coordenadas para un algoritmo de trazado de rayos suele definirse como se muestra en la Figura
10.54, con el punto de referencia de proyeccin en el eje z y las posiciones de pxel en el plano xy. Despus
describimos la geometra de una escena en este sistema de coordenadas y generamos los rayos correspondientes al pxel. Para una lista de proyeccin en perspectiva de la escena, cada rayo se origina en el punto de referencia de proyeccin (centro de proyeccin), pasa a travs del centro de un pxel y se adentra en la escena para
formar las diversas ramas del rayo, segn los trayectos de reflexin y transmisin. Las contribuciones a la
intensidad del pxel se acumulan entonces para las distintas superficies intersectadas. Esta tcnica de representacin est basada en los principios de la ptica geomtrica. Los rayos luminosos que salen de las superficies de una escena emanan en todas direcciones y algunos de ellos pasan a travs de las posiciones de pxel
situadas en el plano de proyeccin. Puesto que hay un nmero infinito de emanaciones de rayos, determinamos las contribuciones de intensidad para un pxel concreto trazando hacia atrs el trayecto luminoso desde
la posicin del pxel hacia la escena. En el algoritmo bsico de trazado de rayos, se genera un rayo luminoso
para cada pxel.
A medida que se genera el rayo de cada pxel, se procesa la lista de superficies de la escena para determinar si el rayo intersecta con alguna de ellas. En caso afirmativo, calculamos la distancia desde el pxel al punto
de interseccin con la superficie. Una vez comprobadas todas las superficies, la distancia de interseccin calculada ms pequea identificar la superficie visible para dicho pxel. Entonces reflejamos el rayo en la superficie visible segn un proyecto de reflexin especular (ngulo de reflexin igual al ngulo de incidencia). Para
una superficie transparente, tambin enviamos un rayo a travs de la superficie en la direccin de refraccin.
Los rayos reflejado y refractado se denominan rayos secundarios.
Repetimos entonces los procedimientos de procesamiento de rayos para los rayos secundarios.
Comprobamos si existen intersecciones con las superficies y, en caso afirmativo, se usa la superficie intersectada ms prxima a lo largo de la trayectoria de un rayo secundario para producir recursivamente la siguiente generacin de trayectos de reflexin y refraccin. A medida que los rayos de un pxel se bifurcan a travs
de una escena, cada superficie recursivamente intersectada se aade a un rbol de trazado de rayos binario,
como se muestra en la Figura 10.55. Utilizamos las ramas izquierdas del rbol para representar los trayectos
de reflexin y las ramas derechas para representar los trayectos de transmisin. La profundidad mxima de
los rboles de trazado de rayos puede configurarse como opcin del usuario o puede determinarse segn la
cantidad de almacenamiento disponible. Terminamos cada trayecto del rbol binario correspondiente a un
pxel si se cumple cualquiera de las siguientes condiciones:
El rayo no intersecta ninguna superficie.
El rayo intersecta a una fuente de luminosa que no es una superficie reflectante.
El rbol ha alcanzado su profundidad mxima permitida.
y
rea de pantalla
centrada en el origen
del sistema de coordenadas
de visualizacin
x

FIGURA 10.54. Sistema de


coordenadas para trazado
de rayos.

Punto de
referencia de
proyeccin

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 621

10.11 Mtodos de trazado de rayos

621

R4
S1

R3
T3

R1

S4
R2

S3

T1

S3

R1

S2
T3 R2

R3
T1
S4
S1

S2

R4

Punto de
referencia de proyeccin
(a)

(b)

FIGURA 10.55. Los trayectos 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).

Rayo
reflejado

Fuente
luminosa

R
L

N
H

FIGURA 10.56. Vectores unitarios en la


superficie de un objeto intersectado por un
rayo que incide segn la direccin u.

Rayo
incidente

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 intersecte 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 10.56 muestra una superficie intersectada 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 sombra. 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 kaIa, la reflexin difusa debido a la fuente es proporcional a kd (N L) y la componente de reflexin especular es proporcional a ks(H N)ns. Como se
explica en la Seccin 10.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:
R  u  (2u N)N

(10.63)

CAP10_HEARN_1P.qxd

622

09/10/2005

14:31

Pgina 622

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


Trayecto del
rayo refractado

FIGURA 10.57. Trayecto de transmisin del rayo


refractado T a travs de un material transparente.

Rayo
incidente

Para una superficie transparente, necesitamos tambin obtener las contribuciones de intensidad de la luz
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:
T=

u cos r i cos i N
r

(10.64)

Los parmetros i y r son los ndices de refraccin en el material incidente y en el material refractante,
respectivamente. El ngulo de refraccin r puede calcularse a partir de la ley de Snell:
2


cos r = 1 i (1 cos2 i )
r

(10.65)

Despus de haber completado el rbol binario para un pxel, se acumulan las contribuciones de intensidad,
comenzando por la parte 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 pxel
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.

Clculos de interseccin entre rayos y superficie


Un rayo puede describirse con una posicin inicial P0 y un vector de direccin unitario u, como se ilustra en
la Figura 10.58. Las coordenadas para cualquier punto P situado a lo largo del rayo, a una distancia s de P0,
se calculan entonces a partir de la ecuacin del rayo:
P  P0  su

(10.66)

Inicialmente, el vector P0 puede definirse en la posicin Ppix 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)
Ppix Pprp
u=
Ppix Pprp
Aunque no es necesario que u sea un vector unitario, si lo es, se simplificarn algunos de los clculos.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 623

10.11 Mtodos de trazado de rayos

623

el ray

oria d

ct
traye
u
P0

x
z

FIGURA 10.58. Descripcin de un rayo con un vector


de posicin inicial P0 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 s,
que es la distancia desde P0 hasta el punto de interseccin con la superficie a lo largo de la trayectoria del rayo.
En cada superficie intersectada, los vectores P0 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 spline. 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 s. En muchos casos, se utilizan mtodos numricos
de localizacin de races y clculos incrementales para localizar los puntos de interseccin con una superficie. Para objetos complejos, a menudo resulta conveniente transformar la ecuacin del rayo al sistema de 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.

Intersecciones entre rayos y esferas


Los objetos ms simples para efectuar un trazado de rayos son las esferas. Si tenemos una esfera de radio r y
centro Pc (Figura 10.60), cualquier punto P de la superficie satisfar la ecuacin de la esfera:
|P  Pc|2  r2  0

(10.68)

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. (Cortesa de Sun Microsystems.)

CAP10_HEARN_1P.qxd

624

09/10/2005

14:31

Pgina 624

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


y
P

P0

u
r

Pc

x
z

FIGURA 10.60. Un rayo intersecta una esfera con


radio r y centro Pc.

Sustituyendo la Ecuacin del rayo 10.66 para P en la ecuacin anterior, tenemos:


|P0  su  Pc|2  r2  0

(10.69)

Si representamos PcP0 como P y expandimos el producto escalar, obtenemos la ecuacin cuadrtica:


P|2  r2)  0
s2  2(u P) s  (|
(10.70)
cuya solucin es:
(10.71)
2
s = u P ( u P )2 P + r 2
Si el discriminante es negativo, o bien el rayo no intersecta la esfera o la esfera se encuentra detrs de P0.
En 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.

FIGURA 10.61. Un copo de nieve representado mediante trazado de rayos y donde se utilizan 7381 esferas y 3 fuentes
luminosas. (Cortesa de Eric Haines, Autodesk, Inc.)

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 625

10.11 Mtodos de trazado de rayos

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:
r 2  P

P|2. Podemos evitar esto en la mayopodramos perder el trmino r2 debido a los errores de precisin de |
ra de los casos reordenando los clculos correspondientes a la distancia s de la forma siguiente:
s = u P r 2 P ( u P )u

(10.72)

Intersecciones entre rayos y poliedros


Los clculos de interseccin para poliedros son ms complicados que para las esferas. Por tanto, a menudo
resulta ms eficiente procesar un poliedro realizando un test inicial de interseccin sobre un volumen que lo
encierre. Por ejemplo, la Figura 10.62 muestra un poliedro dentro de una esfera. Si un rayo no intersecta la
esfera circunscrita, eliminamos el poliedro de las comprobaciones posteriores. En caso contrario, identificamos a continuacin las caras frontales del poliedro como esos polgonos que satisfagan la desigualdad:
uN<0

(10.73)

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, B, 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 (P0 + su ) = D

(10.75)

y la distancia desde la posicin inicial del rayo hasta el plano es:

s=

D + N P0
Nu

(10.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

u
N

FIGURA 10.62. Un poliedro encerrado en una esfera


circunscrita.

CAP10_HEARN_1P.qxd

626

09/10/2005

14:31

Pgina 626

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Punto de
interseccin
con el plano
u
Polgono

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.

Reduccin de los clculos de interseccin con los objetos


Los clculos de interseccin entre las superficies y los rayos pueden representar hasta un 95 por ciento del
tiempo de procesamiento en una representacin mediante trazado de rayos de una escena. Para una escena con
muchos objetos, la mayor parte del tiempo de procesamiento para cada rayo se invierte en comprobar objetos
que no son visibles segn el trazado del rayo. Por tanto, se han desarrollado diversos mtodos para reducir el
tiempo de procesamiento invertido en estos clculos de intersecciones.
Un mtodo para reducir los clculos de intersecciones consiste en encerrar grupos de objetos adyacentes
dentro de un volumen de contorno, como por ejemplo una esfera o un paraleleppedo (Figura 10.64).
Entonces, podemos ver si existen intersecciones de los rayos con el volumen de contorno. Si el rayo no intersecta la superficie del contorno, eliminamos las superficies encerradas de las comprobaciones sucesivas de
interseccin. Esta tcnica puede ampliarse para incluir una jerarqua de volmenes de contorno. En otras palabras, podemos encerrar varios volmenes de contorno dentro de un volumen mayor y llevar a cabo las comprobaciones de interseccin jerrquicamente: primero comprobamos el volumen ms externo, despus
comprobamos en caso necesario los volmenes de contorno interiores, etc.

Mtodos de subdivisin espacial


Otra forma de reducir los clculos de intersecciones consiste en utilizar procedimientos de subdivisin espacial. Podemos encerrar una escena completa dentro de un cubo y luego subdividir sucesivamente el cubo hasta
que cada subregin (celda) no contenga ms de un nmero mximo de superficies prefijado. Por ejemplo,
podemos obligar a que cada celda no contenga ms de una superficie. Si hay disponibles capacidades de procesamiento vectoriales y en paralelo, el nmero mximo de superficies por celda puede determinarse segn el
tamao de los registros de vectores y el nmero de procesadores. La subdivisin espacial del tubo puede almaEsfera de
contorno

FIGURA 10.64. Un grupo de objetos dentro de una esfera.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 627

10.11 Mtodos de trazado de rayos

627

N2
u
Pin
Rayo de
pxel

Pout

N1

N3

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 subregin (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 octantes de igual tamao en cada caso, o podemos realizar una subdivisin adaptativa 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 Pin para una celda, identificamos las caras potenciales de salida de una celda como aquellas que satisfacen la desigualdad:
u Nk > 0

(10.77)

donde Nk 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,
(10.78)
(1, 0, 0)

N k = (0, 1, 0)
(0, 0, 1)

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:
Pout,k = Pin + sk u

(10.79)

donde sk es la distancia segn el rayo desde Pin a Pout,k. Sustituyendo la ecuacin del rayo en la ecuacin del
plano para cada cara de la celda, tenemos:
(10.80)
N k Pout,k = Dk

CAP10_HEARN_1P.qxd

628

09/10/2005

14:31

Pgina 628

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

y la distancia del rayo a cada cara candidata de salida se calcula como:


sk =

Dk N k Pin
Nk u

(10.81)

El valor ms pequeo calculado para sk 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 Nk son los vectores unitarios 10.78 segn los ejes y podemos simplificar los clculos de la Ecuacin 10.81. Por ejemplo, si
un plano candidato de salida tiene el vector normal (1, 0, 0), entonces para ese plano tendremos:
sk =

x k x0
ux

(10.82)

donde u  (ux, uy, uz), xk  Dk es la posicin de coordenadas del plano candidato de salida y x0 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. Este 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 Pout,k
determinar el verdadero plano de salida. Por ejemplo, si el punto de interseccin Pout,k 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 implementacin 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.69 ilustra otro esquema obtenido mediante trazado de rayos utilizando subdivisin espacial
y mtodos de procesamiento en paralelo. Esta imagen de la escultura de Rodin El 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 bfer 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,
6
1
5
2
0
4
7
3
8

FIGURA 10.67. Un plano candidato de salida de ejemplo, junto con sus sectores
numerados.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 629

10.11 Mtodos de trazado de rayos

629

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 pxel 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 FX/8. (Cortesa de Lee-Hian Quek, Oracle Corporation, Redwood Shores, California.)

FIGURA 10.69. Esta 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. Hubbold, 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 los 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.

CAP10_HEARN_1P.qxd

630

09/10/2005

14:31

Pgina 630

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

(a)

(b)

FIGURA 10.70. Escena de una habitacin iluminada con 5 fuentes luminosas y representada (a) utilizando la tcnica de
trazado de rayos basada en bfer luminoso para procesar los rayos de sombra. Un primer plano (b) de parte de la habitacin mostrada en (a) ilustra los efectos globales de iluminacin. La habitacin est modelada por 1298 polgonos, 4 esferas, 76 cilindros y 35 cudricas. El 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 Haines y Donald P. Greenberg, Program of Computer
Graphics, Cornell University.)

Sector correspondiente
a un haz 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.

Simulacin de los efectos de enfoque de la cmara


Para modelar los efectos de la cmara en una escena, especificamos la longitud de enfoque y otros parmetros para un objetivo convexo (o apertura de la cmara) que haya que colocar delante del plano de proyeccin.
Los parmetros del objetivo se configuran entonces de modo que algunos objetos de la escena puedan estar
enfocados mientras que otros aparecern desenfocadas. La distancia focal del objetivo es la distancia desde el
centro del objetivo hasta el punto focal F, que es el punto de convergencia para un conjunto de rayos paralelos que pasan a travs de la lente, como se ilustra en la Figura 10.72. Un valor tpico para la distancia focal
de una cmara de 35 mm es f  50 mm. Las aperturas de las cmaras suelen describirse mediante un parmetro n, denominado nmero-f o f-stop, que es el cociente entre la distancia focal y el dimetro de apertura:

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 631

10.11 Mtodos de trazado de rayos

Rayos luminosos
paralelos
entrantes

631

r  radio de la lente

Lnea central de la lente

f
Eje de la lente

Plano focal

Figura 10.72. Vista lateral de un objetivo. Los rayos paralelos son enfocados por la lente sobre una posicin situada en el
plano focal, que est a la distancia f del centro de la lente.
di

f
Plano del objeto

f
Plano de imagen
(pelcula)

FIGURA 10.73. Parmetros de un objetivo. Un objeto a una distancia d del objetivo estar enfocado sobre el plano de imagen a una distancia di de la lente.

n=

f
2r

(10.83)

Por tanto, podemos utilizar el radio r o el nmero-f n, 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:
1 1 1
+
=
(10.84)
d dj
f

CAP10_HEARN_1P.qxd

632

09/10/2005

14:31

Pgina 632

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

El parmetro d es la distancia desde el centro de la lente hasta la posicin de un objeto y di 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 lnea que pasa por el centro de la lente
y d > f (Figura 10.73). Por tanto, para enfocar un objeto concreto situado a una distancia d de la lente, situamos el plano de pxeles a una distancia di por detrs del objetivo.
Para una posicin de la escena situada a una cierta distancia d d, 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:

2rc =

d d f
nd

(10.85)

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 campo de la cmara. Adems, se trazan mltiples rayos para cada pxel con el fin de muestrear distintas posiciones sobre el rea del objetivo; hablaremos
de estos mtodos de trazado de rayos distribuidos en una seccin posterior.

Trazado de rayos con antialiasing


Dos tcnicas bsicas de antialiasing empleadas en los algoritmos de trazado de rayos son el supermuestreo y
el muestreo adaptativo. El muestreo en el trazado de rayos es una extensin de los mtodos de antialiasing
expuestos en la Seccin 4.17. En el supermuestreo y en el muestreo adaptativo, el pxel se trata como un rea
cuadrada finita en lugar de como un nico punto. El supermuestreo utiliza normalmente mltiples rayos
equiespaciados (muestras) para cada rea de pxel. El muestreo adaptativo utiliza rayos no equiespaciados en
algunas regiones del rea de pxel. Por ejemplo, pueden usarse ms rayos cerca de los bordes de los objetos
con el fin de obtener una mejor estimacin de las intensidades de los pxeles. (Otro mtodo de muestreo consiste en distribuir aleatoriamente los rayos a lo largo del rea del pxel. Hablaremos de esta tcnica en la
siguiente seccin). Cuando se utilizan mltiples rayos por pxel, las intensidades de los rayos de pxel se promedian para obtener la intensidad global del pxel.
La Figura 10.74 ilustra un procedimiento simple de supermuestreo. Aqu, se genera un rayo a travs de
cada esquina del pxel. Si las intensidades calculadas para los cuatro rayos no son aproximadamente iguales,
o si algn pequeo objeto cae entre los cuatro rayos, dividimos el rea del pxel en subpxeles y repetimos el
proceso. Como ejemplo, el pxel de la Figura 10.75 se divide en nueve subpxeles utilizando 16 rayos, uno en
cada esquina de cada subpxel. Entonces, se utiliza muestreo adaptativo para subdividir an ms dichos sub-

Posiciones de pxel
sobre el plano de
proyeccin

FIGURA 10.74. Supermuestreo con cuatro rayos por pxel, uno en cada esquina
del pxel.

Punto de referencia
de proyeccin

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 633

10.11 Mtodos de trazado de rayos

633

FIGURA 10.75. Subdivisin de un pxel en 9 subpxeles con un rayo en cada esquina de cada subpxel.

FIGURA 10.76. Una escena generada mediante trazado de rayos por subdivisin adaptativa. (Cortesa de Jerry Farm.)

pxeles que rodeen a un pequeo objeto o que no tengan rayos de intensidad aproximadamente igual. Este proceso de subdivisin puede continuarse hasta que todos los rayos de subpxel tengan aproximadamente las mismas intensidades o hasta que se alcance un lmite superior, por ejemplo 256, que indicar el nmero mximo
de rayos por pxel.
La Figura 10.76 es un ejemplo de escena representada mediante trazado de rayos con subdivisin adaptativa. Se utiliza una 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.
En 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 muestreo 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 crculo con un polgono.

CAP10_HEARN_1P.qxd

634

09/10/2005

14:31

Pgina 634

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Punto de referencia
de proyeccin

FIGURA 10.77. Posiciones de rayos centradas en las


reas de subpxel.

FIGURA 10.78. Un rayo de pxel con forma de cono.

Trazado de rayos distribuido


Se trata de un mtodo de muestreo estocstico que distribuye aleatoriamente los rayos de acuerdo con los
diversos parmetros de un modelo de iluminacin. Los parmetros de iluminacin incluyen el rea del pxel,
las direcciones de reflexin y refraccin, el rea del objetivo de la cmara y el tiempo. Los efectos del aliasing se sustituyen as con ruido de bajo nivel, que mejora la calidad de una imagen y permite modelar de
manera ms precisa los efectos de las superficies brillantes y translcidas, las aperturas finitas de cmara, las
fuentes luminosas finitas y la visualizacin desenfocada de los objetos en movimiento. El trazado de rayos
distribuido (tambin denominado trazado de rayos de distribucin) proporciona esencialmente una evaluacin de Monte Carlo de las mltiples integrales que aparecen en una descripcin fsica precisa de la iluminacin de una superficie.
El muestreo de los pxeles se lleva a cabo distribuyendo aleatoriamente una serie de rayos a lo largo del
rea del pxel. Sin embargo, seleccionar las posiciones de los rayos de forma completamente aleatoria puede
hacer que los rayos se agrupen en una pequea regin del rea del pxel, dejando sin muestrear una buena
parte de ste. Una mejor aproximacin para la distribucin de los rayos en el rea del pxel consiste en utilizar una tcnica denominada fluctuacin (jittering) sobre una cuadrcula regular de subpxeles. Esto se suele
llevar a cabo dividiendo inicialmente el rea del pxel (un cuadrado unitario) en las 16 subreas que se muestran en la Figura 10.79 y generando una posicin fluctuante aleatoria en cada subrea. Las posiciones aleatorias de los rayos se obtienen haciendo fluctuar las coordenadas de los centros de cada subrea en pequeas
cantidades, x y y, donde 0.5 < x, y < 0.5. Entonces seleccionamos la posicin ajustada como (x  x, y
 y), donde (x, y) es la posicin central del pxel.
Aleatoriamente se asignan cdigos enteros de 1 a 16 a cada uno de los 16 rayos y se utiliza una tabla de
sustitucin para obtener valores para los otros parmetros, como el ngulo de reflexin y el tiempo. Cada rayo
de subpxel se traza a travs de la escena y se procesa para determinar la contribucin de intensidad correspondiente a cada rayo. Las 16 intensidades de rayo se promedian entonces para obtener la intensidad global
del pxel. Si las intensidades de los subpxeles varan demasiado, podemos subdividir el pxel todava ms.
Para modelar los efectos del objetivo de la cmara, procesamos los rayos de los pxeles a travs de una
lente que se sita delante del plano de pxeles. Como hemos indicado anteriormente, la cmara se simula utilizando una distancia focal y otros parmetros, de modo que una serie de objetos seleccionados queden enfocados. Entonces, distribuimos los rayos de los subpxeles por el rea de apertura. Suponiendo que tengamos
16 rayos por pxel, podemos subdividir el rea de apertura en 16 zonas y asignar a continuacin a cada subpxel una posicin central en una de las zonas. Puede utilizarse el siguiente procedimiento para determinar la
distribucin de muestreo para el pxel: se calcula una posicin ajustada mediante fluctuacin para cada cen-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 635

10.11 Mtodos de trazado de rayos

635

FIGURA 10.79. Muestreo de un pxel utilizando 16 reas de subpxel y una posicin fluctuante de rayo con respecto a las coordenadas del centro de cada subrea.

Posicin
del
objetivo
F
Direccin del
rayo de subpxel
Posicin
de subpxel

Plano de imagen

FIGURA 10.80. Distribucin de


los rayos de subpxel sobre el
objetivo de una cmara con distancia focal f .

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 distancia f de 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 di 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.
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, cosns , 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 todo 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 intersectan objetos opacos situados
entre la superficie y la fuente luminosa, se genera una penumbra (regin parcialmente iluminada) en dicho
punto de la superficie. 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.

CAP10_HEARN_1P.qxd

636

09/10/2005

14:31

Pgina 636

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


N

Rayo
incidente

R
N

Fuente
luminosa
finita

Lmax
Lmin

FIGURA 10.81. Modelado de objetos brillantes y translcidos distribuyendo los rayos de subpxel en torno a
la direccin de reflexin R y a la direccin de transmisin T.

FIGURA 10.82. Distribucin de los rayos de sombra en


torno a una fuente luminosa finita.

Luna
Tierra

Sol
Sombra
Penumbra

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 1984, 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. 1984 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-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 637

10.11 Mtodos de trazado de rayos

637

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 traza 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.84 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. Una rueda de aluminio bruido que muestra los efectos de reflexin y de sombras generados con tcnicas
de trazado de rayos distribuido. (Cortesa de Stephen H. Westin, Program of Computer Graphics, Cornell University.)

FIGURA 10.86. Una escena de una habitacin representada mediante mtodos de trazado de rayos distribuido. (Cortesa
de John Snyder, Jed Lengyel, Devendra Kalra y Al Barr, Computer Graphics Lab, California Institute of Technology.
1988 Caltech.)

CAP10_HEARN_1P.qxd

638

09/10/2005

14:31

Pgina 638

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 la sombra de la copa. (Cortesa de Peter Shirley,
Computer Science Department, University of Utah.)

10.12 MODELO DE ILUMINACIN DE RADIOSIDAD


Aunque el modelo bsico de iluminacin produce resultados razonables para muchas aplicaciones, hay diversos efectos de iluminacin que no quedan descritos de forma precisa mediante las aproximaciones simples de
este modelo. Podemos modelar ms adecuadamente los efectos de iluminacin si tenemos en cuenta las leyes
fsicas que gobiernan las transferencias de energa radiante dentro de una escena iluminada. Este mtodo para
el clculo de los valores de color de los pxeles se denomina generalmente modelo de radiosidad.

Trminos de la energa radiante


En el modelo cuntico de la luz, la energa de la radiacin es transportada por los fotones individuales. Para
la radiacin luminosa monocromtica, la energa de cada fotn se calcula como:
Efotn, f  h f

(10.86)

donde la frecuencia f, 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 tasa 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 
1034 julios sec, independientemente de la frecuencia de la luz.
La energa total para la radiacin luminosa monocromtica es:
Ef =

hf

(10.87)

todos los
fotones

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-

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 639

10.12 Modelo de iluminacin de radiosidad

639

tiene un rango de frecuencias. Por tanto, la energa radiante total es la suma para todos los fotones de todas
las frecuencias:
E=
f

(10.88)

hf

todos los
fotones

La cantidad de energa radiante transmitida por unidad de tiempo se denomina flujo radiante :
=

dE
dt

(10.89)

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 flujo radiante por
unidad de rea que abandona cada superficie. Esta cantidad se denomina radiosidad B o exitancia radiante,
B=

d
dA

(10.90)

que se mide en unidades de vatios por metro2. Y la intensidad I 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/(metro2 tereorradianes). Sin embargo, en ocasiones la intensidad se define simplemente como el
flujo radiante en una direccin concreta.
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 flujo radiante o de
la radiosidad por unidad de ngulo slido.

Modelo bsico de radiosidad


Para describir con precisin las reflexiones difusas de una superficie, el modelo de radiosidad calcula las interacciones de energa radiante entre todas las superficies de una escena. Puesto que el conjunto resultante de
ecuaciones puede ser extremadamente difcil de resolver, el modelo bsico de radiosidad presupone que todas
las superficies son reflectores difusos ideales, pequeos y opacos (lambertianos).
Aplicamos el modelo de radiosidad determinando la cantidad diferencial de flujo radiante dB que sale de
cada punto superficial de la escena, y luego sumamos las contribuciones de energa para todas las superficies
con el fin de obtener la cantidad de energa transferida entre las mismas. En la Figura 10.88, que ilustra la
transferencia de energa radiante desde una superficie, dB es el flujo radiante visible que emana del punto de
la superficie en la direccin dada por los ngulos y dentro de un ngulo slido diferencial d por unidad
de tiempo, por unidad de rea superficial.
N

dB

d
dA cos

FIGURA 10.88. Energa radiante visible emitida desde


un punto de una superficie en la direccin (, ) dentro del ngulo slido d.

Direccin de
transferencia
de energa

dA

FIGURA 10.89. Para un elemento unitario de superficie, el rea proyectada perpendicular a la direccin de
transferencia de energa es igual a cos .

CAP10_HEARN_1P.qxd

640

09/10/2005

14:31

Pgina 640

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

La intensidad I para la radiacin difusa en la direccin (, ) puede describirse como la energa radiante
por unidad de tiempo por unidad de rea proyectada por unidad de ngulo slido, o:
dB
d cos

I=

(10.91)

Suponiendo que la superficie sea un reflector difuso ideal (Seccin 10.3), podemos definir la intensidad I
como constante para todas las direcciones de visualizacin. Por tanto, dB/d es 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:
B=

(10.92)

dB

hemi

Para un reflector difuso perfecto, I es constante, por lo que podemos expresar el flujo radiante B como:
B=I

cos d

(10.93)

hemi

Asimismo, el elemento diferencial de ngulo slido d puede expresarse como (Apndice A):
d =

dS
= sin d d
r2

de modo que,
B=I

/2

cos sin d d

= I

(10.94)

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

dB
N

dS
d

Bk
Hk

y
x

FIGURA 10.90. La energa radiante total para un punto


de la superficie es la suma de las contribuciones en
todas las direcciones de un hemisferio centrado en
dicho punto de la superficie.

Superficie k

FIGURA 10.91. Un cierre de superficies para el modelo de radiosidad.

CAP10_HEARN_1P.qxd

09/10/2005

14:31

Pgina 641

10.12 Modelo de iluminacin de radiosidad

641

(fuente luminosa) o una combinacin reflector-emisor. Designamos el parmetro de radiosidad Bk como la


tasa total de energa radiante que abandona la superficie k por unidad de rea. El parmetro de la energa inicidente Hk 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,
H k = B j Fjk

(10.95)

donde el parmetro Fjk se denomina factor de forma para las superficies j y k. El factor de forma Fjk 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 superficie k se describe
mediante la ecuacin de radiosidad:
Bk = Ek + k H k
n

= Ek + k

B F
j

jk

(10.96)

j =1

Si la superficie k no es una fuente luminosa, entonces Ek = 0. En caso contrario, Ek ser la tasa de energa
emitida desde la superficie k por unidad de rea (vatios/m2). El parmetro k es el factor de reflectividad para
la superficie k (porcentaje de la luz incidente que es reflejado en todas direcciones). Este factor de reflectividad 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 Fkk para estas superficies es 0.
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
Ek, k y Fjk. En otras palabras, debemos resolver:
(1 k Fkk ) Bk k B j Fjk = Ek

k = 1, 2, 3, . . ., n

(10.97)

1 1 F11 1 F12 " 1 F1n B1 E1


F
1 2 F22 " 2 F2 n B2 E2
2 21

# #
#
#
#

F
"
1

En
n nn Bn
n n1
n n2

(10.98)

jk

o,

Despus, convertimos los valores de intensidad Ik dividiendo los valores de radiosidad Bk por . Para imgenes en color, podemos calcular los componentes RGB individuales de la radiosidad (BkR, BkG, BkB) utilizando las componentes de color para k y Ek.
Antes de poder resolver la Ecuacin 10.97, debemos determinar los valores de los factores de forma Fjk.
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 dAk procedente del elemento de
rea dAj es:
dBj dAj  (I j cos j d) dAj
(10.99)
Pero el ngulo slido d puede escribirse en trminos de la proyeccin del elemento de rea dAk en perpendicular a la direccin dBj, de la forma siguiente:
d =

dA cos k dAk
=
r2
r2

Por tanto, podemos expresar la Ecuacin 10.99 en la forma:

(10.100)

CAP10_HEARN_1P.qxd

642

09/10/2005

14:32

Pgina 642

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

dAk
Nk

Superficie k
k

d
Nj
dBj

FIGURA 10.92. Transferencia


de una cantidad diferencial de
energa radiante dBj desde un
elemento de superficie con rea
dAj hacia el elemento de superficie dAk.

j
dAj

Superficie j

dB j dAj =
en:

I j cos j cos k dAj dAk

(10.101)

r2

El factor de forma entre las dos superficies es el porcentaje de la energa que emana del rea dAj e incide
FdAj , dAk =

energa incidente en dAk


energa total que sale de dAj
I j cos j cos k dAj dAk
r2

(10.102)

1
B j dAj

Asimismo, Bj  Ij, de modo que:


cos j cos k dAk

FdAj , dAk =

(10.103)

y la fraccin de la energa emitida desde el rea dAj y que incide en la superficie completa k es:
FdAj , Ak =

cos j cos k

surf j

r2

(10.104)
dAk

donde Ak es el rea de la superficie k. Podemos entonces definir el factor de forma entre las dos superficies
como el promedio de la expresin anterior para todo el rea, que ser:

Fjk =

1
Aj


surf j

surfk

cos j cos k

(10.105)

dAk dAj

Las dos integrales de la Ecuacin 10.105 se evalan utilizando tcnicas de integracin numrica y estipulando las siguientes condiciones:

k =1 Fjk
n

= 1, para todo k (conservacin de la energa)

Aj Fjk = Ak Fkj (reflexin uniforme de la luz)


Fjj = 0, para todo j (suponiendo slo parches superficiales planos o convexos)

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 643

10.12 Modelo de iluminacin de radiosidad

643

Para aplicar el modelo de radiosidad, subdividimos 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 Bj 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 k utilizando
los valores de radiosidad previamente obtenidos en la ecuacin de radiosidad:
n

Bk = Ek + k B j Fjk
j =1

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.

Mtodo de radiosidad mediante refinamiento progresivo


Aunque el mtodo de radiosidad produce representaciones altamente realistas de las superficies, se necesita
un tiempo de procesamiento considerable para calcular los factores de forma y adems los requisitos de almacenamiento son muy altos. Utilizando la tcnica de refinamiento progresivo, podemos reestructurar el algoritmo iterativo de radiosidad para acelerar los clculos y reducir los requisitos de almacenamiento en cada
iteracin.
A partir de la ecuacin de radiosidad, la transferencia de energa radiante entre dos parches de superficie
se calcula como:
Bk debido a Bj  k Bj Fjk

(10.106)

Bj debido a Bk  j Bk Fk j, para todo j

(10.107)

Recprocamente,
que podemos reescribir como:
B j debido a Bk = j Bk Fjk

Aj
Ak

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 k, podemos calcular todos los factores de forma Fjk 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 Bk  Ek para 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:

CAP10_HEARN_1P.qxd

644

09/10/2005

14:32

Pgina 644

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

for each patch k


\* Definir hemicubo y calcular factores de forma F [j][k]. */
for each patch j {
dRad  rho [j] * B [k] * F [j][k] * A [j] / A [k];
dB [j]  dB [j]  dRad;
B [j]  B [j]  dRad;
}
dB [k]  0;

En cada paso, se selecciona el parche superficial con el mayor valor de Bk Ak, dado que la radiosidad es
una medida de la energa radiante por unidad de rea. Asimismo, seleccionamos los valores iniciales como
Bk  Bk  Ek 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 visualizacin 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 el modelo de radiosidad con el fin de producir sombreados superficiales especulares y difusos
altamente realistas, como en la Figura 10.87.

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 Hewlett-Packard. Los factores de forma de radiosidad se calcularon mediante mtodo de trazado de rayos.
(Cortesa de Eric Haines, Autodesk, Inc. 1989 Hewlett-Packard Co.)

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 645

10.12 Modelo de iluminacin de radiosidad

FIGURA 10.94. Imagen de un museo constructivista


representada mediante un mtodo de radiosidad de refinamiento progresivo. (Cortesa de Shenchang Eric Chen,
Stuart I. Feldman y Julie Dorsey, Program of Computer
Graphics, Cornell University. 1988 Cornell University
Program of Computer Graphics.)

(a)

645

FIGURA 10.95. Simulacin de la escalera de la


torre en el Engineering Theory Center Building de
la Universidad de Cornell, representado mediante
un mtodo de radiosidad de refinamiento progresivo. (Cortesa de Keith Howie y Ben Trumbore,
Program of Computer Graphics, Cornell University. 1990 Cornell University Program of
Computer Graphics.)

(b)

FIGURA 10.96. Simulacin de dos esquemas de iluminacin para un decorado utilizado en la representacin de La
Bohemia en el Teatro Metropolitano de la pera. En (a) se incluye una vista diurna completamente iluminada, mientras
que en (b) podemos ver una vista nocturna. (Cortesa de Julie Dorsey y Mark Shepard, Program of Computer Graphics,
Cornell University. 1991 Cornell University Program of Computer Graphics.)

CAP10_HEARN_1P.qxd

646

09/10/2005

14:32

Pgina 646

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 de entorno sobre un objeto en relacin con la
direccin de visualizacin. Este procedimiento se denomina mapeado de entorno o en ocasiones mapeado
de reflexin (aunque tambin podran modelarse efectos 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 entorno 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 entorno. El proceso de mapeado de entorno 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.

10.14 MAPEADO DE FOTONES


Aunque el mtodo de radiosidad puede producir imgenes precisas con efectos de iluminacin globales para
las escenas simples, este mtodo se hace ms difcil de aplicar a medida que se incrementa la complejidad de
una escena. Tanto el tiempo de representacin como los requisitos de almacenamiento se hacen prohibitivos
para las escenas muy complicadas, y muchos efectos de iluminacin son difciles de modelar correctamente.
El mapeado de fotones proporciona un mtodo general eficiente y preciso para modelar la iluminacin global en las escenas complejas.
El concepto bsico del mapeado de fotones consiste en separar la informacin de iluminacin de la geometra de una escena. Se trazan trayectorias de rayos a travs de la escena desde todas las fuentes luminosas y la

Mapa de
entorno
esfrico

Superficie
del objeto

Proyeccin del pxel


sobre el mapa
de entorno

rea del
pxel

Objetos de
la escena
Punto de referencia
de proyeccin

FIGURA 10.97. Universo esfrico con el mapa de entorno 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 entorno.

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 647

10.15 Adicin de detalles a las superficies

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
incrementales 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 los efectos de iluminacin se incrementa a medida que
se generan ms trayectorias de rayos.

10.15 ADICIN DE DETALLES A LAS SUPERFICES


Hasta ahora hemos expuesto las tcnicas de representacin para la visualizacin de superficies suaves de los
objetos. Sin embargo, la mayora de los objetos no tienen superficies suaves y homogneas. Necesitamos las
texturas superficiales para modelar de manera precisa objetos tales como paredes de ladrillo, carreteras de
grava, alfombras, madera o piel humana. Adems, algunas superficies contienen patrones que es preciso tener

(a)

(b)

(c)

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 (c) figura final representada, incluyendo el pelo y los detalles relativos a la ropa y a las caractersticas de la piel. (Cortesa de
Square Pictures, Inc. 2001 FFFP. Todos los derechos reservados.)

CAP10_HEARN_1P.qxd

648

09/10/2005

14:32

Pgina 648

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 contorno 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 tela) 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.

(a)

(b)

FIGURA 10.100. Detalles de la piel para el personaje animado Dr. Aki Ross en la pelcula Final Fantasy: The Spirits
Within. (Cortesa de Square Pictures, Inc. 2001 FFFP. Todos los derechos reservados.)

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 649

10.15 Adicin de detalles a las superficies

649

FIGURA 10.101. Caractersticas faciales


y textura superficial de la piel para el
personaje animado Dr. Sid, que representa a un hombre de 70 aos de edad en
la pelcula Final Fantasy: The Spirits
Within. (Cortesa de Square Pictures,
Inc. 2001 FFFP. Todos los derechos
reservados.)

(a)

(b)

(c)

(d)

FIGURA 10.102. Escenas que ilustran la generacin infogrfica de detalles superficiales para diversos objetos: (a) plantas
de cactus a las que se les han aadido espinas y flores (cortesa de Deborah R. Fowler, Przemyslaw Prusinkiewicz y
Johannes Battjes, University of Calgary. 1992.), (b) conchas marinas con diversos patrones y superficies en relieve
(cortesa de Deborah R. Fowler, Hans Meinhardt y Przemyslaw Prusinkiewicz, University of Calgary. 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 SOFTIMAGE, Inc.).

CAP10_HEARN_1P.qxd

650

09/10/2005

14:32

Pgina 650

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

10.16 MODELADO DE LOS DETALLES SUPERFICIALES MEDIANTE


POLGONOS
Un mtodo simple para aadir detalles a una superficie consiste en modelar patrones u otras caractersticas
superficiales utilizando caras poligonales. Para detalles a gran escala, el modelado mediante polgonos puede
proporcionar buenos resultados. Algunos ejemplos de dichos detalles a gran escala seran los cuadrados en un
tablero de ajedrez, las lneas divisorias en una autopista, los patrones de las baldosas en un suelo de linleo,
los diseos florales en una alfombra, los paneles de una puerta o los anuncios en el lateral de un camin.
Tambin podramos modelar una superficie irregular con pequeas caras poligonales aleatoriamente orientadas, siempre y cuando las caras no sean excesivamente pequeas.
Los polgonos para la aplicacin de patrones superficiales se suelen solapar sobre una superficie poligonal mayor y se procesan junto con esa superficie padre. El algoritmo de deteccin de superficies visibles slo
procesa al polgono padre, pero los parmetros de iluminacin de los polgonos de detalle superficial tienen
preferencia sobre los del polgono padre. Cuando haya que modelar detalles superficiales intrincados o muy
precisos, los mtodos basados en polgonos no son prcticos. Por ejemplo, sera difcil modelar con precisin
la estructura superficial de uva pasa utilizando caras poligonales.

10.17 MAPEADO DE TEXTURAS


Un mtodo comn para aadir detalles a un objeto consiste en mapear patrones sobre la descripcin geomtrica del objeto. El patrn de texturas puede definirse mediante una matriz de valores de color o mediante un
procedimiento que modifique los colores del objeto. Este mtodo para incorporar detalles de los objetos a una
escena se denomina mapeado de texturas o mapeo de patrones y las texturas pueden definirse como patrones unidimensionales, bidimensionales o tridimensionales. Cualquier especificacin de textura se denomina
espacio de textura, que se referencia mediante coordenadas de textura comprendidas en el rango que va de
0 a 1.0.
Las funciones de textura en un paquete grfico permiten a menudo especificar como opcin el nmero de
componentes de color para cada posicin de un patrn. Por ejemplo, cada especificacin de color en un patrn
de textura podra estar compuesta por cuatro componentes RGBA, tres componentes RGB, un nico valor de
intensidad para un tono de azul, un ndice a una tabla de colores o un nico valor de luminancia (una media
ponderada de las componentes RGB de un color). Cada componente de la descripcin de una textura se denomina frecuentemente texel, pero existe una cierta confusin en el uso de este trmino. Algunas veces, una
posicin de un espacio de texturas correspondiente a un conjunto de componentes de color, como por ejemplo una tripleta RGB, se denomina texel, mientras que en otras ocasiones se denomina texel a un nico elemento de la matriz de texturas, como por ejemplo el valor de la componente roja de un color RGB.

Patrones de textura lineales


Puede especificarse un patrn de textura unidimensional mediante una matriz de valores de color con un slo
subndice, definiendo esta matriz una secuencia de colores en un espacio de texturas lineal. Por ejemplo,
podramos definir una lista de 32 colores RGB a la que hiciramos referencia mediante unos valores de subndice que fueran de 0 a 95. Los primeros tres elementos de la matriz almacenan las componentes RGB del primer color, los siguientes tres elementos almacenan las componentes RGB del segundo color, etc. Este
conjunto de colores, o cualquier subconjunto contiguo de los colores, podra entonces usarse para formar una
lnea con un cierto patrn a travs de un polgono, una banda alrededor de un cilindro o un patrn de color
para mostrar un segmento de lnea asilado.
Para un patrn lineal, el espacio de texturas se referencia mediante un nico valor de la coordenada s. Para
las especificaciones de color RGB, el valor s  0.0 designa el primer color RGB de la matriz (formado por

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 651

10.17 Mapeado de texturas

651

tres elementos), el valor s  1.0 designa las ltimas tres componentes de color de RGB y el valor s  0.5 referencia los tres elementos intermedios de color RGB de la matriz. Por ejemplo, si el nombre de la matriz de
textura es colorArray, entonces el valor s  0.0 hace referencia a los tres valores de la matriz colorArray
[0], colorArray [1] y colorArray [2].
Para mapear un patrn de textura lineal sobre una escena, asignamos un valor de la coordenada s a una
posicin espacial y otro valor de la coordenada s 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 s 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 mapearse 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 fuera del intervalo unitario. Si queremos permitir valores de las coordenadas de texturas que caigan fuera del rango que va
de 0 a 1.0, 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.

Patrones de textura superficial


Una textura para un rea superficial se define comnmente mediante un patrn rectangular de color, y las posiciones dentro de este espacio de textura se referencian mediante valores de coordenadas bidimensionales (s,
t). Las especificaciones para cada color de patrn de texturas pueden almacenarse en una matriz con tres
subndices. Si se define un patrn de texturas con 16 por 16 colores RGB, por ejemplo, entonces la matriz
correspondiente a este patrn contendr 16  16  3  768 elementos.
La Figura 10.103 ilustra un espacio de textura bidimensional. Los valores correspondientes a s y t varan
de 0 a 1.0. La primera fila de la matriz enumera los valores de color a lo largo de la parte inferior del patrn
de texturas rectangular, mientras que la ltima fila de la matriz enumera los valores de color correspondientes a la parte superior del patrn. La posicin de coordenadas (0, 0) en el espacio de texturas hace referencia
al primer conjunto de componentes de color en la primera posicin de la primera fila, mientras que la posicin (1.0, 1.0) hace referencia al ltimo conjunto de componentes de color en la ltima posicin de la ltima
fila de la matriz. Por supuesto, podramos enumerar los colores de la matriz de texturas de otras formas; si
enumerramos los colores de arriba a abajo, el origen del espacio de textura bidimensional estara en la esquina superior izquierda del patrn rectangular. Pero colocar el origen del espacio de texturas en la esquina inferior izquierda suele simplificar los procedimientos de mapeado sobre la referencia de coordenadas espaciales
de una escena.
Especificamos un mapeado de textura superficial para un objeto utilizando los mismos procedimientos que
para mapear una textura lineal sobre la escena. Pueden asignarse las coordenadas (s, t) del espacio de textu-

CAP10_HEARN_1P.qxd

652

09/10/2005

14:32

Pgina 652

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

t
n columnas
(1, 1)

(0, 1)
fila m  1

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 n columnas. Cada posicin de la matriz hace
referencia a mltiples componentes de color.

Espacio de
textura:
coordenadas
(s, t)

fila 1
fila 0
(0, 0)

(1, 0)

Espacio
de objeto:
parmetros de
superficie (u, v)
Transformacin
textura-superficie

Espacio
de imagen:
coordenadas (x, y)
del pxel
Transformacin de
visualizacin
de proyeccin

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 spline 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 mapear 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 transformacin 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(s, t ) = au s + bu t + cu
v = v(s, t ) = av s + bv t + cv

(10.109)

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

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 653

10.17 Mapeado de texturas

rea de pxel
proyectada

653

M1
VP

M1
T

rea
de pxel

Superficie
Matriz de patrn
rectangular

FIGURA 10.105. Mapeado de texturas mediante proyeccin de reas de pxel sobre el espacio de texturas.
rea de pxel
ampliada

FIGURA 10.106. rea ampliada para un pxel, 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 transfor1
macin de visualizacin-proyeccin MVP
y la inversa de la transformacin del mapa de texturas MT1 . En el
siguiente ejemplo, vamos a ilustrar este tcnica mapeando un patrn definido sobre una superficie cilndrica.
Ejemplo 10.1 Mapeado de una textura superficial
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 cilndrica. Los parmetros de superficie son
las coordenadas cilndricas:
u  ,
vz
con,
0 /2,
0z1
Y la representacin paramtrica para la superficie en el sistema de referencia cartesiano es:
x  r cos u,

y  r sin u,

zv

Podemos mapear el patrn matricial sobre la superficie utilizando la siguiente transformacin lineal, que transforma las coordenadas del espacio de textura (s, t)  (0, 0) en la esquina inferior izquierda del elemento de superficie (x, y, z)  (r, 0, 0).

CAP10_HEARN_1P.qxd

654

09/10/2005

14:32

Pgina 654

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


t
1.0

0.75
r
0.5
0.25

0.25

0.5

0.75

1.0

(u, v)
y

(a)

(b)

FIGURA 10.107. Mapeado de un patrn de texturas definido dentro de un cuadrado unitario (a) sobre una superficie cilndrica (b).

u  s/2,

vt

A continuacin, seleccionamos una posicin de visualizacin y aplicamos la transformacin de


visualizacin inversa desde las coordenadas de pxel hasta el sistema de referencia cartesiano de la
superficie cilndrica. Despus, las coordenadas de la superficie cartesiana se transfieren a los parmetros de superficie uv mediante los clculos
u  tan1(y/x),

vz

y las posiciones de pxel proyectada se mapean sobre el espacio de texturas mediante la transformacin inversa
s  2u/,

tv

Entonces se promedian los valores de color en la matriz del patrn cubierta por cada rea de pxel
proyectada con el fin de obtener el color del pxel.

Patrones de textura volumtricos


Adems de los patrones lineales y superficiales, podemos disear un conjunto de colores para una serie de
posiciones en una regin tridimensional del espacio. Estas texturas se denominan a menudo patrones de textura volumtricos o texturas slidas. Podemos hacer referencia a una textura slida utilizando coordenadas
tridimensionales para el espacio de texturas (s, t, r). Y el espacio de textura tridimensional se define dentro de
un cubo unitario, estando las coordenadas de textura comprendidas entre 0 y 1.0.
Un patrn de textura volumtrico puede almacenarse en una matriz de cuatro subndices, en la que los primeros tres subndices denotan la posicin de una fila, la posicin de una columna y una posicin de profundidad. El cuarto subndice se utiliza para hacer referencia a una componente de un color concreto del patrn.
Por ejemplo, un patrn de textura slida RGB con 16 filas, 16 columnas y 16 planos de profundidad podra
almacenarse en una matriz con 16  16  16  3  12.288 elementos.
Para mapear el espacio de texturas completo sobre un bloque tridimensional, asignamos las coordenadas
de las ocho esquinas del espacio de texturas a ocho posiciones del espacio de una escena. O bien, podemos
mapear una seccin plana del espacio de texturas, como por ejemplo un plano de profundidad o una cara del
cubo de texturas, sobre un rea plana de la escena. Existen muchas otras posibles formas de mapear una textura slida.
Las texturas slidas permiten obtener vistas internas, como por ejemplo secciones transversales, para objetos tridimensionales que haya que mostrar con patrones de textura. As, pueden aplicarse a los ladrillos o a los

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 655

10.17 Mapeado de texturas

655

FIGURA 10.108. Una escena en la que se han modelado las caractersticas de los objetos utilizando mtodos de texturas
slidas. (Cortesa de Peter Shirley, Computer Science Department, University of Utah.)

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.

Patrones de reduccin de texturas


En animacin y otras aplicaciones, el tamao de los objetos suelen cambiar a menudo. Para objetos mostrados con patrones de textura, necesitamos entonces aplicar los procedimientos de mapeado de texturas a las
dimensiones modificadas del objeto. Cuando el tamao de un objeto texturado se reduce, el patrn de textura se aplica a una regin ms pequea y esto puede hacer que aparezcan dispersiones en las texturas. Para evitar stos, podemos crear un conjunto de patrones de reduccin de texturas que se debern utilizar cuando
el tamao visualizado de los objetos se reduzca.
Normalmente, cada patrn de reduccin tiene la mitad del tamao del patrn anterior. Por ejemplo, si tenemos un patrn bidimensional 16 por 16, podemos definir cuatro patrones adicionales con los tamaos reducidos 8 por 8, 4 por 4, 2 por 2 y 1 por 1. Para cualquier vista de un objeto, podemos entonces aplicar el patrn
de reduccin apropiado con el fin de minimizar las distorsiones. Estos patrones de reduccin se suelen denominar mapas MIP o mip maps, donde el trmino mip es un acrnimo de la frase latina multum in parvo, que
podra traducirse como mucho en un pequeo objeto.

Mtodos de texturado procedimental


Otro mtodo para aadir un patrn de texturas a un objeto consiste en utilizar una definicin procedimental
para las variaciones de color que hay que aplicar. Esta tcnica evita los clculos de transformacin implicados en el mapeado de patrones matriciales sobre las descripciones de los objetos. Adems, el texturado procedimental elimina los requisitos de almacenamiento necesarios cuando hay que aplicar muchos patrones de
textura de gran tamao, y en especial texturas slidas, a una escena.
Generamos una textura procedimental calculando variaciones para las propiedades o caractersticas de un
objeto. Por ejemplo, las vetas de madera o del mrmol pueden crearse para un objeto utilizando funciones

CAP10_HEARN_1P.qxd

656

09/10/2005

14:32

Pgina 656

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

FIGURA 10.109. Una escena representada con VG Shaders y


modelada con RenderMan utilizando caras poligonales para
las facetas de las gemas, superficies cudricas y parches
bicbicos. 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 the VALIS Group.
Reimpreso de Graphics Gems 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.

10.18 MAPEADO DE RELIEVE


Aunque las matrices de texturas pueden utilizarse para aadir detalles de carcter fino a una superficie, usualmente no son efectivas para modelar la apariencia rugosa de las superficies de algunos objetos tales como
naranjas, fresas o pasas. Los detalles relativos a la intensidad luminosa que se proporcionan en una matriz de
texturas para este tipo de objetos estn definidos de forma independiente de los parmetros de iluminacin,
como por ejemplo la direccin de la fuente luminosa. Un mtodo mejor para modelar la rugosidad de las
superficies consiste en aplicar una funcin de perturbacin a la normal a la superficie y luego usar el vector
normal perturbado en los clculos realizados dentro del modelo de iluminacin. Esta tcnica se denomina
mapeado de relieve (bump mapping).
Si P(u, v) representa una posicin sobre una superficie paramtrica, podemos obtener la normal a la superficie en dicho punto mediante el clculo:
N = Pu Pv

(10.110)

donde Pu y Pv 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

(10.111)

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:

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 657

10.18 Mapeado de relieve

N = Pu Pv

657

(10.112)

La derivada parcial de P con respecto a u es:

( P + bn )
u
= Pu + bu n + bnu

Pu =

(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:
Pu Pu + bu n

(10.114)

Pv Pv + bv n

(10.115)

De forma similar,

Y la normal a la superficie perturbada ser:

(a)

(b)

FIGURA 10.110. Representacin del aspecto


caracterstico de las superficies rugosas
mediante mapeado de relieve. (Cortesa de
(a) Peter Shirley, Computer Science Department, Universdad de Utah y (b) SOFTIMAGE, Inc.)

CAP10_HEARN_1P.qxd

658

09/10/2005

14:32

Pgina 658

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

FIGURA 10.111. El caballero


de cristal de la pelcula El joven
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 Pictures/Amblin.)

N = Pu Pv + bv (Pu n) + bu (n Pv ) + bu bv (n n)
Pero n  n  0, de modo,
N = N + bv (Pu n) + bu (n Pv )

(10.116)

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 b(u, 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 incrementales. Entonces, las derivadas parciales bu y bv 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 antialiasing, suprimimos las reas de pxel y promediamos las intensidades calculadas de los subpxeles.
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 Holmes 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.

10.19 MAPEADO DEL SISTEMA DE REFERENCIA


Este mtodo para aadir detalle a las superficies es una extensin del mapeado de relieve. En el mapeado del
sistema de referencia (frame mapping), perturbamos tanto el vector normal a la superficie N como un sistema de coordenadas local (Figura 10.112) asociado a N. Las coordenadas locales se definen mediante un vector tangente a la superficie T y un vector binormal B  T  N.
El mapeado del sistema de referencia se utiliza para modelar superficies anistropas. Orientamos T a lo
largo de la veta de la superficie y aplicamos perturbaciones direccionales, adems de las perturbaciones de

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 659

10.20 Funciones OpenGL de iluminacin y representacin de superficies

659

Superficie

FIGURA 10.112. Un sistema de coordenadas local en una posicin de la


superficie.

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 direccionales pueden generarse utilizando tablas de sustitucin.

10.20 FUNCIONES Open GL DE ILUMINACIN Y REPRESENTACIN DE


SUPERFICIES
En OpenGL hay disponibles diversas rutinas para definir fuentes de luz puntuales, para seleccionar los coeficientes de reflexin superficiales y para elegir valores para otros parmetros del modelo bsico de iluminacin. Adems, podemos simular la transparencia y podemos mostrar los objetos utilizando representacin
plana de las superficies o representacin de Gouraud.

Funcin OpenGL para fuentes luminosas puntuales


Podemos incluir mltiples fuentes luminosas puntuales en la descripcin OpenGL de una escena, teniendo
asociadas cada fuente luminosa diversas propiedades, como su posicin, tipo, color, atenuacin y efectos de
foco direccional. Podemos establecer un valor de una propiedad para una fuente luminosa con la funcin:
glLight* (lightName, lightProperty, propertyValue);

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 propertyValue ser un puntero a una matriz. Puede hacerse referencia a cada fuente luminosa
mediante un identificador, y al parmetro lightName se le asigna uno de los identificadores simblicos
OpenGL GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, . . . , GL_LIGHT7, aunque algunas implementaciones de
OpenGL pueden permitir ms de ocho fuentes luminosas. De forma similar, al parmetro lightProperty
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:
glEnable (lightName);

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.

Especificacin de la posicin y el tipo de una fuente luminosa en OpenGL


La constante simblica de propiedad OpenGL para designar la posicin de una fuente luminosa es GL_POSITION. En realidad, esta constante simblica se utiliza para definir dos propiedades de las fuentes luminosas

CAP10_HEARN_1P.qxd

660

09/10/2005

14:32

Pgina 660

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

al mismo tiempo: la posicin de la fuente luminosa y el tipo de la fuente luminosa. Hay 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 lnea 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 de
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 posicional 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 1 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 light1PosType [ ]  {2.0, 0.0, 3.0, 1.0};
GLfloat light2PosType [ ]  {0.0, 1.0, 0.0, 0.0};
glLightfv (GL_LIGHT1, GL_POSITION, light1PosType);
glEnable (GL_LIGHT1);
glLightfv (GL_LIGHT2, GL_POSITION, light2PosType);
glEnable (GL_LIGHT2);

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.

Especificacin de los colores de las fuentes luminosas en OpenGL


A diferencia de una fuente luminosa real, una fuente en OpenGL tiene tres diferentes propiedades de color
RGBA. En este esquema emprico, los tres colores de la fuente luminosa proporcionan opciones para variar
los efectos de iluminacin de una escena. Configuramos estos colores utilizando las constantes simblicas de
propiedad del color GL_AMBIENT, GL_DIFFUSE y GL_SPECULAR. A cada uno de estos colores se le asigna un
conjunto de cuatro valores de coma flotante. Las componentes de cada color se especifican en el orden (R, G,
B, A) y la componente alpha se utiliza slo si estn activadas las rutinas de mezcla de color. Como cabe suponer a partir de los nombres de las constantes simblicas de propiedad del color, uno de los colores de la fuente luminosa contribuye a la luz de fondo (ambiente) de la escena, otro color se utiliza en los clculos de

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 661

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 GL_LIGHT3, y
asignamos el color blanco a los colores difuso y especular.
GLfloat blackColor [ ]  {0.0, 0.0, 0.0, 1.0};
GLfloat whiteColor [ ]  {1.0, 1.0, 1.0, 1.0};
glLightfv (GL_LIGHT3, GL_AMBIENT, blackColor);
glLightfv (GL_LIGHT3, GL_DIFFUSE, whiteColor);
glLightfv (GL_LIGHT3, GL_SPECULAR, whiteColor);

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 dl 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 GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION y GL_QUADRATIC_ATTENUATION, que se corresponden con los coeficientes a0,
a1 y a2 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:
glLightf (GL_LIGHT6, GL_CONSTANT_ATTENUATION, 1.5);
glLightf (GL_LIGHT6, GL_LINEAR_ATTENUATION, 0.75);
glLightf (GL_LIGHT6, GL_QUADRATIC_ATTENUATION, 0.4);

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 a0  1.0, a1  0.0 y a2  0.0. As, la opcin predeterminada es que no haya
atenuacin radial: fl,radatten  1.0. Aunque la atenuacin radial puede producir imgenes ms realistas, los clculos consumen mucho tiempo.

Fuentes luminosas direccionales en OpenGL (focos)


Para fuentes luminosas locales (aquellas que no se considera que estn en el infinito), podemos tambin especificar un efecto direccional o de foco. Esto limita la luz emitida de la fuente a una regin del espacio con
forma de cono. Definimos la regin cnica mediante un vector de direccin segn el eje del cono mediante
una apertura angular l con respecto al eje del cono, como se muestra en la Figura 10.113. Adems, podemos
especificar un exponente angular de atenuacin al para la fuente luminosa, que determinar cunto decrece la
intensidad de la luz a medida que nos alejamos desde el centro del cono hacia la superficie del mismo. A lo
largo de cualquier direccin dentro del cono de luz, el factor de atenuacin angular es cosa1 (Ecuacin 10.5),
donde cos se calcula como el producto escalar del vector del eje del cono y del vector que une la fuente
luminosa con la posicin de un objeto. Calculamos el valor para cada uno de los colores ambiente, difuso y
especular en un ngulo multiplicando las componentes de intensidad por este factor de atenuacin angular.
Si > l, el objeto estar fuera del cono de la fuente luminosa y no ser iluminado por sta. Para los rayos
de luz que se encuentran dentro del cono, tambin podemos atenuar radialmente los valores de intensidad.

CAP10_HEARN_1P.qxd

662

09/10/2005

14:32

Pgina 662

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Al vrtice
del objeto

Vector del eje


del cono

l
Fuente
luminosa

FIGURA 10.113. Un cono circular de luz emitido por una


fuente luminosa OpenGL. La extensin angular del cono
de luz, medido desde el eje del cono, es l y el ngulo
desde el eje al vector de direccin de un objeto se designa mediante .

Hay tres constantes de propiedad OpenGL para los efectos direccionales: GL_SPOT_DIRECTION,
GL_SPOT_CUTOFF y GL_SPOT_EXPONENT. Especificamos la direccin de la luz como un vector en coordenadas universales enteras o de coma flotante. El ngulo del cono l se especifica como un valor entero o de
coma flotante 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
rango 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 x, el ngulo del cono l
es 30 y el exponente de atenuacin es 2.5.
GLfloat dirVector [ ]  {1.0, 0.0, 0.0};
glLightfv (GL_LIGHT3, GL_SPOT_DIRECTION, dirVector);
glLightf (GL_LIGHT3, GL_SPOT_CUTOFF, 30.0);
glLightf (GL_LIGHT3, GL_SPOT_EXPONENT, 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.

Parmetros de iluminacin globales en OpenGL


Pueden especificarse diversos parmetros de iluminacin en OpenGL a nivel global. Estos valores se utilizan
para controlar la forma en que se llevan a cabo determinados clculos de iluminacin, y un valor de parmetro global se especifica mediante la siguiente funcin:
glLightModel* (paramName, paramValue);

Agregamos un cdigo de sufijo igual a i o f, dependiendo del tipo de dato del valor del parmetro. Y para
los datos 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
glLightModel, podemos definir un nivel global de luz ambiente, podemos especificar cmo hay que calcu-

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 663

10.20 Funciones OpenGL de iluminacin y representacin de superficies

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 OpenGL en 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:
globalAmbient [ ]  {0.0, 0.0, 0.3, 1.0);
glLightModelfv (GL_LIGHT_MODEL_AMBIENT, globalAmbient);

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
reflexin 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 constante est en la direccin z positiva, (0.0, 0.0, 1.0), y es el valor predeterminado para V, pero
si queremos 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_VIEWER, 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 GL_FALSE (o 0, o 0.0) para el parmetro del observador local.
Cuando se aaden texturas superficiales a los clculos de iluminacin OpenGL, los resaltes 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 los 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_SEPARATE_SPECULAR_COLOR);

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 GL_SINGLE_COLOR, 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 corte 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_MODEL_TWO_SIDE, GL_TRUE);

CAP10_HEARN_1P.qxd

664

09/10/2005

14:32

Pgina 664

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 GL_FALSE (o 0, o 0.0)
en la funcin glLightModel, valor que es el que se usa de manera predeterminada.

Funcin OpenGL de propiedad de una superficie


Los coeficientes de reflexin y otras propiedades pticas de las superficies se configuran utilizando la funcin:
glMaterial* (surfFace, surfProperty, propertyValue);

A la funcin se le aade un cdigo de sufijo i o f, dependiendo del tipo de dato del valor de la propiedad,
y tambin se agrega el cdigo v cuando se suministran propiedades que toman como valor un vector. Al parmetro surfFace se le asigna una de las constantes simblicas GL_FRONT, GL_BACK o
GL_FRONT_AND_BACK; el parmetro surfProperty es una constante simblica que identifica un parmetro
de la superficie tal como Isurf, ka, kd, ks o ns; y el parmetro propertyValue hay que configurarlo con el
correspondiente valor. Todas las propiedades, exceptuando el componente de reflexin especular ns, se especifican como valores vectoriales. Para establecer todas las propiedades de iluminacin de un objeto utilizamos una secuencia de funciones glMaterial, antes de ejecutar los comandos que describen la geometra del
objeto.
El valor RGBA para el color de emisin de la superficie, Isurf, se selecciona utilizando la constante simblica OpenGL de propiedad de la superficie GL_EMISSION. Como ejemplo, la siguiente instruccin establece el color de emisin para las superficies frontales asignndole un color gris claro:
surfEmissionColor [ ]  {0.8, 0.8, 0.8, 1.0};
glMaterialfv (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, GL_DIFFUSE 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 GL_AMBIENT_AND_DIFFUSE. 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 predeterminados para el coeficiente especular son (1.0, 1.0, 1.0, 1.0). Para definir el exponente de reflexin especular, utilizamos la constante GL_SHININESS. 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 [ ]  {0.2, 0.4, 0.9, 1.0};
specularCoeff [ ]  {1.0, 1.0, 1.0, 1.0};
glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE,
diffuseCoeff);
glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, specularCoeff);
glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 25.0);

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

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 665

10.20 Funciones OpenGL de iluminacin y representacin de superficies

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).

Modelo de iluminacin OpenGL


OpenGL calcula los efectos de iluminacin superficiales utilizando el modelo bsico de iluminacin 10.19,
con algunas variaciones sobre la forma de especificar ciertos parmetros. El nivel de luz ambiente es la suma
de las componentes de ambiente de las fuentes luminosas y del valor global de luz ambiente. Los clculos de
reflexin difusa utilizan las componentes de intensidad difusa de las fuentes luminosas y los clculos de reflexin especular utilizan la componente de intensidad especular de cada fuente.
Asimismo, el vector unitario V, especifica la direccin desde una posicin de la superficie hasta una posicin de visualizacin, y se le puede asignar el valor constante (0.0, 0.0, 0.0) si no se utiliza la opcin de observador local. Para una fuente luminosa situada en el infinito, el vector unitario de direccin de la luz L est
en la direccin opuesta a la que se haya asignado a los rayos de luz procedentes de dicha fuente.

Efectos atmosfricos en OpenGL


Despus de haber aplicado el modelo de iluminacin con el fin de obtener los colores superficiales, podemos
asignar un color a la atmsfera de una escena y combinar los colores superficiales con dicho color de atmsfera. Tambin podemos usar una funcin de atenuacin de la intensidad atmosfrica con el fin de simular la
visualizacin de la escena a travs de una atmsfera neblinosa o llena de humo. Los diversos parmetros
atmosfricos se configuran utilizando la funcin glFog que hemos presentado en la Seccin 9.14:
glEnable (GL_FOG);
glFog* (atmoParameter, paramValue);

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:
GLfloat atmoColor [4]  {0.8, 0.8, 1.0, 1.0};
glFogfv (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.

CAP10_HEARN_1P.qxd

666

09/10/2005

14:32

Pgina 666

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Funciones de transparencia OpenGL


En OpenGL pueden simularse algunos efectos de transparencia utilizando las rutinas de mezcla de color descritas en la Seccin 4.3. Sin embargo, la implementacin de la transparencia en un programa OpenGL no suele
ser sencilla. Podemos combinar los colores de los objetos para una escena simple que contenga unas pocas
superficies opacas y transparentes utilizando el valor de mezcla alpha para especificar el grado de transparencia y procesando las superficies segn su orden de profundidad. Pero las operaciones de mezcla de color
OpenGL ignoran los efectos de refraccin, y el manejo de superficies transparentes en escenas complejas con
una diversidad de condiciones de iluminacin o con animaciones puede resultar muy complicado. Asimismo,
OpenGL no proporciona ninguna funcionalidad para simular la apariencia superficial de un objeto translcido (como por ejemplo un cristal esmerilado), que dispersa de manera difusa la luz transmitida a travs del
material semitransparente. Por tanto, para mostrar superficies translcidas o los efectos de iluminacin resultantes de la refraccin, necesitamos describir nuestras propias rutinas. Para simular los efectos de iluminacin
a travs de un objeto translcido, podemos utilizar una combinacin de valores de textura superficial y de propiedades del material. Para los efectos de refraccin, podemos desplazar las posiciones de pxel para las superficies que se encuentren detrs de un objeto transparente, utilizando la Ecuacin 10.29 para calcular el
desplazamiento necesario.
Podemos designar como transparentes los objetos de una escena utilizando el parmetro alpha en los
comandos de color RGBA de superficie de OpenGL, tal como glMaterial y glColor. Puede asignarse al
parmetro alpha de una superficie el valor del coeficiente de transparencia (Ecuacin 10.30) de dicho objeto.
Por ejemplo, si especificamos el color de una superficie transparente mediante la funcin:
glColor4f (R, G, B, A);

entonces, asignaremos al parmetro alpha el valor A  kt. 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 factores de mezcla de color de modo que todas las componente de color de la superficie
actual (el objeto fuente) se multiplican por (1  A)  (1  kt ), mientras que todas las componentes de color
de las posiciones correspondientes del bfer de imagen (el destino) se multiplican por el factor A  kt:
glEnable (GL_BLEND);
glBlendFunc (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);

Los dos colores se mezclan entonces utilizando la Ecuacin 10.30, teniendo el parmetro alpha el valor kt,
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.14. 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 glDepthMask.

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 667

10.20 Funciones OpenGL de iluminacin y representacin de superficies

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);
\* Procesar todas las superficies opacas. *\
glEnable (GL_BLEND);
glDepthMask (GL_FALSE);
glBlendFunc (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
\* Procesar todas las superficies transparentes. *\
glDepthMask (GL_TRUE);
glDisable (GL_BLEND);
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 todos 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.

Funciones de representacin superficial OpenGL


Las superficies pueden mostrarse con las rutinas OpenGL utilizando tcnicas de representacin superficial de
intensidad constante o mecanismos de representacin superficial de Gouraud. No se proporcionan rutinas
OpenGL para aplicar los mecanismos de representacin superficial de Phong, los mecanismos de trazado de
rayos ni los mtodos de radiosidad. El mtodo de representacin se selecciona mediante:
glShadeModel (surfRenderingMethod);

La representacin de superficies con intensidad constante se deselecciona asignando el valor simblico


GL_FLAT al parmetro surfRenderingMethod. Para el sombreado de Gouraud (la opcin predeterminada),
utilizamos la constante simblica GL_SMOOTH.
Cuando se aplica la funcin glShadeModel a una superficie curva teselada, como por ejemplo una esfe-

ra 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, Nz);

Los cdigos de un sufijo para esta funcin son b (byte), s (short), i (integer), f (float) 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, short 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 glVertex subsiguientes. El 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 (normalVector);
glBegin (GL_TRIANGLES);
glVertex3fv (vertex1);
glVertex3fv (vertex2);
glVertex3fv (vertex3);
glEnd ( );

CAP10_HEARN_1P.qxd

668

09/10/2005

14:32

Pgina 668

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

Si queremos aplicar el procedimiento de representacin superficial de Gouraud al tringulo anterior, necesitaremos especificar un vector normal para cada vrtice:
glBegin (GL_TRIANGLES);
glNormal3fv (normalVector1);
glVertex3fv (vertex1);
glNormal3fv (normalVector2);
glVertex3fv (vertex2);
glNormal3fv (normalVector3);
glVertex3fv (vertex3);
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 renormaliza 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.17 y Seccin 4.3). Las instrucciones para crear una matriz de
vectores normales son:
glEnableClientState (GL_NORMAL_ARRAY);
glNormalPointer (dataType, offset, normalArray);

Al parmetro dataType se le asigna el valor constante GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT (el
valor predeterminado) o GL_DOUBLE. El nmero de bytes entre vectores normales sucesivos en la matriz
normalArray est dado por el parmetro offset, que tiene un valor predeterminado de 0.

Operaciones de semitonos en OpenGL


En algunos sistemas pueden conseguirse diversos efectos de color y de escala de grises utilizando las rutinas
de semitonos de OpenGL. Los patrones de aproximacin de semitonos y las operaciones correspondientes son
dependientes del hardware, y normalmente no tienen ningn efecto en los sistemas que dispongan de capacidades grficas completas de color. Sin embargo cuando un sistema slo tiene un pequeo nmero de bits por
pxel, pueden aproximarse las especificaciones de color RGBA mediante patrones de semitono.
Podemos activar las rutinas de semitonos con:
glEnable (GL_DITHER);

que es la opcin predeterminada, y desactivarlas mediante la funcin,


glDisable (GL_DITHER);

10.21 FUNCIONES DE TEXTURAS EN OpenGL


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 entorno. 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.

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 669

10.21 Funciones de texturas en OpenGL

669

Funciones OpenGL para texturas lineales


Podemos utilizar un comando de la forma siguiente para especificar los parmetros de un patrn de texturas
RGBA unidimensional mediante una matriz de colores de una nica dimensin:
glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA, nTexColors, 0,
dataFormat, dataType, lineTexArray);
glEnable (GL_TEXTURE_1D);

Hemos asignado al primer argumento de la funcin glTexImage1D 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 GL_PROXY_TEXTURE_1D como principal argumento
de glTexImage1D. 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 nTexColors, 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
lineTexArray. 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
lineTexArray es 4  nTexColors. Como ejemplo especfico, si quisiramos definir un patrn de texturas
con 8 colores, la matriz de texturas deberan contener 4  8  32 elementos.
Los parmetros dataFormat y dataType son similares a los argumentos de las funciones
glDrawPixels y glReadPixels (Seccin 3.19). Asignamos una constante simblica OpenGL a dataFormat 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 GL_UNSIGNED_BYTE al parmetro dataType. Otros posibles valores que podran asignarse al parmetro dataType, dependiendo del formato de los datos que elijamos, son GL_INT y GL_FLOAT, entre otros.
Podemos mapear mltiples copias de una textura, o de cualquier subconjunto 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 textura 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:

CAP10_HEARN_1P.qxd

670

09/10/2005

14:32

Pgina 670

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);

La primera funcin es utilizada por las rutinas de texturado 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 texturado en
OpenGL se denominan magnificacin, MAG y minificacin, MIN). Aunque la operacin de asignar el color de
textura ms prximo a un pxel puede llevarse a cabo rpidamente, tambin puede hacer que aparezcan efectos de aliasing. Para calcular el color del pxel como combinacin lineal de los colores de textura solapados,
sustituimos la constante simblica GL_NEAREST por GL_LINEAR. Hay muchos otros valores de parmetro que
pueden especificarse con la funcin glTexParameter, y examinaremos dichas opciones en una seccin 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 referencian mediante una nica
coordenada s que vara entre 0.0 y 1.0 a lo largo del espacio de texturas (Seccin 10.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:
glTexCoord1* (sCoord);

Los cdigos de sufijo disponibles para esta funcin son b (byte), s (short), i (integer), f (float) y d (double), dependiendo del tipo de dato del parmetro sCoord 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. El 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 lnea es blanco (1.0, 1.0, 1.0, 1.0), que es el color predeterminado 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 lnea recta. Puesto que
la lnea es blanca, de manera predeterminada, se mostrar dentro de la escena con los colores de la textura.

GLint k;
GLubyte texLine [16]; // Matriz de texturas de 16 elementos.
/* Definir dos elementos verdes para el patrn de textura.
/* Cada color de textura se especifica en cuatro posiciones de la matriz.
*/
for (k  0; k < 2; k  2)
{
texLine [4*k]  0;

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 671

10.21 Funciones de texturas en OpenGL

671

texLine [4*k1]  255;


texLine [4*k2]  0;
texLine [4*k3]  255;
}
/* Definir dos elementos rojos para el patrn de textura. */
for (k  1; k < 3; k  2)
{
texLine [4*k]  255;
texLine [4*k1]  0;
texLine [4*k2]  0;
texLine [4*k3]  255;
}
glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, texLine);
glEnable (GL_TEXTURE_1D);
/* Asignar el rango completo de colores de textura a un segmento de lnea. */
glBegin (GL_LINES);
glTexCoord1f (0.0);
glVertex3fv (endPt1);
glTexCoord1f (1.0);
glVertex3fv (endPt2);
glEnd ( );
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 s. Podemos, por ejemplo, mapear sobre la lnea los colores rojo y verde intermedios del patrn de textura con las siguientes instrucciones:
glBegin (GL_LINES);
glTexCoord1f (0.25);
glVertex3fv (wcPt1);
glTexCoord1f (0.75);
glVertex3fv (wcPt2);
glEnd ( );

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 s el valor 2.0 para un extremo
de la lnea 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 16 secciones verdes y 16 secciones rojas. Para los valores de coordenada s situados fuera 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 10.114 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.

CAP10_HEARN_1P.qxd

672

09/10/2005

14:32

Pgina 672

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

FIGURA 10.114. Ejemplos de mapeado de un patrn de texturas


OpenGL de un nico subndice sobre un segmento de lnea blanco.

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.

Funciones OpenGL para texturas superficiales


Podemos especificar los parmetros para un espacio de texturas RGBA bidimensional utilizando funciones
similares a las empleadas en nuestro ejemplo del patrn de texturas unidimensional:
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, texWidth,
texHeight, 0, dataFormat, dataType, surfTexArray);
glEnable (GL_TEXTURE_2D);

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
surfTexArray es 4  texWidth  texHeight. 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 fila de la matriz asignndoles los valores RGBA correspondientes a la parte superior del espacio de texturas rectangular (Figura 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 glTexParameter 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 texturado deben mostrar las
posiciones de superficie proyectadas utilizando el color de textura ms prximo:
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 673

10.21 Funciones de texturas en OpenGL

673

Para asignar un color de textura interpolado a los pxeles de las superficies, utilizamos la constante simblica GL_LINEAR en lugar de GL_NEAREST.
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];
/*

Siguiente: asignar las componentes del color de textura a texArray. */

/* Seleccionar la opcin de color ms prximo. */


glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA,
GL_UNSIGNED_BYTE, texArray);
glEnable (GL_TEXTURE_2D);
/* Asignar el rango completo de colores
glBegin (GL_QUADS);
glTexCoord2f (0.0, 0.0); glVertex3fv
glTexCoord2f (1.0, 0.0); glVertex3fv
glTexCoord2f (1.0, 1.0); glVertex3fv
glTexCoord2f (0.0, 1.0); glVertex3fv
glEnd ( );

de textura a un cuadriltero. */
(vertex1);
(vertex2);
(vertex3);
(vertex4);

glDisable (GL_TEXTURE_2D);

Funciones OpenGL para texturas volumtricas


Las funciones para un espacio de texturas tridimensional son simplemente extensiones de las que se emplean
para los espacios de texturas bidimensionales. Por ejemplo, podemos especificar una matriz de texturas
RGBA de cuatro subndices y sin ningn borde mediante las funciones:
glTexImage3D (GL_TEXTURE_3D, 0, GL_RGBA, texWidth, texHeight,
texDepth, 0, dataFormat, dataType, volTexArray);
glEnable (GL_TEXTURE_3D);

Los colores de textura RGBA se almacenan en volTexArray, que contienen 4  texWidth 


texHeight  texDepth elementos. La anchura, altura y profundidad de la matriz debe ser una potencia de
2 o una potencia de 2 ms 2.

CAP10_HEARN_1P.qxd

674

09/10/2005

14:32

Pgina 674

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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);
glTexParameteri (GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);

Para colores de textura linealmente 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.

Opciones de color OpenGL para patrones de texturas


Los elementos de un espacio de texturas pueden especificarse de muchas formas distintas. El tercer argumento de las funciones glTexImage1D, glTexImage2D y glTexImage1D se utiliza para especificar el formato
general y el nmero de componentes de color para cada elemento de un patrn. Hay disponibles casi 40 constantes simblicas para poder realizar estas especificaciones. Por ejemplo, cada elemento de textura puede ser
un conjunto de valores RGBA, un conjunto de valores RGB, un nico valor alpha, un nico valor de intensidad roja, un nico valor de luminancia o un valor de luminancia junto con un valor alpha. Adems, algunas
constantes tambin especifican el tamao en bits. La constante OpenGL GL_R3_G3_B2, por ejemplo, especifica un color RGB de un byte (8 bits), con 3 bits asignados a la componente roja, 3 bits asignados a la componente verde y 2 bits a la azul.
El parmetro dataFormat de las funciones de textura se utiliza entonces para especificar el formato concreto de los elementos de textura. Podemos seleccionar una cualquiera de entre once constantes simblicas
para este parmetro. Esto nos permite especificar cada elemento de textura como un ndice a una tabla de colores, un nico valor alpha, un nico valor de luminancia, una pareja de valores luminancia-alpha, un nico
valor de intensidad para una de las componentes RGB, las tres componentes RGB o las cuatro componentes
de una especificacin RGBA, en el orden BGRA. Al parmetro dataType se le asigna un valor tal como
GL_BYTE, GL_INT, GL_FLOAT o una constante simblica que especifique tanto el tipo de dato como el tamao en bits. Podemos seleccionar un valor de entre un conjunto de 20 constantes simblicas aplicables al parmetro que especifica el tipo de dato.

Opciones OpenGL para el mapeado de texturas


Los elementos de textura pueden aplicarse a un objeto de modo que los valores de textura se combinen con
los componentes actuales de color del objeto, o pueden emplearse los valores de textura para sustituir el color
del objeto. Para seleccionar un mtodo de mapeado de textura se utiliza la funcin:
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
applicationMethod);

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 asigna el valor GL_MODULATE al parmetro applicationMethod, lo que 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,

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 675

10.21 Funciones de texturas en OpenGL

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 RGBA 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 application-Method, las rutinas de texturado
realizan una mezcla de colores utilizando un color especificado con la funcin:
glTexEnv* (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,
blendingColor);

Agregaremos el sufijo i o f de acuerdo con el tipo de dato del color de mezcla. Asimismo, se aadir el
sufijo v si el color de mezcla se especifica mediante una matriz.

Envolvimiento de texturas en OpenGL


Cuando los valores de coordenadas en un espacio de texturas caen fuera del rango comprendido entre 0 y 1.0,
podemos decidir replicar los patrones de escritos en la matriz de texturas utilizando el comando:
glTexParameter* (texSpace, texWrapCoord, GL_REPEAT);

Los patrones se replican utilizando nicamente la parte fraccionaria del valor de la coordenada dentro del
espacio de texturas. Al parmetro texSpace se le asigna uno de los valores simblicos GL_TEXTURE_1D,
GL_TEXTURE_2D o GL_TEXTURE_3D y el parmetro texWrap-Coord designa una coordenada dentro del
espacio de texturas utilizando GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T o GL_TEXTURE_WRAP_R.
Para hacer que la coordenada de texturas quede fijada 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.

Copia de patrones de texturas OpenGL desde el bfer de imagen


Podemos obtener un patrn original o un subpatrn a partir de los valores almacenados en el bfer de imagen.
La siguiente funcin define un patrn bidimensional para el estado de textura actual utilizando un bloque de
valores de pxel RGBA:
glCopyTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, x0, y0, texWidth,
texHeight, 0);

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 (x0, y0) 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 texWidth por
texHeight.
Hay disponible otra funcin similar para obtener un bloque de colores de pxel como subpatrn de texturas:

CAP10_HEARN_1P.qxd

676

09/10/2005

14:32

Pgina 676

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial


glCopyTexSubImage2D (GL_TEXTURE_2D, 0, xTexElement,
yTexElement, x0, y0, texSubWidth, texSubHeight);

Este bloque de valores de pxel se almacena en el patrn actual en la posicin correspondiente al elemento de textura especificado (xTexElement, yTexElement). Los parmetros texSubWidth y texSubHeight
proporcionan el tamao del bloque de pxeles, cuya esquina inferior izquierda estar en la posicin (x0, y0)
del bfer de imagen.

Matrices de coordenadas de texturas en OpenGL


Al igual que con los datos de color, los vectores normales a la superficie y los indicadores de las aristas de los
polgonos, tambin podemos especificar las coordenadas de textura en listas que pueden combinarse o asociarse con matrices de vrtices (Seccin 3.17 y Seccin 4.3).
glEnableClientState (GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer (nCoords, dataType, offset, texCoordArray);

El parmetro nCoords deber tener el valor 1, 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 es una fotografa en perspectiva. Al parmetro dataType se le asigna el valor constante GL_SHORT,
GL_INT, GL_FLOAT (el valor predeterminado) o GL_DOUBLE. El desplazamiento en bytes entre las posiciones
sucesivas de coordenadas dentro de la matriz texCoordArray se especifica mediante el parmetro offset,
que tiene un valor predeterminado igual a 0.

Denominacin de los patrones de textura OpenGL


A menudo, resulta til emplear varios patrones de textura en una aplicacin, de modo que OpenGL permite
crear mltiples patrones de textura nominados. Entonces, simplemente tendremos que indicar qu textura
nominada hay que aplicar en cada momento. Este mtodo es mucho ms eficiente que invocar la funcin
glTexImage cada vez, ya que cada llamada a glTexImage requiere volver a crear un patrn, posiblemente
a partir de los valores de color contenidos en un archivo de datos. Para asignar un nombre al patrn de texturas, seleccionamos un entero positivo (sin signo) antes de definir el patrn. Como ejemplo, las siguientes instrucciones asignan un nombre al patrn de lnea verde y roja de nuestro ejemplo anterior, denominndolo
como textura nmero 3, y luego activan el patrn:
glBindTexture (GL_TEXTURE_1D, 3);
glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA, 4, 0, GL_RGBA,
GL_UNSIGNED_BYTE, texLine);
glBindTexture (GL_TEXTURE_1D, 3);

La primera instruccin glBindTexture asigna un nombre al patrn, mientras que la segunda llamada a
glBindTexture designa el patrn como estado de textura actual. Si hemos creado mltiples patrones de
textura, podramos llamar de nuevo a glBindTexture 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, cambiaremos el primer argumento de la funcin glBindTexture a GL_TEXTURE_2D o GL_TEXTURE_3D. Cuando se
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);

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 677

10.21 Funciones de texturas en OpenGL

677

El parmetro nTextures 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;
glGenTextures (1, texName);
glBindTexture (GL_TEXTURE_2D, texName);

Como ejemplo, el siguiente cdigo obtiene una lista de seis nombres de textura no utilizados y emplea uno
de ellos para crear un patrn:
static GLuint texNamesArray [6];
glGenTextures (1, texNamesArray [3]);
glBindTexture (GL_TEXTURE_2D, texNamesArray [3]);

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 GL_FALSE. Tambin se devuelve un valor GL_FALSE si texName  0 o si se produce un error.

Subpatrones de textura en OpenGL


Una vez definido un patrn de texturas, podemos crear otro patrn, denominado subpatrn, para modificar
cualquier parte del patrn original o la totalidad del mismo. Los valores de textura del subpatrn sustituyen
los valores especificados en el patrn original. Usualmente, este proceso es ms eficiente que volver a crear
una textura con nuevos elementos. Por ejemplo, la siguiente funcin especifica un conjunto de valores de
color RGBA que deben sustituir una seccin de una textura bidimensional que no tiene ningn borde y que
no es una reduccin de un patrn de mayor tamao:
glTexSubImage2D (GL_TEXTURE_2D, 0, xTexElement,
yTexElement, GL_RGBA, texSubWidth, texSubHeight,
0, dataFormat, dataType, subSurfTexArray);

Los parmetros xTexElement y yTexElement 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 (xTexElement, yTexElement). Los parmetros TexSubWidth
y TexSubHeight proporcionan el tamao del subpatrn. El nmero de elementos de color en la matriz
subSurfTexArray para un patrn de textura RGBA es 4  texSubWidth  texSubHeight. Los restantes parmetros son iguales que en la funcin glTexImage, y pueden definirse subpatrones similares para
texturas unidimensionales y tridimensionales.

Patrones de reduccin de texturas en OpenGL


Para tamaos de objetos reducidos, podemos utilizar rutinas OpenGL para crear una serie de patrones de
reduccin de texturas, que se denominan mipmaps (Seccin 10.17). Una forma de crear una secuencia de
patrones de reduccin consiste en invocar la funcin glTexImage repetidamente utilizando valores enteros
cada vez mayores para el segundo argumento (el nmero de nivel) dentro de la funcin. El patrn original

CAP10_HEARN_1P.qxd

678

09/10/2005

14:32

Pgina 678

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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 1, 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
copyTexImage tambin genera un patrn de reduccin cuando especificamos el nmero de nivel 1 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:
gluBuild2DMipmaps (GL_TEXTURE_2D, GL_RGBA, 16, 16, GL_RGBA,
GL_UNSIGNED_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 1. Tambin podemos especificar una reduccin seleccionada utilizando la funcin:
gluBuild2DMipmapLevels (GL_TEXTURE_2D, GL_RGBA, 16, 16,
GL_RGBA, GL_UNSIGNED_BYTE, 0, minLevel, maxLevel,
surfTexArray);

Esta funcin genera patrones de reduccin para un rango de nmeros de nivel especificados mediante los
parmetros minLevel y maxLevel. En cada caso, los mipmaps se construyen para el patrn de texturas
actual, especifico en el nivel nmero 0.
Podemos seleccionar un mtodo para determinar los colores de los pxeles a partir de los patrones de
reduccin utilizando la funcin glTexParameter y la constante simblica GL_TEXTURE_MIN_FILTER.
Como ejemplo, la siguiente funcin designa el procedimiento de mapeado para un patrn de texturas bidimensional:
glTexParameter (GL_TEXTURE_2D, GL_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 pxel (MIPMAP_NEAREST). Entonces, a los pxeles se les asignar el color del
elemento de textura ms prximo (GL_NEAREST) en dicho patrn de reduccin. Con la constante simblica
GL_LINEAR_MIPMAP_NEAREST, especificamos una combinacin lineal de los colores de textura contenidos
en el patrn de reduccin ms prximo. Con GL_NEAREST_MIPMAP_LINEAR (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 pxel. Por su parte, GL_LINEAR_
MIPMAP_LINEAR calcula el color del pxel utilizando una combinacin lineal de los colores de textura del
conjunto de patrones de reduccin que mejor se ajusten en tamao.

Bordes de texturas en OpenGL


Cuando se aplican mltiples texturas, o mltiples copias de una misma textura, a un objeto, pueden aparecer
efectos de aliasing en los bordes de los patrones adyacentes cuando se calculan los colores de pxel interpolando linealmente los colores de textura. Podemos evitar esto incluyendo un borde en cada patrn de texturas,
que har que los colores del borde se ajusten a los colores existentes en la frontera de la textura especificada
por el patrn adyacente.
Podemos especificar un color de borde para las texturas de diversas formas. El valor de color de un patrn
adyacente puede copiarse en el borde de otro patrn utilizando la funcin glTexSubImage, o bien pueden
asignarse directamente los colores de borde en la matriz de texturas especificada con la funcin glTexImage.
Otra opcin consiste en especificar un color de borde utilizando la rutina glTexParameter. Por ejemplo,
podemos asignar un color de borde a un patrn bidimensional mediante la funcin:
glTexParameterfv (GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR,
borderColor);

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 679

10.21 Funciones de texturas en OpenGL

679

donde al parmetro borderColor se le asigna un conjunto de cuatro componentes de color RGBA. El color
de borde predeterminado es el negro, (0.0, 0.0, 0.0, 0.0).

Texturas proxy en OpenGL


En cualquiera de las funciones glTexImage, podemos asignar al primer argumento una constante simblica
denominada proxy de textura. El propsito de esta constante consiste en almacenar la definicin del patrn de
texturas hasta que veamos si hay suficientes recursos como para poder procesar este patrn. Para un patrn
bidimensional, la constante de proxy es GL_PROXY_TEXTURE_2D, y hay disponibles constantes similares para
los patrones de textura lineales y volumtricos. Una vez especificado el proxy de textura, podemos utilizar
glGetTexLevelFunction para determinar si se pueden emplear valores especficos de los parmetros.
Como ejemplo de utilizacin de un proxy de textura, las siguientes instrucciones consultan el sistema para
determinar si puede usarse la altura especificada para un patrn bidimensional:
GLint texHeight;
glTexImage2D (GL_PROXY_TEXTURE_2D, 0, GL_RGBA12, 16, 16, 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_RGBA12,
GL_TEXTURE_HEIGHT, &texHeight);

Si el sistema no puede admitir la altura de patrn solicitada (16, en este caso) se devolver un valor 0 en
el parmetro texHeight. 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
glTexImage 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.

Texturado automtico de superficies cudricas


OpenGL dispone de rutinas para generar automticamente las coordenadas de las texturas en ciertas aplicaciones. Esta caracterstica resulta particularmente til cuando sea difcil determinar directamente las coordenadas de superficie de un objeto, y hay disponible una funcin GLU para aplicar estas rutinas de superficies
cudricas.
Para mapear un patrn de textura sobre una superficie cudrica, primero definimos los parmetros para el
espacio de texturas y a continuacin invocamos la siguiente funcin y definimos el objeto cudrico, como se
describe en la Seccin 8.6:
gluQuadricTexture (quadSurfObj, GL_TRUE)

El parmetro quadSurfObj en esta funcin es el nombre del objeto cudrico. Si queremos desactivar el
texturado de la superficie cudrica, tendremos que cambiar la constante simblica GL_TRUE por GL_FALSE.

Coordenadas de textura homogneas


Podemos especificar una posicin tetradimensional en el espacio de texturas mediante:
glTexCoord4* (sCoord, tCoord, rCoord, htexCoord);

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).

CAP10_HEARN_1P.qxd

680

09/10/2005

14:32

Pgina 680

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

As, los valores de las coordenadas de textura s, t y r en la funcin anterior se dividen por el parmetro homogneo htex 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.

Opciones adicionales para texturas en OpenGL


En OpenGL hay disponibles funciones para realizar muchas otras manipulaciones y aplicaciones de texturas.
Si obtenemos un patrn de textura (de una fotografa o de otra fuente) cuyo tamao no sea una potencia de 2,
OpenGL proporciona una funcin para modificar el tamao del patrn. En algunas implementaciones de
OpenGL, hay disponibles rutinas de multitexturizado para pegar mltiples patrones de textura sobre un objeto. El mapeado de entorno puede simularse en OpenGL creando un mapa de textura con la forma de una superficie esfrica y pueden generarse automticamente coordenadas de textura para patrones de entorno esfricos,
as como para otras aplicaciones de las texturas.

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 fsicas. estos clculos de iluminacin proporcionan un valor de intensidad luminosa para cada
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 fija 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 proporcionan
una escala de intensidad logartmica con el fin de suministrar un conjunto de niveles de intensidad que se

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 681

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 lnea 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 determinadas 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. Esto 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 fotorrealistas 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.

CAP10_HEARN_1P.qxd

682

09/10/2005

14:32

Pgina 682

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

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

Descripcin

glLight

Especifica un valor de propiedad de una fuente luminosa.

glEnable (lightName)

Activa una fuente luminosa.

glLightModel

Especifica valores para los parmetros de iluminacin globales.

glMaterial

Especifica un valor para un parmetro ptico de una superficie.

glFog

Especifica un valor para un parmetro atmosfrico; los efectos


atmosfricos se activan con la funcin glEnable.

glColor4f (R, G, B, A)

Especifica un valor alpha para una superficie con el fin de simular


la transparencia. En la funcin glBlendFunc, hay que asignar el
valor GL_SRC_ALPHA al factor origen de la mezcla y el valor
GL_ONE_MINUS_SRC_ALPHA al factor de destino de la mezcla.

glShadeModel

Especifica la representacin superficial de Gouraud o la representacin superficial monocroma.

glNormal3

Especifica un vector normal a la superficie.

glEnable (GL NORMALIZE)

Especifica que las normales a la superficie deben convertirse a


vectores unitarios.

glEnableClientState (GL_NORMAL_ARRAY)

Activa las rutinas de procesamiento para una matriz de vectores


normales a la superficie.

glNormalPointer

Crea una lista de vectores normales a la superficie que hay que


asociar con una matriz de vrtices.

glEnable (GL DITHER)

Activa las operaciones para aplicar las tcnicas de representacin


superficial mediante patrones de aproximacin de semitonos.

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 683

Referencias

683

TABLA 10.3. RESUMEN DE FUNCIONES DE MAPEADO DE TEXTURAS EN OpenGL.


Funcin

Descripcin

glTexImage1D

Especifica los parmetros para definir un espacio de texturas unidimensional


(el textura se activa con glEnable).

glTexImage2D

Especifica los parmetros para definir un espacio de texturas bidimensional.

glTexImage3D

Especifica los parmetros para definir un espacio de texturas tridimensional.

glTexParameter

Especifica los parmetros para las rutinas de mapeado de texturas.

glTexCoord

Especifica el valor para una coordenada de textura en un espacio de texturas


unidimensional, bidimensional, tridimensional o tetradimensional.

glTexEnv

Especifica los parmetros de entorno de las texturas, como el color del mezcla
para el mapeado de texturas.

glCopyTexImage

Copia un bloque de colores de pxel del bfer de imagen para utilizarlo como
patrn de textura.

glCopyTexSubImage

Copia un bloque de colores de pxel del bfer de imagen para utilizarlo como
subpatrn de textura.

glTexCoordPointer

Especifica las coordenadas de textura en una lista asociada con una lista de
vrtices.

glBindTexture

Asigna un nombre al patrn de texturas y se utiliza tambin para activar un


patrn nominado.

glDeleteTextures

Elimina una lista de texturas nominadas.

glGenTextures

Genera automticamente nombres para las texturas.

glIsTexture

Comando de consulta para determinar si ya existe una textura nominada.

glTexSubImage

Crea un subpatrn de textura.

gluBuild*Mipmaps

Generacin automtica de patrones de reduccin de texturas para espacios de


texturas unidimensionales, bidimensionales o tridimensionales.

gluBuild*MipmapLevels

Generacin automtica de patrones de reduccin de texturas para un nivel


especificado en un espacio de texturas unidimensionales, bidimensionales o
tridimensionales.

glGetTexLevelParameter

Consulta el sistema para determinar si puede admitirse un determinado valor


de un parmetro de textura.

gluQuadricTexture

Activa o desactiva el texturado para superficies cudricas.

REFERENCIAS
Los modelos bsicos de iluminacin y las tcnicas de representacin superficial se explican en Gouraud
(1971) 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-

CAP10_HEARN_1P.qxd

684

09/10/2005

14:32

Pgina 684

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

minacin y los mtodos de representacin se presentan en Glassner (1990), Arvo (1991), Kirk (1992),
Heckbert (1994), Paeth (1995) y Sakaguchi, Kent y Cox (2001). Los mtodos de aproximacin por semitonos
se tratan en Velho y Gomes (1991). Para obtener ms informacin sobre los mecanismos de aleatorizacin
ordenada, difusin de errores y difusin de puntos, consulte Knuth (1987).
Los procedimientos de trazado de rayos se tratan en Whitted (1980), Amanatides (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), Cohen y Greenberg (1985), Cohen, Chen, Wallace y
Greenberg (1988), Wallace, Elmquist 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), Cohen 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 texturas 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 tutorial de Nate
Robins: http://www.cs.utah.edu/narobins/opengl.html. 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 iluminacin 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 parmetros adicionales de entrada incluyen la intensidad de luz ambiente, la intensidad de la
fuente luminosa y los coeficientes de reflexin superficial. Toda la informacin de coordenadas puede especificarse directamente en el sistema de referencia de visualizacin.

10.2

Modifique la rutina del Ejercicio 10.1 para representar las caras poligonales de una superficie esfrica teselada.

10.3

Modifique la rutina del Ejercicio 10.2 para mostrar la superficie esfrica utilizando un mtodo de representacin
superficial de Gouraud.

10.4

Modifique la rutina del Ejercicio 10.3 para mostrar la superficie esfrica utilizando un mtodo de representacin
superficial de Phong.

10.5

Escribir una rutina 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 los
vectores normales a la superficie para cada una de las caras poligonales. Los valores adicionales que se suministrarn como 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

Modifique la rutina del ejercicio anterior para incluir una funcin de atenuacin lineal de la intensidad.

10.8

Modifique la rutina del ejercicio anterior para incluir en la escena dos fuentes luminosas.

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 685

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 cabra esperar ver en la apariencia de las reflexiones especulares modeladas con (N
H)ns, comparadas con las reflexiones especulares modeladas con (V R)ns.
10.11 Verifique que 2  en la Figura 10.22 cuando todos los vectores son coplanares, pero que, en general, 2 .
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 cuadrculas de 3 por 3 pxeles y dos niveles de intensidad (o y 1) 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 implementar el algoritmo de difusin de errores para una matriz dada m por n 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 reflexin 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 Implemente 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 determinado 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.

CAP10_HEARN_1P.qxd

686

09/10/2005

14:32

Pgina 686

CAPTULO 10 Modelos de iluminacin y mtodos de representacin superficial

10.31 Modifique el programa del ejercicio anterior de modo que el patrn sea mapeado sobre una seccin especificada
de una superficie esfrica.
10.32 Escriba un programa para mapear un patrn 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 patrn 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 patrn 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
GLUT.

CAP10_HEARN_1P.qxd

09/10/2005

14:32

Pgina 687

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 688

CAPTULO 11

Mtodos interactivos de
entrada e interfaces
grficas de usuario

Entrada interactiva dentro del entorno de realidad virtual denominado CAVE de NCSA, que est formado por tres
paredes verticales, un suelo, un techo y un sistema estereoscpico de proyeccin. (Cortesa de National
Center for Supercomputing Applications, Universidad de Illinois en Urbana-Champaign.)

CAP11_HEARN_1P.qxd

11.1
11.2
11.3
11.4

09/10/2005

20:43

Pgina 689

Datos de entrada grficos


Clasificacin lgica de los dispositivos de
entrada
Funciones de entrada para datos grficos
Tcnicas interactivas de construccin de
imgenes

11.5
11.6
11.7
11.8
11.9

Entornos de realidad virtual


Funciones OpenGL para dispositivos
de entrada interactiva
Funciones de men OpenGL
Diseo de una interfaz grfica 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.

11.1 DATOS DE ENTRADA GRFICOS


Los programas grficos utilizan diversos tipos de datos de entrada, como posiciones de coordenadas, valores
de atributo, especificaciones de cadenas de caracteres, valores de transformacin geomtrica, condiciones de
visualizacin y parmetros de iluminacin. Muchos paquetes grficos, incluyendo los estndares ISO y ANSI,
proporcionan un amplio conjunto de funciones de entrada para procesar tales datos. Pero los procedimientos
de entrada requieren de la interaccin con los gestores de ventanas y con dispositivos hardware especficos.
De ah que algunos sistemas grficos, particularmente aquellos que proporcionan principalmente funciones
independientes del dispositivo, incluyen a menudo un nmero relativamente pequeo de procedimientos interactivos para el tratamiento de datos de entrada. Una organizacin bastante comn para los procedimientos de
entrada de un paquete grfico consiste en clasificar las funciones de acuerdo con el tipo de los datos que cada
funcin tiene que procesar. Este esquema permite introducir cualquier clase de datos mediante cualquier dispositivo fsico, como por ejemplo un teclado o un ratn, aunque la mayora de los dispositivos de entrada suelen manejar mejor algunos tipos de datos que otros.

11.2 CLASIFICACIN LGICA DE LOS DISPOSITIVOS DE ENTRADA


Cuando clasificamos las funciones de entrada de acuerdo con el tipo de los datos, los dispositivos utilizados
para proporcionar los datos especificados se denominan dispositivo lgico de entrada para dicho tipo de
datos. Las clasificaciones estndar para los datos de entrada lgicos son:

CAP11_HEARN_1P.qxd

690

09/10/2005

20:43

Pgina 690

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

LOCALIZADOR
TRAZO
CADENA
EVALUADOR
ELECCIN
SELECTOR

- 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, un joystick, una trackball, una spaceball, 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, un joydisk, 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 digitalizar planos.

Dispositivos de cadena de caracteres


El principal dispositivo fsico utilizado para la introduccin de cadenas de caracteres es el teclado. Las cadenas de caracteres en las aplicaciones infogrficas se utilizan normalmente para etiquetar los dibujos o grficos.
Pueden usarse tambin otros dispositivos fsicos para generar patrones de caracteres en aplicaciones especiales. Pueden dibujarse caracteres individuales en la pantalla utilizando un dispositivo de trazo o un dispositivo localizador. A continuacin, un programa de reconocimiento de patrones interpreta los caracteres
utilizando un diccionario almacenado de patrones predefinidos.

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-

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 691

11.2 Clasificacin lgica de los dispositivos de entrada

691

caciones, 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 fsico tpico 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 joysticks, las trackballs, 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. El posicionamiento del cursor mediante un ratn,
joystick, 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. En esta imagen, se proporcionan representaciones de controles deslizantes y de diales para la seleccin de los valores de los parmetros s1 y s2
de una superelipse, adems de para la introduccin de componentes de color RGB, ngulos de rotacin y parmetros de
escala. Alternativamente, puede posicionarse un pequeo crculo sobre la rueda de colores con el fin de seleccionar simultneamente las tres componentes RGB. Tambin pueden utilizarse las teclas de flecha del teclado y determinados botones
con el fin de realizar pequeos cambios en un valor escalar seleccionado.

CAP11_HEARN_1P.qxd

692

09/10/2005

20:43

Pgina 692

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

vos de eleccin comnmente utilizados para seleccionar una opcin de men son los dispositivos de posicionamiento del cursor, como por ejemplo un ratn, una trackball, 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 (x, 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 xmin, xmax, ymin y ymax de los
valores de coordenadas si las coordenadas introducidas satisfacen las desigualdades:
xmin x xmax, ymin y ymax

(11.1)

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 joystick o un teclado, por ejemplo, podemos realizar las selecciones 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 posicionamiento 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 si 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.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 693

11.2 Clasificacin lgica de los dispositivos de entrada

693

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 lnea
individuales. La Figura 11.2 ilustra la seleccin de una posicin que se encuentra dentro de las extensiones de
coordenadas de dos segmentos de lnea. Para un segmento de lnea bidimensional cuyas coordenadas de los
extremos sean (x1, y1) y (x2, y2), el cuadrado de la distancia perpendicular desde una posicin seleccionada (x,
y) hasta la lnea se calcula como:
d2 =

[ x( y y1 ) y( x x1 )]2
x 2 + y 2

(11.2)

donde x  x2x1 y y  y2y1. 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 11.3
y se utilizarn procedimientos de recorte para determinar qu objetos se intersectan 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
resalte 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 resaltado. 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 resalte 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

h
(xp, yp)

d1
d2
(x, y)

FIGURA 11.2. Distancias desde una posicin seleccionada a dos segmentos de lnea distintos.

FIGURA 11.3. Una ventana de seleccin con centro en


(xp, yp), anchura w y altura h.

CAP11_HEARN_1P.qxd

694

09/10/2005

20:43

Pgina 694

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

utilizarse botones adicionales para acelerar el proceso de resalte. Un botn iniciara un resalte rpido sucesivo de estructuras, un segundo botn se activara para detener el proceso y un tercer botn se empleara para
ir lentamente hacia atrs 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, podra emplearse la entrada de
teclado para seleccionar un objeto. Este procedimiento es muy sencillo pero menos interactivo. Algunos
paquetes grficos permiten asignar nombres a los 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.

11.3 FUNCIONES DE ENTRADA PARA DATOS GRFICOS


Los paquetes grficos que utilizan la clasificacin lgica de los dispositivos de entrada proporcionan diversas
funciones para seleccionar dispositivos y clases de datos. Estas funciones permiten al usuario especificar las
siguientes opciones:
El modo de interaccin de entrada para el programa grfico y los dispositivos de entrada. Puede que
sean el programa o los dispositivos los que inicien la introduccin de los datos, o bien pueden operar
ambos simultneamente.
La seleccin de un dispositivo fsico que proporcione la entrada dentro de una clasificacin lgica
concreta (por ejemplo, una tableta utilizada como dispositivo de trazo).
La seleccin del tiempo y el dispositivo de entrada para un conjunto concreto de valores de datos.

Modos de entrada
Algunas funciones de entrada en un sistema grfico interactivo se utilizan para especificar cmo deben interactuar 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 datos 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 hasta que se reciben los valores requeridos. Este
modo de entrada se corresponde con la operacin tpica 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, muestrear 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 datos a una cola de entrada, tambin llamada cola de sucesos.
Todos los datos de entrada se almacenan. Cuando el programa requiere nuevos datos, los extrae de la cola de
datos.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 695

11.4 Tcnicas interactivas de construccin de imgenes

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.

Realimentacin mediante eco


Normalmente, puede solicitarse a un programa interactivo de entrada que proporcione un eco de realimentacin de los datos de entrada y de los parmetros asociados. Cuando se solicita un eco de los datos de entrada,
stos se muestran dentro de un rea de pantalla especificada. La realimentacin mediante eco puede incluir,
por ejemplo, el tamao de la ventana de seleccin, la distancia de seleccin mnima, el tipo y el tamao de un
cursor, el tipo de resalte que habra que emplear durante las operaciones de seleccin, el rango (mnimo y
mximo) de las entradas de evaluacin y la resolucin (escala) de las entradas de evaluacin.

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.

11.4 TCNICAS INTERACTIVAS DE CONSTRUCCIN DE IMGENES


Los paquetes grficos suelen incorporan diversos mtodos interactivos como ayuda para la construccin de
imgenes. Puede que se proporcionen rutinas para posicionar objetos, aplicar restricciones, ajustar el tamao
de los objetos y disear formas y patrones.

Mtodos bsicos de posicionamiento


Podemos seleccionar interactivamente un punto de coordenadas con algn dispositivo sealado que registre
una ubicacin en pantalla. Cmo se usa la posicin depender de la opcin seleccionada de procesamiento. El
punto de coordenadas puede ser el extremo de un segmento de lnea o utilizarse para posicionar algn objeto: por ejemplo, la ubicacin de pantalla seleccionada podra hacer referencia a una nueva posicin que designe el centro de una esfera. O bien, la ubicacin puede utilizarse para especificar la posicin de una cadena de
texto, que podra comenzar en dicha ubicacin o estar centrada en ella. Como ayuda adicional de posicionamiento, los valores numricos correspondientes a las posiciones seleccionadas pueden suministrarse como eco
en la pantalla. Utilizando como gua los valores de coordenada suministrados como eco, el usuario podra realizar pequeos ajustes interactivos en los valores de coordenadas utilizando diales, teclas de cursor u otros dispositivos.

CAP11_HEARN_1P.qxd

696

09/10/2005

20:43

Pgina 696

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

Arrastre de objetos
Otra 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 implementar 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 x, 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 diferente espaciado en las diferentes reas de
la pantalla.

Mtodos de banda elstica


Los segmentos de lnea y otras formas bsicas pueden construirse y posicionarse utilizando mtodos de banda
elstica que permiten ampliar o contraer interactivamente los tamaos de los objetos. La Figura 11.7 ilustra
uno de estos mtodos de banda elstica para la especificacin interactiva de un segmento de lnea. En primer
lugar, se selecciona una posicin fija de la pantalla para uno de los extremos de la lnea. Despus, a medida
que se mueve el cursor, la lnea se muestra desde esa posicin inicial hasta la posicin actual del cursor. El
segundo extremo de la lnea ser introducido cuando se pulse un botn o una tecla. Utilizando un ratn, construimos una lnea de banda elstica mientras pulsamos una de las teclas del ratn; al liberarla, la visualizacin
de la lnea ser completada.
Podemos utilizar mtodos de banda elstica para construir rectngulos, crculos y otros objetos. La Figura
11.8 ilustra la construccin de un rectngulo mediante un mtodo de banda elstica y la Figura 11.9 muestra
la construccin de un crculo. Podemos implementar estos mecanismos de construccin de banda elstica de
diversas maneras; por ejemplo, la forma y el tamao de un rectngulo pueden ajustarse moviendo de manera
independiente nicamente la arista superior del rectngulo, o la arista inferior o una de las aristas laterales.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 697

11.4 Tcnicas interactivas de construccin de imgenes

697

Se selecciona la
posicin del primer extremo

Se selecciona la
posicin del segundo
extremo segn un
trayecto horizontal
aproximado

FIGURA 11.4. Restriccin horizontal de lneas.


Se selecciona la
posicin del primer extremo

Se selecciona la
posicin del segundo
extremo segn un trayecto
vertical aproximado

FIGURA 11.5. Restriccin vertical de lneas.

Se selecciona una posicin


cerca de una segunda
interseccin de la cuadrcula

Se selecciona la posicin del


primer extremo cerca de una
interseccin de la cuadrcula

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.


Seleccin del
primer extremo
de la lnea

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

FIGURA 11.7. Mtodo de banda elstica para la construccin y posicionamiento de un segmento de lnea recta.

CAP11_HEARN_1P.qxd

698

09/10/2005

20:43

Pgina 698

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario





Seleccin de
la posicin
correspondiente
a una esquina del
rectngulo

El rectngulo se
extiende a medida
que se mueve el cursor

Seleccin de la
posicin final
correspondiente a
la esquina opuesta
del rectngulo

FIGURA 11.8. Mtodo de banda elstica para la construccin de un rectngulo.

Seleccin de la posicin
correspondiente al
centro del crculo

El crculo se extiende
a medida que el
cursor se mueve

Seleccin del radio


final del crculo

FIGURA 11.9. Construccin de un crculo utilizando un mtodo de banda elstica.

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 campo de gravedad alrededor 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 lneas 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 ayudar en el
posicionamiento, pero lo suficientemente pequeo como para reducir las posibilidades de solapamiento 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.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 699

11.5 Entornos de realidad virtual

699

especificar los puntos correctamente. Normalmente, los sistemas no muestran en pantalla las fronteras de
estos campos de gravedad.

Mtodos interactivos de dibujo


Las opciones para la realizacin de bocetos y dibujos son de distintos tipos. Pueden generarse lneas rectas,
polgonos y crculos utilizando los mtodos explicados en las secciones previas. Tambin pueden proporcionarse opciones de dibujo de curvas utilizando formas curvas estndar, como arcos circulares y splines, o
empleando procedimientos de trazado a mano alzada. Las splines se construyen interactivamente especificando un conjunto de puntos de control o un boceto a mano alzada que proporcione la forma general de la curva.
Entonces, el sistema har encajar el conjunto de puntos con una curva polinmica. En el dibujo a mano alzada, las curvas se generan siguiendo la trayectoria de un lpiz sobre una tableta grfica o el trayecto del cursor
de pantalla sobre un monitor de vdeo. Una vez visualizada una curva, el diseador puede alterar la forma de
la curva ajustando las posiciones de puntos seleccionados situados a lo largo del trayecto curvo.
Los paquetes de dibujo suelen tambin incluir opciones para el ajuste de las anchuras de las lneas, de los
estilos de las lneas y de otros atributos. Estas opciones se implementan mediante los mtodos analizados en
la Seccin 4.5. En muchos sistemas hay tambin disponibles distintos estilos de pincel, patrones de pincel,
combinaciones de colores, formas de objetos y patrones de textura superficial; todas estas opciones suelen ser
muy comunes en los sistemas que funcionan como estaciones de trabajo para dibujo artstico. Algunos sistemas de dibujo varan el ancho de la lnea y los trazos de pincel de acuerdo con la presin que la mano del
artista ejerce sobre el lpiz. La Figura 11.11 muestra un sistema de ventanas y mens utilizado con un paquete de dibujo que permite a un artista seleccionar variaciones de una forma de objeto especificada, as como
seleccionar diferentes texturas superficiales y condiciones de iluminacin para la escena.

11.5 ENTORNOS DE REALIDAD VIRTUAL


En la Figura 11.12 se ilustra un entorno tpico de realidad virtual. La entrada interactiva se lleva a cabo en este
entorno mediante un electroguante (Seccin 2.4), que es capaz de agarrar y desplazar los objetos que se muestran en una escena virtual. La escena generada por la computadora se muestra mediante un sistema de visiocasco (Seccin 2.1) en forma de proyeccin estereogrfica. Una serie de dispositivos de seguimiento calculan
la posicin y orientacin del visiocasco y del electroguante en relacin con las posiciones de los objetos de la
escena. Con este sistema, un usuario puede moverse a travs de la escena y reordenar las posiciones de los
objetos con su electroguante.

FIGURA 11.11. Una captura de pantalla que muestra


un tipo de interfaz de un paquete para dibujo artstico. (Cortesa de Thomson Digital Image.)

CAP11_HEARN_1P.qxd

700

09/10/2005

20:43

Pgina 700

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

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 electroguante, utilizndose un dispositivo de seguimiento para monitorizar la posicin y orientacin del guante en relacin con la posicin de los objetos de la escena.

11.6 FUNCIONES O pen GL PARA DISPOSITIVOS DE ENTRADA INTERACTIVA


La entrada interactiva desde cualquier tipo de dispositivo en un programa OpenGL se gestiona mediante las
rutinas GLUT (Utility Toolkit), porque estas rutinas necesitan comunicarse con un sistema de gestin de ventanas. En GLUT, disponemos de funciones para aceptar la entrada procedente de dispositivos estndar, como
el teclado o el ratn, as como de tabletas, ratones de bola tridimensionales, cajas de botones y diales. Para cada
dispositivo, especificamos un procedimiento (la funcin de retrollamada) que ser el que haya que invocar
cuando tenga lugar cualquier suceso de entrada en ese dispositivo. Estos comandos GLUT se insertan en el
procedimiento main junto con las dems instrucciones GLUT. Adems, puede usarse una combinacin de funciones de la biblioteca bsica y de la biblioteca GLU con la funcin de ratn de GLUT para capturar entradas.

Funciones de ratn GLUT


Utilizamos la siguiente funcin para especificar (registrar) un procedimiento que ser el que haya que llamar cuando el puntero del ratn se encuentre dentro de una ventana de visualizacin y un botn del ratn sea
presionado o liberado:
glutMouseFunc (mouseFcn);

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 701

11.6 Funciones OpenGL para dispositivos de entrada interactiva

701

Este procedimiento de retrollamada para control del ratn, al que hemos denominado mouseFcn, tiene
cuatro argumentos:
void mouseFcn (GLint button, GLint action, GLint xMouse,
GLint yMouse)

Al parmetro button se le asigna una constante simblica GLUT que denota uno de los tres botones del
ratn, mientras que al parmetro action 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 button
son GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON y GLUT_RIGHT_BUTTON (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 button es
GLUT_LEFT_BUTTON). Al parmetro action se le pueden asignar las constantes GLUT_DOWN 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 ventana de visualizacin, en forma de una pareja de coordenadas (xMouse, yMouse). 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 yMouse 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 glutMouseFunc, 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 yMouse devuelto en el procedimiento mousePtPlot.
#include <GL/glut.h>
GLsizei winWidth  400, winHeight  300; // Tamao inicial de la ventana
// de visualizacin.
void init (void)
{
glClearColor (0.0, 0.0, 1.0, 1.0) // Establecer azul como color ventana de
// visualizacin.
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT); // Borrar ventana de visualizacin.
glColor3f (1.0, 0.0, 0.0);
glPointSize (3.0);
}

// Establecer rojo como color de punto.


// Definir tamao de punto 3.0.

CAP11_HEARN_1P.qxd

702

09/10/2005

20:43

Pgina 702

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

void winReshapeFcn (GLint newWidth, GLint newHeight)


{
/* Reinicializar parmetros de proyeccin y visor */
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
/* Reinicializar parmetros de tamao ventana de visualizacin. */
winWidth  newWidth;
winHeight  newHeight;
}
void plotPoint (GLint x, GLint y)
{
glBegin (GL_POINTS);
glVertex2i (x, y);
glEnd ( );
}
void mousePtPlot (GLint button, GLint action, GLint xMouse, GLint yMouse)
{
if (button  GLUT_LEFT_BUTTON && action  GLUT_DOWN)
plotPoint (xMouse, winHeight - yMouse);
glFlush ( );
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Mouse Plot Points");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMouseFunc (mousePtPlot);
glutMainLoop ( );
}

El siguiente ejemplo de programa utiliza la entrada de ratn para seleccionar la posicin de un extremo de
un segmento de lnea recta. En el programa se conectan segmentos de lnea seleccionados para ilustrar la construccin interactiva de una polilnea. 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 polilnea. En la Figura 11.13 se proporciona una salida de ejemplo de este programa.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 703

11.6 Funciones OpenGL para dispositivos de entrada interactiva

703

FIGURA 11.13. Una salida de ejemplo del procedimiento


interactivo polyline de control con el ratn.

#include <GL/glut.h>
GLsizei winWidth  400, winHeight  300; // Tamao inicial ventana visualizacin.
GLint endPtCtr  0;
// Inicializar contador de puntos
// extremos de lneas.
class scrPt {
public:
GLint x, y;
};
void init (void)
{
glClearColor (0.0, 0.0, 1.0, 1.0) //
//

Establecer azul como color ventana de


visualizacin.

glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT);
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Reinicializar parmetros de proyeccin y visor */
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
/* Reinicializar parmetros de tamao de la ventana de visualizacin. */
winWidth  newWidth;
winHeight  newHeight;
}

CAP11_HEARN_1P.qxd

704

09/10/2005

20:43

Pgina 704

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

void drawLineSegment (scrPt endPt1, scrPt endPt2)


{
glBegin (GL_LINES);
glVertex2i (endPt1.x, endPt1.y);
glVertex2i (endPt2.x, endPt2.y);
glEnd ( );
}
void polyline (GLint button, GLint action, GLint xMouse, GLint yMouse)
{
static scrPt endPt1, endPt2;
if (ptCtr  0) {
if (button  GLUT_LEFT_BUTTON && action  GLUT_DOWN) {
endPt1.x  xMouse;
endPt1.y  winHeight - yMouse;
ptCtr  1;
}
else
if (button  GLUT_RIGHT_BUTTON)
// Salir del programa.
exit (0);
}
else
if (button  GLUT_LEFT_BUTTON && action  GLUT_DOWN) {
endPt2.x  xMouse;
endPt2.y  winHeight - yMouse;
drawLineSegment (endPt1, endPt2);
endPt1  endPt2;
}
else
if (button  GLUT_RIGHT_BUTTON) // Salir del programa.
exit (0);
glFlush ( );
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Draw Interactive Polyline");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMouseFunc (polyline);
glutMainLoop ( );
}

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 705

11.6 Funciones OpenGL para dispositivos de entrada interactiva

705

Otra rutina de ratn de GLUT que podemos utilizar es:


glutMotionFunc (fcnDoSomething);

Esta rutina invoca fcnDoSomething cuando 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 (xMouse, yMouse) es la ubicacin del ratn en la ventana 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 fcnDoSomethingElse como la posicin de coordenadas


(xMouse, yMouse), relativa a la esquina superior izquierda de la ventana de visualizacin.

Funciones de teclado GLUT


Con la entrada de teclado, utilizamos la siguiente funcin para especificar el procedimiento que haya que
invocar cuando se pulse una tecla:
glutKeyboardFunc (keyFcn);

El procedimiento especificado tiene tres argumentos:


void keyFcn (GLubyte key, GLint xMouse, GLint yMouse)

Al parmetro key 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 (xMouse, yMouse), 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 visualizacin 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 11.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.

CAP11_HEARN_1P.qxd

706

09/10/2005

20:43

Pgina 706

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

#include <GL/glut.h>
GLsizei winWidth  400, winHeight  300; // Tamao inicial ventana visualizacin.
void init (void)
{
glClearColor (0.0, 0.0, 1.0, 1.0); // Establecer azul como color ventana de
visualizacin.
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT); // Borrar ventana de visualizacin.
glColor3f (1.0, 0.0, 0.0); // Establecer rojo como color de punto.
glPointSize (3.0); // Especificar tamao de punto 3.0.
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Reinicializar parmetros de proyeccin y visor */
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
/* Reinicializar parmetros de tamao de la ventana de visualizacin. */
winWidth  newWidth;
winHeight  newHeight;
}
void plotPoint (GLint x, GLint y)
{
glBegin (GL_POINTS);
glVertex2i (x, y);
glEnd ( );
}
/* Mover el cursor mientras se pulsa la tecla c activa el dibujo de curvas
a mano alzada. */
void curveDrawing (GLubyte curvePlotKey, GLint xMouse, GLint yMouse)
{
GLint x  xMouse;
GLint y  winHeight - yMouse;
switch (curvePlotKey)
{
case 'c':
plotPoint (x, y);

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 707

11.6 Funciones OpenGL para dispositivos de entrada interactiva

707

break;
default:
break;
}
glFlush ( );
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Keyboard Curve-Drawing Example");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutKeyboardFunc (curveDrawing);
glutMainLoop ( );
}

Para las teclas de funcin, teclas de flecha y otras teclas de propsito especial, podemos utilizar el comando:
glutSpecialFunc (specialKeyFcn);

El procedimiento especificado tiene los mismos tres argumentos:


void specialKeyFcn (GLint specialKey, GLint xMouse,
GLint yMouse)

pero ahora al parmetro specialKey se le asigna una constante simblica GLUT de valor entero. Para
seleccionar una tecla de funcin, utilizamos una de las constantes GLUT_KEY_F1 a GLUT_KEY_F12. Para las
teclas de cursor, usamos constantes del estilo de GLUT_KEY_UP y GLUT_KEY_RIGHT. 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
glutKeyboardFunc utilizando sus cdigos ASCII, 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.
#include <GL/glut.h>
#inclue <stdlib.h>
GLsizei winWidth  400, winHeight  300; // Tamao inicial ventana visualizacin.
GLint edgeLength  10;
// Longitud de arista inicial para
//
el cuadrado.

CAP11_HEARN_1P.qxd

708

09/10/2005

20:43

Pgina 708

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario


void init (void)
{
glClearColor (0.0, 0.0, 1.0, 1.0) // Establecer azul como color ventana de
visualizacin.
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT); // Borrar ventana de visualizacin.
glColor3f (1.0, 0.0, 0.0); // Establecer rojo como color de relleno.
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/* Reinicializar parmetros de proyeccin y visor */
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
/* Reinicializar parmetros de tamao de la ventana de visualizacin. */
winWidth  newWidth;
winHeight  newHeight;
}
/* Mostrar un cuadrado rojo con un tamao seleccionado de arista. */
void fillSquare (GLint button, GLint action, GLint xMouse, GLint yMouse)
{
GLint x1, y1, x2, y2;
/* Usar botn izquierdo del ratn para seleccionar una posicin para
* la esquina inferior izquierda del cuadrado.
*/
if (button  GLUT_LEFT_BUTTON && action  GLUT_DOWN)
{
x1  xMouse;
y1  winHeight - yMouse;
x2  x1  edgeLength;
y2  y1  edgeLength;
glRecti (x1, y1, x2, y2);
}
else
if (button  GLUT_RIGHT_BUTTON) // Utilizar botn derecho del ratn para
salir.
exit (0);
glFlush ( );
}

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 709

11.6 Funciones OpenGL para dispositivos de entrada interactiva

709

/* Utilizar teclas 2, 3 y 4 para agrandar el cuadrado. */


void enlargeSquare (GLubyte sizeFactor, GLint xMouse, GLint yMouse)
{
switch (sizeFactor)
{
case '2':
edgeLength * 2;
break;
case '3':
edgeLength * 3;
break;
case '4':
edgeLength * 4;
break;
default:
break;
}
}
/* Utilizar teclas de funcin F2 y F4 para los factores de reduccin 1/2 y 1/4. /
void reduceSquare (GLint reductionKey, GLint xMouse, GLint yMouse)
{
switch (reductionKey)
{
case GLUT_KEY_F2:
edgeLength / 2;
break;
case GLUT_KEY_F3:
edgeLength / 4;
break;
default:
break;
}
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Display Squares of Various Sizes");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMouseFunc (fillSquare);
glutKeyboardFunc (enlargeSquare);
glutSpecialFunc (reduceSquare);
glutMainLoop ( );
}

CAP11_HEARN_1P.qxd

710

09/10/2005

20:43

Pgina 710

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

Funciones GLUT para tabletas grficas


Usualmente, la tableta se activa solamente cuando el cursor del ratn se encuentra dentro de la ventana de
visualizacin. Entonces, puede registrarse un suceso de botn para la entrada de la tableta grfica mediante:
glutTabletButtonFunc (tabletFcn);

y los argumentos para la funcin invocada son similares a los del caso del ratn:
void tabletFcn (GLint tabletButton, GLint action,
GLint xTablet, GLint yTablet)

Podemos designar un botn de la tableta mediante un identificador entero tal como 1, 2, 3, etctera, y la
accin correspondiente al botn se especifica, de nuevo, mediante GLUT_UP o GLUT_DOWN. Los valores
devueltos xTablet e yTablet son las coordenadas de la tableta. Podemos determinar el nmero de botones
de la tableta disponibles mediante el comando:
glutDeviceGet (GLUT_NUM_TABLET_BUTTONS);

El 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)

Los valores devueltos xTablet e yTablet proporcionan las coordenadas sobre la superficie de la tableta.

Funciones GLUT para una spaceball


Podemos utiliza la siguiente funcin para especificar una operacin que debe llevarse a cabo cuando se active un botn de la spaceball para una ventana de visualizacin seleccionada:
glutSpaceballButtonFunc (spaceballFcn);

La funcin de retrollamada 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 action se le asigna el valor GLUT_UP o GLUT_DOWN. Podemos determinar el nmero de botones
de la spaceball disponibles mediante una llamada a glutDeviceGet utilizando el argumento GLUT_NUM_
SPACEBALL_BUTTONS.
El 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 tx, GLint ty, GLint tz)

Estas distancias de traslacin estn normalizadas en el rango comprendido entre 1000 y 1000.
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)

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 711

11.6 Funciones OpenGL para dispositivos de entrada interactiva

711

Funciones GLUT para cajas de botones


La entrada procedente de una caja de botones se obtiene mediante la siguiente instruccin:
glutButtonBoxFunc (buttonBoxFcn);

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.

Funciones GLUT para diales


La rotacin de un dial puede registrarse mediante la siguiente rutina:
glutDialsFunc (dialsFcn);

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.

Operaciones de seleccin en OpenGL


En un programa OpenGL, podemos seleccionar objetos interactivamente apuntando a las posiciones de pantalla. Sin embargo, estas operaciones de seleccin en OpenGL no son particularmente sencillas.
Bsicamente, realizamos la seleccin utilizando una ventana de seleccin especificada, con el fin de generar un nuevo volumen de visualizacin. Asignamos identificadores enteros a los objetos de una escena y los
identificadores de aquellos objetos que intercepten con el nuevo volumen de visualizacin se almacenarn en
una matriz que acta como bfer de seleccin. As, para utilizar las funciones de seleccin OpenGL, necesitamos implementar los siguientes procedimientos dentro del programa:
Crear y visualizar una escena.
Seleccionar una posicin en pantalla y, dentro de la funcin de retrollamada del botn, llevar a cabo
los siguientes pasos:
Configurar un bfer de seleccin.
Activar las operaciones de seleccin (modo de seleccin).
Inicializar una pila de nombres de identificacin para los identificadores de los objetos.
Guardar la matriz actual de las transformaciones de visualizacin y geomtrica.
Especificar una ventana de seleccin para la entrada del ratn.
Asignar identificadores a los objetos y volver a procesar la escena utilizando el nuevo volumen
de visualizacin (la informacin de seleccin se almacenar entonces en el bfer de seleccin).
Restaurar la matriz original de transformacin de visualizacin y geomtrica.
Determinar el nmero de objetos que se han seleccionado y volver al modo de representacin
normal.
Procesar la informacin de seleccin.
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.

CAP11_HEARN_1P.qxd

712

09/10/2005

20:43

Pgina 712

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

Podemos definir una matriz que acte como bfer de seleccin mediante el comando:
glSelectBuffer (pickBuffSize, pickBuffer);

El parmetro pickBuffer designa una matriz de enteros con pickBuffSize elementos. La funcin
glSelectBuffer 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)

La posicin del objeto en la pila, que es el nmero de identificadores que hay en la pila de nombres,
incluyendo la propia posicin del objeto seleccionado.

(2)

La profundidad mnima del objeto seleccionado.

(3)

La profundidad mxima del objeto seleccionado.

(4)

La lista de identificadores contenida en la pila de nombres, desde el primer identificador (el de la parte
inferior) hasta el identificador correspondiente al objeto seleccionado.

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 232  1.
Las operaciones de seleccin OpenGL se activan mediante:
glRenderMode (GL_SELECT);

Esto 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 glRenderMode utilizando el
argumento GL_RENDER. Una tercera opcin es el argumento GL_FEEDBACK, 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);

Esto 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:
glLoadName (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 GLU:

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 713

11.6 Funciones OpenGL para dispositivos de entrada interactiva

713

gluPickMatrix (xPick, yPick, widthPick, heightPick, vpArray);

Los parmetros xPick e yPick 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 inferior
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 widthPick y heightPick. El parmetro vpArray designa una matriz
de enteros que contiene las coordenadas y el tamao del visor actual. Podemos obtener los parmetros del
visor utilizando la funcin glGetIntegerv (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
visualizacin. La informacin relativa a los objetos que intersecten este nuevo volumen de visualizacin se
almacenar en el bfer de seleccin.
Vamos a ilustrar las operaciones de seleccin OpenGL en el siguiente programa, que visualiza los tres rectngulos de color que se muestran en la Figura 11.15. 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 vpArray. Asignamos al rectngulo rojo el valor ID  30, al rectngulo azul el identificador
ID  10 y al rectngulo verde el identificador 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 identificadores 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 identificador o 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 identificadores de rectngulo especificados al final del registro. Alternativamente, podramos utilizar la ltima
entrada del registro, que ser el identificador del objeto seleccionado. En este programa de ejemplo, simplemente enumeramos el contenido del bfer de seleccin. Los rectngulos estn definidos en el plano xy, 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.

CAP11_HEARN_1P.qxd

714

09/10/2005

20:43

Pgina 714

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

#include <GL/glut.h>
#include <stdio.h>
const GLint pickBuffSize  32;
/* Establecer tamao inicial ventana visualizacin. */
GLsizei winWidth  400, winHeight  400;
void init (void)
{
/* Especificar blanco como color de la ventana de visualizacin. */
glClearColor (1.0, 1.0, 1.0, 1.0);
}
/*

Definir 3 rectngulos y sus identificadores asociados. */

void rects (GLenum mode)


{
if (mode  GL_SELECT)
glPushName (30); // Rectngulo rojo.
glColor3f (1.0, 0.0, 0.0);
glRecti (40, 130, 150, 260);
if (mode  GL_SELECT)
glPushName (10); // Rectngulo azul.
glColor3f (0.0, 0.0, 1.0);
glRecti (150, 130, 260, 260);
if (mode  GL_SELECT)
glPushName (20); // Rectngulo verde.
glColor3f (0.0, 1.0, 0.0);
glRecti (40, 40, 260, 130);
}
/* Imprimir el contenido del bfer de seleccin para cada seleccin del ratn. */
void processPicks (GLint nPicks, GLuint pickBuffer [ ])
{
GLint j, k;
GLuint objID, *ptr;
printf (" Number of objects picked  %d\n", nPicks);
printf ("\n");
ptr  pickBuffer;
/*

Proporcionar como salida todos los elementos en cada registro de seleccin.

*/
for (j  0; j < nPicks; j) {
objID  *ptr;
printf (" Stack position  %d\n", objID);

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 715

11.6 Funciones OpenGL para dispositivos de entrada interactiva

715

ptr;
printf (" Min depth  %g,", float (*ptr/0x7fffffff));
ptr;
printf (" Max depth  %g\n", float (*ptr/0x7fffffff));
ptr;
printf (" Stack IDs are: \n");
for (k  0; k < objID; k) {
printf (" %d ",*ptr);
ptr;
}
printf ("\n\n");
}
}
void pickRects (GLint button, GLint action, GLint xMouse, GLint yMouse)
{
GLuint pickBuffer [pickBuffSize];
GLint nPicks, vpArray [4];
if (button ! GLUT_LEFT_BUTTON || action ! GLUT_DOWN)
return;
glSelectBuffer (pickBuffSize, pickBuffer); // Designar el bfer de seleccin.
glRenderMode (GL_SELECT);
// Activar las operaciones de seleccin.
glInitNames ( );
// Inicializar la pila de identificadores
de objetos.
/* Guardar matriz de visualizacin actual. */
glMatrixMode (GL_PROJECTION);
glPushMatrix ( );
glLoadIdentity ( );
/* Obtener los parmetros para el visor actual. Definir
* una ventana de seleccin 5 por 5 e invertir el valor yMouse de entrada
* utilizando la altura del visor, que es el cuarto
* elemento de vpArray.
*/
glGetIntegerv (GL_VIEWPORT, vpArray);
gluPickMatrix (GLdouble (xMouse), GLdouble (vpArray [3] - yMouse),
5.0, 5.0, vpArray);
gluOrtho2D (0.0, 300.0, 0.0, 300.0);
rects (GL_SELECT);
// Procesar los rectngulos en el modo de seleccin.
/* Restaurar la matriz de visualizacin original. */
glMatrixMode (GL_PROJECTION);
glPopMatrix ( );

CAP11_HEARN_1P.qxd

716

09/10/2005

20:43

Pgina 716

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

glFlush ( );
/* Determinar el nmero de objetos seleccionados y volver
* al modo de representacin normal.
*/
nPicks  glRenderMode (GL_RENDER);
processPicks (nPicks, pickBuffer); //

Procesar los objetos seleccionados.

glutPostRedisplay ( );
}
void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT);
rects (GL_RENDER);
glFlush ( );
}

//

Visualizar los rectngulos.

void winReshapeFcn (GLint newWidth, GLint newHeight)


{
/* Reinicializar parmetros de proyeccin y visor. */
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, 300.0, 0.0, 300.0);
glMatrixMode (GL_MODELVIEW);
/* Reinicializar parmetros de tamao de la ventana de visualizacin. */
winWidth  newWidth;
winHeight  newHeight;
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Example Pick Program");
init ( );
glutDisplayFunc (displayFcn);
glutReshapeFunc (winReshapeFcn);
glutMouseFunc (pickRects);
glutMainLoop ( );
}

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 717

11.7 Funciones de men OpenGL

717

Ejemplo 11.1 Salida de ejemplo del procedimiento pickrects


Number of objects picked 5 2
Stack position 5 1
Min depth 5 0, Max depth 5 0
Stack IDs are:
30
Stack position 5 3
Min depth 5 0, Max depth 5 0
Stack IDs are:
30 10 20

11.7 FUNCIONES DE MEN Open GL


Adems de las rutinas correspondientes a los dispositivos de entrada, GLUT contiene diversas funciones para
aadir mens emergentes simples a los programas. Con estas funciones, podemos especificar y acceder a
diversos mens y a sus submens asociados. Los comandos GLUT de men se incluyen en el procedimiento
main junto con las dems funciones GLUT.

Creacin de un men GLUT


Podemos crear un men emergente mediante la instruccin:
glutCreateMenu (menuFcn);

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 visualizacin 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 charString 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);

CAP11_HEARN_1P.qxd

718

09/10/2005

20:43

Pgina 718

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario


glutAddMenuEntry ("First Menu Item", 1);
glutAddMenuEntry ("Second Menu Item", 2);

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 button 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 glShadeModel (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 permite 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 Solid-Color
Fill, el tringulo se rellenar con el color especificado para el ltimo vrtice (que es el rojo). Al final del procedimiento de visualizacin del men, fillOption, incluimos un comando glutPostRedisplay (Seccin
6.4) para indicar que es necesario redibujar el tringulo cuando se visualice el men.
#include <GL/glut.h>
GLsizei winWidth  400, winHeight  400; //

Tamao inicial ventana visualizacin.

GLfloat red  1.0, green  1.0, blue  1.0; // Color inicial del tringulo:
blanco.
GLenum fillMode  GL_SMOOTH; // Relleno inicial del polgono: interpolacin de
colores.
void init (void)
{
glClearColor (0.6, 0.6, 0.6, 1.0); //
visualizacin.

Establecer gris como color ventana de

glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 300.0, 0.0, 300.0);
}
void fillOption (GLint selectedOption)
{
switch (selectedOption) {
case 1: fillMode  GL_FLAT; break; // Representacin plana de superficies.
case 2: fillMode  GL_SMOOTH; break; // Representacin de Gouraud.
}
glutPostRedisplay ( );
}
void displayTriangle (void)

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 719

11.7 Funciones de men OpenGL

719

{
glClear (GL_COLOR_BUFFER_BIT);
glShadeModel (fillMode);
//
glColor3f (red, green, blue); //
ces.
glBegin (GL_TRIANGLES);
glVertex2i (280, 20);
glVertex2i (160, 280);
glColor3f (red, 0.0, 0.0); //
glVertex2i (20, 100);
glEnd ( );

Establecer mtodo de relleno para tringulo.


Establecer color para los primeros dos vrti-

Asignar rojo como color del ltimo vrtice.

glFlush ( );
}
void reshapeFcn (GLint newWidth, GLint newHeight)
{
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLfloat (newWidth), 0.0, GLfloat (newHeight));
displayTriangle ( );
glFlush ( );
}
void main (int argc, char **argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (200, 200);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Menu Example");
init ( );
glutDisplayFunc (displayTriangle);
glutCreateMenu (fillOption); // Crear men emergente.
glutAddMenuEntry ("Solid-Color Fill", 1);
glutAddMenuEntry ("Color-Interpolation Fill", 2);
/*

Seleccionar opcin de men utilizando el botn derecho del ratn. */

glutAttachMenu (GLUT_RIGHT_BUTTON);
glutReshapeFunc (reshapeFcn);
glutMainLoop ( );
}

CAP11_HEARN_1P.qxd

720

09/10/2005

20:43

Pgina 720

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

FIGURA 11.16. Men OpenGL emergente mostrado por


el programa de ejemplo de gestin de mens.

Creacin y gestin de mltiples mens GLUT


Cuando se crea un men, se lo asocia con la ventana de visualizacin actual (Seccin 6.4). Podemos crear
mltiples mens para una misma ventana de visualizacin y tambin crear diferentes mens para las diferentes ventanas. A medida que se crea cada men, se le asigna un identificador entero, comenzando con el valor
1 para el primer valor creado. El identificador entero correspondiente a un men es devuelto por la rutina
glutCreateMenu, y podemos registrar dicho valor mediante una instruccin como la siguiente:
menuID  glutCreateMenu (menuFcn);

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 glutDestroyMenu.

Creacin de submens GLUT


Podemos asociar un submen con un men creando primero un submen mediante glutCreateMenu, junto
con una lista de subopciones, y luego especificando el submen como opcin adicional dentro del men prin-

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 721

11.7 Funciones de men OpenGL

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 (submenuFcn);
glutAddMenuEntry ("First Submenu Item", 1);
.
.
.
glutCreateMenu (menuFcn);
glutAddMenuEntry ("First Menu Item", 1);
.
.
.
glutAddSubMenu ("Submenu Option", submenuID);

La funcin glutAddSubMenu 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. El 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 11.17. Se incluye una funcin
glutPostRedisplay tanto al final de la funcin correspondiente al men principal, como de la funcin
correspondiente al submen.

FIGURA 11.17. El men emergente principal OpenGL


y el correspondiente submen mostrados por el programa de ejemplo de definicin de submens.
#include <GL/glut.h>
GLsizei winWidth  400, winHeight  400; // Tamao inicial ventana visualizacin.
GLfloat red  1.0, green  1.0, blue  1.0; // Valores de color iniciales.
GLenum renderingMode  GL_SMOOTH;
// Mtodo inicial de relleno.
void init (void)

CAP11_HEARN_1P.qxd

722

09/10/2005

20:43

Pgina 722

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario


{
glClearColor (0.6, 0.6, 0.6, 1.0); // Establecer gris como color ventana
// visualizacin.
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 300.0, 0.0, 300.0);
}
void mainMenu (GLint renderingOption)
{
switch (renderingOption) {
case 1: renderingMode  GL_FLAT; break;
case 2: renderingMode  GL_SMOOTH; break;
}
glutPostRedisplay ( );
}
/*

Establecer valores de color de acuerdo con la opcin del submen


seleccionada. */
void colorSubMenu (GLint colorOption)
{
switch (colorOption) {
case 1:
red  0.0; green  0.0; blue  1.0;
break;
case 2:
red  0.0; green  1.0; blue  0.0;
break;
case 3:
red  1.0; green  1.0; blue  1.0;
}
glutPostRedisplay ( );
}
void displayTriangle (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glShadeModel (renderingMode); // Establecer mtodo de relleno para
// el tringulo.
glColor3f (red, green, blue); // Establecer el color de los primeros
// dos vrtices.
glBegin (GL_TRIANGLES);
glVertex2i (280, 20);
glVertex2i (160, 280);
glColor3f (1.0, 0.0, 0.0); // Seleccionar rojo como color del ltimo vrtice.
glVertex2i (20, 100);
glEnd ( );
glFlush ( );
}

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 723

11.7 Funciones de men OpenGL

723

void reshapeFcn (GLint newWidth, GLint newHeight)


{
glViewport (0, 0, newWidth, newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (0.0, GLfloat (newWidth), 0.0, GLfloat (newHeight));
displayTriangle ( );
glFlush ( );
}
void main (int argc, char **argv)
{
GLint subMenu;
// Identificador para el submen.
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (200, 200);
glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Submenu Example");
init ( );
glutDisplayFunc (displayTriangle);
subMenu  glutCreateMenu (colorSubMenu);
glutAddMenuEntry ("Blue", 1);
glutAddMenuEntry ("Green", 2);
glutAddMenuEntry ("White", 3);
glutCreateMenu (mainMenu); // Crear men principal emergente.
glutAddMenuEntry ("Solid-Color Fill", 1);
glutAddMenuEntry ("Color-Interpolation Fill", 2);
glutAddSubMenu ("Color", subMenu);
/* Seleccionar opcin del men con el botn derecho del ratn. */
glutAttachMenu (GLUT_RIGHT_BUTTON);
glutReshapeFunc (reshapeFcn);
glutMainLoop ( );
}

Modificacin de los mens GLUT


Si queremos cambiar el botn del ratn utilizado para seleccionar una opcin del men, primero tenemos que
cancelar la asociacin actual de botn y luego asociar el botn nuevo. Podemos cancelar una asociacin de
botn para el men actual mediante:
glutDetachMenu (mouseButton);

CAP11_HEARN_1P.qxd

724

09/10/2005

20:43

Pgina 724

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

Al parmetro mouseButton 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:
glutRemoveMenuItem (itemNumber);

donde al parmetro itemNumber 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.

11.8 DISEO DE UNA INTERFAZ GRFICA DE USUARIO


Casi todas las aplicaciones software suelen incluir hoy en da una interfaz grfica, compuesta por ventanas de
visualizacin, iconos, mens y otras caractersticas que sirven para ayudar al usuario a aplicar el software a
un problema concreto. Se incluyen dilogos interactivos especializados para que las opciones de programacin puedan seleccionarse utilizando trminos familiares dentro de un determinado campo, como por ejemplo
el diseo arquitectnico y de ingeniera, el dibujo, los grficos empresariales, la geologa, la economa, la qumica o la fsica. Otras consideraciones que suelen tenerse en cuenta al disear una interfaz de usuario son la
adaptacin a los diversos niveles de experiencia de los usuarios, la coherencia, el tratamiento de errores y la
realimentacin.

El dilogo con el usuario


En cualquier aplicacin, el modelo de usuario sirve como base para el diseo del procedimiento de dilogo
en que se basa la aplicacin, escribindose qu es lo que el sistema debe hacer y qu operaciones hay disponibles. Ese modelo indica el tipo de los objetos que pueden mostrarse y la manera en que se los puede manipular. Por ejemplo, si el sistema va a ser usado como herramienta para el diseo arquitectnico, el modelo
describe cmo puede utilizarse el paquete software para construir y visualizar vistas de edificios posicionando las paredes, las puertas, las ventanas y otros componentes. Un paquete de diseo de interiores podra incluir
un conjunto de tipos de muebles, junto con las operaciones para colocar y eliminar diferentes objetos en un
determinado plano de una vivienda. Y un programa de diseo de circuitos proporciona smbolos elctricos o
lgicos y las operaciones de colocacin necesarias para aadir o borrar elementos de un diagrama.
Toda la informacin del procedimiento de dilogo con el usuario se presenta en el lenguaje de la aplicacin. En un paquete de diseo arquitectnico, esto quiere decir que todas las interacciones se describirn
exclusivamente en trminos arquitectnicos, sin hacer referencia a estructuras de datos concretas, a trminos
de infografa o a otros conceptos que puedan no resultar familiares para un arquitecto.

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, posicionamiento 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.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 725

11.8 Diseo de una interfaz grfica de usuario

(a)

725

(b)

(c)
FIGURA 11.18. Ejemplos de disposiciones de pantalla que utilizan ventanas de visualizacin, mens 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.

Adaptacin a los distintos niveles de experiencia


Usualmente, las interfaces grficas interactivas proporcionan diversos mtodos para la seleccin de acciones.
Por ejemplo, podra especificarse una opcin apuntando a un icono, accediendo a un men desplegable o
emergente o escribiendo un comando en el teclado. Esto permite que el paquete sea utilizado por usuarios con
distintos niveles de experiencia.
Para los usuarios menos experimentados, una interfaz con unas pocas operaciones fcilmente comprensibles y con mensajes informativos detallados resulta ms efectiva que otra con un conjunto de operaciones
grande y exhaustivo. Un conjunto simplificado de mens y de opciones es fcil de aprender y de recordar y
el usuario puede concentrarse en la aplicacin en lugar de hacerlo en los detalles de la interfaz. Las operaciones simples de tipo apuntar y hacer clic son a menudo las ms sencillas para los usuarios poco experimentados de un paquete de aplicacin. Por tanto, las interfaces suelen proporcionar algn tipo de mecanismo para
enmascarar la complejidad del paquete software, de modo que los principiantes puedan utilizar el sistema sin
verse abrumados por un exceso de detalles.
Los usuarios experimentados, por el contrario, lo que normalmente desean es velocidad. Esto significa
menos mensajes indicativos y ms entrada desde el teclado o mediante mltiples clics de los botones del ratn.
Las acciones se seleccionan mediante teclas de funcin o mediante la combinacin simultnea de varias teclas
normales, ya que los usuarios experimentados son capaces de recordar estos atajos utilizados para acceder a
las acciones ms comunes.

CAP11_HEARN_1P.qxd

726

09/10/2005

20:43

Pgina 726

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

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 al 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 mens 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.

Minimizacin 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.

Cancelacin de acciones y tratamiento de errores


Otra caracterstica comn de las interfaces es algn tipo de mecanismo para deshacer una secuencia de operaciones, lo que permite al usuario explorar las capacidades del sistema, sabiendo que los efectos de un error
pueden corregirse. Normalmente, los sistemas pueden hoy en da deshacer varias operaciones, permitiendo as
al usuario reinicializar el sistema en alguna accin especificada. Para aquellas acciones que no pueden deshacerse, como por ejemplo cerrar una aplicacin sin guardar los cambios, el sistema suele pedir al usuario que
confirme la operacin solicitada.
Adems, unos adecuados mensajes de diagnstico y de error ayudan al usuario a determinar la causa de
los errores. Las interfaces pueden tratar de minimizar los errores anticipando ciertas acciones que pudieran
conducir a un error, y puede proporcionarse una advertencia a los usuarios si estn solicitando acciones ambiguas o incorrectas, como por ejemplo tratar de aplicar un procedimiento a mltiples objetos de aplicacin.

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,

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 727

11.9 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 emplearse algn tipo 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 necesiten
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 realimentacin 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 fija, de modo que el usuario siempre sepa dnde buscar los mensajes, aunque en otras ocasiones pueden que sea ventajoso colocar los
mensajes de realimentacin en el rea de trabajo, cerca del cursor. Los mensajes de realimentacin pueden
tambin mostrarse en diferentes colores, para distinguirlos de los restantes objetos visualizados.
La realimentacin de eco resulta til en muchas ocasiones, particularmente para la entrada desde teclado,
de modo que puedan detectarse rpidamente los errores. Las entradas de botones 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 de
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 muestreo permite que los dispositivos de entrada y el programa operen concurrentemente. 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
datos, se utilizan las funciones de entrada para introducir los valores de los datos dentro del programa. Un pro-

CAP11_HEARN_1P.qxd

728

09/10/2005

20:43

Pgina 728

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

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 como 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 interfaz 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 Toolkit), 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 11.2 se proporciona un resumen de las funciones de entrada y de mens de OpenGL.
TABLA 11.1. RESUMEN DE FUNCIONES DE ENTRADA OpenGL.
Funcin

Descripcin

glutMouseFunc

Especifica una funcin de retrollamada para el ratn que ser invocada cuando se pulse un botn del ratn.

glutMotionFunc

Especifica una funcin de retrollamada para el ratn que ser invocada cuando se mueva el cursor del ratn mientras est pulsado un botn.

glutPassiveMotionFunc

Especifica una funcin de retrollamada para el ratn que ser invocada cuando se mueva el cursor del ratn sin presionar un botn.

glutKeyboardFunc

Especifica una funcin de retrollamada para el teclado que ser invocada


cuando se pulse una tecla estndar.

glutSpecialFunc

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).

glutTabletButtonFunc

Especifica una funcin de retrollamada para una tableta que ser invocada
cuando se pulse un botn de la table mientras el cursor del ratn se encuentra
en una ventana de visualizacin.
Contina

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 729

11.9 Resumen

729

TABLA 11.1. RESUMEN DE FUNCIONES DE ENTRADA OpenGL. (Cont.)


Funcin

Descripcin

glutTabletMotionFunc

Especifica una funcin de retrollamada para una tableta que ser invocada
cuando se mueva el cursor o el lpiz de la tableta mientras el cursor del
ratn se encuentra en una ventana de visualizacin.

glutSpaceballButtonFunc

Especifica una funcin de retrollamada para una spaceball que ser invocada
cuando se pulse un botn de la spaceball mientras el cursor del ratn se
encuentra en una ventana de visualizacin, o bien utilizando algn otro
mtodo de activacin de ventanas de visualizacin.

glutSpaceballMotionFunc

Especifica una funcin de retrollamada para una spaceball que ser invocada
cuando se produzca un movimiento de traslacin de la spaceball para una
ventana de visualizacin activada.

glutSpaceballRotateFunc

Especifica una funcin de retrollamada para una spaceball que ser invocada
cuando se produzca un movimiento giratorio de la spaceball para una ventana 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

Especifica el tamao y el nombre del bfer de seleccin.

glRenderMode

Activa las operaciones de seleccin utilizando el argumento GL_SELECT.


Esta funcin tambin se utiliza para activar el modo de representacin normal o el modo de realimentacin.

glInitNames

Activa la pila de nombres identificadores de los objetos.

glPushName

Introduce un identificador de un objeto en la pila de identificadores.

glLoadName

Sustituye el identificador situado en la parte superior de la pila por otro


valor especificado.

glPopName

Elimina el elemento superior de la pila de identificadores.

gluPickMatrix

Define una ventana de seleccin y construye un nuevo volumen de visualizacin para las operaciones de seleccin.

TABLA 11.2. RESUMEN DE FUNCIONES DE MEN OpenGL.


Funcin

Descripcin

glutCreateMenu

Crea un men emergente y especifica el procedimiento que habr que invocar cuando se seleccione un elemento del men; se asigna un identificador entero al men
creado.

glutAddMenuEntry

Especifica una opcin que hay que incluir en un men emergente.

glutAttachMenu

Especifica el botn del ratn que se utilizar para seleccionar las opciones de men.
Contina

CAP11_HEARN_1P.qxd

730

09/10/2005

20:43

Pgina 730

CAPTULO 11 Mtodos interactivos de entrada e interfaces grficas de usuario

TABLA 11.2. RESUMEN DE FUNCIONES DE MEN OpenGL. (Cont.)


Funcin

Descripcin

glutSetMenu

Especifica el men actual para la ventana de visualizacin actual.

glutDestroyMenu

Especifica el identificador de un men que se quiere eliminar.

glutGetMenu

Devuelve el identificador del men actual asociado a la ventana actual.

glutAddSubMenu

Especifica un submen que hay que incluir en otro men, debiendo haberse definido el submen indicado mediante la ruina glutCreateMenu.

glutDetachMenu

Cancela la asociacin especificada de botn de ratn para el men actual.

glutRemoveMenuItem

Borra una opcin especificada en el men actual.

REFERENCIAS
La evolucin del concepto de los dispositivos de entrada lgicos (o virtuales) se analiza en Wallace (1976) y
en Rosenthal, Michener, Pfaff, Kessener y Sabin (1982). Puede encontrar implementaciones 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),
OSF/MOTIF (1989) y Laurel (1990). Para obtener informacin sobre el sistema XWindow, consulte Young
(1990) y Cutler, Gilly y Reilly (1992).

EJERCICIOS
11.1

Disee un algoritmo que permita situar objetos en la pantalla utilizando un dispositivo localizador. Hay que presentar un men de objetos con formas 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.

11.2

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.

11.3

Defina un procedimiento para dibujar interactivamente objetos utilizando un dispositivo de trazado.

11.4

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.

11.5

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.

11.6

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.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 731

Ejercicios

731

11.7

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 lnea individuales se seleccionarn mediante un dispositivo localizador.

11.8

Escriba un programa de dibujo que permita crear imgenes mediante segmentos de lnea recta dibujados entre puntos especificados. Defina un campo de gravedad alrededor de cada lnea de la imagen, como ayuda para conectar
las nuevas lneas con las lneas existentes.

11.9

Modifique el programa de dibujo del ejercicio anterior para poder restringir las lneas horizontal o verticalmente.

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.
11.11 Escriba una rutina que permita al diseador crear una imagen dibujando lneas rectas mediante un mtodo de
banda elstica.
11.12 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 solicitud.
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.18 Disee un procedimiento para implementar funciones de entrada para los modos de solicitud, muestreo y sucesos.
11.19 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 polilneas 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.

CAP11_HEARN_1P.qxd

732

09/10/2005

20:43

Pgina 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. El 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 Bzier 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 Escriba un programa OpenGL interactivo para mostrar una B-spline cbica bidimensional. Los parmetros de la
spline se proporcionarn como entrada y los puntos de control se seleccionarn con el ratn.
11.35 Escriba un programa OpenGL interactivo para mostrar un parche superficial cbico de Bzier. Las coordenadas x
e y 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 qu
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 mens 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 Enumere las funciones que debe proporcionar un gestor de ventanas para gestionar la disposicin de pantalla cuando existen mltiples ventanas solapadas.
11.42 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.

CAP11_HEARN_1P.qxd

09/10/2005

20:43

Pgina 733

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 734

CAPTULO 12

Modelos y aplicaciones
del color

Una escena de flores generada por computadora, modelada con diversas combinaciones de color y una
forma bsica de ptalo. (Cortesa de Przemyslaw Prusinkiewicz, University of Calgary. 1987.)

CAP12_HEARN_1P.qxd

12.1
12.2
12.3
12.4
12.5

09/10/2005

20:59

Pgina 735

Propiedades de la luz
Modelos de color
Primarios estndar y diagrama cromtico
El modelo de color RGB
El modelo de color YIQ y los modelos relacionados

12.6
12.7
12.8
12.9
12.10

Los modelos de color CMY y CMYK


El modelo de color HSV
El modelo de color HLS
Seleccin y aplicaciones del color
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 PROPIEDADES 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 color es 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  1014 hercios) se encuentran los colores rojos, mientras que en el extremo de alta frecuencia (aproximadamente 7.9  1014 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 azul 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 a la direccin de propagacin. Para cada color
espectral, la frecuencia de oscilacin de la magnitud del campo est dada por la frecuencia f. 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 1/ 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 . Para un color espectral (una onda monocromtica), la longitud de onda y

CAP12_HEARN_1P.qxd

20:59

Pgina 736

10

10

10

10

10

10

10

12

14

10

16

10

Rayos X

Ultravioleta

Visible

Infrarrojos

Microondas

Radio FM y TV

CAPTULO 12 Modelos y aplicaciones del color

Radio AM

736

09/10/2005

10

18

Frecuencia
(hercios)

20

10

Amplitud

FIGURA 12.1. Espectro electromagntico.

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:
cf

(12.1)

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 31010 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 angstroms (1  108 cm) o en
nanometros (1nm  107 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.
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 reflejadas 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

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 737

12.1 Propiedades de la luz

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.

Caractersticas psicolgicas del color


Necesitamos otras propiedades, adems de la frecuencia, para caracterizar nuestra percepcin de la luz.
Cuando observamos una fuente luminosa, nuestros ojos responden al color (o frecuencia dominante) y a otras
dos sensaciones bsicas. Una de estas es lo que denominamos brillo, que se corresponde con la energa luminosa total y puede cuantificarse como la luminancia de la luz (Seccin 10.3). La tercera caracterstica percibida se denomina pureza o saturacin de la luz. La pureza describe hasta qu punto una determinada
radiacin luminosa nos parece un color espectral puro, como por ejemplo el rojo. Los colores plidos y los
colores pastel tienen una baja pureza (baja saturacin) con lo que parecen casi blancos. Otro trmino, la cromaticidad, se utiliza para referirse conjuntamente a las dos propiedades que describen las caractersticas de
un color: pureza y frecuencia dominante (tono).
La radiacin emitida por una fuente luminosa blanca tiene una distribucin de energa que puede representarse en el rango de frecuencias visibles como se muestra en la Figura 12.3. Cada componente de frecuencia dentro del rango que va del rojo al violeta contribuye ms o menos en la misma cantidad a la energa total,
y el poder de la fuente se describe como blanco. Cuando hay presente una frecuencia dominante, la distribucin de energa de la fuente toma una forma como la de la Figura 12.4. Este haz luminoso los describiramos
como de color rojo (la frecuencia dominante), con un valor relativamente alto de pureza. La densidad de energa de la componente dominante de la luz est etiquetada como ED en esta figura, y las contribuciones de las
otras frecuencias producen una luz blanca con densidad de energa EW. Podemos calcular el brillo de la fuente como el rea comprendida bajo la curva, que nos da la densidad total de energa emitida. La pureza (saturacin) depende de la diferencia entre ED y EW. Cuanto mayor sea la energa ED de la frecuencia dominante,
comparada con la componente de luz blanca EW, mayor ser la pureza de la luz. Tendremos una pureza del
100 por cien cuando EW  0 y una pureza del 0 por cien cuando EW  ED.
Energa

Rojo

Violeta

Frecuencia

FIGURA 12.3. Distribucin de energa de una fuente de luz


blanca.

Energa

ED
EW
Rojo

Violeta
Frecuencia
dominante

Frecuencia

FIGURA 12.4. Distribucin de energa para una fuente luminosa con una frecuencia dominante cerca del extremo rojo del
rango de frecuencias.

CAP12_HEARN_1P.qxd

738

09/10/2005

20:59

Pgina 738

CAPTULO 12 Modelos y aplicaciones del color

12.2 MODELOS DE COLOR


Cualquier mtodo utilizado para explicar las propiedades o el comportamiento del color dentro de un contexto concreto se denomina modelo de color. No hay un nico modelo que pueda explicar todos los aspectos del
color, por lo que se utilizan diferentes modelos como ayuda para describir las diferentes caractersticas del
color.

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 primarios y la gama 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 complementarios. 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 todos 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 12.5 muestra un conjunto de funciones 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.

Conceptos intuitivos del color


Un artista crea una pintura en color mezclando pigmentos coloreados con pigmentos blancos y negros con el
fin de formar las diversas sombras, tintas y tonos de la escena. Comenzando con el pigmento de un color
0.4
fR

Intensidades RBG
de ajuste de color

fB
fG
0.2

0
400

500

600

700

(nm)

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.

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 739

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 azul 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 los dispositivos de salida.

12.3 PRIMARIOS ESTNDAR Y DIAGRAMA CROMTICO


Puesto que no puede combinarse ningn conjunto finito de puntos luminosos para mostrar todos los colores
posibles, en 1931 la CIE (Commission Internationale de lclairage, Comisin Internacional de Iluminacin)
defini tres primarios estndar. Estos tres primarios son colores imaginarios, que se definen matemticamente con funciones positivas de ajuste de color (Figura 12.6) que especifican la cantidad de cada primario necesaria para describir cualquier color espectral. Esto proporciona una definicin internacional estndar para
todos los colores, y los primarios del CIE eliminan el ajuste de color con valores negativos y otros problemas
asociados con la seleccin de un conjunto de primarios reales.

El modelo de color XYZ


El conjunto de primarios CIE se suele denominar modelo de color XYZ, donde los parmetros X, Y y Z representan la cantidad de cada primario CIE necesaria para producir el color seleccionado. As, un color se describe con el modelo XYZ de la misma forma en que describimos un color utilizando el modelo RGB.
En el espacio de color tridimensional XYZ, representamos cualquier color C() como:
C()  (X, Y, Z)

(12.2)

donde X, Y y Z se calculan a partir de las funciones de ajuste de color (Figura 12.6):


X = k

f X ( ) I ( ) d

Y = k

fY ( ) I ( ) d

Z = k

f Z ( ) I ( ) d

visible
visible
visible

(12.3)

fZ

Intensidades CIE
para ajuste de color

1.5
fY

1.0

fX

0.5

0
400

500

600

700

(nm)

FIGURA 12.6. Las tres funciones de ajuste de color


para los primarios de la CIE.

CAP12_HEARN_1P.qxd

740

09/10/2005

20:59

Pgina 740

CAPTULO 12 Modelos y aplicaciones del color

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 I () representa la radiancia espectral, que es la intensidad
luminosa seleccionada en una direccin concreta, y la funcin de ajuste de color fY 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 representa 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:
(12.4)

C ( ) = X X + Y X + Z X

Valores XYZ normalizados


Al hablar de las propiedades del color, resulta conveniente normalizar los valores de la Ecuacin 12.3 con respecto a la suma X  Y  Z, que representa la energa luminosa total. As, los valores normalizados se calculan de la forma siguiente:
x=

X
,
X +Y + Z

y=

Y
,
X +Y + Z

z=

Z
X +Y + Z

(12.5)

Puesto que x  y  z  1, cualquier color puede representarse simplemente con los valores x e y.
Asimismo, hemos efectuado la normalizacin con respecto a la energa total, por lo que los parmetros x e y
dependen slo del tono y de la pureza y se denominan valores de cromaticidad. Sin embargo, los valores x
e y 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 restanes del modelo de la CIE se calculan entonces mediante
las frmulas
X=

x
Y,
y

z
Z= Y
y

(12.6)

donde z  1  x  y. Utilizando las coordenadas de cromaticidad (x, y), podemos representar todos los colores en un diagrama bidimensional.

Diagrama cromtico de la CIE


Cuando dibujamos los valores normalizados x e y 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 CIE. 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.

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 741

12.3 Primarios estndar y diagrama cromtico

Colores
espectrales

520
0.8
0.7

540

741

(Verde)
560

0.6

(Amarillo)

500

C2

580

0.5

C1

(Cin)
0.4
0.3

C3

600
(Azul)

C4

700 (Rojo)
0.2
0.1
0

480
400 (Violeta)

(Lnea prpura)

0.1 0.2 0.3 0.4 0.5 0.6 0.7 x

FIGURA 12.7. Diagrama cromtico CIE para los colores espectrales comprendidos entre 400 nm y 700 nm.

C5

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 C1 y C2 en la Figura 12.8 pueden obtenerse mezclando las cantidades apropiadas de dichos colores C1 y C2. Si se utiliza una mayor proporcin de C1, el color resultante estar ms prximo a C1 que a C2. La gama de colores para tres puntos, como
por ejemplo C3, C4 y C5 en la Figura 12.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 impresas.

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 C1 y C2 a C determinan la cantidad de cada
color necesaria para producir luz blanca.

Longitud de onda dominante


Para determinar la longitud de onda dominante de un color, dibujamos una lnea recta desde C a travs de
dicho punto de color, hasta alcanzar un color espectral en la curva cromtica. El color espectral Cs en la Figura
2.10 es la longitud de onda dominante para el color C1 en este diagrama. As, el color C1 puede representarse como una combinacin de la luz blanca C y el color espectral Cs. Este mtodo para determinar la longitud
de onda dominante no sirve para los puntos de color que se encuentren entre C y la lnea prpura. Si dibujamos una lnea desde C a travs del punto C2 en la Figura 12.10, llegamos al punto Cp en la lnea prpura, que
no se encuentra en el espectro visible. En este caso, tomamos el complementario de Cp en la curva espectral,

CAP12_HEARN_1P.qxd

742

09/10/2005

20:59

Pgina 742

CAPTULO 12 Modelos y aplicaciones del color


y

y
Cs

Csp
C1
C1
C

C
C2

C2
Cp
x

FIGURA 12.9. Representacin de colores complementarios en el diagrama cromtico.

FIGURA 12.10. Determinacin de la longitud de onda


dominante y de la pureza utilizando el diagrama cromtico.

que ser el punto Csp, como longitud de onda dominante. Los colores como C2 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.

Pureza
Para un punto de color tal como C1 en la Figura 12.10, determinamos la pureza como la distancia relativa de
C1 a C segn la lnea recta que une C con Cs. Si dc1 denota la disntancia desde C a C1 y dcs es la distancia
desde C a Cs, podemos representar la pureza como el cociente dc1/dcs. El color C1 en esta figura tiene una
pureza aproximadamente del 25 por ciento, ya que est situado aproximadamente a un cuarto de la distancia
total de C a Cs. En la posicin Cs, el punto de color sera 100 por cien puro.

12.4 EL MODELO DE COLOR RGB


De acuerdo con la teora de los tres estmulos de la visin, nuestros ojos perciben el color mediante la estimacin de tres pigmentos visuales en los conos de la retina. Uno de los pigmentos es ms sensible a la luz
con una longitud de onda de unos 630 nm (roja), otro tiene su pico de sensibilidad para unos 530 nm (verde)
y el tercer pigmento es especialmente receptivo a la luz con una longitud de onda de unos 450 nm (azul).
Comparando las intensidades de una fuente luminosa, podemos percibir el color de la luz. Esta teora de la
visin es la base para la visualizacin de los colores en un monitor de vdeo utilizando los tres primarios rojo,
verde y azul, que es lo que se denomina modelo de color RGB.
Podemos representar este modelo utilizando el cubo unitario definido sobre sendos ejes R, G y B, como se
muestra en la Figura 12.11. El origen representa el color negro y el vrtice diagonalmente opuesto, con coordenadas (1, 1, 1), es el blanco. Los vrtices del cubo situados sobre los ejes representan los colores primarios
y los restantes vrtices son los puntos de color complementario para cada uno de los colores primarios.
Al igual que con el sistema de color XYZ, el esquema de color RGB es un modelo aditivo. Cada punto de
color dentro del cubo unitario puede representarse como una suma vectorial ponderada de los colores primarios, utilizando los vectores unitario R, G y B:
C ()  (R, G, B)  R R  G G  B B

(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-

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 743

12.4 El modelo de color RGB

743

Escala de grises Verde


(0, 1, 0)

Cin
(0, 1, 1)
Negro
(0, 0, 0)

Amarillo
(1, 1, 0)

Blanco
(1, 1, 1)
R

Rojo
(1, 0, 0)
Azul
(0, 0, 1)

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.

Magenta
(1, 0, 1)

(a)

(b)

FIGURA 12.12. Dos vistas del cubo de color


RGB. La vista (a) es segn la diagonal de
escala 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 (1, 1, 1) 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 CIE 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, y).
Estndar NTSC

Modelo CIE

Valores aproximados monitor color

(0.670, 0.330)

(0.735, 0.265)

(0.628, 0.346)

(0.210, 0.710)

(0.274, 0.717)

(0.268, 0.588)

(0.140, 0.080)

(0.167, 0.009)

(0.150, 0.070)

CAP12_HEARN_1P.qxd

744

09/10/2005

20:59

Pgina 744

CAPTULO 12 Modelos y aplicaciones del color

y
520
0.8

540

0.7
560

0.6
500
0.5

580

0.4
C

0.3

600
700

0.2
0.1
0

480
400
0.1 0.2 0.3 0.4 0.5 0.6 0.7 x

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 luminancia de Y  100.0.

12.5 EL MODELO DE COLOR YIQ Y LOS MODELOS RELACIONADOS


Aunque un monitor grfico RGB requiere seales separadas para las componentes roja, verde y azul de las
imgenes, los monitores de televisin utilizan una seal compuesta. La codificacin de color NTSC para formar la seal de vdeo compuesta se denomina modelo YIQ.

Los parmetros YIQ


En el modelo de color YIQ, el parmetro Y es igual que la componente Y del espacio de color XYZ de CIE.
La informacin de luminancia (brillo) est contenida en el parmetro Y, mientras que la informacin cromtica (tono y pureza) est incorporada en los parmetros I y Q. Para el parmetro Y se elige una combinacin
de rojo, verde y azul para obtener la curva de luminosidad estndar. Puesto que Y contiene la informacin de
luminancia, los monitores de televisin en blanco y negro slo utilizan la seal Y. El parmetro I contiene la
informacin de color naranja-cin que proporciona el tono de sombreado de la piel, mientras que el parmetro Q comunica la informacin de color verde-magenta.
La seal de color compuesta NTSC est diseada para proporcionar la informacin de tal manera que
pueda ser recibida por los monitores de televisin en blanco y negro, que obtienen la informacin de escala
de grises para una imagen dentro de un ancho de banda de 6 MHz. As, la informacin YIQ est tambin codificada dentro de un ancho de banda de 6 MHz, pero los valores de luminancia y cromticos estn codificados
en seales analgicas separadas. De esta forma, la seal de luminancia no tiene porqu cambiar con respecto
a la de los monitores en blanco y negro, aadindose simplemente la informacin de color dentro del mismo
ancho de banda. La informacin de luminancia, el valor Y, se comunica como una modulacin de amplitud
sobre una seal portadora con un ancho de banda de 4.2 MHz. La informacin cromtica, los valores I y Q,
est combinada sobre una segunda seal portadora que tiene un ancho de banda de unos 1.8 MHz. Los nombres de los parmetros I y Q hacen referencia a los mtodos de modulacin utilizados para codificar la informacin de color sobre esta portadora. Una codificacin de modulacin de amplitud (la seal en fase)
transmite el valor I, utilizando unos 1.3 MHz del ancho de banda, mientras que una codificacin por modulacin de fase (la seal en cuadratura), que utilzan unos 0.5 MHz, transporta el valor Q.
Los valores de luminancia estn codificados con mayor precisin en la seal NTSC (ancho de banda de
4.2 MHz) que los valores cromticos (ancho de banda 1.8 MHz), porque los humanos podemos detectar ms
fcilmente los pequeos cambios de brillo que los pequeos cambios de color. Sin embargo, esta menor precisin de la codificacin cromtica hace que las imgenes NTSC presenten una cierta degradacin de la calidad el color.

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 745

12.6 Los modelos de color CMY y CMYK

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 azul del color.
As,
Y  0.299 R  0.587 G  0.114 B
IRY

(12.8)

QBY

Transformaciones entre los espacios de color RGB e YIQ


Un color RGB puede convertirse a un conjunto de valores YIQ utilizando un codificador NTSC que implemente los clculos de la Ecuacin 12.8 y que module las seales portadoras. La conversin del espacio RGB
al espacio YIQ se lleva a cabo utilizando la siguiente matriz de transformacin:
Y 0.299 0.587 0.114 R
I = 0.701 0.587 0.114 G


Q 0.299 0.587 0.886 B

(12.9)

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:
0.000 Y
R 1.000 1.000
G = 1.000 0.509 0.194 I
(12.10)


B 1.000 0.000 1.0
000 Q

Los sistemas YUV e YCrCb


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 YUV de parmetros de color, que proporciona la informacin de color compuesto para transmisiones de vdeo en sistemas tales como PAL (Phase Alternation 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 YCrCb. Esta 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).

12.6 LOS MODELOS DE COLOR CMY Y CMYK


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.

Los parmetros CMY


Podemos formar un modelo de color substractivo utilizando los tres colores primarios cian, magenta y amarillo. Como hemos indicado, el cian puede describirse como una combinacin de verde y azul; por tanto, cuan-

CAP12_HEARN_1P.qxd

746

09/10/2005

20:59

Pgina 746

CAPTULO 12 Modelos y aplicaciones del color


M

Escala de grises

Magenta

Azul

Rojo
Negro
Cian
Blanco
Amarillo
Y

Verde

FIGURA 12.14. El modelo de color CMY. Las posiciones dentro del cubo se
describen restando del blanco las cantidades especificadas de los colores primarios.

do se refleja luz blanca en una tinta de color cian, 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 (1, 1, 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 azul, 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 de
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 utiliza la
tinta negra.

Transformaciones entre los espacios de color CMY y RGB


Podemos expresar la conversin de una representacin RGB a una representacin CMY utilizando la siguiente matriz de transformacin:
C 1 R
M = 1 G

Y 1 B

(12.11)

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:
R 1 C
G = 1 M

B 1 Y

(12.12)

En esta transformacin, el vector columna unitario representa el punto negro del espacio de color CMY.

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 747

12.7 El modelo de color HSV

747

Para la conversin de RGB al espacio de color CMYK, primero hacemos K  max(R, 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(R, G, B) y luego restamos K de cada uno de los valores R, G y
B de la Ecuacin 12.12. En la prctica, estas ecuaciones de transformacin se suelen modificar con el fin de
mejorar la calidad de impresin de cada sistema concreto.

12.7 EL MODELO DE COLOR HSV


Las interfaces para seleccin de colores por parte de los usuarios emplean a menudo un modelo de color basado en conceptos intuitivos, en lugar de en un conjunto de colores primarios. Podemos especificar un color en
un modelo intuitivo seleccionando un color espectral y las cantidades de blanco y de negro que hay que aadir a ese color para obtener diferentes sombras, tintas y tonos (Seccin 12.2).

Los parmetros HSV


Los parmetros de color en este modelo se denominan tono (H), saturacin (S) y valor (V). Podemos definir
este espacio de color tridimensional relacionando los parmetros HSV con las direcciones del cubo RGB. Si
pensamos en la visualizacin del cubo segn la diagonal que va desde el vrtice blanco hasta el origen (negro),
podremos ver el contorno del cubo con forma hexagonal que se muestra en la Figura 12.15. El contorno del
hexgono representa los distintos tonos y se utiliza como parte superior del cono hexagonal HSV (Figura
12.16). En el espacio HSV, la saturacin S se mide segn un eje horizontal y el parmetro de valor V se mide
segn un eje vertical que pasa por el centro del cono hexagonal.
El tono est representado como un ngulo con respecto al eje vertical, yendo de 0 para el rojo a 360. Los
vrtices del hexgono estn separados por intervalos de 60. El amarillo se encuentra en 60, el verde en 120
y el cian (opuesto al punto rojo) se encuentra en H  180. Los colores complementarios estn separados
por 180.
El parmetro de saturacin S se utiliza para especificar la pureza de un color. Un color puro (color espectral) tiene el valor S  1.0 y los valores de S decrecientes tienden hacia la lnea de escala de grises (S  0),
situada en el centro del cono hexagonal.
El valor V vara entre 0 en el vrtice del cono hexagonal y 1.0 en el plano superior. El vrtice del cono
hexagonal es el punto negro. En el plano superior, los colores tienen su mxima intensidad. Cuando V  1.0
y S  1.0, tendremos los tonos puros. Los valores de los parmetros para el punto blanco son V  1.0 y
S  0.
Para la mayora de los usaurios, este es el modelo ms cmodo para la seleccin de colores. Comenzando
con una seleccin de un tono puro, que especifica el ngulo de tono H y hace V  S  1.0, describimos el
G

Verde

Cian

Amarillo

Azul

Rojo

Blanco

R
Magenta
Cubo de color RGB
(a)

Hexgono de colores
(b)

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 tiene forma hexagonal (b).

CAP12_HEARN_1P.qxd

748

09/10/2005

20:59

Pgina 748

CAPTULO 12 Modelos y aplicaciones del color


V (Valor)

Verde
(120)

Amarillo
V
Tintas
V1
(Blanco)

Cian

Rojo
(0)

Tonalidades

Magenta

Azul
(240)

Tono puro
(S  1, V  1)

Blanco

Escala
de grises
Sombras
V0
(Negro)

H (ngulo de tono)
S (Saturacin)

FIGURA 12.16. El cono hexagonal HSV.

Negro
S

FIGURA 12.17. Seccin transversal 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 V mientras que S se mantiene constante. Por ejemplo, para obtener un azul oscuro, le podramos asignar a
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 V se 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.

Seleccin de sombras, tintas y tonalidades


Las regiones de color para la seleccin de sombras, tintas y tonos estn representadas en el plano de seccin
transversal del cono hexagonal HSV que se muestra en la Figura 12.17. Aadiendo negro a un color espectral, el valor de V decrece a lo largo del lado del cono hexagonal, desplazndonos hacia el punto negro. As,
las distintas sombras estarn representadas por los valores S1.0 y 0.0 V 1.0. La adicin de blanco a los
colores espectrales produce las distintas tintas situadas en el plano superior del cono hexagonal, donde los
valores de los parmetros son V  1.0 y 0 S 1.0. Las diversas tonalidades se obtienen aadiendo tanto
blanco como negro a los colores espectrales, lo que genera los puntos de color situados dentro del rea triangular de seccin transversal del cono hexagonal.
El ojo humano puede distinguir aproximadamente unos 128 tonos distintos y unas 130 tintas (niveles de
saturacin) distintas. Para cada uno de estos, podemos detectar diversas sombras (valores), dependiendo del
tono seleccionado. Con los colores amarillos, podemos distinguir unas 23 sombras, mientras que en el extremo azul del espectro slo podemos distinguir 16. Esto significa que el nmero de colores distintos que podemos distinguir es de aproximadamente 128  130  23  382,720. Para la mayora de las aplicaciones
grficas, 128 tonos, 8 niveles de saturacin y 16 valores suelen ser suficientes. Con este rango de parmetros
en el modelo de color HSV, habr disponible 16,384 colores para el usuario. Estos valores de color pueden
almacenarse con 14 bits por pxel, o bien pueden utilizarse tablas indexadas de colores y un nmero de bits
por pxel menor.

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 749

12.7 El modelo de color HSV

749

Transformaciones entre los espacios de color HSV y RGB


Para determinar las operaciones requeridos para las transformaciones entre los espacios HSV y RGB, vamos
a ver primero cmo puede construirse el cono hexagonal HSV a partir del cubo RGB. La diagonal del cubo
RGB que va de negro (el origen) a blanco se corresponden con el eje V del cono hexagonal. Asimismo, cada
subcubo del cubo RGB se corresponde con un rea hexagonal de seccin transversal del cono. En cada seccin transversal, todos los lados del hexgono y todas las lneas radiales que van del eje V hasta cualquier vrtice tienen el valor V. As, para cualquier conjunto de valores RGB, V ser igual al valor de la componente
RGB mxima. El punto HSV correspondiente a este conjunto de valores RGB estar en la seccin transversal hexagonal correspondiente al valor V. El parmetro S puede entonces determinarse como la distancia relativa de este punto con respecto al eje V. El parmetro H se determinar calculando la posicin relativa del
punto dentro de cada sextante del hexgono. En el siguiente procedimiento se proporciona un algoritmo para
mapear cualquier conjunto de valores RGB sobre los correspondientes valores HSV:
Podemos obtener la transformacin desde el espacio HSV al espacio RGB realizando las operaciones
inversas a las que se muestran en el procedimiento anterior. Estas operaciones inversas se llevan a cabo para
cada sextante del cono hexagonal y las ecuaciones de transformacin resultantes estn resumidas en el
siguiente algoritmo:

class rgbSpace {public: float r, g, b;};


class hsvSpace {public: float h, s, v;};
const float noHue  -1.0;
inline float min(float a, float b) {return (a < b)? a : b;}
inline float max(float a, float b) {return (a > b)? a : b;}
void rgbTOhsv (rgbSpace& rgb, hsvSpace& hsv)
{
/*

Los valores RGB y HSV estn en el rango 0 a 1.0 */

float minRGB  min (r, min (g, b)), maxRGB  max (r, max (g, b));
float deltaRGB  maxRGB - minRGB;
v  maxRGB;
if (maxRGB ! 0.0)
s  deltaRGB / maxRGB;
else
s  0.0;
if (s < 0.0)
h  noHue;
else {
if (r  maxRGB)
h  (g - b) / deltaRGB;
else
if (g  maxRGB)
h  2.0  (b - r) / deltaRGB;
else
if (b  maxRGB)
h  4.0  (r - g) / deltaRGB;
h * 60.0;
if (h < 0.0)

CAP12_HEARN_1P.qxd

750

09/10/2005

20:59

Pgina 750

CAPTULO 12 Modelos y aplicaciones del color

h  360.0;
h / 360.0;
}
}

12.8 EL MODELO DE COLOR HLS


Otro modelo basado en parmetros intuitivos de color es el sistema HLS utilizado por Tektronix Corporation.
Este espacio de color tiene la representacin de doble cono que se muestra en la Figura 12.18. Los tres parmetros de este modelo de color se denominan tono (H), claridad (L) y saturacin (S).
El tono tiene el mismo significado que en el modelo HSV. Especificando un ngulo con respecto al eje
vertical que indica un tono (color espectral). En este modelo, H  0 se corresponde con el azul. Los colores
restantes se especifican alrededor del permetro de cono en el mismo orden que en el modelo HSV. El magenta estar a 60, el rojo a 120 y el cian a H 180. De nuevo, los colores complementarios estarn separados
180 en este doble cono.
El eje vertical en este modelo se denomina claridad, L. Para L  0, tendremos el negro, mientras que el
blanco se encontrar en L  1.0. Los valores de escala de grises se encuentran a lo largo del eje L y los colores puros estn en el plano L  0.5.
El parmetro de saturacin S especifica de nuevo la pureza de un color. Este parmetro vara entre 0 y 1.0
y los colores puros son aquellos para los que S  1.0 y L  0.5. A medida que S disminuye, se aade ms
blanco a un color. La lnea de escala de grises se encuentra en S  0.
L (Claridad)
L1
(Blanco)

Rojo

Magenta
L  0.5

Amarillo
Verde

Azul

Cian

Escala
de grises

FIGURA 12.18. El doble cono HLS.

L0
(Negro)

H (ngulo de tono)
S (Saturacin)

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 751

12.10 Resumen

751

Para especificar un color, comenzamos seleccionando el ngulo de tono H. Entonces, podemos obtener
una sombra, tinta o tonalidad correspondientes a dicho tono ajustando 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 S, el punto de color espacial se mueve hacia la lnea de escala de grises.

12.9 SELECCIN Y APLICACIONES DEL COLOR


Los paquetes grficos pueden proporcionar capacidades de color que nos ayuden a seleccionar los colores
necesarios. Por ejemplo, una interfaz puede contener deslizadores y ruedas de color en lugar de exigirnos que
todas las especificaciones de color se proporcionen como valores numricos que definan las componentes
RGB. Adems, pueden proporcionarse facilidades para seleccionar combinaciones de color armoniosas, as
como directrices para la seleccin bsica de colores.
Un mtodo para obtener un conjunto de colores coordinados consiste en generar las combinaciones de
color a partir de un pequeo subespacio del modelo de color. Si los colores se seleccionan a intervalos regulares situados a lo largo de cualquier lnea recta dentro del cubo RGB o CMY, por ejemplo, cabe esperar que
obtengamos un conjunto de colores bien adaptados. Los tonos aleatoriamente seleccionados producen normalmente combinaciones de color duras y muy chocantes. Otra consideracin que hay que tener en cuenta en las
imgenes de color es el hecho de que percibimos los colores con profundidades diferentes. Esto sucede porque los ojos enfocan los colores de acuerdo con su frecuencia. Por ejemplo, los azules tienden a parecer ms
lejanos de lo que estn en realidad. Si se muestra un patrn azul al lado de uno rojo los ojos tendern a fatigarse, ya que necesitaremos continuamente ajustar el enfoque cuando desplacemos nuestra atencin de un
rea a otra. Este problema puede reducirse separando estos colores o utilizando colores extrados de una mitad
o menos del hexgono de colores del modelo HSV. Con esta tcnica, la imagen contendr azules y verdes o
rojos y amarillos, por ejemplo.
Como regla general, la utilizacin de un nmero menor de colores produce imgenes con mejor aspecto
que si se utilizara un gran nmero de colores. Asimismo, las tintas y las sombras tienden a mezclarse mejor
que los tonos puros. Para un fondo, el gris o el complementario de uno de los colores de primer plano suelen
ser las mejores elecciones.

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
de la luz basadas en la dualidad onda-corpsculo, podemos explicar las caractersticas fsicas 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 1931, la CIE (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 X, Y y Z

CAP12_HEARN_1P.qxd

752

09/10/2005

20:59

Pgina 752

CAPTULO 12 Modelos y aplicaciones del color

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 X e Y normalizados, denominados x e y, se utilizan para situar las posiciones de todos los colores espectrales en el diagrama cromtico
CIE. 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, YIQ 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 (1982). Los modelos de
color y las tcnicas de visualizacin de colores se tratan en Smith (1978), Heckbert (1982), Durrett (1987),
Schwartz, Cowan y Beatty (1987), Hall (1989) y Travis (1991). Puede encontrar algoritmos para diversas aplicaciones del color en Glassner (1990), Arvo (1991), 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 (1995).

EJERCICIOS
12.1

Calcule las expresiones para convertir los parmetros de color RGB en valores HSV.

12.2

Calcule las expresiones para convertir valores de color HSV en valores RGB.

12.3

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.

12.4

Escriba un programa para seleccionar colores utilizando un conjunto de tres deslizadores con los que seleccionar
los valores de los parmetros de color HSV.

12.5

Modifique el programa del ejercicio anterior para mostrar los valores numricos de las componentes RGB de cada
color seleccionado.

12.6

Modifique el programa del ejercicio anterior para mostrar las componentes de color RGB y el color combinado
en pequeas ventanas de visualizacin.

12.7

Calcule las expresiones para convertir los valores de color RGB en parmetros de color HLS.

12.8

Calcule las expresiones para convertir valores de color HLS en valores RGB.

CAP12_HEARN_1P.qxd

09/10/2005

20:59

Pgina 753

Ejercicios
12.9

753

Escriba un programa que produzca un conjunto de colores linealmente interpolados a partir de dos posiciones
especificadas 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 HSV.
12.12 Escriba un programa que genere un conjunto de colores linealmente interpolados entre de dos posiciones especificadas del espacio HLS.
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 puntos 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 HSV o del
espacio HLS.

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 754

CAPTULO 13

Animacin por computadora

Una imagen cuyas caractersticas faciales han sido transformadas mediante las tcnicas de morfismo.
(Cortesa de Vertigo Technology, Inc.)

CAP13_HEARN_1P.qxd

13.1
13.2
13.3
13.4
13.5

09/10/2005

21:09

Pgina 755

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

13.6

Sistemas de fotogramas clave

13.7

Especificaciones de movimientos

13.8

Animacin de figuras articuladas

13.9

Movimientos peridicos

13.10 Procedimientos de animacin en OpenGL


13.11 Resumen

Hoy en da, se utilizan los mtodos infogrficos de forma comn para generar animaciones para muy diversas aplicaciones, incluyendo el entretenimiento (pelculas y dibujos animados), la industria publicitaria, los
estudios cientficos y de ingeniera, la formacin y la educacin. Aunque todos tendemos a pensar en 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 fiabilidad 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 fsicas 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 y
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

CAP13_HEARN_1P.qxd

756

09/10/2005

CAPTULO 13

21:09

Pgina 756

Animacin por computadora

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.

13.1 MTODOS DE BARRIDO PARA LAS ANIMACIONES POR COMPUTADORA


La mayora de las veces, podemos crear secuencias simples de animacin en nuestros programas utilizando
mtodos de tiempo real, pero en general, podemos producir una secuencia animada en un sistema de visualizacin por barrido generando una imagen cada vez y guardando dicha imagen completa en un archivo para su
visualizacin posterior. La animacin puede verse entonces recorriendo la secuencia completa de imgenes,
o bien pueden transferirse esas imgenes a una pelcula. Sin embargo, si queremos generar una imagen en
tiempo real, debemos producir las imgenes de la secuencia con la suficiente rapidez como para que se perciba un movimiento continuo. Para una escena compleja, la generacin de cada imagen de la animacin puede
ocupar la mayor parte del ciclo de refresco. En tal caso, los objetos que se generen primero se visualizarn
durante la mayor parte de ese ciclo de refresco, pero los objetos generados hacia el final del mismo desaparecern muy poco despus de mostrarlos. Asimismo, en las animaciones muy complejas, el tiempo de generacin de la imagen podra ser superior al tiempo necesario para refrescar la pantalla, lo que puede hacer que
se perciban movimientos errticos y que se muestren imgenes fracturadas. Puesto que las imgenes de la pantalla se generan a partir de los valores de pxel sucesivamente modificados que hay almacenados en el bfer
de refresco, podemos aprovechar algunas de las caractersticas del proceso de refresco de pantalla en los sistemas de barrido con el fin de generar rpidamente las 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. Inicialmente, 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 implementacin 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 601 de 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 ani1
macin. Por ejemplo, si la tasa de refresco de pantalla es de 60 imgenes por segundo y se tarda 50 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 cons1
truccin de una nueva imagen es de 25 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 601 de

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 757

13.2 Diseo de secuencia de animacin

757

segundo, 602 de segundo o 603 de 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.

Generacin de animaciones mediante operaciones de barrido


Tambin podemos generar animaciones en tiempo real en los sistemas de barrido, para algunas aplicaciones
limitadas, utilizando la transferencia en bloque de matrices rectangulares de pxeles. Esta tcnica de animacin se utiliza a menudo en los programas de juegos. Como hemos visto en la Seccin 5.6, un mtodo simple
para mover un objeto de una ubicacin a otra en el plano xy consiste en transferir el grupo de pxeles que definen la forma del objeto hasta una nueva ubicacin. Las rotaciones bidimensionales en mltiplos de 90 tambin son simples de realizar, e incluso podemos rotar bloques rectangulares de pxeles otros ngulos distintos,
siempre que utilicemos procedimientos de antialiasing. Para una rotacin que no sea un mltiplo de 90, necesitamos estimar el porcentaje de recubrimiento de rea correspondiente a los pxeles que se solapan con el bloque rotado. Pueden ejecutarse secuencias de operaciones de barrido para obtener una animacin en tiempo
real de objetos bidimensionales o tridimensionales, siempre que restrinjamos la animacin a movimientos
dentro del plano de proyeccin. Entonces, no ser necesario invocar algoritmos de proyeccin ni de deteccin
de superficies visibles.
Tambin podemos animar los objetos segn trayectorias de movimiento bidimensionales utilizando tablas
de transformacin de colores. Con este mtodo, predefinimos el objeto en posiciones sucesivas a lo largo de
la trayectoria de movimiento y asignamos a los sucesivos bloques de pxeles una serie de entradas en la tabla
de color. Los pxeles correspondientes a la primera posicin del objeto se configuran con un color de primer
plano y los pxeles de las dems posiciones del objeto se configuran con el color de fondo. La animacin se
consigue entonces cambiando los valores de la tabla de colores, de modo que el color del objeto en las posiciones sucesivas a lo largo del trayecto de animacin se vaya transformando en el color de primer plano, a
medida que la posicin precedente se configura con el color de fondo (Figura 13.1).

13.2 DISEO DE SECUENCIAS DE ANIMACIN


La construccin de una secuencia de animacin puede ser una tarea complicada, particularmente cuando
requiere un guin y mltiples objetos, cada uno de los cuales puede moverse de diferente forma. Un enfoque
bsico consiste en disear tales secuencias de animacin mediante las siguientes etapas de desarrollo:
Realizacin del guin.
Definicin de los objetos.
Especificacin de los fotogramas clave.
Generacin de los fotogramas intermedios.

FIGURA 13.1. Animacin en tiempo real en un sistema de barrido mediante una tabla de colores.

CAP13_HEARN_1P.qxd

758

09/10/2005

CAPTULO 13

21:09

Pgina 758

Animacin por computadora

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 storyboard.
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-betweens) 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 Luxo 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.
1986 Pixar.)

FIGURA 13.3. Un fotograma del corto Tin Toy, la primera pelcula de animacin por computadora que gan un
Oscar. 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. 1988 Pixar.)

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 759

13.3 Tcnicas tradicionales de animacin

759

Puede que sea necesario llevar a cabo diversas otras tareas, dependiendo de la aplicacin. Estas tareas adicionales incluyen la verificacin 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.

13.3 TCNICAS TRADICIONALES DE ANIMACIN


Los profesionales que trabajan en la produccin de pelculas animadas utilizan diversos mtodos para mostrar y enfatizar secuencias de movimientos. Estos mtodos incluyen la deformacin de los objetos, el espaciado entre fotogramas de la secuencia, la anticipacin y seguimiento del movimiento y el enfoque de la accin.
Una de las tcnicas ms importantes para simular efectos de aceleracin, particularmente para los objetos
no rgidos, es la tcnica de compresin y expansin. La Figura 13.4 muestra cmo se utiliza esta tcnica para
enfatizar la aceleracin y deceleracin de una bola que rebota contra el suelo. A medida que la bola acelera,
comienza a expandirse. Cuando la bola impacta en el suelo y se detiene, primero se comprime y luego se vuelve a expandir a medida que acelera y rebota hacia arriba.
Otra tcnica utilizada por los profesionales de las pelculas animadas es la temporizacin, que hace referencia al espaciado entre fotogramas de la secuencia. Un objeto que se mueva ms lentamente se representar mediante fotogramas con un espaciado menor, mientras que un objeto que se mueva rpidamente se
mostrar distribuyendo menos fotogramas a lo largo de todo el trayecto de movimiento. Este efecto se ilustra
en la Figura 13.5, donde podemos ver que los cambios de posicin entre un fotograma y otro se incrementan
a medida que se acelera la bola en su cada.
Los movimientos de los objetos tambin pueden enfatizarse creando acciones preliminares que indiquen
una anticipacin de un movimiento inminente. Por ejemplo, un persona de dibujos animados puede inclinar-

Compresin

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.

Expansin

FIGURA 13.5. Los cambios de posicin entre fotogramas para el rebote de una bola se incrementan a medida que lo hace la velocidad de una bola.

CAP13_HEARN_1P.qxd

760

09/10/2005

CAPTULO 13

21:09

Pgina 760

Animacin por computadora

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 ha 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.

13.4 FUNCIONES GENERALES DE ANIMACIN POR COMPUTADORA


Se han desarrollado muchos paquetes software para diseo de animaciones generales o para realizar tareas de
animacin especializadas. Las funciones de animacin tpicas incluyen la gestin del movimiento de los objetos, la generacin de vistas de los objetos, la proyeccin de movimientos de la cmara y la generacin de fotogramas intermedios. Algunos paquetes de animacin, como por ejemplo Wavefront, proporcionan funciones
especiales tanto para el diseo global de animacin como para el procesamiento de objetos individuales. Otros
son paquetes de propsito especial para caractersticas concretas de una animacin, como por ejemplo los sistemas para generar fotogramas intermedios o los sistemas para animacin de personajes.
En los paquetes de animacin generales se suele proporcionar un conjunto de rutinas para la gestin de la
base de datos de objetos. Las formas de los objetos y sus parmetros asociados se almacenan y actualizan en
la base de datos. Otras funciones de manejo de los objetos incluyen las necesarias para generar los movimientos de los objetos y las empleadas para representar las superficies de los objetos. Los movimientos pueden
generarse de acuerdo con restricciones especificadas utilizando transformaciones bidimensionales o tridimensionales. Entonces, pueden aplicarse funciones estndar para identificar las superficies visibles y aplicar los
algoritmos de representacin.
Otro conjunto tpico de funciones simula los movimientos de la cmara. Los movimientos estndar de una
cmara son el zoom, las panormicas y los giros. Finalmente, dada la especificacin de los fotogramas clave,
pueden generarse automticamente los fotogramas intermedios.

13.5 LENGUAJES DE ANIMACIN POR COMPUTADORA


Podemos desarrollar rutinas para disear y controlar las secuencias de animacin mediante un lenguaje de programacin de propsito general, como C, C, Lisp o Fortran, pero tambin se han desarrollado diversos
lenguajes especializados de animacin. Estos lenguajes incluyen normalmente un editor grfico, un generador de fotogramas clave, un generador de fotogramas intermedios y una serie de rutinas grficas estndar. El
editor grfico permite al animador disear y modificar formas de objetos, utilizando splines de superficie,
mtodos constructivos de geometra slida u otros esquemas de representacin.
Una tarea importante dentro de la especificacin de la animacin es la descripcin de la escena. Esto
incluye el posicionamiento de los objetos y las fuentes luminosas, la definicin de los parmetros fotomtricos (intensidades de las fuentes luminosas y propiedades de iluminacin de las superficies) y la configuracin
de los parmetros de la cmara (posicin, orientacin y caractersticas del objetivo). Otra funcin estndar en
este tipo de lenguajes es la especificacin de acciones, que implica la disposicin de las trayectorias de movimiento correspondientes a los objetos y a la cmara. Y tambin necesitamos las rutinas grficas usuales: transformaciones de visualizacin y de perspectiva, transformaciones geomtricas para generar movimientos de los
objetos en funcin de las aceleraciones o especificaciones de proyectos cinemticos, identificacin de superficies visibles y operaciones de representacin de las superficies.
Los sistemas de fotogramas clave fueron diseados originalmente como un conjunto separado de las rutinas de animacin para generar los fotogramas intermedios a partir de los fotogramas clave especificados por
los usuarios. Ahora, estas rutinas suelen formar parte de paquetes de animacin ms generales. En el caso ms

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 761

13.6 Sistemas de fotogramas clave

761

Extensin
del codo
Movimiento
del hombro
Orientacin

Barrido
del brazo

Inclinacin

Giro

Base

FIGURA 13.6. Grados de libertad para un robot estacionario de un nico brazo.

FIGURA 13.7. Grados de libertad de traslacin y rotacin para la base del brazo robotizado.

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 brazo, movimiento del hombro, extensin del codo,
inclinacin, orientacin y giro. Podemos ampliar el nmero de grados de libertad de este brazo robotizado 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 parametrizados 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 script permiten definir las especificaciones de los objetos y las secuencias de animacin
mediante un script introducido por el usuario. Mediante el script, puede construirse una biblioteca de objetos
y movimientos diversos.

13.6 SISTEMAS DE FOTOGRAMAS CLAVE


Puede utilizarse un sistema de fotogramas clave para generar un conjunto de fotogramas intermedios a partir
de la especificacin de dos (o ms) fotogramas clave. Los trayectos de movimiento pueden especificarse
mediante una descripcin cinemtica como un conjunto de splines curvas, o bien pueden fundamentarse fsicamente los movimientos especificando las fuerzas que actan sobre los objetos que hay que animar.
Para las escenas complejas, podemos separar los fotogramas en componentes u objetos individuales denominados cels (transparencias de celuloide). Este trmino fue acuado en el mundo de las tcnicas de dibujos
animados, donde el fondo y cada uno de los personajes de una escena se dibujaba en una transparencia separada. Entonces, apilando las transparencias por orden, desde el fondo hasta el primer plano, se fotografiaba el
conjunto para obtener el fotograma completo. Con este sistema, se utilizan los trayectos de animacin especificados para obtener el siguiente cel de cada personaje, interpolando las posiciones a partir de los tiempos
correspondientes a los fotogramas clave.
Con transformaciones complejas de los objetos, las formas de los objetos pueden cambiar a lo largo del
tiempo. Como ejemplos podramos citar las ropas, las caractersticas faciales, las ampliaciones de determinados detalles, las formas evolutivas y la explosin o desintegracin de los objetos. Para las superficies descritas con mallas poligonales, estos cambios pueden dar como resultado modificaciones significativas en la forma
de los polgonos, por lo que el nmero de vistas de un polgono podra ser distinto entre un fotograma y el
siguiente. Estos cambios se incorporan en el desarrollo de los fotogramas intermedios aadiendo o eliminando aristas a los polgonos de acuerdo con los requisitos impuestos por los fotogramas clave correspondientes.

CAP13_HEARN_1P.qxd

762

09/10/2005

CAPTULO 13

21:09

Pgina 762

Animacin por computadora

Morfismo
La modificacin de la forma de un objeto, para que ste adopte una forma distinta, se denomina morfismo,
palabra que proviene de metamorfosis. Un 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 preprocesamiento 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  1.
Puesto que el fotograma k  1. tiene un vrtice adicional, aadimos un vrtice entre los vrtices 1 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 Lk y Lk1 denotan el nmero de segmentos
de lnea en dos fotogramas consecutivos. El nmero mximo y mnimo de lneas que habr que ecualizar ser
el siguiente:
(13.1)
Lmax  max(Lk, Lk1),
Lmin  min(Lk, Lk1)
A continuacin, calculamos los siguientes dos valores:
N e = Lmax mod Lmin
(13.2)

L
N s = int max
Lmin

1
3

FIGURA 13.8. Una arista con dos vrtices 1 y 2


en el fotograma clave k evoluciona para convertirse en dos aristas conectadas en fotograma
clave k  1.

2
Fotograma
clave k

Fotograma
clave k  1
1

1
3

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.

Punto
aadido
2
Fotograma
clave
k

Fotograma
intermedio

2
Fotograma
clave
k1

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 763

13.6 Sistemas de fotogramas clave

763

Punto
aadido

Fotograma
clave
k

Fotograma
intermedio

Fotograma
clave
k1

FIGURA 13.10. Interpolacin lineal para transformar un tringulo en un cuadriltero.

(a)

(b)

(d)

(c)

(e)

FIGURA 13.11. Transformacin de una lata de aceite para automviles STP en un motor de automvil. (Cortesa de Silicon
Graphics, Inc.)

Las etapas de preprocesamiento para la ecualizacin de aristas pueden llevarse a cabo entonces con los dos
siguientes procedimientos:
(1)
Dividir Ne aristas de fotogramaclavemin en Ns  1 secciones.
(2)
Dividir las lneas restantes de fotogramaclavemin en Ns secciones.
Como ejemplo, si Lk  15 y Lk1  11, dividiramos cuatro lneas de fotogramaclavek1 en dos secciones cada una. Las lneas restantes de fotogramaclavek1 se dejan intactas.
Si ecualizamos el nmero de vrtices, podemos utilizar los parmetros Vk y Vk1 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:
Vmax  max(Vk, Vk1),
A continuacin calculamos los siguientes dos valores:

Vmin  min(Vk, Vk1)

(13.3)

CAP13_HEARN_1P.qxd

764

09/10/2005

CAPTULO 13

21:09

Pgina 764

Animacin por computadora

(a)

(b)

(c)

(d)

FIGURA 13.12. Transformacin de un automvil en un tigre. (Cortesa de Exxon Company USA y Pacific Data Images.)

N ls = (Vmax 1) mod (Vmin 1)

(13.4)

V 1
N p = int max

Vmin 1
Estos dos valores se utilizan entonces para llevar a cabo la ecualizacin de vrtices mediante los procedimientos:
(1)
Aadir Np puntos Nls secciones de lnea de fotogramaclavemin.
(2)

Aadir Np  1 puntos a las aristas restantes de fotogramaclavemin.

Para el ejemplo de transformacin de un tringulo en un cuadriltero, Vk  3 y Vk1  4. Tanto Nls como


Np son 1, por lo que aadiramos un punto a una arista de fotogramaclavek. No se aadira ningn punto a las
lneas restantes de fotogramaclavek .

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 t1 y t2 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:

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 765

13.6 Sistemas de fotogramas clave

Intermedio

Fotograma
clave
k

765

Fotograma
clave
k2

Fotograma
clave
k1

FIGURA 13.13. Ajuste de las posiciones de los vrtices en los fotogramas clave mediante splines no lineales.

t1

t2

t

FIGURA 13.14. Posiciones de los fotogramas intermedios para movimiento a velocidad constante.

t =

t2 t1
n +1

(13.5)

El tiempo correspondiente al fotograma intermedio j-simo ser:


tB j = t1 + j t ,

j = 1, 2, , n

(13.6)

y este tiempo se utiliza para calcular las coordenadas de posicin, los colores y otros parmetros fsicos para
dicho fotograma de la secuencia.
Usualmente, 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 final 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:
1  cos ,

0< < /2

Para n fotogramas intermedios, el tiempo correspondiente al fotograma intermedio j-simo se calculara


como:
j

tB j = t1 + j t 1 cos
,
2(n + 1)

j = 1, 2, , n

(13.7)

CAP13_HEARN_1P.qxd

766

09/10/2005

21:09

CAPTULO 13

Pgina 766

Animacin por computadora

1.0
1 cos

0.5

cos

tB5

tB1
t1

FIGURA 13.15. Una funcin de aceleracin trigonomtrica y el correspondiente espaciado de fotogramas intermedios para
n  5 y  j/12 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 t es la diferencia de tiempo entre los dos fotogramas clave. La Figura 13.15 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 , con 0 < < /2.
El tiempo correspondiente a un fotograma intermedio se determina entonces mediante la frmula

tB j = t1 + t sin

j
,
2(n + 1)

j = 1, 2, , n

(13.8)

En la Figura 13.16 se muestra una grfica de esta funcin y el tamao decreciente de los intervalos temporales, para cinco fotogramas intermedios.

1.0
sin

0.5

tB1
0

t1

tB5
t2

FIGURA 13.16. Una funcin de deceleracin trigonomtrica y el correspondiente espaciado de los fotogramas intermedios
para n  5 y  j/12 en la Ecuacin 13.8, lo que produce cambios decrecientes en las coordenadas a medida que el
objeto pasa de un intervalo temporal a otro.

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 767

13.7 Especificaciones de movimiento

767

1.0
1 cos
0.5

0.5
cos
tB1

tB5

1.0
t1

t2

FIGURA 13.17. La funcin trigonomtrica de aceleracin-deceleracin (1  cos )/2 y el correspondiente espaciado de los
fotogramas intermedios para n  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
(1 cos ),
2

0 < < /2

El tiempo correspondiente al fotograma intermedio j-simo se calcular ahora como:


tB j = t1 + t

1 cos[ j /(n + 1)]


,
2

j = 1, 2, , n

(13.9)

donde t 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 inicialmente objetos esqueleto (almbricos), de modo que puedan ajustarse interactivamente a las secuencias de movimiento. Despus
de definir completamente la secuencia de animacin, puede procederse a obtener la representacin de los
objetos en imgenes.

13.7 ESPECIFICACIONES DE MOVIMIENTOS


Los mtodos generales para describir una secuencia de animacin van desde la especificacin explcita de las
trayectorias de movimiento hasta una descripcin de las interacciones que producen dichos movimientos. As,
podemos definir el modo en que una animacin debe transcurrir proporcionando los parmetros de transformacin, los parmetros de las trayectorias de movimiento, las fuerzas que deben actuar sobre los objetos o los
detalles sobre cmo interactan los objetos con el fin de producir movimientos.

Especificacin directa del movimiento


El mtodo ms simple para definir una animacin consiste en la especificacin directa del movimiento, lo que
nos da los parmetros de transformacin geomtrica. Con este mtodo, lo que hacemos es configurar explci-

CAP13_HEARN_1P.qxd

768

09/10/2005

CAPTULO 13

21:09

Pgina 768

Animacin por computadora

FIGURA 13.18. Aproximacin del movimiento de una bola que rebota sobre el suelo mediante una funcin seno amortiguada (Ecuacin 13.10).

tamente 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 aparezcan 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| sin(x  0)|ekx

(13.10)

donde A es la amplitud inicial (altura de la bola sobre el suelo), es la frecuencia angular, 0 es el ngulo de
fase y k es el coeficiente de amortiguamiento. Este mtodo de especificacin del movimiento resulta particularmente til para las secuencias de animacin simples programas por el usuario.

Sistemas dirigidos por objetivos


En el extremo opuesto, podemos especificar los movimientos que deben tener lugar en trminos generales que
describan de manera abstracta las acciones en funcin de los resultados finales. En otras palabras, una animacin se especifica en trminos del estado final de los movimientos. Estos sistemas se denominan dirigidos por
objetivos, ya que los valores de los parmetros de movimiento se determinan a partir de los objetivos de la
animacin. Por ejemplo, podramos especificar que un determinado objeto debe caminar o correr hasta
un destino concreto. O podramos especificar que queremos que el objeto agarre a algn otro objeto especificado. Las directivas de entrada se interpretan entonces en trminos de los movimientos componentes que
permitirn llevar a cabo la tarea descrita. El movimiento de los seres humanos, por ejemplo, puede definirse
como una estructura jerrquica de submovimiento para el torso, los miembros, etc. As, cuando se proporciona un objeto tal como caminar hasta la puerta se calculan los movimientos requeridos del torso y de los
miembros para llevar a cabo esta accin.

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

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 769

13.8 Animacin de figuras articuladas

769

especifica 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 tipo spline.
Un enfoque alternativo consiste en utilizar cinemtica 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 permitir 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 gravitatorios y de friccin,
las ecuaciones de Euler o de Navier-Stokes que describen el flujo de fluidos 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:
d
F = (mv )
(13.11)
dt
donde F es el vector de la fuerza y v es el vector velocidad. Si la masa es constante, resolvemos la ecuacin
F  ma, 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 fsico 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.

13.8 ANIMACIN DE FIGURAS ARTICULADAS


Una tcnica bsica para animar personajes humanos, animales, insectos y otras criaturas consiste en modelarlas como figuras articuladas, que son estructuras jerrquicas compuestas de un conjunto de enlaces rgidos
conectados mediante uniones rotatorias (Figura 13.19). En trminos menos formales, esto simplemente quiere decir que modelamos los objetos animados como si fueran esqueletos simplificados, los cuales podemos
envolver luego con superficies que representen la piel, el pelo, las plumas, las ropas u otros tipos de recubrimientos.
Los puntos de conexin de una figura articulada se sitan en los hombros, las caderas, las rodillas y otras
articulaciones del esqueleto, y esos puntos de unin siguen unas trayectorias de movimiento especificadas a
medida que el cuerpo se traslada. Por ejemplo, cuando se especifica un movimiento para un objeto, el hombro se mueve automticamente de una cierta forma y, a medida que el hombro se mueve, los brazos tambin
lo hacen. Con estos sistemas, se definen diferentes tipos de movimientos, como por ejemplo andar, correr o
saltar, y esos movimientos se asocian con movimientos concretos de las uniones y de los enlaces conectados
a ellas.

CAP13_HEARN_1P.qxd

770

09/10/2005

CAPTULO 13

21:09

Pgina 770

Animacin por computadora

FIGURA 13.19. Una figura simple articulada con nueve uniones y doce enlaces
conectados, sin contar la cabeza oval.

Articulacin
de la cadera

(a)

(b)

(c)

(d)

(e)

(f)

(g)

FIGURA 13.20. Posibles movimientos para un conjunto de 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 13.20(a)), el primer movimiento consiste en doblar la rodilla a medida que la cadera se mueve hacia adelante (Figura 13.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(f) 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 movi-

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 771

13.9 Movimientos peridicos

771

mientos 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.

13.9 MOVIMIENTOS PERIDICOS


Cuando construimos una animacin con patrones de movimiento repetitivos, como por ejemplo un objeto
giratorio, necesitamos asegurarnos de muestrear el movimiento (Seccin 4.17) con la suficiente frecuencia
como para representar los movimientos correctamente. En otras palabras, el movimiento debe estar sincronizado con la tasa de generacin de imgenes, para poder mostrar un nmero de imgenes por ciclo lo suficientemente alto como para que se perciba el movimiento real. En caso contrario, puede que la animacin se
visualice de forma incorrecta.
Un ejemplo tpico de imgenes de movimiento peridico submuestreadas es la rueda de tren en una pelcula del Oeste que parece estar girando en la direccin incorrecta. La Figura 13.21 ilustra un ciclo completo
de la rotacin de una rueda de tren, con un radio de distinto color que da 18 vueltas por segundo en el sentido de las agujas del reloj. Si este movimiento se graba en una pelcula a la velocidad normal de proyeccin
de 24 imgenes por segundo, entonces las primeras cinco imgenes correspondientes a este movimiento se1
ran las que se muestran en la Figura 13.22. Puesto que la rueda completa 34 de vuelta cada 24 de segundo,
slo se genera un fotograma de la animacin por cada ciclo y la rueda parece estar girando en la direccin
opuesta (en sentido contrario a las agujas del reloj).

(a)
0 seg.

(b)
1/ 72 seg.

(c)
1/ 36 seg.

(d)
1/ 24 seg.

(e)
1/ 18 seg.

FIGURA 13.21. Cinco posiciones del radio durante un ciclo de movimiento de una rueda que est girando a 18 revoluciones por segundo.

Fotograma 0
0 seg.

Fotograma 1
1/ 24 seg.

Fotograma 2
2/ 24 seg.

Fotograma 3
3/ 24 seg.

Fotograma 4
4/ 24 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.

CAP13_HEARN_1P.qxd

772

09/10/2005

CAPTULO 13

21:09

Pgina 772

Animacin por computadora

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 120 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 13.1. 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 considerar en 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.4, 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).

13.10 PROCEDIMIENTOS DE ANIMACIN EN Open GL


En la biblioteca bsica hay disponibles operaciones de manipulacin de imgenes de barrido (Seccin 5.7) y
funciones de asignacin de ndices de colores, mientras que en GLUT hay disponibles rutinas para modificar
los valores de las tablas de colores (Seccin 4.3). Otras operaciones de animacin por barrido slo estn disponibles como rutinas GLUT, porque dependen del sistema de gestin de ventanas que se utilice. Adems,
algunas caractersticas para animacin por computadora tales como el doble bfer pueden no estar incluidas
en algunos sistemas hardware.
Las operaciones de doble bfer, si estn disponibles, se activan utilizando el siguiente comando GLUT:
glutInitDisplayMode (GLUT_DOUBLE);

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 GL_TRUE al parmetro de matriz status si hay disponibles en el sistema tanto un
bfer frontal como otro trasero. En caso contrario, el valor devuelto es GL_FALSE. Para una animacin continua, tambin podemos usar:
glutIdleFunc (animationFcn);

donde al parmetro animationFcn 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 glutIdleFunc, podemos asignar a este argumento el valor NULL 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 z pasa a travs

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 773

13.10 Procedimientos de animacin en OpenGL

773

de esta posicin central. En el procedimiento init, 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, displayHex, especificamos una rotacin inicial de
0 en torno al eje z e invocamos la rutina glutSwapBuffers. Para activar la rotacin, utilizamos el procedimiento mouseFcn que incrementa continuamente el ngulo de rotacin en 3 cuando pulsamos el botn
central del ratn.. El clculo del ngulo de rotacin incrementado se lleva a cabo en el procedimiento
rotateHex, que es invocado por la rutina glutIdleFunc en el procedimiento mouseFcn. Detenemos la
rotacin pulsando el botn derecho del ratn, lo que hace que se invoque glutIdleFunc con un argumento
NULL.
#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
const double TWO_PI  6.2831853;
GLsizei winWidth  500, winHeight  500; // Tamao inicial ventana visualizacin.
GLuint regHex;
// Definir nombre para lista visualizacin.
static GLfloat rotTheta  0.0;
class scrPt {
public:
GLint x, y;
};
static void init (void)
{
scrPt hexVertex;
GLdouble hexTheta;
GLint k;
glClearColor (1.0, 1.0, 1.0, 0.0);
/* Establecer lista de visualizacin para un hexgono regular de color rojo.
* Los vrtices del hexgono son seis puntos equiespaciados
* situados sobre una circunferencia. */
regHex  glGenLists (1);
glNewList (regHex, GL_COMPILE);
glColor3f (1.0, 0.0, 0.0);
glBegin (GL_POLYGON);
for (k  0; k < 6; k) {
hexTheta  TWO_PI * k / 6;
hexVertex.x  150  100 * cos (hexTheta);
hexVertex.y  150  100 * sin (hexTheta);
glVertex2i (hexVertex.x, hexVertex.y);
}
glEnd ( );
glEndList ( );
}
void displayHex (void)
{

CAP13_HEARN_1P.qxd

774

09/10/2005

CAPTULO 13

21:09

Pgina 774

Animacin por computadora

glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix ( );
glRotatef (rotTheta, 0.0, 0.0, 1.0);
glCallList (regHex);
glPopMatrix ( );
glutSwapBuffers ( );
glFlush ( );
}
void rotateHex (void)
{
rotTheta  3.0;
if (rotTheta > 360.0)
rotTheta - 360.0;
glutPostRedisplay ( );
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
glViewport (0, 0, (GLsizei) newWidth, (GLsizei) newHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
gluOrtho2D (-320.0, 320.0, -320.0, 320.0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ( );
glClear (GL_COLOR_BUFFER_BIT);
}
void mouseFcn (GLint button, GLint action, GLint x, GLint y)
{
switch (button) {
case GLUT_MIDDLE_BUTTON: // Comenzar la rotacin.
if (action  GLUT_DOWN)
glutIdleFunc (rotateHex);
break;
case GLUT_RIGHT_BUTTON: // Detener la rotacin.
if (action  GLUT_DOWN)
glutIdleFunc (NULL);
break;
default:
break;
}
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 775

13.11 Resumen

775

glutInitWindowPosition (150, 150);


glutInitWindowSize (winWidth, winHeight);
glutCreateWindow ("Animation Example");
init ( );
glutDisplayFunc (displayHex);
glutReshapeFunc (winReshapeFcn);
glutMouseFunc (mouseFcn);
glutMainLoop ( );
}

13.11 RESUMEN
Podemos construir una secuencia de animacin fotograma a fotograma o podemos generarla en tiempo 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 efectos 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 final 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.
Normalmente, se utilizan funciones trigonomtricas para determinar el espaciado temporal de los fotogramas
intermedios cuando los movimientos incluyen aceleraciones.

CAP13_HEARN_1P.qxd

776

09/10/2005

CAPTULO 13

21:09

Pgina 776

Animacin por computadora

Las animaciones pueden generarse mediante software de propsito especial o utilizando un paquete grfico 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 contrario, 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 13.1 se enumeran las funciones
GLUT para generar animaciones con programas OpenGL.
TABLA 13.1. RESUMEN DE FUNCIONES DE ANIMACIN OpenGL.
Funcin

Descripcin

glutInitDisplayMode (GLUT DOUBLE)

Activa las operaciones de doble bfer.

glutSwapBuffers

Intercambia los bferes de refresco frontal y trasero.

glGetBooleanv (GL DOUBLEBUFFER, status)

Consulta al sistema para determinar si estn disponibles las


operaciones de doble bfer.

glutIdleFunc

Especifica una funcin para incrementar los parmetros de


animacin.

REFERENCIAS
Los sistemas de animacin por computadora se analizan en Thalmann y Thalmann (1985),Watt and Watt
(1992), ORourke (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).

CAP13_HEARN_1P.qxd

09/10/2005

21:09

Pgina 777

Ejercicios

777

EJERCICIOS
13.1

Disee un guin y los fotogramas clave correspondientes para una animacin de una figura articulada simple,
como en la Figura 13.19.

13.2

Escriba un programa para generar los fotogramas intermedios para los fotogramas clave especificados en el
Ejercicio 13.1 utilizando interpolacin lineal.

13.3

Expanda la secuencia de animacin del Ejercicio 13.1 para que incluya dos o ms objetos mviles.

13.4

Escriba un programa para generar los fotogramas intermedios para los fotogramas clave del Ejercicio 13.3 utilizando interpolacin lineal.

13.5

Escriba un programa de morfismo para transformar cualquier polgono en otro polgono especificado, utilizando
cinco fotogramas intermedios.

13.6

Escriba un programa de morfismo para transformar una esfera en un poliedro especificado, utilizando cinco fotogramas intermedios.

13.7

Defina una especificacin de una animacin que incluya aceleraciones y que implemente la Ecuacin 13.7.

13.8

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.

13.9

Defina la especificacin de una animacin que implemente los clculos de aceleracin-deceleracin de la


Ecuacin 13.9.

13.10 Escriba un programa para simular los movimientos lineales bidimensionales de un crculo 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 corto 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 crculo, 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 tridimensionalmente 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 gravitatoria 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.

CAP14_HEARN_1P.qxd

09/10/2005

21:20

Pgina 778

CAPTULO 14

Modelado jerrquico

Una escena infogrfica que contiene un complejo de edificios modelado jerrquicamente.


(Cortesa de Silicon Graphics, Inc.)

CAP14_HEARN_1P.qxd

14.1
14.2
14.3

09/10/2005

21:20

Pgina 779

Conceptos bsicos de modelado


Paquetes de modelado
Mtodos generales de modelado jerrquico

14.4
14.5

Modelado jerrquico mediante listas de


visualizacin OpenGL
Resumen

Al definir un sistema de objeto complejo, lo ms fcil suele ser especificar primero las subpartes 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.

14.1 CONCEPTOS BSIDOS DE MODELADO


La creacin y manipulacin de una representacin de un sistema se denomina modelado. Cualquier representacin se denominar modelo del sistema y esos modelos pueden definirse de manera grfica o puramente
descriptiva, como por ejemplo mediante un conjunto de ecuaciones que describan las relaciones entre los
parmetros del sistema. Los modelos grficos se suelen denominar modelos geomtricos, porque las partes
componentes del sistema se representan mediante entidades geomtricas tales como segmentos de lnea recta,
polgonos, poliedros, cilindros o esferas. Puesto que lo nico que nos interesa aqu son las aplicaciones grficas, utilizaremos el trmino modelo para referirnos a una representacin geomtrica de un sistema generada
por computadora.

Representaciones de los sistemas


La Figura 14.1 muestra una representacin grfica de un circuito lgico, donde se ilustran las caractersticas
comunes a muchos modelos de sistemas. Las partes componentes del sistema se muestran como estructuras
geomtricas, denominadas smbolos, y las relaciones entre los smbolos se representan en este ejemplo
mediante una red de lneas de conexin. Se utilizan tres smbolos estndar para representar las puertas lgicas correspondientes a las operaciones booleanas: and, or y not. Las lneas de conexin definen las relaciones en trminos del flujo de entrada y de salida (de izquierda a derecha) a travs de los componentes del
sistema. Uno de los smbolos, la puerta and, se muestra en dos posiciones diferentes dentro del circuito lgico. El posicionamiento repetido de unos cuantos smbolos bsicos es un mtodo comn para construir modelos complejos. Cada una de estas apariciones de un smbolo dentro de un modelo se denomina instancia de

CAP14_HEARN_1P.qxd

780

09/10/2005

21:20

Pgina 780

CAPTULO 14 Modelado jerrquico

Entrada
binaria

and

Salida
binaria

not
and

FIGURA 14.1. Modelo de un circuito lgico.

or

dicho smbolo. Tenemos una instancia para los smbolos or y not 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
datos para construir las conexiones entre esos componentes. La informacin no geomtrica incluye las etiquetas de texto, los algoritmos que 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
los 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 datos 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 fin 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 datos (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 estructuras de datos. Las lneas de conexin, as como las puertas, podran entonces definirse en una
tabla de datos 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,

CAP14_HEARN_1P.qxd

09/10/2005

21:20

Pgina 781

14.1 Conceptos bsicos de modelado

781

TABLA 14.1. TABLA DE DATOS QUE DEFINE LA ESTRUCTURA Y POSICIN DE CADA PUERTA EN EL CIRCUITO DE
LA FIGURA 14.1
Cdigo del smbolo

Descripcin geomtrica

Etiqueta identificativa

Puerta 1

(Coordenadas y otros parmetros)

and

Puerta 2

or

Puerta 3

not

Puerta 4

and

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 un 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 smbolo 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

Puerta not

Puerta or

Puerta and

FIGURA 14.2. Una descripcin jerrquica de un solo nivel para un circuito formado mediante puertas lgicas.

CAP14_HEARN_1P.qxd

782

09/10/2005

21:20

Pgina 782

CAPTULO 14 Modelado jerrquico

Fbrica

rea de
trabajo 1

Mesa de
trabajo

Silla

rea de
trabajo 3

rea de
trabajo 2

Archivador

Mesa de
trabajo

Silla

Estantes

Mesa de
trabajo

Silla

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 14.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.

14.2 PAQUETES DE MODELADO


Aunque pueden disearse y manipularse modelos de sistemas utilizando un paquete infogrfico de tipo general, tambin hay disponibles sistemas de modelado especializados para facilitar la labor de modelado en aplicaciones concretas. Los sistemas de modelado proporcionan un medio para definir y reordenar las
representaciones de los modelos en trminos de jerarquas de smbolos, que luego son procesadas por las rutinas grficas con el fin de poderlas visualizar. Los sistemas grficos de propsito general no suelen proporcionar rutinas que permitan utilizar aplicaciones extensivas de modelado, pero algunos paquetes grficos, como
GL y PHIGS, s que incluyen conjuntos integrados de funciones de modelado y grficas. Un ejemplo de jerar-

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. Hewitt, Departamento
de Computer Science, Universidad de Manchester,
Reino Unido.)

CAP14_HEARN_1P.qxd

09/10/2005

21:20

Pgina 783

14.1 Conceptos bsicos de modelado

FIGURA 14.5. Modelado bidimensional utilizando un


diseo de circuitos. (Cortesa de Summagraphics.)

783

FIGURA 14.6. Un modelo CAD que muestra los componentes individuales de un motor, representado por Ted
Malone, FTI/3D-Magic. (Cortesa de Silicon Graphics,
Inc.)

qua de estructuras PHIGS es el que se muestra en la Figura 14.4. Esta imagen fue generada utilizando el software PHIGS Toolkit, 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 definen 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
Graphics 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
Stephanie Sides, San Diego Supercomputer Center.)

CAP14_HEARN_1P.qxd

784

09/10/2005

21:20

Pgina 784

CAPTULO 14 Modelado jerrquico

FIGURA 14.9. Una vista tridimensional del plano de una


oficina. (Cortesa de Intergraph Corporation.)

Figura 14.6 ilustra una aplicacin CAD 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.

14.3 MTODOS GENERALES DE MODELADO JERRQUICO


Para crear un modelo jerrquico de un sistema, anidamos las descripciones de sus subpartes con el fin de formar una organizacin en rbol. A medida que se introduce cada nodo en la jerarqua, se le asigna un conjunto de transformaciones con el fin de posicionarlo apropiadamente dentro del modelo global. Para el diseo de
un edificio de oficinas, por ejemplo, las reas de trabajo y los despachos se forman disponiendo los diversos
muebles. Los despachos y reas de trabajo se colocan entonces en departamentos, etc., hasta llegar a la parte
superior de la jerarqua. En la Figura 14.10 se proporciona un ejemplo de utilizacin de mltiples sistemas de
coordenadas y de mtodos de modelado jerrquico con objetos tridimensionales. Esta figura ilustra la simulacin del movimiento de un tractor. A medida que el tractor se mueve, el sistema de coordenadas del tractor
y las ruedas delanteras se desplazan dentro del sistema de coordenadas universales. Las ruedas delanteras
rotan en el sistema de coordenadas de las ruedas y el sistema de las ruedas rota con respecto al sistema del
tractor cuando ste efecta un giro.

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
yt
Sistema del
tractor

yw

xt

zt

zw
ytw

ztw

Sistema
universal

xw

xtw

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.

CAP14_HEARN_1P.qxd

09/10/2005

21:20

Pgina 785

14.3 Mtodos generales de modelado jerrquico

785

10

5
5

0
Silla

10
10

Matriz de coordenadas
de la silla
Silla x

Silla y

3
3
3
3
1
2
1

3
3
3
3
3
0
3
(a)

0
Mesa de trabajo

10

Matriz de coordenadas
de la mesa de trabajo
Mesa de
Mesa de
trabajo x
trabajo y
0
0
6
6
10
10

0
8
8
8
8
0
(b)

FIGURA 14.11. Objetos definidos en coordenadas locales.

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 locales de
dicho objeto. Las coordenadas locales se denominan tambin coordenadas de modelado o, en ocasiones, coordenadas maestras. La Figura 14.11 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.

Creacin de estructuras jerrquicas


Un primer paso en el modelado jerrquico consiste en construir mdulos que estn compuestos de smbolos
bsicos. Entonces, los propios mdulos pueden combinarse para formar mdulos de nivel superior, etc.

CAP14_HEARN_1P.qxd

786

09/10/2005

21:20

Pgina 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:
crearMdulo1
establecerTransformacinSmbolo1
insertarSmbolo1
establecerTransformacinSmbolo2
insertarSmbolo2
.
.
.
cerrarMdulo1

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:
crearMdulo6
establecerTransformacinMdulo1
insertarMdulo1
establecerTransformacinMdulo2
insertarMdulo2
establecerTransformacinSmbolo5
insertarSmbolo5
.
.
.
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
insertarSmboloChasis

CAP14_HEARN_1P.qxd

09/10/2005

21:20

Pgina 787

14.5 Resumen

787

especificarTransformacinRuedaDelantera
insertarSmboloRueda
especificarTransformacinRuedaTrasera
insertarSmboloRueda
cerrarMduloBicicleta

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.

14.4 MODELADO JERARQUICO MEDIANTE LISTAS DE VISUALIZACIN


OpenGL
En OpenGL podemos describir objetos complejos utilizando listas de visualizacin anidadas con el fin de formar un modelo jerrquico. Cada smbolo y mdulo del modelo se crea mediante una funcin glNewList, y
podemos insertar una lista de visualizacin dentro de otra utilizando la funcin glCallList dentro de la
definicin de la lista de nivel superior. Se pueden asociar transformaciones geomtricas con cada objeto insertado con el fin de especificar una posicin, una orientacin o un tamao dentro de un mdulo de nivel superior. Como ejemplo, el siguiente cdigo podra utilizarse para describir una bicicleta que estuviera compuesta
simplemente por un chasis y dos ruedas idnticas:
glNewList (bicycle, GL_COMPILE);
glCallList (frame);
glTranslatef (tx1, ty1, tz1);
glCallList (wheel);
glTranslatef (tx2, ty2, tz2);
glCallList (wheel);
glEndList ( );

De forma similar, la lista de visualizacin frame (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-

CAP14_HEARN_1P.qxd

788

09/10/2005

21:20

Pgina 788

CAPTULO 14 Modelado jerrquico

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
glNewList 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 glCallList,
precedida mediante un conjunto apropiado de transformaciones que especifiquen la posicin, orientacin y
tamao del componente insertado.

REFERENCIAS
Puede encontrar ejemplos de aplicaciones de modelado con OpenGL en Woo, Neider, Davis y Shreiner
(1999).

EJERCICIOS
14.1

Explique las representaciones de modelos que seran apropiadas para diferentes tipos de sistemas que tengan
caractersticas muy distintas. Asimismo, explique cmo pueden implementarse las representaciones grficas para
cada sistema.

14.2

Disee un paquete de diseo bidimensional de oficinas. Hay que proporcionar al diseador un men de formas de
muebles y el diseador puede poder utilizar un ratn para seleccionar y colocar un objeto en cualquier ubicacin
dentro de una habitacin (jerarqua de un nico nivel). Las transformaciones de instancias pueden limitarse a traslaciones y rotaciones.

14.3

Ample el ejercicio anterior para poder tambin cambiar la escala de las formas de los muebles.

14.4

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.

14.5

Ample el ejercicio anterior de modo que tambin pueda cambiarse la escala de los muebles.

14.6

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 not mostradas en la Figura 14.1.

14.7

Desarrolle un paquete de modelado para el diseo de circuitos lgicos que permita 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. Una vez colocado un
componente en la red, debe podrselo conectar con otros componentes especificados mediante segmentos de lnea
recta.

14.8

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.

14.9

Dadas las extensiones de coordenadas de todos los objetos visualizados en un modelo, escriba una rutina para
borrar cualquier objeto seleccionado.

14.10 Escriba procedimientos para visualizar y borrar un mdulo especificado dentro de un modelo.
14.11 Escriba una rutina que permita extraer selectivamente mdulos de la imagen de un modelo o volver a activar su
visualizacin.

CAP14_HEARN_1P.qxd

09/10/2005

21:20

Pgina 789

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.

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 790

CAPTULO 15

Formatos de archivos
grficos

Una escena generada por computadora creada con golpes de pincel de acuarela simulada.
(Cortesa de Aydin Controls, Divisin de Aydin Corporation.)

CAP15_HEARN_1P.qxd

15.1
15.2
15.3

09/10/2005

21:28

Pgina 791

Configuraciones de archivos de imagen


Mtodos de reduccin de color
Tcnicas de compresin de archivos

15.4
15.5

Composicin de la mayora de los formatos


de archivo
Resumen

Cualquier representacin ilustrativa almacenada se denomina archivo grfico o archivo de imagen. Para
sistemas de grficos digitalizados, un dispositivo de pantalla en color se representa en el bfer 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 grficos digitalizados se almacenan como pixmaps. En general, cualquier representacin digitalizada correspondiente a un grfico es lo que se denomina archivo digitalizado o rasterizado. Se han desarrollado muchos formatos 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.

15.1 CONFIGURACIONES DE ARCHIVOS DE IMAGEN


Los valores de color de pxel en un archivo de imagen digitalizada se almacenan tpicamente como enteros no
negativos, y el rango de los valores de color depende del nmero de bits disponibles por posicin de pxel.
Para una imagen RGB a color completo (24 bits por pxel), el valor para cada componente de color se almacena en un byte, con los valores R, G y B en un rango entre 0 y 255. Un archivo grfico digitalizado no comprimido compuesto por valores de color RGB, a veces, se denomina archivo de datos en bruto o sin formato
o archivo digitalizado sin formato. Otros modelos de color, incluyendo HSV, HSB e YCrCb, se usan en formatos de archivos comprimidos. El nmero de bits disponibles por pxel depende del formato.
Los formatos de archivo normalmente incluyen una cabecera que ofrece informacin sobre la estructura
del archivo. Para archivos comprimidos, la cabecera debe tambin contener tablas y otros detalles necesarios
para decodificar y visualizar la imagen comprimida. La cabecera puede incluir una amplia variedad de informacin, tal como el tamao del archivo (nmero de lneas de barrido y nmero de pxeles por lnea de barrido) el nmero de bits o bytes asignados por pxel, el mtodo de compresin usado para reducir el tamao del
archivo, el rango de color para los valores de pxel y el color de fondo de la imagen.
Otra caracterstica de los archivos de imagen digitalizados es el orden de los bytes dentro del archivo. La
mayora de los procesadores de computadora almacenan enteros multibyte con el byte ms significativo en
primer lugar, aunque algunos procesadores almacenan enteros multibyte con el byte menos significativo en
primer lugar. El concepto de big endian se usa para indicar que el byte ms significativo va el primero, y el
concepto de little endian hace referencia a que es el byte menos significativo el que va primero.
Algunos formatos de archivo almacenan una imagen en una representacin geomtrica, que es una lista
de posiciones de coordenadas y otra informacin para segmentos de lnea recta, reas de relleno, arcos circu-

CAP15_HEARN_1P.qxd

792

09/10/2005

21:28

Pgina 792

CAPTULO 15 Formatos de archivos grficos

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.

15.2 MTODOS DE REDUCCIN DE COLOR


Se han ideado muchos mtodos para reducir el nmero de colores usados en la representacin de una imagen.
Los mtodos ms populares son aquellos que intentan generar muestras de color que se aproximan mucho al
conjunto de colores original.
A veces, cuando se habla de mtodos de reduccin de color se habla de cuantizacin, trmino que se usa
en las reas de fsica y matemticas (como la mecnica cuntica y las teoras de muestreo), para un proceso
que genera un conjunto discreto de valores a partir de una distribucin continua. En cualquier caso, un archivo digitalizado de imagen no es una distribucin continua; contiene un conjunto discreto y finito de valores
de color. Por tanto, cualquier mtodo de reduccin de color simplemente sustituye un conjunto discreto de
colores por un conjunto discreto de colores ms pequeo. Adems, los procesos de reduccin de color, en su
uso comn, no generan un conjunto de colores tal que cada color del conjunto es un mltiplo de algn valor
seleccionado. En otras palabras, la reduccin de colores no produce un conjunto cuantizado de colores.

Reduccin uniforme de color


Un mtodo sencillo para reducir colores en un archivo digitalizado consiste en dividir cada uno de los niveles de color R, G y B entre un entero y truncar el resultado. Por ejemplo, si se divide entre 2, se reduce cada
uno de los componentes R, G y B en una representacin a color completo con 128 niveles. As, la reduccin
uniforme de color sustituye grupos de niveles de colores contiguos con un nivel de color reducido, como se
ilustra en la Figura 15.1.
Otro estrategia consiste en sustituir un grupo de valores de pxel con el valor del pxel medio del grupo.
O se puede sustituir el grupo de pxeles con el color promedio para el grupo.
En general, no se puede esperar que los 256 valores aparecern en el archivo de imagen para cada uno de
los componentes RGB. Por tanto, se puede aplicar un mtodo de reduccin uniforme de color a los niveles de
color entre los niveles mximo y mnimo que realmente estn en el archivo de imagen.
Se pueden tambin aplicar diferentes criterios de reduccin a los distintos componentes RGB. Por ejemplo, se podra reducir una imagen de color completo, de tal forma que las componentes de los colores rojo y
verde se representasen con 3 bits cada una (8 niveles) y la componente azul se representase con 2 bits (4 niveles).

Reduccin de color por popularidad


Otra forma de hacer una reduccin de color consiste en mantener slo los valores de color que aparecen ms
frecuentemente en la representacin de una imagen. Se puede procesar primero la entrada del archivo de ima

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 793

15.3 Tcnicas de compresin de archivos


Valores RGB
originales

Valores RGB
reducidos

793

255
k1

254
.
.
.

.
.
.

R
Bmin
Bmax

Rmin

Rmedian

Rmax

FIGURA 15.1. Reduccin uniforme de color de


los valores RGB de una imagen de color completo 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.

Reduccin de color de corte medio


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: Rmin, Rmax, Gmin, Gmax, Bmin y Bmax. 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 Rmedian
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 Rmedian, como se muestra en la Figura
15.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 subbloque mayor. Un color medio
con la precisin deseada se calcula para cada subbloque, y todos los colores de la imagen dentro de un subbloque se sustituyen con el color promedio del subbloque.

15.3 TCNICAS DE COMPRESIN DE ARCHIVOS


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 fotorrealistas y fotografas digitalizadas. 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.

CAP15_HEARN_1P.qxd

794

09/10/2005

21:28

Pgina 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, 108, 175) en un archivo de imagen de entrada puede convertirse en el color (242, 111, 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.

Codificacin de longitud de recorrido


Este esquema de compresin sencillamente busca en el archivo de imagen los valores repetidos contiguos. Se
forma un archivo reducido almacenando cada secuencia de valores repetidos como un nico valor de archivo
junto con el nmero de repeticiones. Por ejemplo, si el valor 125 aparece 8 veces en sucesin a lo largo de
una lnea de barrido, se almacenan los dos valores, 8 y 125, en el archivo comprimido. Esto reduce los ocho
bytes originales de almacenamiento a dos bytes. Para imgenes con grandes reas de un nico color, este
esquema de codificacin funciona bien. Pero para las imgenes tales como fotografas digitalizadas que tienen frecuentes cambios de color y pocas repeticiones de valores consecutivos, muchos valores de color se
almacenaran con un factor de repeticin de 1.
Se han desarrollado variantes para mejorar la eficiencia del algoritmo bsico de codificacin de longitud
de recorrido. Por ejemplo, se podra usar un factor de repeticin negativo para indicar una secuencia de valores no repetitivos, en lugar de simplemente almacenar un factor de repeticin de 1 con cada uno de los valores de la secuencia no repetitiva. Por ejemplo, la siguiente lista de valores:
{20, 20, 20, 20, 99, 68, 31, 40, 40, 40, 40, 40, 40, 40, 40, . . . }

podra codificarse como ,


{4, 20,

3, 99, 68, 31, 8, 40, . . . }

lo que indica que el valor 20 ocurre 4 veces, seguido de 3 valores no repetitivos 99, 68 y 31, 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 LZW
Desarrollado por Lempel, Ziv y Welch, 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 c1 y c2 y, al patrn restante {50, 240} puede asignrsele el cdigo c3. Esto reduce los primeros doce valores de la lista de entrada a los siguientes 5 bytes:
{c1, c2, c1, 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.

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 795

15.3 Tcnicas de compresin de archivos

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 decodifica entonces con la tabla de cdigos.

Otros mtodos de compresin mediante reconocimiento de patrones


Se pueden usar esquemas de reconocimiento de patrones para localizar repeticiones de combinaciones de
blanco y negro o color RGB a lo largo de todo un archivo de imagen. Se pueden detectar lneas de barrido
duplicadas y otros patrones y codificarse para reducir ms an el tamao de los archivos de imagen. Adems,
se han aplicado mtodos de fractales para obtener pequeos conjuntos codificados autosimilares de valores de
color.

Codificacin Huffman
Con el mtodo Huffman 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 corto 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 Huffman 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 (.), la letra T se codifica como guin (-) y la
letra Q 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 entrada. 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 1. 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
96 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

96

177

141

85

210

43

Total de valores en el archivo

21

CAP15_HEARN_1P.qxd

796

09/10/2005

21:28

CAPTULO 15 Formatos de archivos grficos

Lista de etiquetas de
las frecuencias restantes

3
2
(210)

Pgina 796

96
177
141
85
nodo

1
(43)

Lista de etiquetas de
las frecuencias restantes

8
4
3
3
3

3
(141)

96
nodo
177
nodo

3
(85)

8
6
4
3

FIGURA 15.4. Formacin de un subrbol Huffman


usando los valores de archivo 141 y 85.

FIGURA 15.3. Formacin de un subrbol Huffman


usando los valores de archivo 210 y 43.

Lista de etiquetas de
las frecuencias restantes

4
(177)

FIGURA 15.5. Formacin de un subrbol Huffman


usando los valores de archivo 177 y un subrbol
creado previamente.

96
nodo
nodo

3
2
(210)

8
7
6

1
(43)

13

Lista de etiquetas de
las frecuencias restantes

4
(177)

3
(141)

3
(85)

nodo
96

13
8

1
(43)

2
(210)

FIGURA 15.6. Formacin de un subrbol Huffman uniendo dos subrboles previamente creados.
21

8
(96)

13

7
4
(177)

6
3

2
(210)

Lista de etiquetas de
las frecuencias restantes

3
(141)

3
(85)

1
(43)

FIGURA 15.7. rbol binario Huffman 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 + 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

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 797

15.3 Tcnicas de compresin de archivos

797

21
0

13

1
8
(96)

Lista de etiquetas de
las frecuencias restantes

4
(177)

0
3

2
(210)

3
(141)

1
3
(85)

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
subrboles 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 todos 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 decodificacin, se supone que el archivo comprimido contiene la trama de bits {100100100. . .}. El primer valor de bits en este archivo es 1, as que
TABLA 15.2. CDIGOS HUFFMAN INDEXADOS PARA EL ARCHIVO DE EJEMPLO
ndice

Valor de archivo

Cdigo binario

96

177

000

141

010

85

011

210

0010

43

0011

CAP15_HEARN_1P.qxd

798

09/10/2005

21:28

Pgina 798

CAPTULO 15 Formatos de archivos grficos

TABLA 15.3. TABLA DE REFERENCIA DE CDIGOS DE BIT


Longitud de cdigo de bits

Valor mnimo de cdigo

Valor mximo de cdigo

Primer ndice

000

011

0010

0011

debe representar el valor de archivo 96 porque hay un cdigo de bit 1 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 1 y no hay cdigos de dos bits, as que el siguiente 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, 96 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 decodificado 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.

Codificacin aritmtica
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. As, el valor V1 se asocia con el subintervalo de 0.00 a 0.20 dentro del intervalo unidad, el valor V2 se
asocia con el subintervalo de 0.20 a 0.50, y el valor V3 se asocia con el subintervalo de 0.50 a 1.00. En otras
palabras, el 20 por ciento del intervalo unidad se asocia con V1, el 30 por ciento con V2 y el 50 por ciento con
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

Fraccin de archivo

Rango del intervalo unidad

V1

16

0.20

0.000.20

V2

24

0.30

0.200.50

V3

40

0.50

0.501.00

Total

80

1.00

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 799

15.3 Tcnicas de compresin de archivos

799

TABLA 15.5. RANGO DEL INTERVALO UNIDAD PARA CADA SECUENCIA DE DOS VALORES QUE COMIENZA CON
EL VALOR V3
Secuencia

Rango del intervalo unidad

V3V1

0.500.60

V3V2

0.600.75

V3V3

0.751.00

V3. Si ahora mapeamos V1 sobre el subintervalo V3, ste ocupar el 20 por ciento de la mitad superior del intervalo unidad. Este nuevo subintervalo, con un rango de 0.50 a 0.60, representa la secuencia V3V1. Resultados
similares se obtienen para los mapeos de V2 y V3 sobre el subintervalo V3. 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 decodificar 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 implementa 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.

Trasformada discreta del coseno


Una serie de mtodos de trasformadas numricas, incluyendo las transformadas de Fourier y Hadamard, han
sido aplicadas a la compresin de archivos, pero la trasformada discreta del coseno es el mtodo ms comnmente usado. Los algoritmos de implementacin eficientes para una trasformada discreta del coseno ofrecen
una ejecucin ms rpida y mejor fidelidad de color en una imagen reconstruida con unas tasas de compresin ms altas.
Para una lista de n valores numricos Vk, con k = 0, 1, . . ., n 1, el mtodo discreto del coseno genera el
siguiente conjunto de valores transformados.
n 1
(2 k + 1) j
V j = c j Vk cos
,
2n

k =0

para j = 0, 1, . . ., n 1

(15.1)

donde,

cj =

1
, para j = 0
n
2
, 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 1
(2 k + 1) j
Vk = c j V j cos
,
2n

j =0

para k = 0, 1, . . ., n 1

(15.2)

CAP15_HEARN_1P.qxd

800

09/10/2005

21:28

Pgina 800

CAPTULO 15 Formatos de archivos grficos

Muy a menudo, los valores de transformacin Vjse 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 cjVj.
Para ilustrar este mtodo de transformacin, consideremos la siguiente lista de 8 valores de entrada:
{215, 209, 211, 207, 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 forma que los trminos coseno con la frecuencia ms alta contribuyen menos a la recuperacin de los valores de entrada. sta 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 n por n valores de entrada, los valores de transformacin se calculan como:
n1 n 1
(2 j + 1)m
(2 k + 1)l
Vlm = clm V jk cos
cos

2n
2n

j =0 k =0

(15.3)

con
l, m = 0, 1, . . ., n 1
y
1 , si l = 0 o m = 0
n
clm =
2 , si l 0 y m 0
n
Adems, el conjunto de n por n valores de entrada se recupera usando la trasformada inversa:
n 1 n 1
(2 j + 1)l
(2 k + 1)m
V jk = c j V j cos
cos

2n
2n

l =0 m =0

(15.4)

TABLA 15.6. CLCULOS DE LA TRANSFORMACIN INVERSA DISCRETA DEL COSENO


Valores de entrada 215

209

211

207

192

148

88

63

Trminos suma

Valores de la transformada inversa discreta del coseno

212.63

211.85

211.53

207.42

188.43

147.65

95.47

58.02

215.26

209.23

208.91

210.04

191.06

145.02

92.84

60.64

215.00

209.00

211.00

207.00

192.00

148.00

88.00

63.00

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 801

15.4 Composicin de la mayora de formatos de archivo

801

donde
j, k = 0, 1, . . ., n 1
Esta trasformada 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.

15.4 COMPOSICIN DE LA MAYORA DE FORMATOS DE ARCHIVO


Cientos de formatos de archivo han sido desarrollados para representar datos grficos dentro de diferentes
contextos para diferentes sistemas. Los sistemas operativos, por ejemplo, normalmente usan una serie de formatos especialmente diseados en diversas rutinas de procesamiento del sistema. Existen formatos individuales para aplicaciones especficas, tales como el modelado tridimensional, las animaciones, las interfaces
grficas de usuario, el software de trazado de rayos, las grabaciones de vdeo, el software para visualizaciones cientficas, los programas de dibujo, los procesadores de texto, paquetes de hojas de clculo, comunicaciones por Internet, multidifusin por televisin y transmisin de faxes. Adems, los comits de
estandarizacin ISO y ANSI han propuesto distintos formatos y sistemas de compresin de archivos para uso
general.
La mayora de los formatos de archivo estn diseados para acomodar imgenes de color, pero algunos se
aplican slo a bitmaps. Sin embargo, el nombre del formato a menudo es engaoso, ya que el trmino mapa
de bits o bitmap se usa frecuentemente para hacer referencia a imgenes de color (pixmaps). Esta situacin es
simplemente el resultado del uso continuado de la vieja etiqueta, bitmap, para un archivo digitalizado. Antes
del desarrollo de los dispositivos de visualizacin en color, todas las imgenes digitalizadas se almacenaban
como bitmaps (un bit por pxel) representando los patrones de pxel blanco y negro en una imagen. Cuando
se desarrollaron las tcnicas de color, los archivos pixmap (mltiples bits por pxel) sustituyeron a los bitmaps.
Pero muy a menudo, estos archivos se siguen denominando bitmaps. Como resultado, muchos esquemas de
codificacin de color en uso hoy en da para archivos de imagen se etiquetan como formatos bitmap incluso aunque sean realmente formatos pixmap (mltiples bits por pxel). En cualquier caso, la documentacin
para cada formato puede consultarse para determinar el nmero de bits que realmente se asignan a cada posicin de pxel en el archivo.
Para la mayor parte, los formatos de archivo descritos en esta seccin son no estticos. Los mismos, sufren
constantes revisiones y actualizaciones, y a menudo existen muchas variantes para un formato particular.

JPEG: Joint Photographic Experts Group


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 implementar
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 especfica para la informacin de cabecera y no hay especificacin para el modelo de color que debera usarse en el archivo comprimido.
El estndar JPEG define cuatro modos generales para la compresin de archivos, que son los modos sin
prdidas, secuencial, progresivo y jerrquico. En el modo JPEG 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 secuencial 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 bits, y el
algoritmo de compresin combina la trasformada discreta del coseno con la codificacin Huffman o aritm-

CAP15_HEARN_1P.qxd

802

09/10/2005

21:28

Pgina 802

CAPTULO 15 Formatos de archivos grficos

tica. Tambin se ha definifo un modo secuencial 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 Internet, porque una aproximacin de tipo borrador de una imagen puede visualizarse rpidamente antes de descargarse la 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 sumatorio de la transformada discreta inversa del coseno. Tambin, las definiciones de compresin JPEG
especifican que tanto la codificacin Huffman 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 identificador 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 pxeles 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 YCrCb, y los componentes de color se
almacenan en orden, en primer lugar Y, en segundo Cb y, por ltimo, Cr . 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.
La codificacin secuencial bsica JPEG/JFIF de un archivo de imagen consiste normalmente en las
siguientes operaciones.
(1)

Conversin de color: los valores de color de pxel RGB en un archivo de imagen son convertidos en
componentes de color YCrCb.

(2)

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 implementacin 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 Y, se seleccionan. Esto permite alcanzar mayores tasas de compresin, ya que se almacenan muy pocos valores diferentes de crominancia, las componentes Cr y Cb,

(3)

Trasformada 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 codificado, 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 formato 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

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 803

15.4 Composicin de la mayora de formatos de archivo

803

espera que SPIFF sustituya eventualmente 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 (YCrCb), 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.

CGM: Computer-Graphics Metafile Format


Este formato es otro estndar desarrollado por ISO y ANSI. Est diseado para usarse en cualquier sistema
informtico 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 PHIGS. As, CGM soporta una gran variedad de caractersticas y opciones.
Como indica la denominacin metafile (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 lnea, 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,
YCrCb, CIE y tablas de color. Adems, los archivos pixmap pueden comprimirse usando variantes de la codificacin de longitud de recorrido y de la codificacin Huffman.

TIFF: Tag Image-File Format


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.

PNG: Portable Network-Graphics Format


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.

CAP15_HEARN_1P.qxd

804

09/10/2005

21:28

Pgina 804

CAPTULO 15 Formatos de archivos grficos

Los valores enteros se almacenan en orden big-endian y las componentes de color pueden especificarse
con una precisin superior a 16 bits por pxel. PNG soporta una serie de opciones, incluyendo componentes
de color RGB, componentes de color XYZ, escala de grises, tablas de color y un valor alfa 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++ 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 pxel) y XPM es un formato para pixmaps (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 #define para especificar informacin como el nmero de pxeles
por lnea de barrido y el nmero de lneas de barrido. En 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.

Formato Adobe Photoshop


Usado ampliamente en aplicaciones de procesamiento de imgenes, el formato Adobe Photoshop est optimizado para el acceso rpido a imgenes digitalizadas grandes y a color completo. Por el contrario, se alcanzan
compresiones muy pequeas con el esquema de codificacin de longitud de recorrido usada en Photoshop, y
las primeras versiones de Photoshop no contenan mtodos de compresin.
Los valores de pxel se almacenan en orden big-endian y Photoshop ofrece una serie de opciones.
Photoshop soporta pixmaps, bitmaps (imgenes monocromticas) e imgenes en escala de grises. Los colores
pueden almacenarse usando componentes RGB, componentes de color CMYK o en tablas de color. Y se ofrecen varios esquemas para la representacin de mltiples colores por pxel e imgenes semitono, as como de
parmetros de transparencia.

MacPaint: Macintosh Paint Format


Producto de Apple Corporation, MacPaint es un formato estndar para todas las aplicaciones Macintosh. Los
archivos de imagen para este formato son bitmaps con el valor 0 indicando blanco y el valor 1 indicando
negro. El formato McPaint se usa tpicamente para texto, dibujo de lneas y clip arts.
Los valores de pxel se almacenan en orden big-endian y los archivos McPaint siempre contienen 576
pxeles por lnea de barrido y 720 lneas de barrido. El esquema de codificacin de longitud de recorrido se
usa para comprimir los archivos de imagen.

PICT: Formato Picture Data


Este formato hbrido es otro producto para aplicaciones Macintosh de Apple Corporation. Soporta imgenes
que se especifican como bitmaps, pixmaps o representaciones geomtricas. Un archivo PICT en un formato
de representacin geomtrica que contiene una lista de funciones Macintosh QuickDraw que definen una imagen como un conjunto de segmentos de lnea, polgonos, arcos, bitmaps, otros objetos, parmetros de recorte, atributos y otros parmetros de estado.
Las imgenes pueden especificarse usando un formato monocromo (bitmap), componentes de color RGB
o una tabla de color. Los archivos digitalizados pueden comprimirse usando un algoritmo de codificacin de
longitud de recorrido.

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 805

15.5 Resumen

805

BMP: Formato Bitmap


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 little-indian usando 1, 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.

PCX: Formato de archivo PC Paintbrush


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 1 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 littleendian, 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.

TGA: Formato Truevision Graphics-Adapter


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. Este formato es usado popularmente para la
edicin de vdeo.
En el formato TGA, los valores de pxel se almacenan en orden little-endian, 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.

GIF: Graphics Interchange Format


Este formato, diseado para una transmisin eficiente 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 splines.

CAP15_HEARN_1P.qxd

806

09/10/2005

21:28

Pgina 806

CAPTULO 15 Formatos de archivos grficos

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 todos 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 endian o little endian) para valores enteros, y los mtodos usados
(si se usa alguno) para reducir el tamao del archivo para su almacenamiento. La efectividad 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 reestablecer 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 lneas de barrido y procedimientos fractales para identificar conjuntos de valores
de pxel autosimilares. 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 1.0. Los lmites de cada subintervalo se emplean entonces para
codificar las secuencias de valores de color representadas por ese subintervalo. 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 ANSI,
algunos surgieron de compaas de hardware o software, y algunos son productos de grupos independientes.
Los formatos ms ampliamente utilizados son JPEG, TIFF, PNG, y aquellos para el sistema X Window, computadoras Apple Macintoch, y sistemas operativos Windows.

REFERENCIAS
Los mtodos de reduccin de color se presentan en Heckbert (1982 y 1994), Glassner (1990), Arvo (1991) 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), Ziv
y Lempel (1977 y 1978), Welch (1984), Rao y Yip (1990), Arvo (1991), y Barnsley y Hurd (1993).
Puede encontrarse informacin de carcter general sobre formatos de archivos grficos en Brown y
Shepherd (1995), y Miano (1999). Para obtener informacin adicional acerca de JPEG, consulte Taubman
y Marcellin (2001). El formato de archivo estndar CGM se detalla en Henderson y Mumford (1993).

EJERCICIOS
15.1

Escribir un programa para implementar 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

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 807

Ejercicios

807

entrada ser cualquier divisin entera del factor d que se aplicar a cada componente de color y la salida es un
conjunto reducido de niveles de color enteros.
15.2

Modificar el 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.

15.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 como el rango de enteros para cada componente o el nmero de bits.

15.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.

15.5

Escriba un programa para implementar el esquema de reduccin de color de medio corte. Un archivo de imagen
que contiene n valores de pxel RGB debe reducirse a k valores de color.

15.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.

15.7

Modifique el programa del ejercicio anterior para codificar un archivo que contenga n lneas de barrido.

15.8

Escriba un programa para implementar un algoritmo de codificacin LZ simplificado para una sola lnea de barrido 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.

15.9

Ample el programa del ejercicio anterior para procesar un archivo de entrada con n lneas de barrido.

15.10 Dado un archivo de imagen de entrada que contiene n 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 colores de pxel.
15.11 Con el recuento de frecuencias del ejercicio anterior, escriba un programa para comprimir el archivo de imagen
usando codificacin Huffman.
15.12 Con el recuento de frecuencias del Ejercicio 15.10, escriba un programa para comprimir el archivo de imagen
usando codificacin aritmtica.
15.13 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 trasformada discreta del coseno (Ecuacin 15.1) para cada grupo sucesivo de 8 pxeles de la lista.
15.14 Usando la Ecuacin 15.2 y los valores trasformados del ejercicio anterior, escriba un programa para calcular los
32 colores de pxel originales (reestablecidos).
15.15 Modifique el ejercicio anterior para calcular los valores de la trasformada inversa para cada conjunto de 8 pxeles, usando cualquier nmero n seleccionado de entre los valores transformados; es decir, n puede ser cualquier
valor de 1 a 8, ambos inclusive.
15.16 Dado un archivo de imagen que contiene 32 por 32 colores de pxel, 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.
15.17 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 (reestablecidos).
15.18 Modifique el ejercicio anterior para calcular los valores de la trasformada inversa para cada conjunto de pxeles
de 8 por 8, usando cualquier nmero n 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 8, ambos inclusive.

CAP15_HEARN_1P.qxd

09/10/2005

21:28

Pgina 808

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 809

APNDICE A

Matemticas para grficos


por computadora
En los algoritmos de grficos por computadora, se utilizan diversos conceptos y tcnicas matemticos. En este
apndice, vamos a proporcionar una breve referencia de los mtodos de geometra analgica, lgebra lineal,
anlisis vectorial, anlisis tensorial, nmeros complejos, cuaternios, clculo, anlisis numrico y otras reas
de las que se trata en las explicaciones contenidas en el libro.

A.1 SISTEMAS DE COORDENADAS


Tanto los sistemas de referencias cartesianos como los no cartesianos resultan tiles en las aplicaciones infogrficas. Normalmente, especificamos las coordenadas en un programa grfico utilizando un sistema de referencia cartesiano, pero la especificacin inicial de una escena podra proporcionarse en un sistema de
referencia no cartesiano. A menudo, las simetras escnicas, cilndricas o de otros tipos pueden aprovecharse
para simplificar las expresiones relativas a las descripciones o manipulaciones de objetos.

Coordenadas de pantalla cartesianas bidimensionales


Para los comandos independientes del dispositivo incluidos dentro de un paquete grfico, las coordenadas de
pantalla se referencian dentro del primer cuadrante de un sistema cartesiano bidimensional en posicin estndar, como se muestra en la Figura A.1(a). El origen de coordenadas de este sistema de referencia se encuentra situado en la esquina inferior izquierda de la pantalla. Sin embargo, las lneas de barrido se enumeran
comenzando por 0 en la parte superior de la pantalla, por lo que las posiciones de pantalla estn representadas internamente con respecto a la esquina superior izquierda de la misma. Por tanto, los comandos dependientes del dispositivo, como por ejemplo los relativos a la entrada interactiva y a las manipulaciones de las
ventanas de visualizacin, suelen hacer referencia a las coordenadas de pantalla utilizando el sistema cartesiano invertido que se muestra en la Figura A.1(b). Los valores de las coordenadas horizontales en los dos sistemas son iguales, y un valor y invertido se convierte a un valor y medido desde la parte inferior de la pantalla
mediante el clculo:
y = ymax yinvert

(A.1)

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.

Sistemas de referencia cartesianos bidimensionales estndar


Utilizamos sistemas cartesianos en posicin estndar para las especificaciones en coordenadas universales, en
coordenadas de visualizacin y para otras referencias dentro de la pipeline de visualizacin bidimensional.
Las coordenadas en estos sistemas de referencias pueden ser positivas o negativas, con cualquier rango de
valores. Para mostrar una vista de una imagen bidimensional, designamos una ventana de recorte y un visor
con el fin de mapear una seccin de la imagen sobre las coordenadas de pantalla.

ZZ_00_APENDICE_A_HEARN_1P.qxd

810

09/10/2005

21:58

Pgina 810

APNDICE A Matemticas para grficos por computadora


x
ymax

yinvert

ymax
x
(a)

(b)

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).

Coordenadas polares en el plano xy


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 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:
x = r cos ,

y = r sin

(A.2)

La transformacin inversa, de coordenadas cartesianas a coordenadas polares es:


r = x 2 + y2 ,

y
= tan -1
x

(A.3)

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

eje y
P

y
r

FIGURA A.2. Sistema de referencia en coordenadas


polares, formado mediante crculos concntricos y
lneas radiales.

eje x

FIGURA A.3. Relacin entre coordenadas polares y


cartesianas.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 811

A.1 Sistemas de coordenadas

811

P
r
y

FIGURA A.4. Tringulo recto con hipotenusa r, lados x e y y un ngulo interior .

P
r

FIGURA A.5. Un ngulo subtendido por un arco circular de longitud s y radio r.

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 en radianes
est dado por el cociente:

s
r

(radianes)

(A.4)

donde s es la longitud del arco circular que subtienden a y 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 1 grado. Por tanto, 360  2 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.

Sistemas de referencia cartesianos tridimensionales estndar


La Figura A.6(a) muestra la orientacin convencional para los ejes de coordenadas en un sistema de referencia cartesiano tridimensional. Decimos que este tipo de sistema cumple la regla de la mano derecha, porque
el pulgar de la mano derecha apunta en la direccin z positiva si nos imaginamos encerrando el eje z al curvar los dedos desde el eje x positivo hacia el eje y positivo (abarcando 90), como se ilustra en la Figura A.6(b).
En la mayora de los programas infogrficos, las descripciones de los objetos y otros tipos de coordenadas se
especifican mediante coordenadas cartesianas que cumplen la regla de la mano derecha. En las explicaciones
contenidas en el libro (incluyendo el apndice), hemos supuesto que todos los sistemas de referencia cartesianos cumplen la regla de la mano derecha, excepto cuando indiquemos explcitamente lo contrario.
Los sistemas de referencia cartesianos son sistemas de coordenadas ortogonales, lo que simplemente
significa que los ejes de coordenadas son perpendiculares entre s. Asimismo, en los sistemas de referencia
cartesianos, los ejes son lneas rectas. Aunque tambin los sistemas de coordenadas con ejes curvos resultan
tiles en muchas aplicaciones. La mayora de dichos sistemas son tambin ortogonales, en el sentido de que
las direcciones de los ejes en cualquier punto del espacio son mutuamente perpendiculares.

ZZ_00_APENDICE_A_HEARN_1P.qxd

812

09/10/2005

21:58

Pgina 812

APNDICE A Matemticas para grficos por computadora


eje y

eje y

y
P

x
eje x

eje z

eje x

eje z
(b)

(a)

FIGURA A.6. Coordenadas de un punto P en la posicin (x, y, z) en un sistema de referencia cartesiano estndar que cumple la regla de la mano derecha.

Coordenadas de pantalla cartesianas tridimensionales


Cuando se muestra una vista de una escena tridimensional sobre un monitor de vdeo, se almacena informacin de profundidad para cada posicin de pantalla. La posicin tridimensional que corresponde a cada punto
de pantalla suele estar referenciada mediante un sistema que cumple la regla de la mano izquierda, como se
muestra en la Figura A.7. En este caso, el pulgar de la mano izquierda apunta en la direccin z positiva si nos
imaginamos rodeando el eje z de modo que los dedos de la mano izquierda vayan desde el eje x positivo hasta
el eje y positivo abarcando 90. Los valores de z positivos indican posiciones situadas detrs de la pantalla
para cada punto en el plano xy, y el valor positivo de z se incrementar a medida que los objetos se alejen del
observador.

Sistemas de coordenadas curvilneas tridimensionales


Los sistemas de referencia no cartesianos se denominan sistemas de coordenadas curvilneas. La eleccin
del sistema de coordenadas para una aplicacin grfica concreta depender de diversos factores, como la
simetra, la facilidad de clculo y las ventajas que puedan obtenerse de cara a la visualizacin. La Figura A.8
muestra un sistema de referencia general de coordenadas curvilneas formado por tres superficies de coordenadas, donde en cada superficie una de las coordenadas tiene un valor constante. Por ejemplo, la superficie
x1x2 se define con x3  const3. Los ejes de coordenadas de cualquier sistema de referencia son las curvas de
interseccin de las superficies de coordenadas. Si las superficies de coordenadas se intersectan siempre con
ngulos rectos, tendremos un sistema de coordenadas curvilneas ortogonales. Los sistemas de referencia
curvilneos no ortogonales son tambin tiles en algunas aplicaciones, como por ejemplo en la visualizacin
de movimientos gobernados por las leyes de la relatividad general, pero se utilizan menos frecuentemente en
grficos por computadora que los sistemas ortogonales.
y

y
z

x
(a)

(b)

FIGURA A.7. Sistema de coordenadas cartesianas que cumple la


regla de la mano izquierda, superpuesto sobre la superficie de un
monitor de vdeo.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 813

A.1 Sistemas de coordenadas

813

eje z
z

P (, , z)

eje x2

x1  const1

x3  const3
x2  const2

eje x3

eje y
eje x1

eje x

FIGURA A.8. Un sistema de coordenadas curvilneas


general.

FIGURA A.9. Coordenadas cilndricas , y z.

En la Figura A.9 se muestra una especificacin en coordenadas cilndricas de un punto en el espacio en


relacin con un sistema de referencia cartesiano. La superficie de constante es un cilindro vertical; la superficie de 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 cilndricas a un
sistema de referencia cartesiano mediante las ecuaciones:
x = cos ,

y = sin ,

z=z

(A.5)

Otro sistema de coordenadas curvilneas comnmente utilizado es el sistema de coordenadas esfricas de


la Figura A.10. Las coordenadas esfricas se denominan en ocasiones coordenadas polares en el espacio tridimensional. La superficie de r constante es una esfera; la superficie de constante es, de nuevo, un plano
vertical que contiene al eje z; y al superficie de constante es un cono cuyo vrtice se encuentra en el origen
de coordenadas. Si < 90, el cono se encontrar por encima del plano xy. Si > 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 = r cos sin ,

y = r sin sin ,

z = r cos

(A.6)

P (r, , )
r


P

r
y

FIGURA A.10. Coordenadas esfricas r , y .

FIGURA A.11. ngulo slido subtendido por un


parche esfrico superficial con rea A y radio r.

ZZ_00_APENDICE_A_HEARN_1P.qxd

814

09/10/2005

21:58

Pgina 814

APNDICE A Matemticas para grficos por computadora

ngulo slido
La definicin de ngulo slido se formula por analoga con la definicin de ngulo en radianes bidimensionales entre dos lneas que se intersectan (Ecuacin 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 en la regin cnica que tiene su vrtice en el punto P se define como
(A.7)
A
= 2
r
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 (4r2) dividida por r2, lo que es igual a 4 estereoradianes.

A.2 PUNTOS Y VECTORES


Existe una diferencia fundamental entre el concepto de punto geomtrico y el concepto de vector. Un punto
es una posicin especificada mediante sus coordenadas en algn sistema de referencia, dependiendo las coordenadas y otras propiedades del punto de nuestra seleccin de sistema de referencia. Un vector, por el contrario, tiene propiedades que son independientes del sistema de referencia concreto que elijamos.

Propiedades de los puntos


La Figura A.12 ilustra la especificacin de un punto bidimensional P mediante sus coordenadas en dos sistemas de referencias distintos. En el sistema A, el punto tiene unas coordenadas que estn dadas por el par ordenado (x, y) y su distancia con respecto al origen es x 2 + y 2 . En el sistema B, el mismo punto tiene
coordenadas (0, 0) y la distancia hasta el origen de coordenadas del sistema B se 0.

Propiedades de los vectores


En un determinado sistema de coordenadas, podemos definir un vector como la diferencia entre dos puntos.
As, para los puntos bidimensionales P1 y P2 en la Figura A.13, podemos especificar un vector como:
V = P2 P1
= ( x2 x1 , y2 y1 )

(A.8)

= (Vx , Vy )
donde las componentes cartesianas (o elementos cartesianos) Vx y Vy son las proyecciones de V sobre los ejes
x e y. 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 P1 y
P2 cambiarn, pero las propiedades bsicas del vector no sufrirn modificacin.
Podemos describir un vector como un segmento de lnea 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 = Vx2 + Vy2

(A.9)

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 815

A.2 Puntos y vectores

815

P2

y2
V
P

OB

OA

y1

Sistema B

P1

Sistema A

FIGURA A.12. Coordenadas de un punto P en dos sistemas de referencia cartesianos distintos.

x1

x2

FIGURA A.13. Un vector bidimensional 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)

Vy
= tan 1
Vx

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 y.
Para una representacin cartesiana tridimensional de un vector, V  (Vx, Vy, Vz), el mdulo del vector ser:
(A.11)

V = Vx2 + Vy2 + Vz2

Y podemos dar la direccin del vector en trminos de los ngulos directores, , y , que el vector forma
con cada uno de los ejes de coordenadas (Figura A.14). 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:
cos =

Vx
,
V

cos =

Vy
V

cos =

Vz

(A.12)

Los valores cos , cos y cos 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:
cos2 + cos2 + cos2 = 1

(A.13)

FIGURA A.14. ngulos directores , y .

ZZ_00_APENDICE_A_HEARN_1P.qxd

816

09/10/2005

21:58

Pgina 816

APNDICE A Matemticas para grficos por computadora

v
Tierra
F

Sol

FIGURA A.15. Un vector de fuerza gravitatoria F y un vector de velocidad v.


y

y
V2

V1  V2

V1

V2

V1
x

(a)

(b)

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 o empuja en una direccin concreta. Un vector de velocidad
especifica la rapidez con la que un objeto se mueve en una cierta direccin.

Suma de vectores y multiplicacin escalar


Por definicin, la suma de dos vectores se obtiene sumando la componentes correspondientes:
V1 + V2 = (V1x + V2 x , V1y + V2 y , V1z + V2 z )

(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 n-dimensional.
La multiplicacin de un vector por un valor escalar s se define como
sV = (sVx , sVy , sVz )

(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.

Producto escalar de dos vectores


Podemos obtener un valor escalar a partir de dos vectores mediante el clculo:
V1 V2 = V1 V2 cos ,

(A.16)

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 817

A.2 Puntos y vectores

817

donde es 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 |V2| cos es la proyeccin del vector V2 en la direccin de
V1.
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:
(A.17)

V1 V2 = V1xV2 x + V1yV2 y + V1zV2 z

El producto escalar es una generalizacin del teorema de Pitgoras 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:
(A.18)
V1 V2 = V2 V1
porque esta operacin produce un valor escalar. Asimismo, el producto escalar es distributivo con respecto a
la suma de vectores:
(A.19)
V1 (V2 + V3 ) = V1 V2 + V1 V3

Producto vectorial de dos vectores


Podemos utilizar la siguiente frmula con el fin de combinar dos vectores para producir otro vector:
V1 V2 = u V1 V2 sin ,

(A.20)

El parmetro u en esta expresin es un vector unitario (mdulo 1) perpendicular tanto a V1 como a V2


(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 V1 y V2 de modo que los dedos de la mano derecha se curven desde V1 aV2.
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 paralelogramo 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:
(A.21)

V1 V2 = (V1yV2 z V1zV2 y , V1zV2 x V1 xV2 z , V1 xV2 y V1 yV2 x )


V1  V2

V2
V1

os
|V 2| c

FIGURA A.17. El producto escalar de dos vectores se


obtiene multiplicando las componentes paralelas.

V2

V1

FIGURA A.18. El producto vectorial de dos vectores es


un vector que apunta en una direccin perpendicular a
los dos vectores originales y con un mdulo igual al
rea del paralelogramo sombreado.

ZZ_00_APENDICE_A_HEARN_1P.qxd

818

09/10/2005

21:58

Pgina 818

APNDICE A Matemticas para grficos por computadora

Si designamos los vectores unitarios (mdulo 1) segn los ejes x, y, z como ux, uy y uz, podemos escribir
el producto vectorial en trminos de las componentes cartesianas utilizando una notacin de determinantes
(Seccin A.5):
ux

uy

uz

V1 V2 = V1x

V1y

V1z

V2 x

V2 y

V2 z

(A.22)

El producto vectorial de cualesquiera dos vectores paralelos es cero. Por tanto, el producto vectorial de un
vector por s mismo es cero. Asimismo, el producto vectorial no es conmutativo, sino anticonmutativo:
V1 V2 = (V2 V1 )

(A.23)

Tambin se verifica que el producto vectorial no es asociativo, es decir,


V1 (V2 V3 ) (V1 V2 ) V3

(A.24)

Sin embargo, el producto vectorial es distributivo con respecto a la suma y resta de vectores:
V1 (V2 + V3 ) = (V1 V2 ) + (V1 V3 )

(A.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 fsicas 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).

A.4 VECTORES BASE Y TENSOR MTRICO


Podemos especificar las direcciones coordenadas para un sistema de referencia n-dimensional utilizando un
G
conjunto de vectores de eje, denominados u k , donde k  1, 2, . . . , n, como en la Figura A.19, en la que se
ilustran los vectores de eje en el origen de un espacio curvilneo tridimensional. Cada vector de un eje de coordenadas proporciona la direccin de uno de los ejes espaciales en un punto determinado a lo largo de ese eje.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 819

A.2 Vectores base y tensor mtrico

819

u2

u1
u3

FIGURA A.19. Vectores de los ejes de coordenadas curvilneas en el espacio tridimensional.

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 base o conjunto de vectores 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.

Determinacin de los vectores base para un espacio de coordenadas


G
Los vectores base en cualquier espacio se determinan a partir del vector de 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 (x, y, z) es:
G
(A.26)
r = xu x + yu y + zu z
donde ux, uy y uz son los vectores base unitarios para los ejes x, y 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:
G
G
G
r
r
r
ux = ,
uy = ,
uz =
(A.27)
x
y
z
De forma similar, para cualquier otro espacio tridimensional, podemos formular la expresin del vector de
G
posicin r( x1 , x2 , x3 ) en trminos de las coordenadas de dicho espacio y luego determinar los vectores base
como:
G
G
r
uk =
k = 1, 2, 3
,
(A.28)
xk
G
En general, los vectores base u k 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 bidimensional ser:
G
(A.29)
r = r cos u x + r sin u y
y los vectores base en coordenadas polares sern:
G
G
r
ur =
= cos u x + sin u y
r
G
G
r
u =
= r sin u x + r cos u y

(A.30)

G
G
En este espacio, u r , que es funcin de , es un vector unitario. Pero u , que es funcin tanto de r como
de , no es un vector unitario.

ZZ_00_APENDICE_A_HEARN_1P.qxd

820

09/10/2005

21:58

Pgina 820

APNDICE A Matemticas para grficos por computadora

Bases ortonormales
A menudo, los vectores de una base se normalizan para que cada vector tenga un mdulo igual a 1. Podemos
obtener vectores base unitarios en cualquier espacio tridimensional mediante la frmula:
G
u
uk = G k ,
k = 1, 2, 3
(A.31)
uk
y este conjunto de vectores unitarios se denomina base normal. Asimismo, para sistemas de referencia cartesianos, cilndricos, 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 k u k = 1,

para todo k

u j u k = 0,

para todo j k

(A.32)

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 x = (1, 0),

u y = (0,1)

(A.33)

Y la base ortonormal para un sistema de referencia cartesiano tridimensional es:


u x = (1, 0, 0),

u y = (0,1, 0),

u z = (0, 0,1)

(A.34)

Tensor mtrico
Para sistemas de coordenadas ordinarios (es decir, aquellos en los que podemos definir distancias y que formalmente se denominan espacios riemanianos), los productos escalares de los vectores base forman los elementos del denominado tensor mtrico de dicho espacio:
JG JG
(A.35)
g jk = u j u k
As, el tensor mtrico tiene rango dos y es simtrico : gjk  gkj. 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 jk = 0,

para j k

(A.36)

Por ejemplo, en un sistema de coordenadas cartesianas, en el que los vectores base son vectores unitarios
constantes, el tensor mtrico tiene las componentes:
1,
g jk =
0,

si j = k
en caso contrario

(A.37)
(espacio cartesiano)

Y para los vectores base en coordenadas polares (Ecuaciones A.30), podemos escribir el tensor mtrico en
la forma matricial:

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 821

A.5 Matrices

1 0
g=
2
0 r

821

(A.38)
(coordenadas polares)

Para un sistema de referencia en coordenadas cilndricas, los vectores base son:


G
G
G
u = cos u x + sin u y , u = sin u x + cos u y , u z = u z

(A.39)

Y la representacin matricial del vector mtrico en coordenadas cilndricas ser:


1 0
g = 0

0 0

0
0

(A.40)
(coordenadas cilndricas)

En coordenadas esfricas, los vectores base son:


G
u r = cos sin u x + sin sin u y + cos u z
G
u = r sin sin u x + r cos sin u y
G
u = r cos cos u x + r sin cos u y r sin u z

(A.41)

Utilizando estos vectores base en la Ecuacin A.35, se obtiene la siguiente representacin matricial para
el tensor mtrico:
0
0
1
2
2

(A.42)
g = 0 r sin 0 (coordenadas esfricas)

0
r 2
0

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:
0.01 2.00
3.60
5.46 0.00 1.63 ,

ex
2x
e

x
x2

[ a1 a2 a3 ] ,

x
y

z

(A.43)

Las matrices se identifican de acuerdo con el nmero de filas 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 cuadrada.
En general, podemos escribir una matriz r por c como:
(A.44)
m11 m12 " m1c
m
m22 " m2 c

M = 21
#
#
#

mr1 mr 2 " mrc


donde mjk representa los elementos de la matriz M. El primer subndice de cada elemento proporciona el
nmero de fila 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.

ZZ_00_APENDICE_A_HEARN_1P.qxd

822

09/10/2005

21:58

Pgina 822

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:
vx

V = vy
v
z

(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.

Multiplicacin por un escalar y suma de matrices


Para multiplicar una matriz M por un valor escalar s, multiplicamos cada elemento mjk por dicho escalar.
Como ejemplo, si
1 2 3
M=

4 5 6

entonces,
3 6 9
3M =

12 15 18

La suma de matrices slo est definida para aquellas matrices que tengan el mismo nmero de filas r y el
mismo nmero de columnas c. Para cualesquiera dos matrices r por c, la suma se obtiene sumando los correspondientes elementos. Por ejemplo,
1 2 3 0.0 1.5 0.2 1.0 3.5 3.2
4 5 6 + 6.0 1.1 10.0 = 2.0 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

(A.46)

obtenemos una matriz m por q C cuyos elementos se calculan como:


n

cij = aik bkj

(A.47)

k =1

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:

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 823

A.5 Matrices

823

0 1
0 1 + (1) 3 0 2 + (1) 4 3 4
5 7 1 2 = 5 1 + 7 3
5 2 + 7 4 = 26 38

3 4

2 8
2 1 + 8 3
2 2 + 8 4 22 28
La multiplicacin de vectores en notacin matricial produce el mismo resultado que el producto escalar,
supuesto que el primer vector se exprese como un vector fila y el segundo vector se exprese como un vector
columna. Por ejemplo,

[1 2 3 ]

4
5 = [ 32 ]

6

Este producto de vectores da como resultado una matriz con un nico elemento (una matriz 1 por 1). Sin
embargo, si multiplicamos los vectores en orden inverso, obtendremos la siguiente matriz 3 por 3:
4
4 8 12
5 [ 1 2 3 ] = 5 10 15

6
6 12 18
Como ilustran los dos productos de vectores anteriores, la multiplicacin de matrices no es conmutativa
por regla general. Es decir,
(A.48)
ABBA
Pero la multiplicacin de matrices es distributiva con respecto a la suma de matrices:
A ( B + C) = A B + A C

(A.49)

Traspuesta de una matriz


La traspuesta MT de una matriz se obtiene intercambiando las filas y columnas de la matriz. Por ejemplo,
1 4
T
1 2 3
2 5 ,
=
4 5 6

3 6

[ a b c ]T = b
c

(A.50)

Para un producto de matrices, la traspuesta es:


(M1 M 2 )T = MT2 M1T

(A.51)

Determinante de una matriz


Si tenemos una matriz cuadrada, podemos combinar los elementos de una matriz para generar un nico nmero, denominado determinante de la matriz. Las evaluaciones de determinantes resultan muy tiles a la hora
de analizar y resolver un amplio rango de problemas. Para una matriz 2 por 2 A, el determinante de segundo orden se define como:
(A.52)
a
a12
det A = 11
= a11 a22 a12 a21
a21 a22
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:

ZZ_00_APENDICE_A_HEARN_1P.qxd

824

09/10/2005

21:58

Pgina 824

APNDICE A Matemticas para grficos por computadora


n

det A = (1) j + k a jk det A jk

(A.53)

j =1

donde detAjk es el determinante (n1) por (n1) de la submatriz que se obtiene a partir de A borrando la
fila j-sima y la columna k-sima. Alternativamente, podemos seleccionar cualquier fila j y calcular el determinante como:
n

det A = (1) j + k a jk det A jk

(A.54)

k =1

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  LU, donde todos 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)(det 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.

Inversa de una matriz


Con las matrices cuadradas, podemos obtener una matriz inversa si y slo si el determinante de la matriz es
distinto de cero. Si tiene una inversa, se dice que la matriz es una matriz no singular. En caso contrario, la
matriz se denomina matriz singular. En la mayora de las aplicaciones prcticas, en las que las matrices
representan operaciones fsicas, lo normal es que exista la inversa.
La inversa de una matriz (cuadrada) n por n M se designa M1, cumplindose que:
(A.56)
MM 1 = M 1 M = I
donde I es la matriz identidad. Todos 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 M1 pueden calcularse a partir de los elementos de M mediante la frmula:
(A.57)
(1) j + k det M kj
m jk1 =
det M
1

donde m jk es el elemento en la fila j-sima y la columna k-sima de M1 y Mkj es la submatriz (n  1) por
(n  1) que se obtiene al borrar la fila k-sima y la columna j-sima de la matriz M. Para valores de n, podemos calcular de manera ms eficiente los valores de los determinantes y los elementos de la matriz inversa
utilizando mtodos numricos.

A.6 NMEROS COMPLEJOS


Por definition, un nmero complejo z es una pareja ordenada de nmeros reales, representada como:
z = ( x, y )

(A.58)

donde x se denomina parte real de z e y se denomina parte imaginaria de z. Las partes real e imaginaria de
un nmero complejo se designan como:

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 825

A.6 Nmeros complejos

825

Eje imaginario

Eje real

FIGURA A.20. Componentes real e imaginaria de un punto z en el


plano complejo.

x = Re( z ),

y = Im( z )

(A.59)

Geomtricamente, un nmero complejo puede describirse como un punto en el plano complejo, como se
ilustra en la Figura A.20.
Cuando Re(z)  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  (x, 0)
Los nmeros complejos surgen como solucin de ecuaciones tales como:
x2  1  0,

x2  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.

Aritmtica compleja bsica


La suma, la resta y la multiplicacin por un escalar de los nmeros complejos se llevan a cabo utilizando las
mismas reglas que para los vectores bidimensionales. Por ejemplo, la suma de dos nmeros complejos es:
z1  z2  (x1, y1)  (x2, y2)  (x1  x2, y1  y2)
y podemos expresar cualquier nmero complejo como la suma:
z  (x, y)  (x, 0)  (0, y)
El producto de dos nmeros complejos, z1 y z2, se define como:
(x1, y1)(x2, y2)  (x1x2  y1y2, x1y2  x2y1)

(A.60)

Esta definicin de la multiplicacin compleja da el mismo resultado que la multiplicacin de nmeros reales cuando las partes imaginarias con cero:
(x1, 0)(x2, 0)  (x1x2, 0)

Unidad imaginaria
El nmero imaginario puro con y  1 se denomina unidad imaginaria y se escribe:
i  (0, 1)

(A.61)

(Los ingenieros elctricos utilizan a menudo el smbolo j como unidad imaginaria, porque el smbolo i se
utiliza para representar la corriente elctrica).
A partir de la regla de la multiplicacin compleja, tendremos que:
i2  (0, 1)(0, 1)  (1, 0)

ZZ_00_APENDICE_A_HEARN_1P.qxd

826

09/10/2005

21:58

Pgina 826

APNDICE A Matemticas para grficos por computadora

Por tanto, i2 es el nmero real 1, y


i = 1

(A.62)

Podemos representar un nmero imaginario puro utilizando cualquiera de las dos siguientes formas:
z  iy  (0, y)
Y un nmero complejo general puede expresarse en la forma:
z  x  iy

(A.63)

Utilizando la definicin de i, podemos verificar que esta representacin satisface las reglas de la suma,
resta y multiplicacin complejas.

Conjugado complejo y mdulo de un nmero complejo


Otro concepto asociado con un nmero complejo es el complejo conjugado, que se define como
z = x + iy

(A.64)

As, el complejo conjugado z es la reflexin de z con respecto al eje x (real).


El mdulo, o valor absoluto, de un nmero complejo se define como:
z = zz = x 2 + y 2

(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. As, las partes real
e imaginaria del cociente de dos nmeros complejos se obtienen como:
z1 z1 z2
=
z2 z2 z2
=

( x1 , y1 )( x2 , y2 )
,
x22 + y22

(A.66)

x x +y y x y x y
= 1 22 12 2 , 2 21 12 2
x2 + y2
x2 + y2

Representacin en coordenadas polares de un nmero complejo


Las operaciones de multiplicacin y divisin de los nmeros complejos se pueden simplificar enormemente
si expresamos las partes real e imaginarias en trminos de las coordenadas polares (Figura A.21):
z  r (cos  i sin )

(A.67)

Tambin podemos escribir la forma polar de z como:


z  rei
donde e es la base de los logaritmos naturales (e  2.718281828), y

(A.68)

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 827

A.7 Cuaternios

827

Eje y
imaginario
z  (x, y)
r

Eje x real

FIGURA A.21. Parmetros en coordenadas polares dentro del plano


complejo.

ei  cos  i sin

(A.69)

que es la frmula de Euler.


Utilizando la forma en coordenadas polares, calculamos el producto de dos nmeros complejos multiplicando sus valores absolutos y sumando sus ngulos polares. As,
(A.70)

z1 z2 = r1r2 ei (1 +2 )

Para dividir un nmero complejo por otro, dividimos sus valores absolutos y restamos sus ngulos polares:
(A.71)

z1 r1 i (1 2 )
= e
z2 r2

Tambin podemos utilizar la representacin polar para calcular las races de los nmeros complejos. Las
races n-simas de un nmero complejo se calculan como:
n

z = n r cos

( +n2k ) + i sin ( +n2k ) ,

k = 0, 1, 2, . . ., n 1

(A.72)

Estas races descansan sobre un crculo de radio n r 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  ia  jb  kc

(A.73)

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 i, j, k se definen con las propiedades:
i2  j2  k2  1,

ij  ji  k

(A.74)

ki  ik  j

(A.75)

A partir de estas propiedades, se sigue que:


jk  kj  i,

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:
q1  q2  (s1  s2)  i(a1  a2)  j (b1  b2)  k(c1  c2)

(A.76)

La multiplicacin de dos cuaternios se lleva a cabo utilizando las operaciones descritas en las Ecuaciones
A.74 y A.75.

ZZ_00_APENDICE_A_HEARN_1P.qxd

828

09/10/2005

21:58

Pgina 828

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  (s, v)

(A.77)

El parmetro v en esta representacin es el vector (a, b, c). Utilizando la notacin de pares ordenados,
podemos expresar la suma de cuaternios de la forma:
q1  q2  (s1  s2, v1  v2)

(A.78)

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:
q1q2  (s1s2  v1 v2, s1v2  s2v1  v1  v2)

(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.
|q|2  s2  v v

(A.80)

Y la inversa de un cuaternio se evala utilizando la expresin:


q 1 =

1
(s, v )
2
q

(A.81)

de modo que,
qq 1 = q 1q = (1, 0)

A.8 REPRESENTACIONES NO 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:
f1(x, y, z)  0,

z  f2(x, y)

(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  f(x)

z  g(x)

(A.83)

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
f (x) o g(x) sea 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 e 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:
x2  y2  r2  0

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 829

A.10 Operadores diferenciales

829

y la ecuacin explcita de y es la funcin multivaluada:


y = r 2 x2
En general, una representacin ms conveniente para describir los objetos en los algoritmos grficos es en
trminos de ecuaciones paramtricas.

A.9 REPRESENTACIONES PARAMTRICAS


Podemos clasificar los objetos segn el nmero de parmetros necesarios para describir las coordenadas de
los mismos. Una curva, por ejemplo, en un sistema de referencia cartesiano se clasifica como un objeto eucldeo unidimensional, mientras que una superficie es un objeto eucldeo bidimensional. Cuando se proporciona la descripcin de un objeto en trminos de su parmetro de dimensionalidad, la descripcin se denomina
representacin paramtrica.
La descripcin cartesiana de los puntos situados a lo largo de la trayectoria de una curva puede proporcionarse en forma paramtrica utilizando la siguiente funcin vectorial:
P(u)  (x(u), y(u), z(u))

(A.84)

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(2u),

y(u)  r sin(2u),

z(u)  0,

0u1

(A.85)

Puesto que esta curva est definida en el plano xy, podemos eliminar la funcin z(u), que tiene el valor
constante 0.
De forma similar, podemos representar las coordenadas de una superficie utilizando la siguiente funcin
vectorial cartesiana:
P(u, v)  (x(u, v), y(u, v), z(u, v))
(A.86)
Cada una de las coordenada cartesianas es ahora funcin de los dos parmetros de la superficie u y v. Una
superficie esfrica con radio r y con centro en el origen de coordenadas, por ejemplo, puede describirse
mediante las ecuaciones:
x(u, v) = r cos(2 u)sin( v)
y(u, v) = r sin(2 u)sin( v)
z(u, v) = r cos( v)

0 u, v 1

(A.87)

El parmetro u 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 asignar a u
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 lneas de latitud y longitud de cualquier seccin esfrica (Figura A.22).

A.10 OPERADORES DIFERENCIALES


Para una funcin continua de una nica variable independiente, como f (x), podemos determinar la tasa a la
que vara la funcin para cualquier valor x concreto utilizando una funcin denominada derivada de f (x) con
respecto a x. Esta funcin derivada se define como:

ZZ_00_APENDICE_A_HEARN_1P.qxd

830

09/10/2005

21:58

Pgina 830

APNDICE A Matemticas para grficos por computadora

FIGURA A.22. Seccin de una superficie esfrica descrita por lneas de u constante y lneas de v constante en las Ecuaciones A.87.

df
f ( x + x ) f ( x )
lim

0
x
dx

(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 como f (x, y, z,
t), podemos determinar la tasa de cambio de la funcin con respecto a cualquiera de los ejes de coordenadas,
x, y o z, o con respecto al parmetro temporal t. 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 de f con respecto al tiempo se define como:
f
f ( x, y, z, t + t ) f ( x, y, z, t )
lim

0
t
t
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.

Operador gradiente
El operador vectorial con las siguientes componentes cartesianas se denomina operador gradiente:

grad =
, ,
x y z

(A.89)

El smbolo se denomina nabla, 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 = f (Vector normal para una representacin paramtrica de la superficie)

(A.90)

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 831

A.10 Operadores diferenciales

831

Como ejemplo, una superficie esfrica con radio r puede representarse en coordenadas locales con la
representacin cartesiana no paramtrica f (x, y, z) x2  y2  z2 r 2, y el gradiente de f producir el vector normal a la superficie (2x, 2y, 2z). Pero si se representa la superficie con una funcin vectorial paramtrica P(u, v), entonces podemos determinar la normal a la superficie utilizando la operacin de producto
vectorial:
(A.91)
P P
N=

(vector normal para una representacin parmetrica de la superficie)


u v

Derivada direccional
Tambin podemos utilizar el operador gradiente y el producto escalar de vectores para formar un producto
escalar denominado derivada direccional de una funcin f:
f
= u f
u

(A.92)

Esto nos proporciona la tasa de cambio de f en una direccin especificada por el vector unitario u. Como
ilustracin, podemos determinar la derivada direccional para la funcin de superficie esfrica f  x2  y2 
z2 en la direccin z de la forma siguiente:
f
= u z f = 2 z
z
donde uz es el vector unitario segn la direccin z positiva. Y para el siguiente vector unitario en el plano xy:
u=

1
1
ux +
uy
2
2

la derivada direccional de f a partir de la Ecuacin A.92 es:


f
1 f
1 f
= 2x + 2y
=
+
u
2 x
2 y

Forma general del operador gradiente


Dentro de cualquier sistema ortogonal de coordenadas tridimensionales, podemos obtener las componentes
del operador gradiente utilizando los clculos:
3

=
k =1

uk
gkk

xk

(A.93)

En esta expresin, cada uk representa el vector base unitario en la direccin de la coordenada xk, y gkk son
los componentes diagonales del tensor mtrico del espacio.

Operador de Laplace
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:
2 = =

2
2
2
+ 2+ 2
2
x
y
z

(A.94)

ZZ_00_APENDICE_A_HEARN_1P.qxd

832

09/10/2005

21:58

Pgina 832

APNDICE A Matemticas para grficos por computadora

El smbolo 2 se denomina en ocasiones grado al cuadrado, del al cuadrado o nabla al cuadrado. Y en


cualquier sistema ortogonal de coordenadas tridimensionales, la laplaciana de una funcin f (x, y, z) se calcula como:
2 f =

g11 g22 g33 x1

g22 g33 f

+
g11 x1 x2

g33 g11 f
+

g22 x2 x3

g11 g22 f

g33 x3

(A.95)

Son muchas las aplicaciones donde surgen ecuaciones en las que interviene la laplaciana, incluyendo la
descripcin de los efectos de la radiacin electromagntica.

Operador divergencia
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:
div V = V =

(A.96)

Vx Vy Vz
+
+
x
y
z

En esta expresin, Vx, Vy y Vz son las componentes cartesianas del vector V. La divergencia es una medida de la tasa de incremento o decremento 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:

div V = V =

x ( g22 g33 V1 ) + x ( g33 g11 V2 ) + x ( g11 g22 V3 )


g11 g22 g33 1

2
3

(A.97)

con los parmetros V1, V2 y V3 como componentes del vector V con respecto a los ejes de coordenadas, y siendo x1, x2 y x3 y gkk los elementos diagonales del tensor mtrico.

Operador rotacional
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:
V Vy Vx Vz Vy Vx
rot V = V = z
,
,

z z
x x
y
y

(A.98)

Esta operacin nos da una medida de los efectos 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:

rot V = V =

1
g11 g22 g33

g11 u1

g22 u 2

g33 u 3

x1

x2

x3

g11 V1

g22 V2

g33 V3

(A.99)

Los vectores uk son los vectores base unitarios del espacio, y gkk son los elementos diagonales del tensor
mtrico.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 833

A.11 Teoremas de transformacin integrales

833

A.11 TEOREMAS DE TRANSFORMACIN INTEGRALES


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 amplio rango de problemas prcticos.

Teorema de Stokes
Para una funcin vectorial continua F(x, y, z) definida sobre una cierta regin superficial, el teorema de
Stokes 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,

(rot F ) n dA =

superf

v F r ds

(A.100)

donde la frontera C debe 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 C en 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.

Teorema de Green para una superficie plana


Si consideramos una regin en el plano xy delimitada por una curva C que sea continua por tramos (como en
el teorema de Stokes), podemos enunciar el teorema de Green para el plano en forma cartesiana de la manera siguiente:

area

f2 f1
x y dxdy =

v ( f dx + f dy)
1

(A.101)

Aqu, f1(x, y) y f2(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 es en sentido contrario a las agujas del reloj. Tambin poden

Superficie

r
C

FIGURA A.23. La integracin alrededor de la lnea de contorno C es en


sentido contrario a las agujas del reloj en el teorema de Stokes cuando
miramos a la superficie desde la regin exterior del espacio.

ZZ_00_APENDICE_A_HEARN_1P.qxd

834

09/10/2005

21:58

Pgina 834

APNDICE A Matemticas para grficos por computadora

C1

C2

FIGURA A.24. Las integrales de lnea en el teorema de Green


para el plano se evalan recorriendo las curvas lmite C1 y C2,
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 Stokes. Para demostrar esto, vamos a definir la funcin vectorial F con componentes cartesianos (f1, f2, 0). Entonces, el teorema de Green puede escribirse en forma vectorial:

(rot F ) u z dA =

v F r ds

(A.102)

area

donde uz 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
f1  0 y f2  x. Entonces, a partir del teorema de Green, el rea A de una figura plana ser
A =

area

dx dy = v x dy

(A.103)

De forma similar, si hacemos f1  y y f2  0, tendremos:


A =

area

dx dy = v y dx

(A.104)

Sumando las dos ecuaciones de rea anteriores, se obtiene:


A=

1
2

( x dy y dx )

(A.105)

Y tambin podemos convertir esta expresin cartesiana del rea a la siguiente forma en coordenadas polares:
A=

1
2

(A.106)

r 2 d

El teorema de Green para el plano puede expresarse de muchas otras formas tiles. Por ejemplo, si definimos f1  f/y y f2  f/x, para alguna funcin continua f, tendremos:

area

2 f dx dy =

v n ds

(A.107)

donde f/n es la derivada direccional de f en la direccin de la normal saliente a la curva de contorno C.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 835

A.12 rea y centroide de un polgono

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. Este teorema tambin se conoce con varios otros nombres, incluyendo los de teorema de Green en el espacio y teorema de Gauss. Para una funcin vectorial continua tridimensional F, definida sobre un cierto volumen del espacio, podemos expresar el teorema de
divergencia en forma vectorial:
(A.108)
div F dV =
F n dA

vol

surperf

donde dV es un elemento diferencial de volumen, n es el vector normal a la superficie de contorno 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  f para alguna funcin tridimensional continua f, tenemos la versin para volmenes de
la Ecuacin A.107, que es:
(A.109)
f
2 f dV =
dA
vol
surperf n

En esta ecuacin, f/n es la derivada direccional de f en 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 utilizando 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:

1
=
3

V=

dxdydz

vol

xdydz =

surperf

ydzdx ==

surperf

zdxdy

surperf

( xdydz + ydzdx + zdxdy)

(A.110)

surperf

Ecuaciones de transformacin de Green


Podemos derivar varias otras transformaciones integrales a partir del teorema de divergencia. Las siguientes
dos ecuaciones integrales suelen denominarse ecuaciones de transformacin de Green, primera y segunda frmulas de Green o identidades de Green:
f2
dA
n
surperf
f
f2
f2 1
f1
n
n
surperf

( f f + f f )dV =
( f f f f )dV =
2

vol

vol

(A.111)

f1

dA

(A.112)

En estas ecuaciones, f1 y f2 son funciones escalares continuas tridimensionales, y f1/n y f2/n son sus
derivadas direccionales en la direccin de la normal a la superficie.

A.12 REA Y CENTROIDE DE UN POLGONO


Podemos utilizar las transformaciones integrales de la Seccin A.11 para calcular diversas propiedades de los
objetos para aplicaciones infogrficas. Para los polgonos, a menudo utilizamos el rea y las coordenadas del

ZZ_00_APENDICE_A_HEARN_1P.qxd

836

09/10/2005

21:58

Pgina 836

APNDICE A Matemticas para grficos por computadora


k1
k

FIGURA A.25. Un polgono definido con n vrtices en el plano xy.

3
1

centroide en aquellos programas que implican transformaciones geomtricas, simulaciones, diseo de sistemas y animaciones.

rea de un polgono
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 xy (Figura A.25) pueden expresarse
en la forma:
x = xk + ( xk +1 xk )u
y = yk + ( yk +1 yk )u

0 u 1,

k = 1, 2, . . ., n

(A.113)

donde xn1  x1 y yn1  y1.


Sustituyendo la expresin diferencial dy  (yk1  yk)du y la expresin paramtrica de x en la Ecuacin
A.103, tenemos:

v x dy
= [x

A=

k =1

(y

+ ( xk +1 xk )u]du

yk )[ xk + ( xk +1 xk ) / 2]

k +1

k =1

1
2

(x y
n

k +1

x k y k + x k +1 y k +1 + x k +1 y k )

(A.114)

k =1

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:
A=

1
2

(x y
n

k +1

x k +1 y k )

(A.115)

k =1

Centroide de un polgono
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

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 837

A.12 rea y centroide de un polgono

837

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:

1
y=
A

x=

1
A

xdxdy =

area

ydxdy =

x
A
y

(A.116)

area

En estas expresiones, x y y se denominan momentos del rea con respecto a los ejes x 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 Green 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 Green para una superficie plana (Ecuacin A.101) indica que:

area

f2 f1
x y dx dy =

v ( f dx + f dy)
1

(A.117)

1 2
Para la evaluacin de x, podemos hacer f2 = 2 x y f1  0 en la transformacin anterior, de modo que:

x =

area

xdxdy =

1
2

v x dy
2

(A.118)

A partir de las representaciones paramtricas A.113 para los lados del polgono, tenemos:
x 2 = xk2 + 2 xk ( xk +1 xk )u + ( xk +1 xk )2 u 2
y
dy = ( yk +1 yk )du
para cada uno de los n lados, etiquetados como k  1, 2, . . ., n. Por tanto,
y

Centroide

Promedio de las
coordenadas de los vrtices

FIGURA A.26. Coordenadas del centroide


de un polgono y coordenadas obtenidas al
promediar las coordenadas de los vrtices.

ZZ_00_APENDICE_A_HEARN_1P.qxd

838

09/10/2005

21:58

Pgina 838

APNDICE A Matemticas para grficos por computadora

x =
k =1

y k +1 y k 1 2
2 2
0 [ xk + 2 xk ( xk +1 xk )u + ( xk +1 xk ) u ]du
2

1 n
( xk +1 + xk )( xk yk +1 xk +1 yk )
6 k =1

(A.119)

Para la evaluacin de y, hacemos las sustituciones f2 = 12 y 2 y f2  0 en el teorema de Green y obtenemos:

y =

ydxdy =

area

1
2

v y dx
2

(A.120)

Utilizando las representaciones paramtricas A.113 para evaluar la integral de lnea, tenemos

y =

1 n
( yk +1 + yk )( xk yk +1 xk +1 yk )
6 k =1

(A.121)

Dado cualquier conjunto de vrtices de un polgono, podemos entonces usar las expresiones correspondientes A, x y y en las Ecuaciones A.116 para calcular las coordenadas del centroide del polgono. Puesto
que la expresin (xk yk1 xk1yk) aparece en los clculos de las tres magnitudes, A, x y y, calcularemos
dicha expresin una sola vez para cada segmento de lnea.

A.13 CLCULO DE LAS PROPIEDADES DE LOS POLIEDROS


Para obtener las propiedades de los poliedros se utilizan mtodos similares a los de los polgonos. La nica
diferencia es que ahora calcularemos el volumen espacial, en lugar de un rea, y obtendremos el centroide
promediando las coordenadas de todos los puntos comprendidos dentro del volumen del poliedro.
El volumen de cualquier regin espacial se define en coordenadas cartesianas como:
V=

(A.122)

dxdydz

vol

Esta integral puede convertirse en una integral de superficie utilizando alguna de las ecuaciones de transformacin A.110. 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:
x=
y=
z=

1
V

x dx dy dz =

1
V

y dx dy dz =

1
V

z dx dy dz =

vol

vol

vol

x
V
y
V

(A.123)

z
V

De nuevo, podemos convertir las integrales de volumen en integrales de superficie, sustituir las representaciones paramtricas de las coordenadas cartesianas y evaluar las integrales de superficie para las caras del
poliedro.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 839

A.14 Mtodos numricos

839

A.14 MTODOS NUMRICOS


En los algoritmos infogrficos, a menudo es necesario resolver sistemas de ecuaciones lineales, de ecuaciones no lineales, de ecuaciones integrales y de otras formas funcionales. Asimismo, para visualizar un conjunto discreto de puntos de datos, puede que resulte til mostrar una curva continua o una funcin de superficie
continua que se aproximen a los puntos que componen el conjunto de datos. En esta seccin, vamos a resumir brevemente algunos algoritmos comunes para la resolucin de diversos problemas numricos.

Resolucin de sistemas de ecuaciones lineales


Para una serie de variables xk, con k 1, 2, . . ., n, podemos escribir un sistema de n ecuaciones lineales de la
forma siguiente:
a11 x1 + a12 x2 + " + a1n xn = b1
a21 x1 + a22 x2 + " + a2 n xn = b2
#
an1 x1 + an 2 x2 + " + ann xn = bn

(A.124)

donde los valores de los parmetros ajk y bj son conocidos. Este conjunto de ecuaciones puede expresarse en
la forma matricial:
(A.125)
AX =B
donde A es una matriz cuadrada n por n cuyos elementos son los coeficientes ajk, X es la matriz columna de
valores xj y B es la matriz columna de valores bj. Resolviendo la ecuacin matricial para despejar X, obtenemos:
(A.126)
X = A 1 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:

xk =

det A k
det A

(A.127)

donde Ak es la matriz que se obtiene al sustituir la columna k-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:
(A.128)
x1 + 2 x2 = 4
3 x1 + 4 x2 = 1

Para resolver este sistema de ecuaciones, podemos multiplicar la primera ecuacin por 3 y luego sumar
las dos ecuaciones para eliminar el trmino x1, lo que nos da la ecuacin:
2 x2 = 13
que tiene la solucin x2  13/2. Entonces, podemos sustituir este valor en cualquiera de las ecuaciones originales para obtener la solucin correspondiente a x1, que es 9. Podemos emplear esta tcnica bsica para

ZZ_00_APENDICE_A_HEARN_1P.qxd

840

09/10/2005

21:58

Pgina 840

APNDICE A Matemticas para grficos por computadora

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 de eliminacin gausiana es la descomposicin LU (o factorizacin LU)
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=LU

(A.129)

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 1. Todos los elementos de la matriz U situados por debajo de la diagonal tienen el valor 0. Entonces, podemos escribir la Ecuacin A.125 como:
LUX=B

(A.130)

Esto nos permite resolver los dos siguientes sistemas de ecuaciones, que son mucho ms simples.
L Y = B,

UX=Y

(A.131)

Una vez obtenidos los valores de los elementos de la matriz Y en la Ecuacin A.131, 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:
2 3 1 02 3
A=
=

8 5 4 1 0 7

Un mtodo para calcular los elementos de las matrices de factorizacin est dado por el siguiente sistema
de ecuaciones, donde ui j son los elementos de la matriz triangular superior U y li j son los elementos de la
matriz triangular inferior L:
u1 j = a1 j ,

j = 1, 2, . . ., n

ai1
,
u11

i = 2, 3, . . ., n

li1 =

i 1

uij = a1 j lik ukj

j = i, i + 1, . . ., n; i 2

(A.132)

k =1

lij =

j 1

1
aij lik ukj

u jj

k =1

i = j + 1, j + 2, . . ., n; j 2

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 xk y luego calculamos repetidamente una serie de aproximaciones sucesivas, hasta que la diferencia entre dos valores sucesivos para cada xk sea
pequea. En cada paso, calculamos los valores aproximados de las variables mediante las frmulas:
x1 =

b1 a12 x2 a13 x3 " a1n xn


a11

x2 =

b2 a21 x1 a23 x3 " a2 n xn


a11

(A.133)

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 841

A.14 Mtodos numricos

841

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
Gauss-Seidel converge hacia una solucin.

Determinacin de races de ecuaciones no lineales


Una raz de una funcin f (x) es un valor de x que satisface la ecuacin f (x)  0. En general, la funcin f (x)
puede ser una expresin algebraica, como por ejemplo un polinomio, o puede incluir funciones trascendentes. Una expresin algebraica es aquella que slo contiene los operadores aritmticos, exponentes, races y
potencias. Las funciones transcendentes, como por ejemplo las funciones trigonomtricas, logartmicas y
exponenciales, estn representadas por series infinitas de potencias.
Las races de una ecuacin no lineal pueden ser nmeros reales, nmeros complejos o una combinacin
de nmeros reales y complejos. En ocasiones, podemos obtener soluciones exactas para todas las races,
dependiendo de la complejidad de la ecuacin. Por ejemplo, sabemos cmo hallar una solucin exacta para
cualquier polinomio de grado menor o igual que 4, y las races de una ecuacin transcendente simple tal como
sin x  0 son x  k para cualquier valor entero de k. Pero en la mayora de los casos de inters prctico,
necesitamos aplicar procedimientos numricos para obtener las races de una ecuacin no lineal.
Uno de los mtodos ms populares para hallar las races de ecuaciones no lineales es el algoritmo de
Newton-Raphson. Se trata de un procedimiento iterativo que aproxima f (x) mediante una funcin lineal en
cada paso de la iteracin, como se muestra en la Figura A.27. Comenzamos con una estimacin inicial x0
para el valor de la raz, y luego calculamos la siguiente aproximacin a la raz, x1, determinando dnde corta
con el eje x la lnea tangente en x0. En x0, la pendiente (primera derivada) de la curva es:
f ( x0 )
df
=
dx x0 x1

(A.134)

Por tanto, la siguiente aproximacin a la raz es:


x1 = x0

f ( x0 )
f ( x0 )

(A.135)

donde f (x0) designa la derivada de f (x) evaluada en x  x0. 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 compleja f (z), 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 x 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

Lnea tangente

x1

f (x0)
x0

FIGURA A.27. Aproximacin de una curva en un valor inicial x0 mediante una lnea recta que sea tangente a la curva en dicho punto.

ZZ_00_APENDICE_A_HEARN_1P.qxd

842

09/10/2005

21:58

Pgina 842

APNDICE A Matemticas para grficos por computadora

pequeo. Primero examinamos el punto medio del intervalo para determinar si la raz se encuentra en la mitad
superior o inferior del mismo. Este procedimiento se repite para cada subintervalo sucesivo hasta 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).

Evaluacin de integrales
La integral es un proceso de suma. Para una funcin de una nica variable x, la integral de f (x) es igual al
rea bajo la curva, como se ilustra en la Figura A.28. Para integrandos 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:

f ( x ) dx fk ( x )xk

(A.136)

k =1

La funcin fk(x) es una aproximacin de la f (x) en el intervalo xk. 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 cuadrtico (parbola) para aproximar la ecuacin en cada subintervalo, el mtodo se denomina regla
de Simpson y la aproximacin de la integral ser:

f ( x ) dx

(A.137)

n 1
n2

x
f ( a ) + f (b ) + 4 f ( x k ) + 2 f ( x k )

3
( impar)k =1
( par)k = 2

En esta expresin, el intervalo que va desde a hasta b se divide en n intervalos de igual anchura:
x =

f(x)

(A.138)

ba
n

f (x)

 f (x) dx
b

rea 
a

x0  a

FIGURA A.28. La integral de f (x) es igual al rea


comprendida entre la funcin y el eje x en el
intervalo que va desde a hasta b.

x1

xn  b

FIGURA A.29. Aproximacin de una integral mediante la suma


de las reas de pequeos rectngulos.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 843

A.14 Mtodos numricos

843

f (x)

f(x)
ymax

x
a

(x, y)

ymin

FIGURA A.30. Una funcin con oscilaciones de


alta frecuencia.

FIGURA A.31. Una posicin aleatoria (x, y) generada dentro de


un rea rectangular que encierra la funcin f (x) en el intervalo
que va de a hasta b.

donde n es un mltiplo de 2 y donde


xk  xk1  x,

x0  a,

k  1, 2, . . ., n

Para una funcin con una amplitud que vare de forma muy rpida, como el ejemplo de la Figura A.30,
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 Carlo. El trmino Monte Carlo se utiliza para describir cualquier mtodo que
utilice procedimientos basados en nmeros aleatorios para resolver el problema determinista.
Aplicamos el mtodo Monte Carlo para evaluar una integral generando n posiciones aleatorias dentro de
un rea rectangular que contenga a f (x) en el intervalo que va desde a hasta b (Figura A.31). Entonces, podemos calcular una aproximacin a la integral mediante la frmula:

f ( x ) dx h(b a )

ncount
n

(A.139)

donde el parmetro h es la altura del rectngulo y el parmetro ncount es el nmero de puntos aleatorios comprendidos entre f (x) y el eje x. Calculamos una posicin aleatoria (x, y) en la posicin rectangular generando
primero dos nmeros aleatorios, r1 y r2, y luego realizando las operaciones:
h = ymax ymin ,

x = a + r1 (b a ),

y = ymin + r2 h

(A.140)

Pueden aplicarse mtodos similares a las integrales mltiples.


En los clculos de x e y en A.140, asumimos que los nmeros aleatorios r1 y r2 estn distribuidos uniformemente en el intervalo (0, 1). Podemos obtener r1 y r2 a partir de una funcin generadora de nmeros aleatorios incluida en una biblioteca matemtica o estadstica, o bien podemos utilizar el siguiente algoritmo,
denominado generador lineal de congruencias:
ik = a ik 1 + c(mod m),
rk =

k = 1, 2, 3, . . .

(A.141)

ik
m

donde los parmetros a, c, m y i0 son enteros e i0 es un valor inicial denominado semilla. El parmetro m se
elige lo mayor posible para una mquina concreta, eligindose los valores de a y c 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  232  1, a  1664525 y c  1013904223.

ZZ_00_APENDICE_A_HEARN_1P.qxd

844

09/10/2005

21:58

Pgina 844

APNDICE A Matemticas para grficos por computadora

Resolucin de ecuaciones diferenciales ordinarias


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 fija 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
= f ( x, t ),
dt

x (t 0 ) = x0

(A.142)

donde x representa alguna variable dependiente que varia con el tiempo t (la variable independiente), f (x,
t) es la funcin conocida de variacin con el tiempo para la primera derivada de x y x0 es el valor dado de x
para el tiempo inicial t0. Tambin podemos escribir esta ecuacin en la forma:
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:
(A.143)
xk f ( xk , t k )t k , k = 0, 1, . . ., n
donde xk  xk1  xk y tk  tk1  tk, para n pasos temporales. Normalmente, tomaremos intervalos de
tiempo iguales y utilizaremos los siguientes clculos incrementales para determinar los valores x en cada paso
temporal, dado el valor de x0 en t0:
(A.144)
xk +1 = xk + f ( xk , t k )t
Este procedimiento numrico se denomina mtodo de Euler y permite aproximar x con segmentos de
lnea recta en cada intervalo temporal t.
Aunque el mtodo de Euler es un procedimiento simple de implementar, 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:
(A.145)
1
x(t + t ) = x(t ) + x (t )t + x (t )t 2 + "
2
Puesto que x(t) f (x, t), tendremos que x(t) 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 Runge-Kutta de cuarto orden.
Este procedimiento se basa en una expansin en serie de Taylor de cuarto orden. El algoritmo para el mtodo
de Runge-Kutta es

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 845

A.14 Mtodos numricos

845

a = f ( xk , t k )t
b = f ( xk + a / 2, t k + t / 2)t
c = f ( xk + b / 2, t k + t / 2)t

(A.146)

d = f ( xk + c, t k + t / 2)t
t k +1 = t k + t
xk +1 = xk + (a + 2b + 2c + d ) / 6,

k = 0, 1, . . ., n 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:

x (t k )

xk +1 2 xk + xk 1
t 2

(A.147)

Resolucin de ecuaciones diferenciales parciales


Como cabra esperar, las ecuaciones diferenciales parciales son, por regla general, ms difciles de resolver
que las ecuaciones diferenciales ordinarias, pero podemos aplicar mtodos similares y sustituir las derivadas
parciales por diferencias finitas.
Vamos a considerar primero una funcin f (x, t) que dependa slo de la coordenada x y del tiempo t.
Podemos reducir una ecuacin diferencial parcial que incluya f/x y f/t a una ecuacin diferencial ordinaria sustituyendo la derivada espacial por diferencias finitas. Esto nos permite sustituir la funcin de dos variables por una funcin de un nico subndice y de una nica variable, que ser el tiempo:
f ( x, t ) f ( x k , t ) f k (t )

(A.148)

Las derivadas parciales se sustituyen entonces por las siguientes expresiones:


f f
f
= k +1 k
x
x
f dfk
=
t
dt

(A.149)

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 de f con respecto a x:
f (t ) 2 fk (t ) + fk 1 (t )
2 f ( x, t )
k +1
2
dx
x 2

(A.150)

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

ZZ_00_APENDICE_A_HEARN_1P.qxd

846

09/10/2005

21:58

Pgina 846

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.

Mtodos de ajuste de curvas por mnimos cuadrados para conjuntos de datos


Cuando una simulacin informtica o un problema de visualizacin cientfica produce un conjunto de valores de datos, normalmente resulta conveniente determinar una forma funcional que describa dicho conjunto.
El mtodo estndar para obtener una funcin que se ajuste a los datos proporcionados es el algoritmo de los
mnimos cuadrados. Para aplicar este mtodo, primero elegimos un tipo general para la funcin, como por
ejemplo una funcin lineal, polinmica o exponencial. Despus, debemos determinar los valores de los parmetros de la forma funcional que hayamos elegido. Por ejemplo, una funcin que sea una recta bidimensional puede describirse mediante dos parmetros: la pendiente y el punto de corte con el eje y. Los parmetros
de la funcin se obtienen minimizando la suma de los cuadrados de las diferencias entre los valores tericos
de la funcin y los valores reales de los datos.
Para ilustrar este mtodo, vamos a considerar primero un conjunto bidimensional de n puntos de datos,
cuyas coordenadas designamos mediante (xk, yk ) con k  1, 2, . . ., n. Despus de seleccionar la forma funcional f (x) que podemos utilizar para describir la distribucin de datos, establecemos una expresin para la
funcin del error E, que ser la suma de los cuadrados de las diferencias entre f (xk) y los valores de datos
y k:
(A.151)

E = [ yk f ( xk )]2
k =1

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:
f (x)  a0  a1x
entonces,
n

E = [ yk2 2 yk (a0 + a1 xk ) + a02 + 2 a0 a1 xk + a12 xk2 ]

(A.152)

k =1

Puesto que el error E es una funcin de dos variables (a0 y a1), podremos minimizar E mediante las
siguientes dos ecuaciones acopladas:
n
E
= [ 2 yk + 2a0 + 2 a1 xk ] = 0
a0 k =1

(A.153)

n
E
= [ 2 yk xk + 2 a0 xk + 2 a1 xk2 ] = 0
a1 k =1

Entonces, podemos resolver este sistema de dos ecuaciones lineales utilizando la regla de Cramer, que
nos da:
a0 =
a1 =

xk2

)(

yk ) ( k x k

)(

D
n k x k yk ( k x k
D

donde el denominador en estas dos expresiones es:

)(

yk

x k yk

)
(A.154)

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 847

A.14 Mtodos numricos

D=

n
k xk

k xk
k x x2

= x xk
k =1
k =1
n

847

(A.155)

2
k

Podemos efectuar clculos similares para otras funciones. Por ejemplo, para el polinomio:
f ( x ) = a0 + a1 x + a2 x 2 + " + an x n
necesitaremos resolver un sistema de n ecuaciones lineales para determinar los valores de los parmetros ak.
Y tambin podemos aplicar el mtodo de ajuste por mnimos cuadrados a funciones de mltiples variables f
(x1, x2, . . ., xm) que pueden ser lineales o no lineales con respecto a cada una de las variables.

ZZ_00_APENDICE_A_HEARN_1P.qxd

09/10/2005

21:58

Pgina 848

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 849

Bibliografa
AKELEY,K. y T.JERMOLUK(1988). HighPerformance Polygon Rendering, en los artculos de SIGGRAPH88, Computer Graphics,
22(4), pgs. 239246.
AKELEY, K. (1993). RealityEngine Graphics,
en los artculos de SIGGRAPH93, Computer
Graphics, pgs. 109116.
AKENINE-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 SIGGRAPH84,
Computer Graphics, 18(3), pgs. 129135.
ANJYO, K., Y. USAMI y T. KURIHARA (1992).
A Simple Method for Extracting the Natural
Beauty of Hair, en los artculos de SIGGRAPH92, Computer Graphics, 26(2), pgs.
111120.
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
SIGGRAPH87, Computer Graphics, 21(4),
pgs. 5564.
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 Geometry, en los artculos de
SIGGRAPH83, Computer Graphics, 17(3),
pgs. 7382.
BARAFF, D. (1989). Analytical Methods for
Dynamic Simulation of Non-Penetrating Rigid
Bodies, en los artculos de SIGGRAPH89,
Computer Graphics, 23(3), pgs. 223232.
BARAFF, D. y A. WITKIN (1992). Dynamic
Simulation of Non-Penetrating Flexible
Bodies, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 303308.

BARNSLEY, M. F., A. JACQUIN, F. MALASSENET, L. REUTER y D. SLOAN (1988).


Harnessing Chaos for Image Synthesis, en
los artculos de SIGGRAPH88, Computer
Graphics, 22(4), pgs. 131140.
BARNSLEY,M. F. (1993). Fractals Everywhere,
Second Edition, Academic Press, San Diego,
CA.
BARNSLEY, M. F. y L. P. HURD, (1993). Fractal
Image Compression, AK Peters, Wellesly, MA.
BARR, A. H. (1981). Superquadrics and AnglePreserving Transformations, IEEE Computer
Graphics and Applications, 1(1), pgs. 1123.
BARSKY, B. A. y J. C. BEATTY (1983). Local
Control of Bias and Tension in Beta-Splines,
ACM Transactions on Graphics, 2(2), pgs.
109134.
BARSKY, B. A. (1984). A Description and
Evaluation of Various 3-D Models, IEEE
Computer Graphics and Applications, 4(1),
pgs. 3852.
BARZEL, R. y A. H. BARR (1988). A Modeling
System Based on Dynamic Constraints, en los
artculos de SIGGRAPH88, Computer
Graphics, 22(4), pgs. 179188.
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.
WINGET (1991). Making Radiosity Usable:
Automatic Preprocessing and Meshing
Techniques for the Generation of Accurate
Radiosity Solutions, en los artculos de
SIGGRAPH91, Computer Graphics, 25(4),
pgs. 5161.
BERGMAN, L. D., J. S. RICHARDSON, D. C.
RICHARDSON y F. P. BROOKS, JR. (1993).
VIEWan Exploratory Molecular
Visualization System with User-Definable
Interaction Sequences, en los artculos de

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

850

09/10/2005

22:12

Pgina 850

Bibliografa

SIGGRAPH93, Computer Graphics, pgs.


117126.
BZIER, P. (1972). Numerical Control: Mathematics and Applications, translated by A. R.
Forrest and A. F. Pankhurst, John Wiley &
Sons, Londres.
BIRN, J. (2000). [digital] Lighting & Rendering,
New Riders Publishing, Indianapolis, IN.
BISHOP, G. y D. M. WIEMER (1986). Fast Phong
Shading, en los artculos de SIGGRAPH86,
Computer Graphics, 20(4), pgs. 103106.
BLAKE, J. W. (1993). PHIGS and PHIGS Plus,
Academic Press, Londres.
BLESER, T. (1988). TAE Plus Styleguide User
Interface Description, NASA Goddard Space
Flight Center, Greenbelt, MD.
BLINN, J. F. y M. E. NEWELL (1976). Texture
and Reflection in Computer-Generated Images,
Communications of the ACM, 19(10), pgs.
542547.
BLINN, J. F. (1977). Models of Light Reflection
for Computer-Synthesized Pictures, en los artculos de SIGGRAPH77, Computer Graphics,
11(2), pgs. 192198.
BLINN, J. F. y M. E. NEWELL (1978). Clipping
Using Homogeneous Coordinates, en los artculos de SIGGRAPH78, Computer Graphics,
12(3), pgs. 245251.
BLINN, J. F. (1978). Simulation of Wrinkled
Surfaces, en los artculos de SIGGRAPH78,
Computer Graphics, 12(3), pgs. 286292.
BLINN, J. F. (1982). A Generalization of
Algebraic Surface Drawing, ACM Transactions
on Graphics, 1(3), pgs. 235256.
BLINN, J. F. (1982). Light Reflection Functions
for Simulation of Clouds and Dusty Surfaces,
en los artculos de SIGGRAPH82, Computer
Graphics, 16(3), pgs. 2129.
BLINN, J. F. (1993). A Trip Down the Graphics
Pipeline: The Homogeneous Perspective
Transform, IEEE Computer Graphics and
Applications, 13(3), pgs. 7580.
BLINN, J. (1996). Jim Blinns Corner:ATrip Down
the Graphics Pipeline, Morgan Kauffman, San
Francisco, CA.
BLINN, J. (1998). Jim Blinns Corner: Dirty Pixels,
Morgan Kauffman, San Francisco, CA.

BLOOMENTHAL, J. (1985). Modeling the


Mighty Maple, en los artculos de SIGGRAPH85, Computer Graphics, 19(3), pgs.
305312.
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. 923.
BOUQUET, D. L. (1978). An Interactive Graphics
Application to Advanced Aircraft Design, en
los artculos de SIGGRAPH78, Computer
Graphics, 12(3), pgs. 330335.
BOURG, D. M. (2002). Physics for Game Developers, OReilly & Associates, Sebastopol, CA.
BRESENHAM, J. E. (1965). Algorithm for
Computer Control of a Digital Plotter, IBM
Systems Journal, 4(1), pgs. 2530.
BRESENHAM, J. E. (1977). A Linear Algorithm
for Incremental Digital Display of Circular
Arcs, Communications of the ACM, 20(2),
pgs. 100106.
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).
Project GROPEHaptic Display for Scientific
Visualization, en los artculos de
SIGGRAPH90, Computer Graphics, 24(4),
pgs. 177185.
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.
BRUDERLIN, A. y T. W. CALVERT (1989).
Goal-Directed, Dynamic Animation of Human
Walking, en los artculos de SIGGRAPH89,
Computer Graphics, 23(3), pgs. 233242.
BRUNET, P. e I. NAVAZO (1990). Solid
Representation and Operation Using Extended
Octrees, ACM Transactions on Graphics, 9(2),
pgs. 170197.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 851

Bibliografa

BRYSON, S. y C. LEVIT (1992). The Virtual


Wind Tunnel, IEEE Computer Graphics and
Applications, 12(4), pgs. 2534.
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. 1826.
CAMBELL, G., T. A. DEFANTI, J. FREDERIKSEN, S. A. JOYCE y L. A. LESKE (1986).
Two Bit/Pixel Full-Color Encoding, en los
artculos de SIGGRAPH86, Computer
Graphics, 20(4), pgs. 215224.
CARPENTER, L. (1984). The A-Buffer: An
Antialiased Hidden-Surface Method, en los
artculos de SIGGRAPH84, Computer
Graphics, 18(3), pgs. 103108.
CHEN, S. E., H. E. RUSHMEIER, G. MILLER y
D. TURNER (1991). A Progressive Multi-Pass
Method for Global Illumination, en los artculos de SIGGRAPH91, Computer Graphics,
25(4), pgs. 165174.
CHIN, N. y S. FEINER (1989). Near Real-Time
Shadow Generation Using BSP Trees, en los
artculos de SIGGRAPH89, Computer
Graphics, 23(3), pgs. 99106.
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. 1520.
COHEN, M. F. y D. P. GREENBERG (1985).
The Hemi-Cube: A Radiosity Solution for
Complex Environments, en los artculos de
SIGGRAPH85, Computer Graphics, 19(3),
pgs. 3140.
COHEN, M. F., S. E. CHEN, J. R. WALLACE y D.
P. GREENBERG (1988). A Progressive
Refinement Approach to Fast Radiosity Image
Generation, en los artculos de SIGGRAPH88, Computer Graphics, 22(4), pgs.
7584.
COHEN, M. F. y J. R. WALLACE (1993).
Radiosity and Realistic Image Synthesis,
Academic Press, Boston, MA.

851

COOK, R. L. y K. E. TORRANCE (1982). A


Reflectance Model for Computer Graphics,
ACM Transactions on Graphics, 1(1), pgs.
724.
COOK, R. L., T. PORTER y L. CARPENTER
(1984). Distributed Ray Tracing, en los artculos de SIGGRAPH84, Computer Graphics,
18(3), pgs. 137145.
COOK, R. L. (1984). Shade Trees, en los artculos de SIGGRAPH84, Computer Graphics,
18(3), pgs. 223231.
COOK, R. L. (1986). Stochastic Sampling in
Computer Graphics, ACM Transactions on
Graphics, 6(1), pgs. 5172.
COOK, R. L., L. CARPENTER y E. CATMULL
(1987). The Reyes Image Rendering
Architecture, en los artculos de SIGGRAPH87, Computer Graphics, 21(4), pgs.
95102.
COQUILLART, S. y P. JANCENE (1991).
Animated Free-Form Deformation: An Interactive Animation Technique, en los artculos de
SIGGRAPH91, Computer Graphics, 25(4),
pgs. 2326.
CROW, F. C. (1977a). The Aliasing Problem in
Computer-Synthesized Shaded Images,
Communications of the ACM, 20(11), pgs.
799805.
CROW, F. C. (1977b). Shadow Algorithms for
Computer Graphics, en los artculos de SIGGRAPH77, Computer Graphics, 11(2), pgs.
242248.
CROW, F. C. (1978). The Use of Grayscale for
Improved Raster Display of Vectors and
Characters, en los artculos de SIGGRAPH78,
Computer Graphics, 12(3), pgs. 15.
CROW, F. C. (1981). A Comparison of
Antialiasing Techniques, IEEE Computer
Graphics and Applications, 1(1), pgs. 4049.
CROW, F. C. (1982). A More Flexible Image
Generation Environment, en los artculos de
SIGGRAPH82, Computer Graphics, 16(3),
pgs. 918.
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. 135142.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

852

09/10/2005

22:12

Pgina 852

Bibliografa

CUNNINGHAM, S., N. K. CRAIGHILL, M. W.


FONG, J. BROWN y J. R. BROWN, eds.
(1992). Computer Graphics Using ObjectOriented Programming, JohnWiley & Sons,
Nueva York.
CUTLER, E., D. GILLY y T. OREILLY, eds.
(1992). The X Window System in a Nutshell,
Second Edition, OReilly & Assoc., Inc.,
Sebastopol, CA.
CYRUS, M. y J. BECK (1978). Generalized Twoand Three-Dimensional Clipping, Computers
and Graphics, 3(1), pgs. 2328.
DAY, A. M. (1990). The Implementation of an
Algorithm to Find the Convex Hull of a Set of
Three-Dimensional Points,ACM Transactions
on Graphics, 9(1), pgs. 105132.
DEERING, M. (1992). High Resolution Virtual
Reality, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 195202.
DEERING, M. F. y S. R. NELSON (1993). Leo:
A System for Cost-Effective 3D Shaded
Graphics, en los artculos de SIGGRAPH93,
Computer Graphics, pgs. 101108.
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.
9097.
DE REFFYE, P., C. EDELIN, J. FRANON, M.
JAEGER y C. PUECH (1988). Plant Models
Faithful to Botanical Structure and Development, en los artculos de SIGGRAPH88,
Computer Graphics, 22(4), pgs. 151158.
DEROSE, T. D. (1988). Geometric Continuity,
Shape Parameters y Geometric Constructions
for Catmull-Rom Splines, ACM Transactions
on Graphics, 7(1), pgs. 141.
DIGITAL EQUIPMENT CORP. (1989). Digital
Equipment Corporation XUI Style Guide,
Maynard, MA.
DOCTOR, L. J. y J. G. TORBERG (1981).
Display Techniques for Octree-Encoded
Objects, IEEE Computer Graphics and
Applications, 1(3), pgs. 2938.
DORSEY, J. O., F. X. SILLION y D. P. GREENBERG (1991). Design and Simulation of
Opera Lighting and Projection Effects, en los

artculos de SIGGRAPH91, Computer


Graphics, 25(4), pgs. 4150.
DREBIN, R. A., L. CARPENTER y P. HANRAHAN (1988). Volume Rendering, en los artculos de SIGGRAPH88, Computer Graphics,
22(4), pgs. 6574.
DURRETT, H. J., ed. (1987). Color and the
Computer, Academic Press, Boston.
DUVANENKO, V. (1990). Improved LineSegment Clipping, Dr. Dobbs Journal, julio de
1990.
DYER, S. (1990). A Dataflow Toolkit for
Visualization, IEEE Computer Graphics and
Applications, 10(4), pgs. 6069.
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. 66104.
ELBER, G. y E.COHEN(1990). Hidden-Curve
Removal for Free-Form Surfaces, en los artculos de SIGGRAPH90, Computer Graphics,
24(4), pgs. 95104.
ENDERLE, G., K. KANSY y G. PFAFF (1984).
Computer Graphics Programming: GKSThe
Graphics Standard, Springer-Verlag, Berln.
FARIN, G. (1988). Curves and Surfaces for
Computer-Aided Geometric Design, Academic
Press, Boston, MA.
FARIN, G. y D.HANSFORD(1998). 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 Feynman Lectures on
Physics, Addison-Wesley, Reading, MA.
FISHKIN, K. P. y B. A. BARSKY (1984). A
Family of New Algorithms for Soft Filling, en
los artculos de SIGGRAPH84, Computer
Graphics, 18(3), pgs. 235244.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 853

Bibliografa

FIUME, E. L. (1989). The Mathematical Structure


of Raster Graphics, Academic Press, Boston.
FOLEY, J. D., A. VANDAM,S. K. FEINER y J.
F.HUGHES (1990). Computer Graphics:
Principles and Practice, Second Edition,
Addison-Wesley, Reading, MA.
FOURNIER, A., D. FUSSEL y L. CARPENTER
(1982). Computer Rendering of Stochastic
Models, Communications of the ACM, 25(6),
pgs. 371384.
FOURNIER, A. y W. T. REEVES (1986). A
Simple Model of Ocean Waves, en los artculos de SIGGRAPH86, Computer Graphics,
20(4), pgs. 7584.
FOWLER, D. R., H. MEINHARDT y P. PRUSINKIEWICZ (1992). Modeling Seashells, en los
artculos de SIGGRAPH92, Computer
Graphics, 26(2), pgs. 379387.
FRANKLIN, W. R. y M. S. KANKANHALLI
(1990). Parallel Object-Space Hidden Surface
Removal, en los artculos de SIGGRAPH90,
Computer Graphics, 24(4), pgs. 8794.
FREEMAN, H. ed. (1980). Tutorial and Selected
Readings in Interactive Computer Graphics,
IEEE Computer Society Press, Silver Springs,
MD.
FRENKEL, K. A. (1989). Volume Rendering,
Communications of the ACM, 32(4), pgs.
426435.
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. 5260.
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. 274282.
FUJIMOTO, A. y K. IWATA (1983). Jag-Free
Images on Raster Displays, IEEE Computer
Graphics and Applications, 3(9), pgs. 2634.
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 SIGGRAPH93, Computer Graphics, pgs.
247254.

853

GARDNER, T. N. y H. R. NELSON (1983).


Interactive Graphics Developments in Energy
Exploration, IEEE Computer Graphics and
Applications, 3(2), pgs. 3334.
GARDNER, G. Y. (1985). Visual Simulation of
Clouds, en los artculos de SIGGRAPH85,
Computer Graphics, 19(3), pgs. 297304.
GASCUEL, M.-P. (1993). An Implicit Formulation for Precise Contact Modeling between
Flexible Solids, en los artculos de SIGGRAPH93, Computer Graphics, pgs.
313320.
GASKINS, T. (1992). PHIGS Programming Manual, OReilly & 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 SIGGRAPH89,
Computer Graphics, 23(3), pgs. 355368.
GIRARD, M. (1987). Interactive Design of 3D
Computer-Animated Legged Animal Motion,
IEEE Computer Graphics and Applications,
7(6), pgs. 3951.
GLASSNER, A. S. (1984). Space Subdivision for
Fast Ray Tracing, IEEE Computer Graphics
and Applications, 4(10), pgs. 1522.
GLASSNER, A. S. (1986). Adaptive Precision in
Texture Mapping, en los artculos de SIGGRAPH86, Computer Graphics, 20(4), pgs.
297306.
GLASSNER, A. S. (1988). Spacetime Ray Tracing
for Animation, IEEE Computer Graphics and
Applications, 8(2), pgs. 6070.
GLASSNER, A. S., ed. (1989a). An Introduction to
Ray Tracing, Academic Press, San Diego, CA.
GLASSNER, A. S. (1989b). 3D Computer
Graphics: A Users 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). Geometric Substitution: A Tutorial, IEEE Computer Graphics and
Applications, 12(1), pgs. 2236.
GLASSNER, A. S. (1995). Principles of Digital
Image Synthesis, Vols. 12, Morgan Kaufmann,
San Francisco, CA.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

854

09/10/2005

22:12

Pgina 854

Bibliografa

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.
GLEICHER, M. y A. WITKIN (1992). Throughthe-Lens Camera Control, en los artculos de
SIGGRAPH92, Computer Graphics, 26(2),
pgs. 331340.
GOLDSMITH, J. y J. SALMON (1987).
Automatic Creation of Object Hierarchies for
Ray Tracing, IEEE Computer Graphics and
Applications, 7(5), pgs. 1420.
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. WINTZ (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 SIGGRAPH84, Computer
Graphics, 18(3), pgs. 213222.
GORDON, D. y S. CHEN (1991). Front-to-Back
Display of BSP Trees, IEEE Computer
Graphics and Applications, 11(5), pgs. 7985.
GORTLER, S. J., P. SCHRDER, M. F. COHEN y
P. HANRAHAN (1993). Wavelet Radiosity,
en los artculos de SIGGRAPH93, Computer
Graphics, pgs. 221230.
GOURAUD, H. (1971). Continuous Shading of
Curved Surfaces, IEEE Transactions on
Computers, C-20(6), pgs. 623628.
GREENE, N., M. KASS y G. MILLER (1993).
Hierarchical Z-Buffer Visibility, en los artculos de SIGGRAPH93, Computer Graphics,
pgs. 231238.
GROTCH, S. L. (1983). Three-Dimensional and
Stereoscopic Graphics for Scientific Data
Display and Analysis, IEEE Computer
Graphics and Applications, 3(8), pgs. 3143.
HAEBERLI, P. y K. AKELEY (1990). The
Accumulation Buffer: Hardware Support for
High-Quality Rendering, en los artculos de

SIGGRAPH90, Computer Graphics, 24(4),


pgs. 309318.
HALL, R. A. y D. P. GREENBERG (1983). A
Testbed for Realistic Image Synthesis, IEEE
Computer Graphics and Applications, 3(8),
pgs. 1020.
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 SIGGRAPH90, Computer Graphics, 24(4), pgs.
289298.
HARDY, V. J. (2000). Java 2D API Graphics, Sun
Microsystems Press, Palo Alto, CA.
HART, J. C., D. J. SANDIN y L. H. KAUFFMAN
(1989). Ray Tracing Deterministic 3D
Fractals, en los artculos de SIGGRAPH89,
Computer Graphics, 23(3), pgs. 289296.
HART, J. C. y T. A. DEFANTI (1991). Efficient
Antialiased Rendering of 3-D Linear Fractals,
en los artculos de SIGGRAPH91, Computer
Graphics, 25(4), pgs. 91100.
HAWRYLYSHYN, P. A., R. R. TASKER y L. W.
ORGAN (1977). CASS: Computer-Assisted
Stereotaxic Surgery, en los artculos de SIGGRAPH77, Computer Graphics, 11(2), pgs.
1317.
HE, X. D., P. O. HEYNEN, 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 SIGGRAPH92, Computer Graphics, 26(2), pgs.
253254.
HEARN, D. y P. BAKER (1991). Scientific
Visualization: AnIntroduction, Eurographics
91Technical Report Series, Tutorial Lecture 6,
Viena, Austria.
HECKBERT, P. S. (1982). Color Image
Quantization for Frame Buffer Display, en los
artculos de SIGGRAPH82, Computer
Graphics, 16(3), pgs. 297307.
HECKBERT, P. S. y P. HANRAHAN (1984).
Beam Tracing Polygonal Objects, en los

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 855

Bibliografa

artculos de SIGGRAPH84, Computer


Graphics, 18(3), pgs. 119127.
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.
HOPGOOD, F. R. A., D. A. DUCE, J. R. GALLOP
y D. C. SUTCLIFFE (1983). Introduction to the
Graphical Kernel System (GKS), Academic
Press, Londres.
HOPGOOD, 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. III, Sun Microsystems Press, Palo
Alto, CA.
HOWARD, T. L. J., W. T. HEWITT, R. J. 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.
10981101.
HUGHES, J. F. (1992). Scheduled Fourier Volume
Morphing, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 4346.
HUITRIC, H. y M. NAHAS (1985). B-Spline
Surfaces: A Tool for Computer Painting, IEEE
Computer Graphics and Applications, 5(3),
pgs. 3947.
IMMEL, D. S., M. F. COHEN y D. P. GREENBERG (1986). A Radiosity Method for NonDiffuse Environments, en los artculos de SIGGRAPH86, Computer Graphics, 20(4), pgs.
133142.
ISAACS, P. M. y M. F. COHEN (1987).
Controlling Dynamic Simulation with
Kinematic Constraints, Behavior Functions y
Inverse Dynamics, en los artculos de SIGGRAPH87, Computer Graphics, 21(4), pgs.
215224.
JARVIS, 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, 5(1), pgs. 1340.

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 of SPIE, 367, agosto de
1982, pgs. 145148.
KAJIYA, J. T. (1983). New Techniques for Ray
Tracing Procedurally Defined Objects, ACM
Transactions on Graphics, 2(3), pgs. 161181.
KAJIYA, J. T. (1986). The Rendering Equation,
en los artculos de SIGGRAPH86, Computer
Graphics, 20(4), pgs. 143150.
KAJIYA, J. T. y T. L. KAY (1989). Rendering Fur
with Three-Dimensional Textures, en los artculos de SIGGRAPH89, Computer Graphics,
23(3), pgs. 271280.
KAPPEL, M. R. (1985). An Ellipse-Drawing
Algorithm for Faster Displays, in Fundamental
Algorithms for Computer Graphics, SpringerVerlag, Berln, pgs. 257280.
KAY, T. L. y J. T. KAJIYA (1986). Ray Tracing
Complex Scenes, en los artculos de SIGGRAPH86, Computer Graphics, 20(4), pgs.
269278.
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 SIGGRAPH88, Computer Graphics, 22(4), pgs.
263268.
KENT, J. R., W. E. CARLSON y R. E. PARENT
(1992). Shape Transformation for Polyhedral
Objects, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 4754.
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 SIGGRAPH91, Computer Graphics,
25(4), pgs. 153156.
KIRK, D., ed. (1992). Graphics Gems III,
Academic Press, San Diego, CA.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

856

09/10/2005

22:12

Pgina 856

Bibliografa

KNUDSEN, J. (1999). Java 2D Programming,


OReilly & Associates, Sebastopol, CA.
KNUTH,D. E. (1987). Digital Halftones by Dot
Diffusion, ACM Transactions on Graphics,
6(4), pgs. 245273.
KOCHANEK, D. H. U. y R. H. BARTELS (1984).
Interpolating Splines with Local Tension,
Continuity y Bias Control, en los artculos de
SIGGRAPH84, Computer Graphics, 18(3),
pgs. 3341.
KOH, E.-K. y D. HEARN (1992). Fast Generation
and Surface Structuring Methods for Terrain and
Other Natural Phenomena, en los artculos de
Eurographics92, Computer Graphics Forum,
11(3), pgs. C169180.
KORIEN, J. U. y N. I. BADLER (1982).
Techniques for Generating the Goal-Directed
Motion of Articulated Structures, IEEE
Computer Graphics and Applications, 2(9),
pgs. 7181.
KORIEN, J. U. y N. I. BADLER (1983).
Temporal antialiasing in Computer-Generated
Animation, en los artculos de SIGGRAPH83,
Computer Graphics, 17(3), pgs. 377388.
KREYSZIG, E. (1998). Advanced Engineering
Mathematics, Eighth Edition, John Wiley &
Sons, Nueva York.
LASSETER, J. (1987). Principles of Traditional
Animation Applied to 3D Computer
Animation, en los artculos de SIGGRAPH87,
Computer Graphics, 21(4), pgs. 3544.
LATHROP, 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 & Computer Graphics, Charles
River Media, Hingham, MA.
LEVOY, M. (1990). A Hybrid Ray Tracer for
Rendering Polygon and Volume Data, IEEE
Computer Graphics and Applications, 10(2),
pgs. 3340.
LEWIS, J.-P. (1989). Algorithms for Solid Noise
Synthesis, en los artculos de SIGGRAPH89,
Computer Graphics, 23(3), pgs. 263270.

LIANG, Y.-D. y B. A. BARSKY (1983). An


Analysis and Algorithm for Polygon Clipping.
Communications of the ACM, 26(11), pgs.
868877.
LIANG, Y.-D. y B. A. BARSKY (1984). A New
Concept and Method for Line Clipping, ACM
Transactions on Graphics, 3(1), pgs. 122.
LINDLEY,C.A. (1992). Practical Ray Tracing in C,
JohnWiley & Sons, Nueva York.
LISCHINSKI, D., F. TAMPIERI y D. P. GREENBERG (1993). Combining Hierarchical
Radiosity and Discontinuity Meshing, en los
artculos de SIGGRAPH93, Computer
Graphics, pgs. 199208.
LITWINOWICZ, P. C. (1991). Inkwell:A2-D
Animation System, en los artculos de SIGGRAPH91, Computer Graphics, 25(4), pgs.
113122.
LODDING, K. N. (1983). Iconic Interfacing,
IEEE Computer Graphics and Applications,
3(2), pgs. 1120.
LOKE, T.-S., D. TAN, H.-S. SEAH y M.-H. ER
(1992). Rendering Fireworks Displays, IEEE
Computer Graphics and Applications, 12(3),
pgs. 3343.
LOOMIS, J., H. POIZNER, U. BELLUGI, A.
BLAKEMORE y J. HOLLERBACH (1983).
Computer-Graphics Modeling of American
Sign Language, en los artculos de SIGGRAPH83, Computer Graphics, 17(3), pgs.
105114.
LOPES, A. y K.BRODLIE(2003). Improving the
Robustness and Accuracy of the MarchingCubes Algorithm for Isosurfaces, IEEE
Transactions onVisualization and Computer
Graphics, 9(1), pgs. 1629.
LORENSON, W. E. y H. CLINE (1987).
Marching Cubes: A High-Resolution 3D
Surface Construction Algorithm, en los artculos de SIGGRAPH87, Computer Graphics,
21(4), pgs. 163169.
MACKINLAY, J. D., S. K. CARD y G. G.
ROBERTSON (1990). Rapid Controlled
Movement Through a Virtual 3D Workspace,
en los artculos de SIGGRAPH90, Computer
Graphics, pgs. 171176.
MACKINLAY, J. D., G. G. ROBERTSON y S. K.
CARD (1991). The Perspective Wall: Detail

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 857

Bibliografa

and Context Smoothly Integrated, CHI 91,


pgs. 173179.
MAESTRI, G. (1999). [digital] Character
Animation 2, Volume 1Essential Techniques,
New Riders Publishing, Indianapolis, IN.
MAESTRI, G. (2002). [digital] Character
Animation 2, Volume 2Advanced Techniques,
New Riders Publishing, Indianapolis, IN.
MAGNENAT-THALMANN, N. y D. THALMANN (1985). Computer Animation: Theory
and Practice, Springer-Verlag, Tokyo.
MAGNENAT-THALMANN, N. y D. THALMANN (1987). Image Synthesis, SpringerVerlag, Tokyo.
MAGNENAT-THALMANN, N. y D. THALMANN (1991). Complex Models for
Animating Synthetic Actors, IEEE Computer
Graphics and Applications, 11(5), pgs. 3245.
MANDELBROT, B. B. (1977). Fractals: 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 SIGGRAPH85, Computer Graphics,
19(3), pgs. 8594.
MAX, N. L. (1986). Atmospheric Illumination and
Shadows, en los artculos de SIGGRAPH86,
Computer Graphics, 20(4), pgs. 117124.
MAX, N. L. (1990). Cone-Spheres, en los artculos de SIGGRAPH90, Computer Graphics,
24(4), pgs. 5962.
MCCARTHY, M. y A. DESCARTES (1998).
Reality Architecture: Building 3DWorlds with
Java andVRML, Prentice-Hall Europe, Reino
Unido.
MEYER, G. W. y D. P. GREENBERG (1988).
Color-Defective Vision and Computer
Graphics Displays, IEEE Computer Graphics
and Applications, 8(5), pgs. 2840.
MEYERS, D., S. SKINNER y K.SLOAN(1992).
Surfaces from Contours, ACM Transactions
on Graphics, 11(3), pgs. 228258.

857

MIANO, 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 SIGGRAPH88, Computer Graphics, 22(4), pgs.
169178.
MILLER, J. V., D. E. BREEN, W. E. LORENSON,
R. M. OBARA y M. J. WOZNY (1991).
Geometrically Deformed Models: A Method
for Extracting Closed Geometric Models
from Volume Data, en los artculos de
SIGGRAPH91, Computer Graphics, 25(4),
pgs. 217226.
MITCHELL, D. P. (1991). Spectrally Optimal
Sampling for Distribution Ray Tracing, en
los artculos de SIGGRAPH91, Computer
Graphics, 25(4), pgs. 157165.
MITCHELL, D. P. y P. HANRAHAN (1992).
Illumination from Curved Reflectors, en
los artculos de SIGGRAPH92, Computer
Graphics, 26(2), pgs. 283291.
MITROO, J. B., N. HERMAN y N. I. BADLER
(1979). Movies from Music:Visualizing
Music Compositions, en los artculos de
SIGGRAPH79, Computer Graphics, 13(2),
pgs. 218225.
MIYATA, K. (1990). A Method of Generating
Stone Wall Patterns, en los artculos de SIGGRAPH90, Computer Graphics, 24(4), pgs.
387394.
MOLNAR, S., J. EYLES y J. POULTON (1992).
PixelFlow: High-Speed Rendering Using
Image Composition, en los artculos de
SIGGRAPH92, Computer Graphics, 26(2),
pgs. 231240.
MOON, F. C. (1992). Chaotic and Fractal
Dynamics, John Wiley & Sons, Nueva York.
MOORE, M. y J. WILHELMS (1988). Collision
Detection and Response for Computer
Animation, en los artculos de SIGGRAPH88,
Computer Graphics, 22(4), pgs. 289298.
MORTENSON, M. E. (1985). Geometric Modeling,
John Wiley & Sons, Nueva York.
MURAKI, S. (1991). Volumetric Shape
Description of Range Data Using the Blobby
Model, en los artculos de SIGGRAPH91,
Computer Graphics, 25(4), pgs. 227235.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

858

09/10/2005

22:12

Pgina 858

Bibliografa

MUSGRAVE, F. K., C. E. KOLB y R. S. MACE


(1989). The Synthesis and Rendering of
Eroded Fractal Terrains, en los artculos de
SIGGRAPH89, Computer Graphics, 23(3),
pgs. 4150.
MYERS, B. A. y W. BUXTON (1986). Creating
High-Interactive and Graphical User Interfaces
by Demonstration, en los artculos de SIGGRAPH86, Computer Graphics, 20(4), pgs.
249258.
NAYLOR, B., J. AMANATIDES y W. THIBAULT
(1990). Merging BSP Trees Yields Polyhedral
Set Operations, en los artculos de
SIGGRAPH90, Computer Graphics, 24(4),
pgs. 115124.
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 SIGGRAPH87, Computer
Graphics, 21(4), pgs. 253262.
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. 6070.
NISHIMURA, H. (1985). Object Modeling by
Distribution Function and a Method of Image
Generation, Journal Electronics Comm.
Conf. 85, J68(4), pgs. 718725.
NISHITA, T. y E. NAKAMAE (1986).
Continuous-Tone Representation of ThreeDimensional Objects Illuminated by Sky Light,
en los artculos de SIGGRAPH86, Computer
Graphics, 20(4), pgs. 125132.
NISHITA, T., T. SIRAI, K. TADAMURA y E.
NAKAMAE (1993). Display of the Earth
Taking into Account Atmospheric Scattering,
en los artculos de SIGGRAPH93, Computer
Graphics, pgs. 175182.
NORTON, A. (1982). Generation and Display of
Geometric Fractals in 3-D, en los artculos de
SIGGRAPH82, Computer Graphics, 16(3),
pgs. 6167.
NSF INVITATIONAL WORKSHOP (1992).
Research Directions in Virtual Environments,

en los artculos de SIGGRAPH92, Computer


Graphics, 26(3), pgs. 153177.
OKABE, H., H. IMAOKA, T. TOMIHA y H.
NIWAYA (1992). Three-Dimensional Apparel
CAD System, en los artculos de SIGGRAPH92, Computer Graphics, 26(2), pgs.
105110.
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 SIGGRAPH86, Computer
Graphics, 20(4), pgs. 5564.
OROURKE, M. (1998). Principles of ThreeDimensional Computer Animation, Revised
Edition, W. W. Norton, Nueva York.
OSF/MOTIF (1989). OSF/Motif Style Guide, Open
Software Foundation, Prentice-Hall, Englewood
Cliffs, NJ.
PAETH, A. W., ed. (1995). Graphics Gems V,
Morgan Kaufmann, San Diego, CA.
PAINTER, J. y K. SLOAN (1989). Antialiased
Ray Tracing by Adaptive Progressive
Refinement, en los artculos de
SIGGRAPH89, Computer Graphics, 23(3),
pgs. 281288.
PALMER, I. (2001). Essential Java 3D Fast,
Springer-Verlag, Londres.
PANG, A. T. (1990). Line-Drawing Algorithms for
Parallel Machines, IEEE Computer Graphics
and Applications, 10(5), pgs. 5459.
PAO, Y. C. (1984). 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, MD.
PAVLIDIS, T. (1983). Curve Fitting with Conic
Splines, ACM Transactions on Graphics, 2(1),
pgs. 131.
PEACHEY, D. R. (1986). Modeling Waves and
Surf, en los artculos de SIGGRAPH86,
Computer Graphics, 20(4), pgs. 6574.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 859

Bibliografa

PEITGEN, H.-O. 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 SIGGRAPH89,
Computer Graphics, 23(3), pgs. 215222.
PERLIN, K. y E. M. HOFFERT (1989).
Hypertexture, en los artculos de SIGGRAPH89, Computer Graphics, 23(3), pgs.
253262.
PHONG, B. T. (1975). Illumination for ComputerGenerated Images, Communications of the
ACM, 18(6), pgs. 311317.
PIEGL, L. y W. TILLER (1997). The NURBS Book,
Springer-Verlag, Nueva York.
PINEDA, J. (1988). A Parallel Algorithm for
Polygon Rasterization, en los artculos de SIGGRAPH88, Computer Graphics, 22(4), pgs.
1720.
PITTEWAY, M. L. V. y D. J. WATKINSON (1980).
Bresenhams Algorithm with Gray Scale,
Communications of the ACM, 23(11), pgs.
625626.
PLATT, J. C. y A. H. BARR (1988). Constraint
Methods for Flexible Models, en los artculos
de SIGGRAPH88, Computer Graphics, 22(4),
pgs. 279288.
POCOCK, L. y J. ROSEBUSH (2002). The
Computer Animators Technical Handbook,
Morgan Kaufmann, San Francisco, CA.
POTMESIL, M. y I. CHAKRAVARTY (1982).
Synthetic Image Generation with a Lens and
Aperture Camera Model, ACM Transactions
on Graphics, 1(2), pgs. 85108.
POTMESIL, M. y I. CHAKRAVARTY (1983).
Modeling Motion Blur in Computer-Generated
Images, en los artculos de SIGGRAPH83,
Computer Graphics, 17(3), pgs. 389399.
POTMESIL, M. y E. M. HOFFERT (1987). FRAMES: Software Tools for Modeling, Rendering
and Animation of 3D Scenes, en los artculos
de SIGGRAPH87, Computer Graphics, 21(4),
pgs. 8593.
POTMESIL, M. y E. M. HOFFERT (1989). The
Pixel Machine: A Parallel Image Computer, en

859

los artculos de SIGGRAPH89, Computer


Graphics, 23(3), pgs. 6978.
PRATT,W. K. (1978). Digital Image Processing,
JohnWiley & Sons, Nueva York.
PREPARATA, F. P. y M. I.SHAMOS(1985).
Computational Geometry, Springer-Verlag,
Nueva York.
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. 294313.
PRUSINKIEWICZ, P.,M. S.HAMMEL y E.
MJOLSNESS (1993). Animation of Plant
Development, en los artculos de SIGGRAPH93, Computer Graphics, pgs.
351360.
PRUYN, P. W. y D. P. GREENBERG (1993).
Exploring 3D Computer Graphics in Cockpit
Avionics, IEEE Computer Graphics and
Applications, 13(3), pgs. 2835.
QUEK, L.-H. y D. HEARN (1988). Efficient
Space-Subdivision Methods in Ray-Tracing
Algorithms, University of Illinois, Department
of Computer Science Report UIUCDCS-R-881468.
RAIBERT, M. H. y J. K. HODGINS (1991).
Animation of Dynamic Legged Locomotion,
en los artculos de SIGGRAPH91, Computer
Graphics, 25(4), pgs. 349358.
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. 91108.
REEVES,W. T. (1983b). Particle SystemsA
Technique for Modeling a Class of Fuzzy
Objects, en los artculos de SIGGRAPH83,
Computer Graphics, 17(3), pgs. 359376.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

860

09/10/2005

22:12

Pgina 860

Bibliografa

REEVES, W. T. y R. BLAU (1985). Approximate


and Probabilistic Algorithms for Shading and
Rendering Structured Particle Systems, en los
artculos de SIGGRAPH85, Computer
Graphics, 19(3), pgs. 313321.
REEVES, W. T., D. H. SALESIN y R. L. COOK
(1987). Rendering Antialiased Shadows with
Depth Maps, en los artculos de SIGGRAPH
87, Computer Graphics, 21(4), pgs. 283291.
REQUICHA, A. A. G. y J. R. ROSSIGNAC (1992).
Solid Modeling and Beyond, IEEE Computer
Graphics and Applications, 12(5), pgs. 3144.
REYNOLDS, C. W. (1982). Computer Animation
with Scripts and Actors, en los artculos de
SIGGRAPH82, Computer Graphics, 16(3),
pgs. 289296.
REYNOLDS, C. W. (1987). Flocks, Herds y
Schools: A Distributed Behavioral Model, en
los artculos de SIGGRAPH87, Computer
Graphics, 21(4), pgs. 2534.
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. 3137.
RIESENFELD, R. F. (1981). Homogeneous
Coordinates and Projective Planes in Computer
Graphics, IEEE Computer Graphics and
Applications, 1(1), pgs. 5055.
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. 5064.
ROBERTSON, G. G., J. D. MACKINLAY and S.
K. CARD (1991). Cone Trees: Animated 3D
Visualizations of Hierarchical Information,
CHI 91, pgs. 189194.
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 Graphics,
McGraw-Hill, Nueva York.
ROGERS, D. F. (1998). Procedural Elements for
Computer Graphics, McGraw-Hill, Nueva York.
ROSENTHAL, D. S. H., J. C. MICHENER, G.
PFAFF, R. KESSEMER y M. SABIN (1982).

The Detailed Semantics of Graphics Input


Devices, en los artculos de SIGGRAPH82,
Computer Graphics, 16(3), pgs. 3338.
RUBINE, D. (1991). Specifying Gestures by
Example, en los artculos de SIGGRAPH91,
Computer Graphics, 25(4), pgs. 329337.
RUSHMEIER, H. y K. TORRANCE (1987). The
Zonal Method for Calculating Light Intensities
in the Presence of a Participating Medium, en
los artculos de SIGGRAPH87, Computer
Graphics, 21(4), pgs. 293302.
RUSHMEIER, H. E. y K. E. TORRANCE (1990).
Extending the Radiosity Method to Include
Specularly Reflecting and Translucent
Materials, ACM Transactions on Graphics,
9(1), pgs. 127.
SABELLA, P. (1988). A Rendering Algorithm for
Visualizing 3D Scalar Fields, en los artculos
de SIGGRAPH88, Computer Graphics, 22(4),
pgs. 5158.
SABIN, M. A. (1985). Contouring: The State of
the Art, in Fundamental Algorithms for
Computer Graphics, R. A. Earnshaw, ed.,
Springer-Verlag, Berln, pgs. 411482.
SAKAGUCHI, H., S. L. KENT y T. COX (2001).
The Making of Final Fantasy, The SpiritsWithin,
Brady Games, Indianapolis, IN.
SALESIN, D. y R. BARZEL (1993). Adjustable
Tools: An Object-Oriented Interaction
Metaphor, ACM Transactions on Graphics,
12(1), pgs. 103107.
SAMET, H. y M. TAMMINEN (1985). Bintrees,
CSG Trees and Time, en los artculos de SIGGRAPH85, Computer Graphics, 19(3), pgs.
121130.
SAMET, H. y R. E. WEBBER (1985). Sorting a
Collection of Polygons using Quadtrees, ACM
Transactions on Graphics, 4(3), pgs. 182222.
SAMET, H. y R. E. WEBBER (1988a).
Hierarchical Data Structures and Algorithms
for Computer Graphics: Part 1, IEEE
Computer Graphics and Applications, 8(4),
pgs. 5975.
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. 4868.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 861

Bibliografa

SCHACHTER, B. J., ed. (1983). Computer Image


Generation, John Wiley & Sons, Nueva York.
SCHEIFLER, R. W. y J. GETTYS (1986). The X
Window System, ACM Transactions on
Graphics, 5(2), pgs. 79109.
SCHOENEMAN,C., J.DORSEY, B. SMITS,
J.ARVO y D. GREENBERG (1993). Painting
with Light, en los artculos de SIGGRAPH93,
Computer Graphics, pgs. 143146.
SCHRODER, P. y P. HANRAHAN (1993). On the
Form Factor Between Two Polygons, en los
artculos de SIGGRAPH93, Computer
Graphics, pgs. 163164.
SCHWARTZ, M. W., W. B. COWAN y J. C.
BEATTY (1987). An Experimental Comparison of RGB, YIQ, LAB, HSV y Opponent
Color Models, ACM Transactions on
Graphics, 6(2), pgs. 123158.
SEDERBERG, T.W. y E.GREENWOOD (1992).
A physically Based Approached to 2-D Shape
Bending, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 2534.
SEDERBERG, T.W., P. GAO, G.WANG y H.MU
(1993). 2D Shape Blending: An Intrinsic
Solution to the Vertex Path Problem, en los
artculos de SIGGRAPH93, Computer
Graphics, pgs. 1518.
SEGAL, M. (1990). Using Tolerances to
Guarantee Valid Polyhedral Modeling Results,
en los artculos de SIGGRAPH90, Computer
Graphics, 24(4), pgs. 105114.
SEGAL, M., C. KOROBKIN, R. VAN WIDENFELT, J. FORAN y P. HAEBERLI (1992).
Fast Shadows and Lighting Effects Using
Texture Mapping, en los artculos de SIGGRAPH92, Computer Graphics, 26(2), pgs.
249252.
SELMAN, D. (2002). Java 3D Programming,
Manning Publications, Greenwich, CT.
SEQUIN, C. H. y E. K. SMYRL (1989).
Parameterized Ray-Tracing, en los artculos
de SIGGRAPH89, Computer Graphics, 23(3),
pgs. 307314.
SHERR, S. (1993). Electronic Displays, John
Wiley & Sons, Nueva York.
SHILLING, A. y W. STRASSER (1993). EXACT:
Algorithm and Hardware Architecture for an

861

Improved A-Buffer, en los artculos de SIGGRAPH93, Computer Graphics, pgs. 8592.


SHIRLEY, P. (1990). A Ray Tracing Method for
Illumination Calculation in Diffuse-Specular
Scenes, Graphics Interface 90, pgs. 205212.
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
SIGGRAPH85, Computer Graphics, 19(3),
pgs. 245254.
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
SIGGRAPH86, Computer Graphics, 20(4),
pgs. 259268.
SILLION, F. X. y C. PUECH (1989). A General
Two-Pass Method Integrating Specular and
Diffuse Reflection, en los artculos de
SIGGRAPH89, Computer Graphics, 23(3),
pgs. 335344.
SILLION, F. X., J. R. ARVO, S. H. WESTIN y D.
P. GREENBERG (1991). A Global Illumination Solution for General Reflectance Distributions, en los artculos de SIGGRAPH91,
Computer Graphics, 25(4), pgs. 187196.
SILLION, F. X. y C. PUECH (1994). Radiosity
and Global Illumination, Morgan Kaufmann,
San Francisco, CA. SIMS, K. (1990). Particle
Animation and Rendering Using Data Parallel
Computation, en los artculos de SIGGRAPH90, Computer Graphics, 24(4), pgs.
405413.
SIMS, K. (1991). Artificial Evolution for
Computer Graphics, en los artculos de
SIGGRAPH91, Computer Graphics, 25(4),
pgs. 319328.
SMITH, A. R. (1978). Color Gamut Transform
Pairs, en los artculos de SIGGRAPH78,
Computer Graphics, 12(3), pgs. 1219.
SMITH, A. R. (1979). Tint Fill, en los artculos
de SIGGRAPH79, Computer Graphics, 13(2),
pgs. 276283.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

862

09/10/2005

22:12

Pgina 862

Bibliografa

SMITH, A. R. (1984). Plants, Fractals y Formal


Languages, en los artculos de SIGGRAPH84,
Computer Graphics, 18(3), pgs. 110.
SMITH, A. R. (1987). Planar 2-Pass Texture
Mapping and Warping, en los artculos de
SIGGRAPH87, Computer Graphics, 21(4),
pgs. 263272.
SMITS, B. E., J. R. ARVO y D. H. SALESIN
(1992). An Importance-Driven Radiosity
Algorithm, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 273282.
SNYDER, J. M. y J. T. KAJIYA (1992).
Generative Modeling: A Symbolic System
for Geometric Modeling, en los artculos de
SIGGRAPH92, Computer Graphics, 26(2),
pgs. 369378.
SNYDER, J. M., A. R. WOODBURY, K. FLEISCHER, B. CURRIN y A. H. BARR (1993).
Interval Methods for Multi-Point Collisions
between Time-Dependent Curved Surfaces, en
los artculos de SIGGRAPH93, Computer
Graphics, pgs. 321334.
SOWIZRAL, H., K. RUSHFORTH 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. FIUME (1993).
Turbulent Wind Fields for Gaseous Phenomena, en los artculos de SIGGRAPH93,
Computer Graphics, pgs. 369376.
STETTNER, A. y D. P. GREENBERG (1989).
Computer Graphics Visualization for Acoustic
Simulation, en los artculos de SIGGRAPH89,
Computer Graphics, 23(3), pgs. 195206.
STRASSMANN, S. (1986). Hairy Brushes, en
los artculos de SIGGRAPH86, Computer
Graphics, 20(4), pgs. 225232.
STRAUSS, P. S. y R. CAREY (1992). An ObjectOriented 3D Graphics Toolkit, en los artculos
de SIGGRAPH92, Computer Graphics, 26(2),
pgs. 341349.
STROTHOTTE, T. y S. SCHLECHTWEG (2002).
Non-Photorealistic Computer Graphics:
Modeling, Rendering, and Animation, Morgan
Kaufmann, San Francisco, CA.
SUNG, H. C. K., G. ROGERS y W. J. KUBITZ

(1990). A Critical Evaluation of PEX, IEEE


Computer Graphics and Applications, 10(6),
pgs. 6575.
SUTHERLAND, I. E. (1963). Sketchpad: A
Man-Machine Graphical Communication
System, AFIPS Spring Joint Computer
Conference, 23, pgs. 329346.
SUTHERLAND, I. E. y G. W. Hodgman (1974).
Reentrant Polygon Clipping, Communications
of the ACM, 17(1), pgs. 3242.
SUTHERLAND, I. E., R. F. SPROULL y R.
SCHUMACKER (1974). A Characterization
of Ten Hidden Surface Algorithms, ACM
Computing Surveys, 6(1), pgs. 155.
SWEZEY, R. W. y E. G. DAVIS (1983). A Case
Study of Human Factors Guidelines in
Computer Graphics, IEEE Computer Graphics
and Applications, 3(8), pgs. 2130.
TAKALA, T. y J. HAHN (1992). Sound
Rendering, en los artculos de SIGGRAPH92,
Computer Graphics, 26(2), pgs. 211220.
TANNAS, JR., L. E., ed. (1985). Flat-Panel
Displays and CRTs, Van Nostrand Reinhold,
Nueva York.
TAUBMAN, D. y M. MARCELLIN (2001). JPEG
2000: Image-Compression Fundamentals,
Standards, and Practice, Kluwer Academic
Publishers, Norwell, MA.
TELLER, S. y P. HANRAHAN (1993). Global
Visibility Algorithms for Illumination Computations, en los artculos de SIGGRAPH93,
Computer Graphics, pgs. 239246.
TERZOPOULOS, D., J. PLATT, A. H. BARR, et
al. (1987). Elastically Deformable Models, en
los artculos de SIGGRAPH87, Computer
Graphics, 21(4), pgs. 205214.
THALMANN,N.M.and D.THALMANN(1985).
Computer Animation: Theory and Practice,
Springer-Verlag, Tokyo.
THALMANN, D., ed. (1990). Scientific
Visualization and Graphics Simulation, John
Wiley & Sons, Chichester, Inglaterra.
THIBAULT, W. C. y B. F. NAYLOR (1987). Set
Operations on Polyhedra using Binary Space
Partitioning Trees, en los artculos de SIGGRAPH87, Computer Graphics, 21(4), pgs.
153162.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 863

Bibliografa

THOMAS, B. y W. LEFKON (1997). Disneys 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.
TORBERG, J. G. (1987). A Parallel Processor
Architecture for Graphics Arithmetic
Operations, en los artculos de SIGGRAPH87,
Computer Graphics, 21(4), pgs. 197204.
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. 11051114.
TRAVIS, D. (1991). Effective Color Displays,
Academic Press, Londres.
TUFTE, E. R. (1990). Envisioning Information,
Graphics Press, Cheshire, CN.
TUFTE, E. R. (1997). Visual Explanations: Images
and Quantities, Evidence and Narrative,
Graphics Press, Cheshire, CN.
TUFTE, E. R. (2001). The Visual Display of
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. 215234.
UPSON, C. y M. KEELER (1988). VBUFFER:
Visible Volume Rendering, en los artculos de
SIGGRAPH88, Computer Graphics, 22(4),
pgs. 5964.
UPSON, C., et al. (1989). The Application Visualization System: A Computational Environment
for Scientific Visualization, IEEE Computer
Graphics and Applications, 9(4), pgs. 3042.
UPSTILL, S. (1989). The RenderMan Companion,
Addison-Wesley, Reading, MA.
VAN WIJK, J. J. (1991). Spot Noise-Texture Synthesis for Data Visualization, en los artculos
de SIGGRAPH91, Computer Graphics, 25(4),
pgs. 309318.
VEENSTRA, J. y N. AHUJA (1988). Line Drawings of Octree-Represented Objects, ACM
Transactions on Graphics, 7(1), pgs. 6175.
VELHO, L. y J. D. M. GOMES (1991). Digital
Halftoning with Space-Filling Curves, en los
artculos de SIGGRAPH91, Computer
Graphics, 25(4), pgs. 8190.

863

VON HERZEN, B., A. H. BARR y H. R. ZATZ


(1990). Geometric Collisions for TimeDependent Parametric Surfaces, en los artculos de SIGGRAPH90, Computer Graphics,
24(4), pgs. 3948.
WALLACE, V. L. (1976). The Semantics of
Graphic Input Devices, en los artculos de
SIGGRAPH76, Computer Graphics, 10(1),
pgs. 6165.
WALLACE, J. R., K. A. ELMQUIST y E. A. HAINES (1989). A Ray-Tracing Algorithm for
Progressive Radiosity, en los artculos de SIGGRAPH89, Computer Graphics, 23(3), pgs.
315324.
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. 4458.
WARN, D. R. (1983). Lighting Controls for
Synthetic Images, en los artculos de
SIGGRAPH83, Computer Graphics, 17(3),
pgs. 1321.
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
SIGGRAPH90, Computer Graphics, 24(4),
pgs. 377386.
WATT, A. y M. WATT (1992). Advanced Animation
and Rendering Techniques, AddisonWesley,Wokingham, Inglaterra.
WEGHORST, H., G. HOOPER y D. P. GREENBERG (1984). Improved Computational
Methods for Ray Tracing, ACM Transactions
on Graphics, 3(1), pgs. 5269.
WEIL, J. (1986). The Synthesis of Cloth Objects,
en los artculos de SIGGRAPH86, Computer
Graphics, 20(4), pgs. 4954.
WEILER, K. y P. ATHERTON (1977). HiddenSurface Removal Using Polygon Area Sorting,
en los artculos de SIGGRAPH77, Computer
Graphics, 11(2), pgs. 214222.
WEILER, K. (1980). Polygon Comparison Using
a Graph Representation, en los artculos de

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

864

09/10/2005

22:12

Pgina 864

Bibliografa

SIGGRAPH80, Computer Graphics, 14(3),


pgs. 1018.
WEINBERG, R. (1978) Computer Graphics in
Support of Space-Shuttle Simulation, en los
artculos de SIGGRAPH78, Computer
Graphics, 12(3), pgs. 8286.
WELCH, T. (1984). A Technique for HighPerformance Data Compression, IEEE
Computer, 17(6), pgs. 819.
WERNECKE, J. (1994). The Inventor Mentor,
Addison-Wesley, Reading, MA.
WESTIN, S. H., J. R. ARVO y K. E. TORRANCE
(1992). Predicting Reflectance Functions from
Complex Surfaces, en los artculos de SIGGRAPH92, Computer Graphics, 26(2), pgs.
255264.
WESTOVER, L. (1990). Footprint Evaluation for
Volume Rendering, en los artculos de SIGGRAPH90, Computer Graphics, 24(4), pgs.
367376.
WHITTED, T. (1980). An Improved Illumination
Model for Shaded Display, Communications
of the ACM, 23(6), pgs. 343349.
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. 4358.
WHITTED, T. (1983). Antialiased Line Drawing
Using Brush Extrusion, en los artculos de
SIGGRAPH83, Computer Graphics, 17(3),
pgs. 151156.
WILHELMS, J. (1987). Toward Automatic
Motion Control, IEEE Computer Graphics and
Applications, 7(4), pgs. 1122.
WILHELMS, J. y A. VAN GELDER (1991). A
Coherent Projection Approach for Direct
Volume Rendering, en los artculos de SIGGRAPH91, Computer Graphics, 25(4), pgs.
275284.
WILHELMS, J. y A. VAN GELDER (1992).
Octrees for Faster Isosurface Generation,
ACM Transactions on Graphics, 11(3), pgs.
201227.
WILLIAMS, L. (1983). Pyramidal Parametrics,
en los artculos de SIGGRAPH83, Computer
Graphics, 17(3), pgs. 111.
WILLIAMS, L. (1990). Performance-Driven
Facial Animation, en los artculos de

SIGGRAPH90, Computer Graphics, 24(4),


pgs. 235242.
WITKIN, A. y W. WELCH (1990). Fast Animation and Control of Nonrigid Structures, en
los artculos de SIGGRAPH90, Computer
Graphics, 24(4), pgs. 243252.
WITKIN, A. y M. KASS (1991). ReactionDiffusion Textures, en los artculos de
SIGGRAPH91, Computer Graphics, 25(4),
pgs. 299308.
WOLFRAM, S. (1984) Computer Software in
Science and Mathematics, Scientific American,
251(3), 188203.
WOLFRAM, S. (1991). Mathematica, AddisonWesley, Reading, MA.
WOO, A., P. POULIN y A. FOURNIER (1990).
A Survey of Shadow Algorithms, IEEE
Computer Graphics and Applications, 10(6),
pgs. 1332.
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
Bresenhams Line and Circle Algorithms,
IEEE Computer Graphics and Applications,
10(5), pgs. 6067.
WU, X. (1991). An Efficient Antialiasing
Technique, en los artculos de SIGGRAPH91,
Computer Graphics, 25(4), pgs. 143152.
WYSZECKI, G. y W. S. STILES (1982). Color
Science, John Wiley & Sons, Nueva York.
WYVILL, G., B. WYVILL y C. MCPHEETERS
(1987). Solid Texturing of Soft Objects, IEEE
Computer Graphics and Applications, 7(12),
pgs. 2026.
YAEGER, L., C. UPSON y R. MYERS (1986).
Combining Physical and Visual Simulation:
Creation of the Planet Jupiter for the Film
2010 , en los artculos de SIGGRAPH86,
Computer Graphics, 20(4), pgs. 8594.
YAGEL, R., D. COHEN y A. KAUFMAN (1992).
Discrete Ray Tracing, IEEE Computer
Graphics and Applications, 12(5), pgs. 1928.
YAMAGUCHI, K., T. L. KUNII y F. FUJIMURA
(1984). Octree-Related Data Structures and
Algorithms, IEEE Computer Graphics and
Applications, 4(1), pgs. 5359.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 865

Bibliografa

YESSIOS, C. I. (1979). Computer Drafting of


Stones, Wood, Plant y Ground Materials, en
los artculos de SIGGRAPH79, Computer
Graphics, 13(2), pgs. 190198.
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 the Integration of
Interactive Animation Techniques, en los artculos de SIGGRAPH91, Computer Graphics,
25(4), pgs. 105112.
ZELTZER, D. (1982). Motor Control Techniques
for Figure Animation, IEEE Computer
Graphics and Applications, 2(9), pgs. 5360.

865

ZHANG,Y. y R. E.WEBBER(1993). Space


Diffusion:An Improved Parallel Halftoning
Technique Using Space-Filling Curves, en los
artculos de SIGGRAPH93, Computer
Graphics, pgs. 305312.
ZIV, J. y A. LEMPEL (1977). A Universal
Algorithm for Sequential Data Compression,
IEEE Transactions on Information Theory,
23(3), pgs. 337343.
ZIV, J. y A. LEMPEL (1978). Compression of
Individual Sequences via Variable-Rate
Coding, IEEE Transactions on Information
Theory, 24(5), pgs. 530536.

ZZ_01_BIBLIOGRAFIA_HEARN_1P.qxd

09/10/2005

22:12

Pgina 866

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 867

ndice
4 conexiones, mtodo de relleno, 208
8 conexiones, mtodo de relleno, 208

A
Absolutas, coordenadas, 87
Absoluto, valor (nmero imaginario), 826
Aceleracin gravitatoria, 1212
Acelerador:
nodo (TRC), 36
tensin (TRC), 36
Adobe Photoshop, formato, 804
AGL (Apple GL), 75
Almbrico:
algoritmos de visibilidad, 5668
imgenes, 1278
mtodos de variacin de la intensidad con la profundidad,
3567
Algoritmo basado en diccionario, 795
Algoritmo de Bresenham:
crculo, 1056
lnea, 96100
Algoritmo de bfer de profundidad
(deteccin de visibilidad), 54952
Algoritmo de difusin
de errores, 6123
de puntos, 613
Algoritmo de inundacin-relleno, 211
Algoritmo de los cubos en marcha
(vase Isosuperficies)
Algoritmo de ordenacin de profundidad, 5568
Algoritmo de sustitucin, 795
Algoritmo de visibilidad por subdivisin de rea, 55962
Algoritmo del pintor (ordenacin de
profundidad), 556
Algoritmo lineal de relleno suave,
2002

Algoritmos de dibujo de lneas,


92102
Bresenham, 96100
DDA, 9495
especificacin de valores del
bfer de imagen, 1023
mtodos paralelos, 100102
polilneas, 100
Algoritmos de lnea de barrido:
deteccin de superficies visibles,
5546
generacin de elipse, 11320
generacin de un crculo, 10611
mtodos de relleno de contornos
curvos, 207
propiedades de coherencia, 203
relleno de polgonos, 2026
relleno de polgonos convexos,
206
segmentos lineales, 92103
Algoritmos de recorte, 322
bidimensional, 32348
cdigo exterior, 324
cdigos de regin, 324, 4023
coordenadas homogneas, 4023
curvas, 346, 4078
de lneas de Cyrus-Beck, 330
de lneas de Liang-Barsky, 3303
de lneas de Nichol-Lee-Nichol,
3335
de polgonos de Liang-Barsky,
345
de polgonos de SutherlandHodgman, 33843
de polgonos de Weiler-Atherton,
3435
mtodos paralelos, 3389
mtodos paramtricos, 3301
poliedros, 4068
polgonos, 33646, 4067

polgonos cncavos, 3435


puntos, 323, 403
recorte de lneas de CohenSutherland, 3249
segmentos lineales, 32336,
4047
texto, 3478
tridimensional, 4019
Algoritmos de relleno de rea:
antialiasing, 2268
reas de contorno curvo, 207
reas de contorno irregular,
20711
mtodo de inundacin-relleno, 211
mtodo de las 4 conexiones, 208
mtodo de las 8 conexiones, 208
mtodo de lnea de barrido, 2026
mtodo de relleno de contorno,
20710
mtodos paralelos, 2045
mezcla de color, 2002
mosaico, 200
patrones de relleno, 199200
polgonos, 2026
polgonos convexos, 206
relleno cuadriculado, 200
relleno suave, 200
relleno tintado, 200
Algoritmos de relleno de contorno:
regin con 4 conexiones, 208
regin con 8 conexiones, 208
Algoritmos del punto medio:
generacin de crculos, 10611
generacin de elipses, 11320
Algoritmos generadores de crculos,
10411, 1203
Bresenham, 1056
del punto medio, 10611
Algoritmos paralelos:
generacin de curvas, 124

ZZ_02_INDICE_GEN_HEARN_1P.qxd

868

09/10/2005

23:33

Pgina 868

ndice

Algoritmos paralelos (cont.)


relleno de reas, 2045
visualizacin de lneas, 100102
Aliasing, 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,
9495
Angstrom, 736
ngulo:
campo de visin, 3879
de incidencia (luz), 5856
direccin, 815
fase, 7678
reflexin especular, 588
refraccin, 598, 622
rotacin, 240
ngulo de excentricidad, 113
ngulo interior (polgono), 129
ngulo slido, 814
Animacin, 2523, 755
aceleraciones, 7647
anticipacin, 759
aplicaciones, 6, 7, 26, 2831
cinemtica, 761, 7689, 7701
cinemtica inversa, 7689, 7701
compresin y expansin, 759
definiciones de objetos, 758
descripcin de escenas, 760
dinmica, 7689
dinmica inversa, 7689
dirigida por objetivos, 768
diseo, 7579
doble bfer, 7567
efectos panormicos, 365
en tiempo real, 5253, 755
errores de redodendo y de aproximacin, 2523, 772
especificacin de acciones, 760
especificacin de movimiento,
7679
especificacin directa de movimiento, 7678
fsica, 761, 7689
fotograma a fotograma, 755

fotograma clave, 758


fotogramas intermedios, 758
funciones, 760
grados de libertad de un cuerpo
rgido, 7601
guin, 758
lenguajes, 7601
mediante tabla de colores, 757
mtodos de barrido, 757
morfismo, 2728, 31, 7624
movimiento peridico submuestreado, 7701
movimientos peridicos, 7712
personajes articuladas, 76971
rotacional, 2523, 7712
seguimiento, 760
segn la ley del movimiento de
Newton, 7689
sistema basado en fotogramas
clave, 760, 7617
sistema de scripts, 761
sistema parametrizado, 761
splines Kochanek-Bartels, 444
submuestreada, 7701
tasas de muestreo, 7712
tcnicas tradicionales de dibujos
animados, 75960
temporizacin, 759
transformaciones de tabla de
color, 757
variacin del centro de atencin,
760
velocidad de imagen, 7567
velocidad de imagen irregular, 757
Animacin por computadora,
75575 (vase tambin
Animacin)
ANSI (American National Standards
Institute), 73, 803
Antialiasing, 221 (vase tambin
Muestreo)
fases de pxel, 221, 225
filtrado, 224
frecuencia de muestreo de
Nyquist, 221
fronteras de un rea, 2268
fronteras de una superficie, 2268
funcin de filtro gausiana, 2256
intervalo de Nyquist muestreo, 221

mapa de texturas, 6523


mscara de ponderacin, 223
mtodo de Pitteway-Watkinson,
2278
muestreo de un rea, 221, 224
muestreo estocstico, 6345
postfiltrado, 221
prefiltrado, 221
segmentos de lneas, 2215
superficie de ponderacin, 2245
supermuestreo, 221
trazado de rayos, 6323
API (Application programming
interface), 70
Aplicaciones, 333 (vase tambin
Aplicaciones grficas)
de entretenimiento, 2831
de formacin, 1923
Aplicaciones grficas:
agricultura, 14, 18
animaciones, 6, 7, 27, 2831
anuncios, 7, 2528
arquitectura, 910
arte, 2328 (vase tambin Arte
por computadora)
astronoma, 12, 31
CAD, 510
CAM, 7
ciencias fsicas, 1219, 31
diseo, 510
diseo de oficinas, 910
edicin, 23, 25, 27
educacin, 1923
entrenamiento, 1923
entretenimiento, 2831
fabricacin, 7
geologa, 31
grficas y diagramas, 35
ingeniera, 58
interfaces grficas de usuario,
3233
matemticas, 1213, 2527
medicina, 3132
modelado, 510, 1219
negocios, 3, 5, 12, 18, 2728
procesamiento de imgenes,
3132
realidad virtual, 1011
simulaciones, 67, 1011, 1223

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 869

ndice
simuladores, 1923
simuladores de vuelo, 1922
visualizacin cientfica, 1219
Apple GL (AGL), 75
Aproximacin por tramos (spline),
123, 432
rbol binario de particionamiento
en el espacio, 492, 5589 (vase
tambin BSP, rbol)
rbol cuaternario, 489
rbol octal, 48992
elemento de volumen, 491
generacin, 48992
mtodos de deteccin de visibilidad, 492, 5623
operaciones CSG, 492
voxel, 491
Archivo de barrido en bruto, 791
Archivo de imgenes, 791 (vase
tambin Formatos de archivo grfico)
configuraciones, 7912
mtodos de compresin, 793801
mtodos de reduccin de color,
7923
principales formatos, 8015
Archivo vectorial, 42
Archivos de cabecera para OpenGL,
76
rea rellena, 127
atributos, 199202
entorno curvo, 20711
interior, 1324
operaciones lgicas, 2001
polgono, 12839
regla del nmero de vueltas distinto de cero, 1324
regla par-impar, 132
Arista (polgono), 128
efectos de costura, 214
indicador (OpenGL), 2146
vector, 12930
Aristas activas, lista de, 205
Arrastre, 696
Arte por computadora, 2328, 62 3,
191
Asistido por computadora:
ciruga, 3132
diseo (CAD), 5

educacin y formacin, 1923


fabricacin (CAM), 79
proyecto y diseo (CADD), 5
Atenuacin angular de la intensidad
(fuente luminosa), 5813
Atenuacin radial de la intensidad
(fuente luminosa), 57980
Atributos de marcador, 220

B
Bandas de mach, 617
Barrido:
animaciones, 757
archivo (bfer), 39
fuente, 153
operaciones, 3841, 5054
Barrido TC (Tomografa computerizada), 31
Barrido de textura, 6523
Barrido en orden de imagen (mapeado de textura), 6523
Barrido en orden de pxel (textura),
6523
Base:
normal, 81920
ortogonal, 81920
ortonormal, 81920
vectores de coordenadas, 8189
Base normal, 81920
Beta-spline, 4656
condiciones de continuidad,
4657
peridica cbica, 466
Bzier:
conversiones de B-splines,
46970
curva cerrada, 4501
curva cbica, 4513
curvas, 44554
funciones de mezcla, 4456
matriz, 453
propiedades, 450
superficies, 454
tcnicas de diseo, 4501
Big endian, 791
Bitblt (transferencia de bloques de
bits), 265
Bitmap, 40, 148 (vase tambin
Bfer de imagen)

869

BMP, 805
Brillo (luz), 737
BSP:
algoritmo de visibilidad, 55960
rbol, 492
B-spline:
abierto, 4614
control local, 4546
conversiones de Bzier, 46970
cuadrtica, 4589
cbica, 4601
curvas, 45464
frmulas de recursin de
Cox-deBoor, 456
funciones de mezcla, 456, 461
matriz, 461
no uniforme, 464
no uniforme racional (NURB),
4679
parmetro de grado, 455
parmetro de tensin, 461
peridica, 45764
propiedades, 4545, 4567
racional, 4679
superficies, 4645
uniforme, 45764
vector de nudo, 456
Bfer:
A, algoritmo, 5534
auxiliar, 1512
color, 39, 1501 (vase tambin
Bfer de refresco)
derecho, 1501
de profundidad, 1501, 549
de refresco, 39
frontal, 1501, 772
izquierdo, 1501
luminoso (trazado de rayos),
62830
patrn, 1501, 187
trasero, 1501, 772
z (bfer de profundidad), 549
Bfer de imagen, 39, 86
clculos de direccin, 1023
comando getPixel, 87
comando setPixel, 87
operaciones de barrido, 3841
planos de bits, 40

ZZ_02_INDICE_GEN_HEARN_1P.qxd

870

09/10/2005

23:33

Pgina 870

ndice

Bfer de imagen, 39, 86 (cont.)


profundidad, 40
resolucin, 39
tabla de bsqueda, 1812, 604
transferencias de bloques de bits,
265

C
Cabeceras (archivos de imagen), 791
CAD (computer-aided design), 5
CADD (computer-aided drafting and
design), 5
Caja de botones, 58, 59
Clculos de masa (CSG), 4889
Clculos de volumen (CSG), 4889
CAM (computer-aided manufacturing), 79
Cmara:
crculo de confusin, 632
ecuacin de la lente fina, 631
efectos de enfoque, 6302
efectos de objetivo, 6345
modelo de visualizacin, 3556,
3601
nmero f, 631
parmetros (modelo de iluminacin), 602
profundidad de campo, 632
Cambio de escala:
bidimensional, 2424, 246
composicin, 248
diferencial, 242
direcciones generales de cambio
de escala, 2501
factores, 242, 2845
inverso, 2467, 287
mtodos de barrido, 265
no uniforme (diferencial), 242
parmetros (factores), 242, 2845
posicin fija, 242, 2845
representacin matricial, 246,
2845
tridimensional, 2847
uniforme, 242
Cambio del centro de atencin (animacin), 760
Campo de gravedad, 6989
Candela (fuente luminosa estndar),
73940

Can de electrones, 36 (vase tambin Tubo de rayos catdicos)


Cara frontal (polgono), 1378
Cara posterior (polgono), 1378
Caracola, 16568
Carcter
altura, 217
atributos, 21720
cach de fuentes, 1534
color, 220
con kern, 217
cuadrcula, 53, 153
cuerpo, 217
espaciado proporcional, 153, 217
fuente, 153
fuente de caracteres, 153
fuente de mapa de bits, 53, 153
fuente de trazo, 153
fuente digitalizada, 153
fuentes de contorno, 153
legible, 153
lnea base, 217
lnea inferior, 217
lnea superior, 217
lnea tope, 217
monoespaciado, 153
polimarcador, 1534
precisin del texto, 220
primitivas, 1534
recorte, 3478
sans-serif, 153
serif, 153
smbolo marcador, 1534
tamao en puntos, 217
trazo descendente, 217
vector vertical, 218
Caractersticas psicolgicas del
color, 737
Caras poligonales de adicin de
detalle, 650
Cardioide, 16568
Cartesianas, coordenadas, 809, 811
CAVE, 16, 688
Celda:
codificacin, 54
recorrido (trazado de rayos),
6278
Cels, 761
Centro de proyeccin, 380

Centroide (polgono), 8367


CG API (computer-graphics application programming interface), 70
CGM (computer-graphics metafile),
803
CIE (International Commission on
Illumination), 739
Cierre de superficie (radiosidad),
6401
Cilndricas, coordenadas, 8123,
8201
Cinemtica, 761, 7689, 7701
(vase tambin Animacin)
Crculo:
de confusin, 632
ecuaciones, 1046
propiedades, 104
simetra, 104
CMY, modelo de color, 7457
CMYK, modelo de color, 746
Codificacin aritmtica, 7989
Codificacin de longitud de recorrido, 54, 794
Codificacin mediante coseno discreto, 799801
Cdigo de salida, 324
Cdigos (trazado de rayos), 6345
Cdigos de regin (recorte):
bidimensional, 324
tridimensional, 4023
Coeficiente:
reflexin ambiente, 587
reflexin difusa, 5845
reflexin especular, 5889, 590-1
transparencia, 600
Coeficientes binomiales, 4456
Cohen-Sutherland, recorte de lneas
de, 3249
Color: (vase tambin Luz; Fuentes
luminosas)
brillo, 737
caractersticas psicolgicas, 737
codificacin (visualizacin de
datos), 529
complementario, 738
conceptos intuitivos, 7389
consideraciones de seleccin, 751
cromaticidad, 737
espectral, 7356, 7401

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 871

ndice
espectro (electromagntico),
7356
gama, 738
iluminante C, 740
luminancia, 5967, 740, 744
mezcla, 7879, 1856
modelos de iluminacin, 5946
percepcin, 737
primario, 738
pureza, 737, 742
puro, 737, 739
real, sistema, 44
saturacin, 737
sombras, 739
tintas, 739
tonalidades, 739
tono, 737
Columna:
nmero, 86
vector (matriz), 8212
Commission Internationale de
lclairage (CIE), 739
Componentes nemticos de cristal
lquido, 4546
Compresin
con prdidas, 794
de archivos, tcnicas, 793801
sin prdidas, 794
y expansin (animacin), 759
Computadora cliente, 69
Concatenacin (matriz), 247
Condiciones de continuidad (spline):
geomtrica, 4345
paramtrica, 434
Condiciones de contorno (spline),
435, 438, 4412
Conjugado (nmero complejo), 826
Conjunto de fractales invariantes,
494
Cono:
de visin (visualizacin en perspectiva), 383
filtro, 2256
hexagonal (HSV), 747
receptores, 742
trazado, 633 (vase tambin
Trazado de rayos)
Constante de amortiguamiento, 768
Constante de fuerza, 5267

Continuidad de orden cero:


geomtrica, 4345
paramtrica, 434
Continuidad de primer orden:
geomtrica, 435
paramtrica, 434
Continuidad de segundo orden
geomtrica, 435
paramtrica, 434
Continuidad paramtrica (spline), 434
Contorno:
rectngulo, 86
recuadro, 86
volumen, 626
Contorno (borde de intensidad),
6057
Contornos de lnea, 5302
Contraccin (tensor), 536
Control:
grafo, 433
icono, 7245
operaciones, 73
polgono, 433
punto (spline), 432
rejilla (TRC), 37
superficie (terreno fractal), 5067
Control local (spline), 4545, 456
Controlado por objetivos, movimiento, 768
Controlador
de vdeo, 5053
grfico, 53
Convexo:
ngulo, 1312
armazn, 432, 4578
divisin de polgonos, 1312
polgono, 129, 206
Coordenadas:
absolutas, 87
cartesianas, 51, 7172, 809, 811
cilndricas, 8123, 8201
curvilneas, 8123
de dispositivo, 71
de pantalla, 71, 8687, 395, 809,
812
de superficie, 8123
de textura, 650
de un pxel (cuadrcula de pantalla), 8687, 1245

871

ejes, 8123
esfricas, 813, 821
homogneas, 89, 245
locales (mapeado de imagen),
6589
locales (modelado), 71, 7845
maestras, 71
modelado, 7172, 785
normalizadas, 7172
ortogonales, 8123
polares, 78889, 8134
posicin actual, 87
proyeccin normalizada, 361,
3702, 379, 3925
regla de la mano derecha, 71, 811
regla de la mano izquierda, 8123
relativas, 87
seleccin, 692
transformacin, 2679, 2912
universales, 7172
visualizacin, 7172
Coordenadas de visualizacin:
bidimensionales, 307, 308, 809
regla de la mano derecha, 8123
tridimensionales, 3556, 811
uvn, 3634
Copo de nieve (fractal), 4967
Correccin gamma, 6045
Correspondencia de lenguaje, 74
Cosenos directores, 815
Costura (huecos en las aristas de los
polgonos), 214
Cox-deBoor, frmulas de recursin,
456
Cramer, regla de, 839
CSG, mtodos, 4869 (vase tambin Geometra slida constructiva)
Cuadrcula:
carcter, 53, 153
en construccin interactiva de
imgenes, 696
Cuaternio, 8278
construcciones fractales, 519
inverso, 8278
mdulo, 8278
multiplicacin, 8278
multiplicacin por un escalar,
8278

ZZ_02_INDICE_GEN_HEARN_1P.qxd

872

09/10/2005

23:33

Pgina 872

ndice

Cuaternio, 8278 (cont.)


parte escalar, 8278
parte vectorial, 8278
representacin mediante par ordenado, 8278
rotaciones, 2804
suma, 8278
trminos imaginarios, 8267
Cubo unitario (volumen de visualizacin), 3702, 3789, 3925
Cuerpo:
no rgido, 5269
personaje, 217
Cuerpo rgido:
grados de libertad, 7601
transformacin, 2389, 241,
2534
Cursor de mano (digitalizador), 62
Curva:
algoritmos paralelos, 124
aproximacin mediante lneas rectas, 121
atributos, 1935
B-spline, 45464
caracola, 16568
cardioide, 16568
crculo, 10411, 1203
consideraciones de simetra, 104,
113, 121
construccin por tramos, 123,
432, 435
cuatro hojas, 16568
de ajuste, 437
de respuesta del monitor, 6045
elipse, 11120, 1203
espiral, 16568
fractal, 4923, 4979, 50721
hiprbola, 1212
Koch (fractal), 4978
parbola, 1212
polinmica, 123 (vase tambin
Curva spline)
recorte, 346
representaciones paramtricas,
121, 123
secciones cnicas, 1203
supercudrica, 4224
tres hojas, 16568
Curva spline, 123, 43169

aproximacin, 432
armazn convexo, 432, 4578
Beta-spline, 4657
Bzier, 44554
B-spline, 45464
cardinal, 4414
Catmull-Rom, 4412
condiciones de continuidad, 434
condiciones de contorno, 435
continuidad geomtrica, 4345
continuidad paramtrica, 434
control local, 4545, 456
conversiones, 46970
de visualizacin, 4704
funciones base, 435, 436
funciones de mezcla, 435, 436
grafo de control, 433
hermtica, 43841
interpolacin, 432
interpolacin cbica, 43744
Kochanek-Bartels, 444
matriz base, 436
natural, 438
NURB, 467
Overhauser, 4412
parmetro de continuidad, 4445
parmetro de desplazamiento,
4445, 454, 466
parmetro de tensin, 4445
polgono caracterstico, 433
polgono de control, 433
puntos de control, 432
racional, 4679
representacin matricial, 435
vector de nudo, 456
Curvas cudricas, 4202
Curvilneas, coordenadas, 8123
Cyrus-Beck, recorte de lneas de,
330

D
Datos de entrada grfica, 689
Datos en bruto, 791
DDA, algoritmo de lneas, 9495
Deflexin: (vase tambin Tubo de
rayos catdicos)
bobinas, 36, 37
corriente, 37
magntica (TRC), 37

placas, 37, 38
Del, 830
al cuadrado, 832
Delta-delta, TRC de mscara de
sombra, 42
Dentado, 92 (vase tambin
Antialiasing)
Derivada parcial, 82930
Descarga de gas, pantallas, 44
Descomposicin LU, 840
Desenfoque de movimiento, 6357
Despiece, 359
Desplazamiento del punto medio
(fractal), 5046
Detalles de superficies, 64759
caras poligonales, 650
mapeado de entorno, 646
mapeado de relieve, 6568
mapeado de texturas, 6506
mapeado del sistema de referencia, 6589
texturado procedimental, 6556
Deteccin de lneas visibles, 5668
(vase tambin Variacin de la
intensidad con la profundidad)
Deteccin de superficies visibles,
358, 54768
algoritmo del pintor (ordenacin
de profundidad), 556
clasificacin de algoritmos, 5478
comparacin de algoritmos, 5645
eliminacin de caras ocultas,
5489
grficas de contorno de superficie,
566
mtodo de lneas de barrido,
5546
mtodo de ordenacin de la profundidad, 5568
mtodo de proyeccin de rayos,
5634
mtodo de subdivisin del rea,
55962
mtodo del rbol BSP, 55960
mtodo del bfer A, 5534
mtodo del bfer de profundidad,
54952
mtodo del espacio de imagen, 547
mtodos almbricos, 5668

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 873

ndice
mtodos de rbol octal, 492,
5623
mtodos del espacio de objetos,
547
superficies curvas, 5656
variacin de la intensidad con la
profundidad, 5678
Determinacin de races mediante
falsa posicin, 842
Determinacin de races por biseccin, 841
Determinante, 8234
Diagrama cromtico, 7401
colores complementarios, 741
gamas de colores, 741
iluminante C, 740
lnea prpura, 740
longitud de onda dominante,
7412
pureza, 742
Diagramas de contorno, 5302
Diagrama de tiempos, 5
Dibujo de grficas, 35, 16065
(vase tambin Grfica)
Diferencias finitas, 8456
Diferencias hacia adelante, 4712
Difusa:
coeficiente de reflexin, 58496
reflexin, 5838
transmisin, 598
Digitalizacin, 5354, 86
Digitalizador, 6264
acstico, 63
cursor de mano, 6263
electromagntico, 63
pluma, 6163
precisin, 63
resolucin, 63
snico, 63
tridimensional, 63
Dimensin, 8189
de similaridad (fractal), 4956
eucldea, 4923, 496
fraccional, 4923, 4956
fractal, 4923, 4947
recuadro, 4956
topolgica, 4956
Dinmica, 7689 (vase tambin
Animacin)

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, 68994
conmutadores, 58
de trazo, 690
diales, 58, 59
digitalizador, 6264
digitalizadores snicos tridimensionales, 63
dispositivo de cadena, 690
dispositivo de eleccin, 6902
dispositivo de seleccin, 690,
6924
dispositivo de trazo, 690
dispositivo evaluador, 6901
dispositivo localizador, 690
electroguante, 61
escner, 64
joystick, 61
lpiz ptico, 66
lgicos, 68994
panel tctil, 6466
ratn Z, 60
ratn, 5960
sistemas de voz, 67
spaceball, 6061
tableta grfica, 6163
teclado, 58
trackball, 6061
Dispositivos de impresin, 6769
Distancia:
punto a lnea, 6924
trayectoria de trazado de rayos,
6223
Divergencia:
operador, 832
teorema, 835
Divisin de polgonos cncavos
mtodo vectorial, 1301
mtodos rotaciones, 1301
Divisin de polgonos convexos,
1312
Doble bfer, 5253, 7567
Doble refraccin, 598

873

E
Ecuacin de una lente fina, 631
Ecuacin punto-pendiente de una
lnea, 9293
Ecuaciones diferenciales
ordinarias, 8445
parciales, 8456
Educacin y formacin, aplicaciones, 1923
Efectos atmosfricos (modelo de iluminacin), 601
Efectos de ampliacin o reduccin,
306
Efectos de iluminacin de superficie, 5834 (vase tambin Modelo
de iluminacin)
Efectos de pantalla dividida, 313,
3202
Efectos globales de iluminacin,
5834, 618619, 63844
Efectos panormicos, 306
Ejes:
inclinacin, 2634, 2901
principales, 369, 383
reflexin, 260, 290
rotacin, 240
Electroguante, 6162 (vase tambin Realidad virtual)
Electromagntico:
espectro, 7356
radiacin, 182, 735
Electrosttico:
deflexin (TRC), 37, 38
enfoque (TRC), 37
impresora, 6768
Elemento de imagen (pxel), 39
Elemento de volumen, 491
Eliminacin de caras posteriores,
5489
Elipse:
algoritmo del punto medio,
11320
ngulo de excentricidad, 113
ecuaciones, 11113, 1212
propiedades, 11120
punto de enfoque, 11112
simetra, 113
Elipsoide, 4201

ZZ_02_INDICE_GEN_HEARN_1P.qxd

874

09/10/2005

23:33

Pgina 874

ndice

Energa:
del fotn, 638
distribucin (fuente luminosa),
737
funcin (modelado de tejidos), 528
niveles cunticos, 37
radiante, 6389
Entrelazado de lneas de barrido, 40
Errores de redondeo y de aproximacin (animacin), 2523, 772
Escala de grises, 182
Escala diferencial, 242
Escaneado (patrones de textura), 652
Escner de imgenes, 64
Esfera:
clculos de interseccin con
rayos, 6235
ecuaciones, 420, 82930
Esfricas, coordenadas, 8134, 821
Espacio riemaniano, 8201
Especificacin de movimiento, 767
Espectro de frecuencias (electromagntico), 7356
Espejo varifocal, 47
Espejo vibratorio, 47
Espiral, 16568
Estacin de trabajo grfica, 5458
Estado:
mquina, 179
parmetros, 180
sistema, 179
variables, 180
Estndares software, 7374
Estereoradian, 814
Estilos de relleno, 199200
Estructura (subseccin de imagen),
156
Eucldea:
dimensin, 4923, 496
mtodos geomtricos, 492
Euler:
frmula, 8267 (vase tambin
Nmero complejo)
mtodo (resolucin de ecuaciones
diferenciales), 844
Extensin de coordenadas, 86

F
Factor de opacidad, 600

Factor de reflectividad (radiosidad),


6401
Factores de forma (radiosidad),
6401
Fakespace Pinch, electroguantes, 50
Filamento (TRC), 36
Filtro: (vase tambin Antialiasing)
cono, 2256
funcin, 224
gausiano, 2256
recuadro, 2256
Fsico:
animaciones, 761, 7689
modelado, 5269
Fluctuacin, 6345
Focos, 580
Forma funcional
explcita, 8289
implcita, 8289
Forma polar (nmero complejo),
8267
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
BMP, 805
cabecera, 791
CGM, 803
codificacin aritmtica, 7989
codificacin Huffman, 7958
codificacin LZW, 7945
codificacin por coseno discreto,
799801
codificacin por longitud de recorrido, 794
compresin con prdidas, 794
compresin sin prdidas, 794
configuraciones, 7912
datos en bruto, 791
formato hbrido, 792
GIF, 805
JFIF, 8023
JPEG, 8013
little endian, 791
MacPaint, 804
metaarchivo, 792

mtodos fractales, 795


PCX, 805
PICT, 804
PNG, 8034
reduccin de color de corte
medio, 793
reduccin de color por popularidad, 7923
reduccin de color uniforme, 792
representacin geomtrica, 792
SPIFF, 8023
Targa, 805
tcnicas de compresin de archivos, 793801
TGA, 805
TIFF, 803
transformacin de coseno inverso,
799800
XBM, 804
XPM, 804
Formatos hbridos, 792
Fsforo, 36
Fotograma:
animacin, 755
rea de pantalla, 39
velocidad, 7567
Fotogramas clave (animacin), 758
Fotogramas intermedios (animacin), 758
Fotn, 37, 6389
Fractal:
autoafines, 494
auto-elevacin al cuadrado, 494,
50721
auto-inversos, 494, 521
auto-similares, 494, 4979
caractersticas, 4923
caractersticas de auto-similaridad, 4923
caractersticas del terreno, 5057
clasificacin, 494
conjunto de Julia, 508
conjunto de Mandelbrot, 5139
conjunto invariante, 494
construcciones afines, 5014
construcciones geomtricas,
497501
copo de nieve, 4967
curva de Koch, 4967

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 875

ndice
curva de Peano, 4969
desplazamiento del punto medio,
5046
dimensin, 4927
dimensin de HausdorffBesicovitch, 4956
dimensin de recuadro, 4956
dimensin de similaridad, 4956
dimensin fraccional, 4923,
4956
espacio de Peano, 4989
estadsticamente auto-similar, 494,
499501
generador, 4967
iniciador, 4967
mtodos de desplazamiento aleatorio del punto medio, 500,
5046
mtodos de inversin, 51921
mtodos de recubrimiento de
recuadros, 4956
mtodos de recubrimiento topolgico, 496
mtodos de subdivisin, 4946
movimiento browniano, 5014
movimiento browniano fraccional,
5014
procedimientos de generacin, 494
representacin mediante cuaternios, 519
superficies de control, 5067
Frecuencia dominante, 737
Fresnel, leyes de la refraccin, 588
Frustum, 3845, 38692
f-stop, 631
ftp (file-transfer protocol), 70
Fuente, 153 (vase tambin Tipo de
letra)
cach, 1501
de barrido, 153
de contorno, 153
de trazos, 153
legible, 153
mapa de bits, 53, 153
monoespaciada, 153
proporcional, 153, 217
sans-serif, 153
serif, 153
Fuente luminosa, 57883

atenuacin angular de la intensidad, 5813


atenuacin radial de la intensidad,
57980
brillo, 737
candela, 740
compleja, 5823, 635
direccional, 580
distribucin de energa, 737
energa radiante, 6389
flujo radiante, 6389
foco, 580
frecuencia dominante, 737
infinitamente distante, 579
intensidad, 182, 6389
longitud de onda dominante, 737
luminancia, 183, 5967, 740, 744
parmetros de pantalla, 5823
potencia radiante, 6389
puntual, 578
radiancia espectral, 6389
radiosidad, 6389, 6401
vector de direccin, 586-7
Warn, modelo de, 5823
Funcin de densidad (objeto sin
forma), 42931
Funcin de perturbacin (mapeado
de relieve), 656
Funcin de relieve, 656
Funciones base, 435 (vase tambin
Funciones de mezcla)
Funciones de ajuste de color, 738
Funciones de atenuacin (luz),
57980, 5813
Funciones de entrada, 73, 6945
realimentacin de eco, 695
retrollamada, 81, 695
Funciones de mezcla (spline), 435
Bzier, 4456
B-spline, 456, 461
cardinal, 443
hermtica, 440
Funciones de retrollamada, 81, 695
Funciones diferenciales, 8445

G
Gama (color), 738
Gauss:
distribucin, 38

875

eliminacin, 839
funcin de densidad (relieve),
42931
funcin de filtro, 2256
teorema, 8345
Gauss-Seidel, mtodo, 840
Generacin de splines:
mtodo de diferencias finitas,
4712
mtodo de Horner, 4701
mtodos de subdivisin, 4724
Generador (fractal), 4967
Generador de congruencia lineal,
8434
Generador de nmeros aleatorios,
8434
Geometra de objetos, 1257
Geometra slida constructiva
(CSG), 4869
clculos de masa, 4889
clculos de volumen, 4889
mtodos de rbol octal, 492
mtodos de proyeccin de rayos,
4869
plano de partida, 488
Geomtrico:
continuidad (spline), 4345
modelo, 779
primitivas, 85 (vase tambin
Primitivas de salida grfica)
reglas de produccin, 5214
representaciones (archivos de
imagen), 792
tablas (polgono), 1356
transformaciones, 73, 237 (vase
tambin Transformaciones)
Gestor de ventana, 32
getPixel, procedimiento, 87
GIFF, 805
GKS (Graphical Kernel System), 73
GL (Graphics Library), 73
Glifo, 536
GLU (OpenGL Utility), 75
funcin de direccin de visualizacin, 3967
funcin de ventana de recorte
bidimensional, 7879
funcin de ventana de seleccin,
7123

ZZ_02_INDICE_GEN_HEARN_1P.qxd

876

09/10/2005

23:33

Pgina 876

ndice

GLU (OpenGL Utility) (cont.)


funciones de ajuste, 4845
funciones de curvas B-spline,
4802
funciones de superficie B-spline,
4824
funciones para superficies cudricas, 4258
ventana de visualizacin, 7879
GLUT (OpenGL Utility Toolkit), 76
creacin de submens, 7203
funcin de cambio de tamao de
la ventana de visualizacin,
15861, 317
funcin de creacin de mens,
7179
funcin de cajas de botones, 711
funcin de cursor de pantalla,
3189
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, 3167,
320, 7201
funciones de dial, 711
funciones de modificacin de
mens, 7234
funciones de ratn, 7005, 7059
funciones de spaceball, 710
funciones de tableta, 710
funciones de teclado, 7059
funciones para poliedros regulares, 4169
funciones para superficies cudricas, 4245
gestin de mltiples mens, 720
gestin de ventanas de visualizacin, 7678, 7879, 15861,
31520
men actual, 720
GLX (extensin OpenGL al sistema
X window), 75
Gouraud, representacin superficial,
6147
Grad al cuadrado, 832

Gradiente (grad), operador, 8301


Grados de libertad, 7601
Grfica:
de barras, 35, 162163
de sectores, 35, 163
de tiempos, 5
tridimensional, 35
Grficas de contorno superficial, 566
Grficas y diagramas, 35, 16065
(vase tambin Grfica)
Grficos empresariales, 12, 529
(vase tambin Visualizacin de
datos)
Grficos por Internet:
explorador Mosaic, 70
HTML (hypertext markup language), 70
http (hypertext transfer protocol),
70
Netscape Navigator, 70
protocolo de transferencia de
archivos (ftp), 70
sitio ftp, 70
TCP/IP, 6970
URL (uniform resource locator),
6970
World Wide Web, 69
Graftal, 524
Gramtica L, 524
Gramticas de formas, 5214
Graphical Kernel System (GKS), 73
Green:
ecuaciones de transformacin, 835
identidades, 835
teorema en el espacio, 835
teorema en el plano, 8334
Guin (animacin), 757

H
h, parmetro, 89
Hausdorff-Besicovitch, dimensin,
4956
Haz de electrones: (vase tambin
Tubo de rayos catdicos)
convergencia, 37
deflexin electrosttica, 37, 38
deflexin magntica, 36, 37
enfoque, 37
intensidad, 37

tamao de punto, 38
Hercio, 40
Hiprbola, 1212
HLS, modelo de color, 7501
Homogneas, coordenadas, 89, 245
Hooke, ley de, 5267
Horner, mtodo de factorizacin de
polinomios, 4701
HSB, modelo de color (vase HSV)
HSV, modelo de color, 7478
Huffman, codificacin, 7958
Hypertext Markup Language
(HTML), 70

I
Iconos, 33
de aplicacin, 7245
de comando, 7245
Iluminante C, 740
Imgenes de tono continuo, 605-6
(vase tambin Semitono)
Impresoras, 6768
de chorro de tinta, 67
de impacto, 67
de matriz de puntos, 67
de no impacto, 67
electrotrmica, 68
Inclinacin
en la direccin x, 2634
en la direccin y, 264
en la direccin z, 2901
ndice de refraccin, 598
Iniciador (fractal), 4967
Instancia, 779 (vase tambin
Modelado)
Intensidad, 182, 6389, 63940
(vase tambin Modelos de iluminacin; Radiosidad)
atenuacin angular, 5813
atenuacin radial, 57980
correccin gamma, 6045
haz de electrones (TRC), 37
interpolacin (representacin de
Gouraud), 6147
matriz (mapeado de entorno), 646
niveles (sistema), 603
Interfaz grfica de usuario:
coherencia, 726
componentes, 7247

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 877

ndice
dilogo con el usuario, 724
diseo, 7247
facilidades de ayuda, 7256
iconos, 7245
mens, 7245
minimizacin de la memorizacin, 726
modelo del usuario, 724
mltiples niveles de experiencia,
7256
realimentacin, 7267
tratamiento de errores, 726
ventanas, 7245
Interfaz IBM OS/2 para OpenGL
(PGL), 75
Interfaz Windows para OpenGL
(WGL), 75
International Standards Organization
(ISO), 73, 74, 803
Inversa:
barrido (mapeado de textura), 652
cinemtica, 7689, 7701
cuaternio, 8278
dinmica, 7689
matriz, 824
transformacin coseno, 799800
transformaciones geomtricas, 246
ISO (International Standards
Organization), 73, 74, 803
Isolneas, 5302
Isosuperficies, 5302

J
JFIF, 8023
Joystick:
isomtrico, 61
mvil, 61
sensible a la presin (isomtrico),
61
JPEG, 8013
Julia, conjunto, 508

K
Koch, curva (copo de nieve fractal),
4967
Kochanek-Bartels, spline, 444

L
Lado (polgono), 128

Lambert, ley del coseno, 5834


Lpiz (digitalizador), 61
Lpiz ptico, 66
LCD (pantalla de cristal lquido),
4547
de matriz activa, 4647
de matriz pasiva, 47
LED (diodo emisor de luz), 46
Liang-Barsky, recorte:
lneas bidimensionales, 3303
polgonos, 345
Lnea:
antialiasing, 2215
atributos, 18892
ecuacin punto-pendiente, 9293
ecuaciones, 93
extremos, 189
opciones de pincel y pluma,
1912
representacin paramtrica, 323,
330, 3801
variaciones de intensidad, 2256
Lnea base (carcter), 217
Lnea de barrido, 39
entrelazado, 40
Lnea digitalizada en escalera, 92
Lnea escalonada, 92
Lnea inferior (carcter), 217
Lnea prpura (en diagrama cromtico), 740
Lnea superior (carcter), 217
Lneas de campo, 534
Lneas de flujo, 534
Lneas punteadas, generacin, 1901
Lista de aristas:
activas, 2056
en tablas de polgonos, 1356
ordenadas, 2045
Little endian, 791
Locales, coordenadas, 71, 7845
Longitud de onda (luz), 735
LU, descomposicin, 840
Luminancia, 183, 5967, 740, 744
Luz: (vase tambin Color; Modelos
de iluminacin; Representacin de
superficies)
ambiente (fondo), 584 (vase tambin Modelos de iluminacin)
ngulo de incidencia, 5856

877

banda de frecuencias, 735


blanca, 736, 737
brillo, 737
color espectral, 735
cromaticidad, 737
diagrama cromtico, 7401
de fondo (ambiente), 5834
espectro electromagntico, 7356
frecuencia, 38, 735
iluminante C, 740
longitud de onda, 735
luminancia, 183, 5967, 740, 744
perodo, 735
propiedades, 7357
pureza, 737
tono, 737
velocidad, 736
LZW, codificacin, 7945

M
MacPaint, formato, 804
Maestras, coordenadas, 71, 785
Malla (polgono), 129, 1415, 416
cuadriltera, 1435, 416
triangular, 1413, 416
Mandelbrot, conjunto, 5139
Mapeado
de entorno, 646
de fotones, 6467
de patrones, 650 (vase tambin
Mapeado de texturas)
de reflexin, 646
de relieve, 6568
del sistema de referencia, 6589
ventana a visor, 306, 3103
Mapeado de texturas:
barrido en orden de imagen,
6523
barrido en orden de pxel, 6523
barrido inverso, 6523
bidimensional (superficie), 6515
coordenada r, 6545
coordenada s, 6501, 6545
coordenada t, 651, 6545
coordenadas, 6501
espacio, 6501
funciones, 6501
matriz, 6501, 651, 6545
mip maps, 655

ZZ_02_INDICE_GEN_HEARN_1P.qxd

878

09/10/2005

23:33

Pgina 878

ndice

Mapeado de texturas: (cont.)


patrones de reduccin, 655
procedimental, 6556
slido, 6545
texel, 6501
tridimensional (volumen), 6545
unidimensional (lineal), 6501
Marcador (carcter), 1534
Mscara, 148, 199
de pxeles, 148
de ponderacin del pxel, 223
de sombra, 4243
Material
elstico (objeto no rgido), 5269
opaco, 597
transparente, 597
traslcido, 597
Matriz, 8214
aleatorizacin, 611
base (spline), 436
Bzier, 453
B-spline, 461
cambio de escala, 246, 2845
caracterizacin de splines (base),
436
cardinal, 4412
columna, 8212
concatenacin, 2512, 823
cuadrada, 8212
de entorno, 646
determinante, 8234
de vrtices (OpenGL), 1467
fila, 8212
hermtica, 43940
identidad, 824
inclinacin, 2634, 2901
inversa, 824
multiplicacin escalar, 8223
multiplicacin, 823
no singular, 824
reflexin, 2602, 290
rotacin, 246, 2724, 27980,
2812
singular, 824
suma, 822
transposicin, 823
traslacin, 2456, 270
Mens, 71724
Metaarchivo, 792

Mtodo vectorial (divisin de polgonos), 1301


Mtodos de banda elstica, 696
Mtodos de compresin (archivos de
imagen), 793801
Mtodos de desplazamiento aleatorio del punto medio, 5046
Mtodos de dibujo, 6959
Mtodos de divisin de polgonos
rotacional, 1301
Mtodos de particionamiento del
espacio (trazado de rayos):
adaptativo, 627
bfer de luz, 62830
haces de rayos, 62830, 631
uniforme, 627
Mtodos de posicionamiento (interactivos), 695
Mtodos de pseudocolor, 529
Mtodos de subdivisin:
rbol BSP, 492, 55960
rbol octal, 48992, 5623
generacin de fractales, 4946
generacin de splines, 4724
trazado de rayos adaptativo,
6323
trazado de rayos uniforme, 627
Mtodos del espacio de imagen
(deteccin de visibilidad), 547
Mtodos interactivos de entrada,
68994
Mtodos numricos:
ajuste de datos por mnimos cuadrados, 8467
algoritmo de Runge-Kutta, 844
descomposicin LU, 840
determinacin de raz, 8412
diferencias finitas, 8456
ecuaciones diferenciales ordinarias, 8445
ecuaciones diferenciales parciales,
8456
ecuaciones no lineales, 8412
eliminacin gausiana, 839
evaluaciones de integral, 8423
generador de nmeros aleatorios,
8434
mtodo de biseccin, 841
mtodo de Euler, 844

mtodo de Gauss-Seidel, 840


mtodo de la falsa posicin, 842
mtodo de Newton-Raphson, 841
mtodos de Monte Carlo, 843
problemas de valor de contorno,
844
problemas de valor inicial, 844
regla de Cramer, 839
regla de Simpson, 842
regla del trapezoide, 842
sistemas de ecuaciones lineales,
83940
Mnimos cuadrados, ajuste de datos,
8467
Mip map (patrn de reduccin de
texturas), 655
Modelado:
conceptos bsicos, 77982
coordenadas, 71, 7845
coordenadas locales, 7845
coordenadas maestras, 785
de mdulos, 781
fsico, 5269
geomtrico, 77980
instancia, 779
jerarquas de smbolos, 7812
jerrquico, 237, 7847
paquetes, 7824
representaciones, 77981
smbolos, 779
tejidos, 528
transformaciones, 7172, 237,
7857
Modelado slido:
geometra slida constructiva,
4869
representaciones de barrido,
4856
Modelo bsico de iluminacin,
58697
Modelo de color, 738
aditivo, 740, 743
CMY, 7457
CMYK, 746
conversin HSV-RGB, 74950
conversin RGB-CMY, 746
conversin RGB-YIQ, 745
diagrama cromtico, 7401
funciones de ajuste de color, 738

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 879

ndice
HLS, 7501
HSB (igual que HSV)
HSV, 7478
primarios, 738
primarios CIE estndar, 73940
primarios CIE, 73940
RGB, 4244, 1801, 7424
sustractivo (CMY), 7457
teora de los tres estmulos de la
visin, 742
valores de cromaticidad, 740
valores XYZ normalizados, 740
XYZ, 73940
YCrCb, 745
YIQ, 745
YUV, 745
Modelo de metabolas, 4301
Modelo de objetos suaves, 4301
Modelos de iluminacin, 577
ngulo de incidencia, 5856
ngulo de reflexin especular, 588
ngulo de refraccin, 598
atenuacin angular de la intensidad, 5813
atenuacin radial de la intensidad,
57980
coeficientes de reflexin, 58588
coeficiente de reflexin ambiente,
586-7
coeficiente de reflexin difusa,
58488
coeficiente de reflexin especular,
5889
coeficiente de transparencia, 600
componentes de iluminacin
RGB, 5946
consideraciones de color, 5946
efectos atmosfricos, 601
efectos de iluminacin de superficie, 5834
efectos de refraccin, 5989
emisiones superficiales, 5923
exponente de reflexin especular,
5889
factor de opacidad, 600
focos, 580
Fresnel, leyes de la reflexin,
5889
fuentes luminosas, 57883

ndice de refraccin, 598


Lambert, ley del coseno, 585
ley de Snell, 598
luminancia, 5967
luz ambiente (de fondo), 5845
luz de fondo, 5834
material opaco, 597
material traslcido, 597
modelo bsico, 56397
modelo de Phong, 58893
mltiples fuentes luminosas, 592
parmetros de cmara, 602
radiosidad, 63845
reflector ideal difuso, 585
reflector lambertiano, 585
reflexin difusa, 5834, 5848
reflexin especular, 5834,
58892
reflexiones combinadas difusaespecular, 592
sombras, 6012
transmisin difusa, 598
transparencia, 597, 600
vector de la fuente luminosa,
5867
vector de reflexin especular, 588
vector de transmisin, 599-600
vector del observador, 588
vector del punto medio, 590-2
Warn, fuente luminosa, 5823
Modos de entrada, 6945
por muestreo, 694
por solicitud, 694
Mdulo, 781
Mdulo (complejo), 826
Monitor, 35 (vase tambin Monitor
de vdeo)
Monitor compuesto, 43
Monitor de vdeo, 3558 (vase
tambin Tubo de rayos catdicos)
alta definicin, 38
barrido, 3841
barrido aleatorio, 4142
caligrfico, 41
color completo, 44
color real, 44
compuesto, 44
descarga de gas, 44
diseo de un TRC, 3541

879

electroluminiscente, 4446
electroluminiscente de pelcula
fina, 44
emisivo, 44
estaciones de trabajo, 54
estereoscpico, 4750
LCD (pantalla de cristal lquido),
4546
LED (diodo emisor de luz), 4445
matriz activa, 4647
matriz pasiva, 47
multi-panel, 5458
no emisivo, 44
pantalla de plasma, 44, 45
pantalla de gran tamao, 5458
pantalla plana, 4447
resolucin, 38
RGB, 4244
servidor grfico, 69
TRC color, 4244
TRC de almacenamiento, 36
TRC de refresco, 3641
tridimensional, 47
vectorial, 41
Monitor en color: (vase tambin
Monitor de vdeo)
compuesto, 44
delta-delta, 44
en lnea, 43
mscara de sombra, 4244
penetracin de haz, 42
RGB, 4244
sistema de color completo, 44
sistema de color real, 44
Monitores grficos, 3558 (vase
tambin Monitor de vdeo)
Monte Carlo, mtodos, 843
Morfismo, 2728, 31, 7624
Mosaico de superficies, 199200
Movimiento browniano, 5013
fraccional, 5014
Movimiento rgido, 2534
Movimientos de animacin peridicos, 7712
Muelle:
constante, 5267
red (cuerpo no rgido), 5267
Muestreo: (vase tambin
Antialiasing)

ZZ_02_INDICE_GEN_HEARN_1P.qxd

880

09/10/2005

23:33

Pgina 880

ndice

Muestreo (cont.)
adaptativo, 632
de rea, 221, 224, 632
de lneas, 93, 2203
de un segmento de lnea, 93,
2203
estocstico, 6345
frecuencia de Nyquist, 221
intervalo de Nyquist, 221
mscaras de ponderacin, 223
ponderado, 223
postfiltrado, 221
prefiltrado, 221
supermuestreo, 221
velocidad (animacin), 7712
Multum in parvo (mip map), 655

N
Nabla, 82930
al cuadrado, 832
National Television System
Committee (NTSC), 604, 743,
744
NCSA (National Center for
Supercomputing Applications), 70
NCSA CAVE, 16, 688
Newton, segunda ley del movimiento, 7689
Newton-Raphson, determinacin de
races, 841
Nicholl-Lee-Nicholl, recorte de lneas de, 3335
Niveles cunticos de energa, 37
Niveles de intensidad del sistema,
603
Normalizado:
coordenadas, 307
coordenadas de proyeccin, 361,
3702, 379, 3925
cuadrado, 3113
visor, 3101
volmenes de visualizacin,
3702, 379, 3924 (vase tambin Recorte)
NTSC (National Television System
Committee), 604, 743, 744
Nmero complejo:
conjugado, 826
frmula de Euler, 8267

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, 8267
valor absoluto, 826
Nmero de lnea de barrido, 86
Nmero de vueltas, 132
Nmero f, 631
Nmero imaginario, 825
puro, 825
NURB (Nonuniform rational
B-spline), 4679
Nyquist:
frecuencia de muestreo, 221
intervalo de muestreo, 221

O
Objeto:
componente de imagen, 156
no rgido (flexible), 5269
opaco, 597
rgido, 7689
Objeto grfico, 128
estndar, 128, 416
Objetos sin forma, 42931
Open Inventor, 74
OpenGL: (vase tambin GLUT;
GLU)
AGL (interfaz Apple), 75
Architecture Review Board,
7374
archivos de cabecera, 76
biblioteca bsica, 7475
biblioteca de ncleo, 7475
bibliotecas relacionadas (GLUT y
GLU), 75
bordes de texturas, 6689, 6789
bfer auxiliar, 1512
bfer de acumulacin, 187
bfer de color frontal-izquierdo,
1501
bfer de patrones, 1501, 187
bfer de profundidad, 1501, 187

bfer de refresco predeterminado,


1501
bfer de refresco, 7879
bfer de seleccin, 711
bfer derecho, 1501
bfer frontal, 1501
bfer izquierdo, 1501
bfer trasero, 1501
bferes, 1501
bferes de color, 7879, 1501,
187
clculos de iluminacin de caras
traseras, 6634
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, 66970,
6723, 6734
coordenadas de textura homognea, 67980
coordenadas homogneas, 89
copia de patrones de textura,
6756
curvas de recorte, 4845
denominacin de patrones de texturas, 6767
doble bfer, 1501, 7725
efectos atmosfricos, 665
espacio de texturas bidimensional
(volumen), 6723
espacio de texturas tridimensional
(volumen), 6734
espacio de texturas unidimensional (lineal), 66972
estados de textura actual, 6767
focos, 6612
fuente luminosa infinitamente distante, 65960
fuente luminosa local, 65960
fuentes de luminosas direccionales (focos), 6612
funcin de cara frontal, 216
funcin de mapa de bits, 14850
funcin de mapa de pxeles,
1501

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 881

ndice
funcin de matriz de bfer de
seleccin, 7112
funcin de proyeccin en perspectiva general, 3989
funcin de proyeccin en perspectiva simtrica, 398
funcin de proyeccin ortogonal,
7879, 397
funcin de superficie cbica
(tetera), 425
funcin de variacin de la intensidad con la profundidad, 571
funcin de ventana de recorte,
3145, 3967
funcin de visor, 315, 399
funciones de antialiasing, 228
funciones de aproximacin de
splines, 47485
funciones de atributo de reas de
relleno, 2116
funciones de atributo de reas
poligonales de relleno, 2116
funciones de atributo de caracteres, 220
funciones de atributo de lneas,
1968
funciones de atributo de puntos,
1956
funciones de bfer de profundidad, 56871
funciones de caracteres, 155
funciones de color, 1838
funciones de composicin de
imgenes, 185
funciones de consulta, 229
funciones de curva B-spline, 480
funciones de curva de Bzier,
4747
funciones de curvas, 1034
funciones de deteccin de visibilidad, 56871
funciones de eliminacin de caras
traseras, 569
funciones de eliminacin de polgonos (eliminacin de caras
ocultas), 569
funciones de entrada interactiva,
699724 (vase tambin
GLUT)

funciones de fuentes luminosas


puntuales, 65963
funciones de iluminacin, 65967
funciones de lneas, 9192
funciones de matriz de pxeles,
14853
funciones de men, 71724
(vase tambin GLUT)
funciones de pila de nombres,
7123
funciones de proyeccin en perspectiva, 3989
funciones de puntos, 8890
funciones de relleno de reas poligonales, 13945, 416
funciones de representacin de
superficies, 6678
funciones de respuesta a la visualizacin, 81
funciones de superficie B-spline,
4824
funciones de superficie de Bzier,
47780
funciones de tetera, 425
funciones de textura lineal,
66972
funciones de textura, 213, 66880
funciones de texturas de superficies, 6723
funciones de texturas volumtricas, 6734
funciones de transformacin geomtricas, 2929
funciones de transparencia, 666
funciones de visualizacin bidimensional, 7879, 31422
funciones de visualizacin tridimensional, 396401
funciones para poliedros, 4169
funciones para poliedros regulares, 4169
funciones para superficies cudricas, 4245, 4258 (vase tambin GLUT; GLU)
gestin de ventanas de visualizacin (vase tambin GLUT),
7679, 15861, 31520, 399
GLX (extensin a X Windows),
75

881

grupos de atributos, 22930


identificadores de seleccin, 711
indicadores de aristas de polgonos, 2146
interfaz Apple (AGL), 75
interfaz de sistema XWindow
(GLX), 75
interfaz IBM/OS (PGL), 75
listas de interpolacin de vectores
normales, 6678
listas de visualizacin, 1568, 787
matrices de color, 1867
matrices de coordenadas de
textura, 676
matrices de vrtices, 1458,
6678
matriz actual, 294
matriz entrelazada, 186
matriz modelview, 2934
mtodos almbricos, 2146
mtodos de relleno por interpolacin, 213
mtodos de visibilidad almbrica,
5701
mezcla de color, 7879, 185, 666
mip maps, 6778
modelado jerrquico, 787
modelo de iluminacin, 665
modo de color, 2934
modo de ndice de colores, 1845
modo de proyeccin, 7879,
2934, 314
modo de realimentacin, 7112
modo de representacin predeterminado, 199, 6667
modo de seleccin, 711
modo de textura, 2934
modo de visualizacin de color,
183
modos de representacin, 6678
modos RGB y RGBA, 1838
nombres de texturas, 6767
opciones de color de texturas, 674
opciones de mapeado de texturas,
6745
opciones de textura, 680
operaciones de barrido, 1512
operaciones de seleccin, 7117
(vase tambin GLU)

ZZ_02_INDICE_GEN_HEARN_1P.qxd

882

09/10/2005

23:33

Pgina 882

ndice

OpenGL (cont.)
operaciones de semitonos, 668
parmetros de iluminacin,
65967
parmetros de iluminacin
ambiente (fondo), 6623
parmetros de iluminacin de
fondo, 6623
parmetros de iluminacin de
superficies, 6625
parmetros de reflexin especular,
6623
parmetros globales de iluminacin, 6623
patrones de reduccin de texturas,
6778
patrones de textura reducidos,
6778
PGL (interfaz IBM OS/2
Presentation Manage), 75
pila de atributos, 230
pila de atributos de cliente, 230
pila de atributos de servidor, 230
pila de nombres, 7112
pilas de matrices, 2956
plano de recorte lejano, 3967
plano de recorte prximo, 3967
planos de recorte, 3967, 40910
planos de recorte opcional, 409
posicin de barrido actual, 148
primitivas, 7879
procedimientos de animacin,
7725
programa de ejemplo introductorio, 80
propiedades de la fuente luminosa, 659
proxy de textura, 679
rampa de colores, 228
reinicializacin de texturas, 6756
representacin de superficies de
intensidad constante, 6678
representacin de superficies por
el mtodo de Gouraud, 6678
representacin plana de superficies, 6678
sintaxis bsica, 7475
sistema de referencia bidimensional, 88

subconjunto de procesamiento de
imgenes, 185
subpatrones de textura, 677
texturado automtico, 679
texturas proxy, 679
tipos de datos, 7475
tipos de fuentes luminosas, 660
transformaciones de barrido, 266
transformaciones de proyeccin
ortogonal, 397
Utility (GLU), 75
Utility Toolkit (GLUT), 75
variables de estado, 180
vector de posicin del observador,
3967
vectores unitarios normales a la
superficie, 6678
ventana de seleccin, 7123
WGL (interfaz Windows), 75
Operaciones de seleccin en
OpenGL, 7117
Operaciones lgicas, 2001
Operador laplaciano, 8312
Operadores diferenciales, 82932
direccional, 831
divergencia, 832
gradiente, 8301, 831
Laplace, 8312
ordinario, 82930
parcial, 830
rotacional, 832
Orden (continuidad de curvas
spline), 4345
Ortogonales, coordenadas, 8123
Overhauser, spline, 4412

P
Paneles tctiles, 6466
acstico, 66
LED, 64
ptico, 64
resistivo, 6466
Pantalla
caligrfica (vectorial), 41
de cristal lquido (LCD), 4547
de panel de plasma, 44
de trazo (vectorial), 41
de vdeo, 35 (vase tambin
Monitor de vdeo)

electroluminiscente, 44
electroluminiscentes de pelcula
fina, 44
emisiva (emisor), 44
multipanel, 5458
no emisiva (no emisor), 44
procesador de, 5354
vectorial, 41
Pantalla de barrido (monitor), 3841
aleatorio, 4142
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
pxel, 39
pixmap, 40
planos de bit, 40
profundidad, 40
relacin de aspecto, 39
resolucin, 39
retorno de haz, 40
retrazado horizontal, 40
retrazado vertical, 40
velocidad de refresco, 4041
Pantalla, coordenadas de
bidimensional, 5153, 8687, 809
tridimensional, 87, 395, 812
Pantallas (control de iluminacin),
5823
Pantallas de panel plano, 4447
de cristal lquido (LCD), 4547
de descarga de gas, 44
diodo emisor de luz (LED), 4445
electroluminiscente de pelcula
fina, 44
emisiva, 44
matriz activa, 4647
matriz pasiva, 47
no emisiva, 44
plasma, 4445
Parbola, 1212
Parmetro
beta, 4645

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 883

ndice
de continuidad, 4445
de desplazamiento (spline),
4445, 454, 466
de grado (B-spline), 4545
de tensin (spline), 4412, 461,
466
Parmetros de atributo, 73, 179
reas de relleno, 199202
caracteres y texto, 21720
color, 1801
escala de grises, 182
estilos de pincel y pluma, 1912,
1945
lneas curvas, 1935
lista de sistemas, 179
polgonos, 199200
puntos, 188
segmento lineal, 18892
smbolos marcadores, 220
Parte real (nmero imaginario), 824
Particionamiento de imgenes, 156
Paseo aleatorio, 5014
Patrones de pxel (semitono), 607
Patrones de reduccin (mapeado de
textura), 655
Patrones de textura volumtricos,
6545
PCX, 805
Peano:
curva, 4967, 4989
espacio, 4989
Pel, 39
Penumbra, 635, 637
Perodo (onda luminosa monocromtica), 735
Persistencia, 38
Personajes articulados (animacin),
76971
PGL (interfaz de Presentation manager con OpenGL), 75
PHIGS (Programmers Hierarchical
Interactive Graphics Standard), 73
PHIGS+, 73
Phong:
modelo de reflexin especular,
58893
representacin de superficies, 617
PICT, 804
Pincel y pluma, atributos, 1912

Pipeline de visualizacin:
bidimensional, 3057
tridimensional, 3601
Pirmide de visin (proyeccin en
perspectiva), 383
Pitteway-Watkins, antialiasing,
2278
Pixblt (transferencia de bloques de
pxeles), 265
Pxel, 39
Pxel, coordenadas del, 8687,
1245
Pixmap, 40, 148
Planck, constante, 6389
Planificacin de tareas, 5
Plano:
de partida (trazado de rayos), 488
cara anterior, 1378
cara posterior, 1378
coeficientes, 1368
complejo, 824
ecuaciones, 1368
frontal (recorte), 370
lejano (recorte), 3702
parmetros, 1368
posterior (recorte), 370
prximo (recorte), 3702
recorte, 3702, 4079
vector normal, 1389
Plano de visualizacin, 356, 361,
362
posicin, 362
vector normal, 362
ventana de recorte, 370, 3778
Planos de bits (sistema de barrido),
40
Planos de recorte, 361
orientaciones arbitrarias, 4079
prximo y lejano, 3702
PNG, 8034
Polares, coordenadas, 78889,
8134
Poliedros, 416
intersecciones en trazado de
rayos, 6256
propiedades, 838
Polgono, 129 (vase tambin rea
de relleno)
ngulo convexo, 1312

883

ngulo interior, 129


rea, 836
arista, 128
atributos, 199200
cara frontal, 1378
cara posterior, 1378
caracterstico, 433
centroide, 8367
clasificaciones, 129
convexo, 129
de control, 433
degenerado, 129
divisin de polgonos cncavos,
1301
divisin de polgonos convexos,
1312
ecuaciones del plano, 1368
efectos de costura, 214
estndar, 128
indicador de arista (OpenGL),
2146
interseccin con rayos, 6256
lado, 128
lista de aristas activas, 2056
malla, 128
mtodos de relleno, 199206
(vase tambin Algoritmos de
relleno de rea)
parmetros del plano, 1368
simple, 128
tabla de aristas, 1356
tabla de caras de la superficie,
1356
tabla de datos geomtricos, 1356
tabla de vrtices, 1356
tablas, 1356
tablas de aristas ordenada, 2045
test interior-exterior, 1324 (vase
tambin Plano)
vector de la arista, 12930
vector normal, 1389
vrtices, 128
Polgono cncavo, 129
divisin, 1301
identificacin, 12930
recorte, 3435
Polilnea, 91, 16062
algoritmos de visualizacin, 100
unin en bisel, 190

ZZ_02_INDICE_GEN_HEARN_1P.qxd

884

09/10/2005

23:33

Pgina 884

ndice

Polilnea, 91, 16062 (cont.)


unin en punta, 190
unin redondeada, 190
Polimarcador, 1534, 16062
Polinomios de Bernstein, 4456
Ponderacin:
mscara (pxel), 223
superficie, 2245
Posicin actual, 87
Posicin actual de barrido
(OpenGL), 148
Postfiltrado, 221 (vase tambin
Antialiasing)
Precisin (atributo de texto), 220
Prefiltrado, 221 (vase tambin
Antialiasing)
Presentation Manager, interfaz con
OpenGL (PGL), 75
Primitivas de salida grfica, 72, 85
rea de relleno, 12439
carcter, 1534
crculo, 10411
elipse, 11120
mapa de bits, 148
mapas de pxel, 148
marcador, 1534
matrices de pxel, 148
polilnea, 91, 16062
polimarcador, 1534, 16062
polinomio, 123
punto, 8687
seccin cnica, 1203
segmento lineal, 92102
spline, 123
texto, 1534
Primitivas para matrices de pxeles,
148
Problema del valor de contorno, 844
Problema del valor inicial, 844
Procedimiento registrado, 80
Procesamiento de imgenes, 3132
Producto escalar (vectores), 8167
Producto vectorial (vectores), 8178
Profundidad (bfer de imagen), 40
Profundidad de campo, 632
Programas de dibujo, 2326
Propiedades de coherencia, 203
Protocolo de transferencia de archivos (ftp), 70

Proyeccin:
axonomtrica, 369
caballera, 376
cabinet, 376
centro, 380
frustum, 3845, 38692
isomtrica, 369
plano, 356, 549
punto de referencia, 380
vector (oblicua), 3767
volumen de visualizacin, 3702,
3778, 3835
Proyeccin de rayos
deteccin de superficies visibles,
5634
geometra slida constructiva,
4869
Proyeccin en perspectiva, 356, 368,
37980
ngulo del campo visual, 3879
casos especiales, 3813
centro, 380
cono de visin, 383
coordenadas de transformacin
normalizadas, 3935
coordenadas, 3813
de dos puntos, 383
de tres puntos, 383
de un punto, 383
frustum, 3845, 38692
frustum oblicuo, 3902
frustum simtrico, 38690
matriz, 3856, 3925
matriz de inclinacin, 391
matriz de transformacin normalizada, 3945
matriz de transformacin oblicua,
3923
pirmide de visin, 383
punto de fuga principal, 383
punto de referencia, 380
puntos de fuga, 383
representacin en coordenadas
homogneas, 3856, 3934
volumen de visualizacin normalizada, 3924
volumen de visualizacin, 3835
Proyeccin en perspectiva oblicua:
frustum, 3902

matriz, 3923
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,
3702
volumen de visualizacin, 3702
volumen de visualizacin normalizado, 372
vista plana, 368
Proyeccin paralela, 356, 368
axonomtrica, 369
caballera, 376
cabinet, 376
ejes principales, 369
isomtrica, 369
oblicua, 3749
ortogonal, 36873
transformacin de inclinacin,
3746
transformacin de normalizacin,
3723, 379
vector, 3767
vista de elevacin, 368
vista superior, 368
volumen de visualizacin, 3702,
3778
Proyeccin paralela oblicua:
coordenadas, 374
en dibujo y diseo, 3746
matriz de transformacin, 3778
proyeccin caballera, 376
proyeccin cabinet, 376
transformacin de normalizacin,
379
vector, 3767
volumen de visualizacin, 3778
Puesta en fase de los pxeles, 221,
225
Punto:
atributos, 188
de foco (elipse), 1112
de fuga principal, 383
de fuga, 383

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 885

ndice
de pivote (rotacin), 240
de referencia (proyeccin en perspectiva), 380
de referencia de visualizacin,
380
en el espacio de coordenadas, 814
fijo (cambio de escala), 242,
2845
observado, 3623
propiedades, 814
recorte, 323
Pureza (luz), 737

R
Radiancia espectral, 6389
Radiante:
energa (radiancia), 6389
exitancia, 6389
flujo, 6389, 63940
intensidad, 6389, 63940
potencia, 6389
transferencia de energa, 6403
Radiosidad (exitancia radiante),
63845
cierre superficial, 6401
ecuacin, 6401
factor de reflectividad, 6401
factores de forma, 6401
modelo bsico, 63843
refinamiento progresivo, 6435
semicubo, 6423
semiesfera, 63940
Races:
de nmeros complejos, 8267
ecuaciones no lineales, 8412
Ratn, 5960
Z, 60
Rayo de sombra, 622
Rayo del pxel, 618619
Rayo secundario, 620
Rayos catdicos, 36
Realidad artificial (vase Realidad
virtual)
Realidad virtual:
aplicaciones, 1011
lenguaje de modelado (VRML),
70
sistemas, 4750, 6263
Realimentacin de eco, 695

Recorte de rea, 33646


Recorte de lnea:
bidimensional, 32336
Cohen-Sutherland, 3249
Cyrus-Beck, 330
Liang-Barsky, 3303
Nichol-Lee-Nichol, 3335
tridimensional, 4047
ventana de recorte no lineal, 335
ventana de recorte no rectangular,
335
Recorte de polgonos:
bidimensionales, 33646
mtodos paralelos, 3389
Sutherland-Hodgman, 33843
tridimensionales, 4068
Weiler-Atherton, 3435
Recorte de superficies, 4068
Recuadro:
de entrada de dial, 58, 59
dimensin, 4956
filtro, 2256
recubrimiento (fractal), 4956
Redes grficas, 69
Reduccin de color:
de corte medio, 793
por popularidad, 7923
uniforme, 792
Refinamiento progresivo (radiosidad), 6435
Reflectividad, 585
Reflector:
difuso ideal, 585, 63940
lambertiano, 585, 63940
perfecto, 585, 63940
Reflexin (luz):
ngulo de incidencia, 5856
coeficientes, 58488, 5889
difusa, 58488
especular (modelo de Phong),
58892
lambertiana, 585
leyes de Fresnel, 5889
rayo, 620
vector del punto medio, 590-2
Reflexin especular, 5834, 58892
ngulo, 588
coeficiente, 5889
exponente, 5889

885

leyes de Fresnel, 5889


modelo de Phong, 58893
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, 5989, 620
vector, 599-600
Refresco:
archivo de visualizacin, 42
bfer, 39 (vase tambin Bfer de
imagen)
TRC, 3641 (vase tambin Tubo
de rayos catdicos)
velocidad (TRC), 36, 4041
Regla de la mano derecha, 8178
sistema cartesiano, 71, 811
Regla de la mano izquierda, coordenadas cartesianas, 8123
Regla de paridad (par-impar), 132
Regla del nmero de vueltas distinto
de cero, 1324
Regla del trapezoide, 842
Regla par-impar de relleno de polgonos, 132
Reglas de produccin, 5212
Relacin de aspecto, 39
Relativas, coordenadas, 87
Relleno
de rea, 20211 (vase tambin
Algoritmos de relleno de rea)
mediante cuadrcula, 200
mediante patrones, 2123
suave, 200
tintado, 200
Representacin, 358 (vase tambin
Representacin de superficies)
de volmenes, 5302, 5324
mediante producto cartesiano
(spline superficial), 436, 454,
464
plana de superficies, 614
rpida de superficies por el mtodo de Phong, 6178

ZZ_02_INDICE_GEN_HEARN_1P.qxd

886

09/10/2005

23:33

Pgina 886

ndice

Representacin de funciones:
explcita, 8289
implcita, 8289
Representacin de superficies, 358,
577, 61345 (vase tambin
Detalles de superficie)
bandas de mach, 617
Gouraud, 6147
intensidad constante, 614
interpolacin de intensidad, 6147
interpolacin de vectores normales, 617
mapeado de fotones, 6467
mtodos poligonales, 6138
Phong, 617
Phong rpida, 6178
plana, 614
radiosidad, 63845
trazado de rayos, 61838
Representaciones de barrido, 4856
Representaciones de objetos:
rboles BSP, 492
rboles cuaternarios, 489
rboles octales, 48992
B-splines, 45464
contorno (B-rep), 415
curvas y superficies fractales,
492521
elipsoide, 4201
esfera, 420
funciones de densidad, 42931
graftal, 524
gramtica L, 524
gramticas de forma, 5214
interpolacin de splines cbicos,
43744
metabolas, 4301
mtodos CSG, 4869
mtodos de particionamiento
espacial, 415
modelado fsico, 5269
modelo de objeto suave, 4301
objeto grfico estndar, 128, 416
poliedros, 416
polgonos, 12839
relieves gausianos, 430
representaciones de barrido, 485
sistemas de partculas, 5245
splines, 43173

splines beta, 4657


splines de Bzier, 44554
splines racionales, 4679
supercudricas, 4224
superficies cudricas, 4202
superficies sin forma, 42931
toro, 4212
visualizacin de datos, 52937
Representaciones de particionamiento del espacio, 415
Representaciones no paramtricas,
8289
Representaciones paramtricas, 829
crculo, 10411, 82932
curva, 8289
elipse, 113
elipsoide, 421
esfera, 420, 82932
parbola, 121
segmento lineal, 323-4, 330,
3801
spline, 123, 434, 435, 436
superficie, 82932
toro, 422
Resaltado (mtodo de seleccin),
693
Resolucin:
aproximaciones de semitono,
6089
dispositivo de visualizacin, 38
Resolucin de ecuaciones integrales:
aproximaciones mediante rectngulo, 8423
mtodos de Monte Carlo, 843
regla de Simpson, 842
regla del trapezoide, 842
Resolucin de ecuaciones lineales:
descomposicin LU, 840
eliminacin gausiana, 839
Gauss-Seidel, 840
regla de Cramer, 839
Resolucin de ecuaciones no lineales, 8423
Resolucin de sistemas de ecuaciones, 83940
Retrazado horizontal, 40
Retrazado vertical, 40
Restricciones (dibujo interactivo),
696

Retorno (haz de electrones), 40


REYES, 553
RGB:
coordenadas cromticas, 743
modelo de color, 4244, 1801,
7424
monitor, 44 (vase tambin
Monitor de vdeo)
Rotacin:
ngulo, 240
bidimensional, 2402, 2456,
2545
composicin, 248
construccin de matrices, 2545
de los ejes de coordenadas, 2724
eje de coordenadas, 2724
eje de, 240
eje espacial general, 27480
eje x, 273
eje y, 274
eje z, 2723
en las animaciones, 2523, 7712
inversa, 2467, 274
mtodos de barrido, 265
mtodos de cuaternios, 2804
punto de pivote, 240
representacin matricial, 246
tridimensional, 27184
vector del eje, 2756
Rotacional, operador, 832
Ruido (tramado), 611
Runga-Kutta, algoritmo, 844

S
Sans-serif, tipo de letra, 153
Saturacin (luz), 737
Secciones cnicas, 1203
Segmento (subseccin de imagen),
156
Segmento de lnea dirigido (vector),
814
Seguimiento (animacin), 760
Seleccin:
coordenadas, 692
dispositivo de entrada, 690, 6924
distancia, 6924
objeto, 6924
resaltado, 693
ventana, 693

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 887

ndice
Semicubo (radiosidad), 6423
Semiesfera (radiosidad), 63940
Semitono:
aleatorizacin, 6103
aproximaciones, 60710
mtodos de color, 610
patrones, 607
Serif, tipo de letra, 153
Servidor grfico, 69
setPixel, procedimiento, 87
SIGGRAPH (Special Interest Group
in Graphics), 70
Smbolo:
instancia, 779
jerarquas, 7812
modelado, 779
Simetra
crculo, 104
elipse, 113
en los algoritmos de dibujo de
curvas, 121
Simpson, regla de, 842
Simulaciones, 67, 1011, 1223
Simuladores, 1923
de vuelo, 1922
Sistema de color completo, 44
Sistema de animacin
parametrizado, 761
por script, 761
Sistema de barrido, 5054
codificacin de celdas, 53
codificacin de longitud de recorrido, 54
controlador de pantalla, 5051
controlador de vdeo, 5153
controlador grfica, 53
conversin de barrido, 53
coprocesador de pantalla, 53
procesador de pantalla, 5354
Sistema de enfoque (TRC), 37
Sistema de fotogramas clave, 760,
7627
Sistemas de entrada de voz, 67
Sistemas de pantalla grande, 5458
Sistemas de partculas, 5245
Snell, ley de, 598
Software grfico: (vase tambin
OpenGL)
bidimensional, 73

CG API, 70
correspondencia de lenguaje, 74
estndares, 7374
funciones bsicas, 7273
GKS, 7374
GL, 70, 73
Open Inventor, 74, 75
operaciones de control, 73
PHIGS, 73
PHIGS+, 73
pipeline de visualizacin, 7172
Renderman, 74
representaciones de coordenadas,
7072
tridimensional, 73
VRML, 70, 74
Sombra, 635, 637
Sombras (color), 739
Sombras:
modelado, 6012
penumbra, 635, 637
sombra, 635, 637
Sombreado (vase Modelos de iluminacin; Representacin de
superficies)
Spaceball, 11, 6061
SpaceGraph, sistema, 47
SPIFF, 8023
Spline cardinal, 4414
Spline Catmull-Rom, 4412
Spline cbica, 123, 435
beta, 466
Bzier, 4513
B-spline, 4601
interpolacin, 43744
natural, 438
Spline de aproximacin, 432
Spline de interpolacin, 432
Spline hermtica, 43841
Spline racional, 4679
Stoke, teorema de, 833
Subdivisin espacial adaptativa:
rbol BSP, 492
trazado de rayos, 627
Subdivisin espacial uniforme:
rbol octal, 48992
trazado de rayos, 627
Suceso:
cola, 694

887

modo de entrada, 694


Supercudrica, 4224
Superelipse, 4224
Superelipsoide, 423
Superficie:
circundante, 560
cudrica, 4202
curva de ajuste, 437
detalle, 64749
exterior, 560
fractal, 4989, 5001, 5046, 519
interior, 560
plana, 416
ponderacin, 2245
representacin explcita, 8289
representacin implcita, 8289
representacin no paramtrica,
8289
representacin paramtrica, 829
sin forma, 42931
solapada, 560
supercudrica, 4224
teselada, 128
Superficie curva, 4202, 436, 5302
B-spline, 4645
cudrica, 4202
curva de ajuste, 4689
elipsoide, 4201
esfera, 420
grficas de contorno, 5302
isosuperficie, 5302
ponderacin, 2245
representacin (vase
Representacin de superficies)
representacin no paramtrica,
8289
representacin paramtrica, 829
representaciones explcitas, 8289
representaciones implcitas, 8289
spline, 436 (vase tambin
Superficie spline)
spline de Bzier, 454
supercudrica, 4224
toro, 4212
visibilidad, 5656 (vase tambin
Deteccin de superficies visibles)
Superficie spline, 432, 436
ajuste, 437

ZZ_02_INDICE_GEN_HEARN_1P.qxd

888

09/10/2005

23:33

Pgina 888

ndice

Superficie spline, 432, 436 (cont.)


Bzier, 454
B-spline, 4645
representacin mediante producto
cartesiano, 436
visualizacin, 4704
Supermuestreo, 221, 632
Sutherland-Hodgman, recorte de
polgonos, 33843

T
TAC (Tomografa axial computerizada), 31
Tablas:
de atributos (polgono), 1356
de aristas, 1356, 2045, 2056
de aristas ordenadas, 2045
de caras de la superficie, 1356
de consulta de vdeo, 604
de sustitucin, 1812, 604
de sustitucin de colores, 1812
de vrtices (polgono), 1356
geomtrica, 1356
Tableta, 6263 (vase tambin
Digitalizador)
de datos, 62
grfica, 6263
Tamao en puntos (carcter), 217
Targa, 805
TCP/IP, 6970
Teclado, 58
Tcnicas de construccin interactiva
de imgenes, 6959
arrastre, 696
campo de gravedad, 6989
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, 5356

Teoremas diferenciales, 8335


Teora de los tres estmulos de la
visin, 742
Terminacin
cuadrada saliente, 190
de lnea redondeada, 189
plana, 189
Terreno (fractal), 5057
Teselado de superficies, 128
Test interior-exterior:
planos espaciales, 1379
regla del nmero de vueltas distinto de cero para polgonos,
1324
regla par-impar para polgonos,
132
Tetera, 425
Texel, 6501
Texto: (vase tambin Carcter)
alineacin, 220
atributos, 21720
precisin, 220
recorte, 3478
trayectoria, 2189
Textura slida, 6545
TGA, 805
TIFF, 803
Tintes (color), 739
Tipo de letra, 153 (vase tambin
Fuente)
legible, 153
Tomografa, 31
axial computerizada (TAC), 31
computerizada (TC), 31
emisiva de posicin (TEP), 31
Tonalidades (color), 739
Tono, 737
Topolgico
dimensin, 4956
recubrimiento (fractal), 496
Toro, 4212
Trackball, 6061
Tramado, 610
aleatorio (ruido), 611
matriz, 611
mtodo de difusin de errores,
6123
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, 2424, 248
compuestas, 24759, 2879
conmutativa, 2512
cuerpo rgido, 2389, 2534
de barrido, 2656
de coordenadas universales a
coordenadas de visualizacin,
71, 307, 308, 361, 3667
de la estacin de trabajo, 313
de ventana a visor, 306, 3103
de visor, 395
eficiencia de clculo, 2523
geomtrica bidimensional, 23869
geomtrica tridimensional, 2701
geomtrica, 73, 237
geomtricas bsicas, 23844
inversa, 2467
mtodos de barrido, 2656
modelado, 73, 237
no conmutativa, 2512
representacin matricial, 24465,
27091
rotacin, 2402, 246, 27184
sistema de coordenadas, 2679,
2912
traslacin, 23840, 2456, 2701
Transformacin de inclinacin,
2634
bidimensional, 2634
direccin x, 2634
direccin y, 264
direccin z, 2901
eje, 2634, 2901
en proyecciones en perspectiva
oblicuas, 3912
en proyecciones paralelas oblicuas, 3746
matriz, 2634, 2901
parmetros, 2634, 264, 2901
tridimensional, 2901
Transformacin de normalizacin:
bidimensional, 3103
proyeccin en perspectiva, 3934

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 889

ndice
proyeccin ortogonal, 3702
Transformacin de proyeccin:
axonomtrica, 369
caballera, 376
cabinet, 376
ejes principales, 369
isomtrica, 369
ortogonal, 36873
ortogrfica, 368
paralela, 356, 368, 36879
paralela oblicua, 3749
perspectiva, 356, 368, 37995
perspectiva oblicua, 3902
perspectiva simtrica, 38690
Transformacin de reflexin, 2603
bidimensional, 2603
eje, 260, 290
mtodos de barrido, 2667
plano, 290
tridimensional, 290
Transformacin de visualizacin, 73
(vase tambin Proyeccin)
algoritmos de recorte, 32348,
40110
bidimensional, 306
coordenadas de pantalla, 5153,
8687, 395, 809
coordenadas de proyeccin normalizadas, 361, 372, 379,
3925
coordenadas normalizadas, 307
coordenadas uvn, 3634
cuadrado normalizado, 3113
efectos de pantalla dividida, 313,
3202
frustum, 3845, 38692
parmetros de la cmara, 355,
3601
pipeline, 3057, 3601
plano de proyeccin, 356, 361,
362
plano de recorte lejano, 3702
plano de recorte prximo, 3702
plano de visualizacin, 356, 361-2
planos de recorte, 361
proyeccin en perspectiva,
37995
proyeccin en perspectiva
oblicua, 3902

proyeccin en perspectiva simtrica, 38690


proyeccin ortogonal, 36873
proyeccin paralela oblicua,
3749
proyeccin paralela, 3689
proyecciones, 356
punto de vista, 362
transformacin de coordenadas
universales a coordenadas de
visualizacin, 308, 3667
transformacin de estacin de trabajo, 313
transformacin de visor, 395
tridimensional, 35560
vector de visualizacin vertical,
362
ventana de recorte, 305, 3079
ventana de visualizacin, 305
visualizacin normalizado, 3101
volumen de visualizacin normalizado, 372, 379, 3924
volumen de visualizacin, 361
Transmisin especular (refraccin),
598
Transparencia: (vase tambin
Refraccin; Trazado de rayos)
coeficiente, 600
factor, 200
ley de Snell, 598
modelo bsico, 600
vector, 599-600
Transpuesta (matriz), 823
Traslacin:
bidimensional, 23840, 2456
composicin, 248
distancias, 238
inversa, 2467, 271
mtodos de barrido, 265
representacin matricial, 2456,
270
tridimensional, 2701
vector, 238
Trayectoria (texto), 2189
Trazado de rayos, 619
algoritmo bsico, 6202
ngulo de refraccin, 622
antialiasing, 6323
rbol, 620

889

clculos de interseccin con


superficies, 62330
cdigos, 6345
de distribucin, 6345
desenfoque de movimiento, 6357
ecuacin del rayo, 622
efectos de enfoque de cmara,
6302
efectos del objetivo de la cmara,
6345
en el modelo de radiosidad, 6435
fluctuacin, 6345
fuente de luz compleja, 635
haces, 62830, 631
intersecciones con la esfera,
6235
intersecciones con poliedros,
6256
mtodo del bfer de luz, 62830
muestreo adaptativo, 632
muestreo estocstico, 6345
rayo de sombra, 622
rayo del ojo (rayo del pxel),
618619
rayo del pxel (primario),
618619
rayo luminoso invertido, 620
rayo reflejado, 620
rayo refractado, 620, 622
rayos distribuidos, 6348
rayos secundarios, 620
recorrido de celdas, 6278
subdivisin adaptativa, 627
subdivisin del espacio, 6278
subdivisin uniforme, 627
supermuestreo, 632
trazado de conos, 633
vector de la trayectoria, 6212
vector de transmisin, 622
volmenes de contorno, 626
Trazadora de plumillas, 68, 69
Trazo descendente (carcter), 217
Tubo de rayos catdicos (TRC), 35
(vase tambin Monitores de
vdeo; Pantalla de barrido)
alta definicin, 38
nodo de aceleracin, 36
can de electrones, 36
ctodo, 36

ZZ_02_INDICE_GEN_HEARN_1P.qxd

890

09/10/2005

23:33

Pgina 890

ndice

Tubo de rayos catdicos, (cont.)


color, 4244
componentes, 3638
deflexin del haz, 37
enfoque, 37
filamento, 36
fsforo, 36
intensidad del haz, 37
mscara de sombra, 4243
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, 4244
tamao de punto, 38
tensin de aceleracin, 36
velocidad de refresco, 36

U
Unidad imaginaria, 825
Unin, polilneas
en bisel, 190
en punta, 190
redondeada, 190
Universales, coordenadas, 7172
URL (Uniform Resource Locator),
6970
Usuario:
dilogo, 724
facilidades de ayuda, 7256
interfaz, 724 (vase tambin
Interfaz grfica de usuario)
modelo, 724
uvn, sistema de coordenadas, 3634

V
Valores cromticos, 737, 741, 742
Variable:
dependiente, 8289
independiente, 8289
Variacin de intensidad con la profundidad, 3567
Vector:
ngulos directores, 815
arista, 12930
columna (matriz), 8212

cosenos directores, 815


de desplazamiento, 238 (vase
tambin Traslacin)
de eje (rotacin), 2756
de nudos, 456
de posicin, 8189
de transmisin (refraccin), 599600
de trayectoria (trazado de rayos),
6212
del observador (modelo de iluminacin), 588
del punto medio, 590-2
dimensin, 818
en la representacin de cuaternios,
8278
espacio vectorial, 81920
fila (matriz), 8212
fuente luminosa, 5867
mdulo (longitud), 815
multiplicacin por un escalar, 816
normal a la superficie, 1389,
656, 658, 8301
operaciones, 8167
producto, 8178
producto escalar, 8167
producto vectorial, 8178
propiedades, 8146
proyeccin paralela oblicua,
3767
punto medio, 590-2
reflexin especular, 588
suma, 816
transmisin (refraccin), 599-600
traslacin, 238
vertical (carcter), 218
visualizacin de datos, 5325
Vector base, 81920 (vase tambin
Base)
ortogonal, 81920
ortonormal, 81920
Vector normal:
interpolacin (representacin
superficial de Phong), 617
plano de visualizacin, 362
promedio (malla poligonal), 614
superficie curva, 656, 658, 8301
superficie de un plano, 1389
Vector vertical de visualizacin:

bidimensional, 308
tridimensional, 363
Vectores de los ejes de coordenadas
(base), 81920
Velocidad de la luz, 736
Ventana, 305 (vase tambin
Ventana de recorte; Ventana de
visualizacin; Transformacin de
visualizacin; Visor)
Ventana de recorte, 305, 370, 3778
efectos de ampliacin, 306
efectos panormicos, 306
en coordenadas de visualizacin,
308
en coordenadas universales,
3089
mapeado de visor, 3101
no lineal, 3356, 346
no rectangular, 335, 345
Ventana de visualizacin, gestin,
305
Vrtice (polgono), 128
Visiocasco, 11, 4750, 360 (vase
tambin Realidad virtual)
Visin (teora de los tres estmulos),
742
Visor, 305 (vase tambin Ventana
de recorte)
en coordenadas de pantalla, 3113
normalizado, 3101
tridimensional, 361 (vase tambin Volumen de visualizacin)
Vista de elevacin, 368
Vista superior, 368
Vistas en seccin, 359
Visualizacin:
archivo, 42
ampliacin y reduccin, 2989
aplicaciones, 1219
bidimensional, 30514
cientfica, 12, 529 (vase tambin
Visualizacin de datos)
controlador, 5051
coprocesador, 53
dispositivos, 3558 (vase tambin Monitores de vdeo;
Procesadores de visualizacin)
despieces y secciones transversales, 359

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 891

ndice
estereoscpica, 4750, 360
funciones de respuesta, 81
lista de, 42
mtodos, 52937 (vase tambin
Visualizacin de datos)
panormica, 306
programa de, 42
tridimensional, 7172, 35560,
36296
ventana, 32, 305
Visualizacin de datos:
aplicaciones, 1219
campos escalares, 52933
campos multivariables, 536
campos tensoriales, 5356
campos vectoriales, 5325
escalares, 52933
glifos, 536
grficas de contorno, 5302
isolneas, 5302
isosuperficies, 5302
lneas de campo, 534
lneas de flujo, 534
mtodos de codificacin de color,
529
multivariados, 536
representacin de volmenes,
5302, 5324
Visualizacin de polgonos:
bandas de mach, 617
Gouraud, 6147
intensidad constante, 614
interpolacin de intensidad, 6147
interpolacin de vectores normales, 617
Phong, 617
Phong rpido, 6178
plano, 614
Volumen de visualizacin paralelepipdico, 371, 3778, 390, 3934
rectangular, 371
Volumen de visualizacin, 361
cubo unitario, 3702, 3789,
3925
normalizado, 3723, 379, 3925
proyeccin en perspectiva,
38392
proyeccin paralela, 3702, 3702
Vxel, 491

VRML (Virtual-reality modeling


language), 70

W
Warn, modelo (fuente luminosa),
5823
Weiler-Atherton, recorte de polgonos, 3435
WGL (Interfaz Windows a
OpenGL), 75
World Wide Web, 6970

X
XBM, 804
XPM, 804
XWindow System, 75
XYZ, modelo de color, 73940

Y
YCrCb, modelo de color, 745
YIQ, modelo de color, 745
YUV, modelo de color, 745

891

ZZ_02_INDICE_GEN_HEARN_1P.qxd

09/10/2005

23:33

Pgina 892

ZZ_03_INDICE_OPENGL_HEARN_1P.qxd

09/10/2005

23:35

Pgina 893

ndice de funciones OpenGL


Funciones de la biblioteca bsica
glBegin:
banda de cuadrilteros, 1434
banda de tringulos, 1413
cuadrilteros, 143
polgono, 1401
polilnea, 9192
polilnea cerrada, 92
puntos, 8890
segmentos de lnea, 79, 91
tringulo ventilador, 1423
tringulos, 1412
glBindTexture, 6767
glBitmap, 14850
glBlendFunc, 1856, 2289
glCallList, 1567
glCallLists, 1578, 787
glClear, 789, 56970
glClearColor, 767, 1878, 3156
glClearDepth, 56970
glClearIndex, 1878, 3156
glClipPlane, 40910
glColor, 789, 1834
glColorPointer, 1867
glCopyPixels, 1523, 2667
glCopyTexImage, 6756
glCopyTexSubImage, 6756
CullFace, 5689
glDeleteLists, 1589
glDeleteTextures, 6767
glDepthFunc, 56970
glDepthMask, 5701, 6667
glDepthRange, 56970
glDisable, 1845, 1967, 2123,
40910, 4745, 5689
glDisableClientState, 1478
glDrawBuffer, 1512, 2667

glDrawElements, 1457
glDrawPixels, 151, 2667
glEdgeFlag, 2156
glEdgeFlagPointer, 2156
glEnable:
antialiasing, 2289
comprobacin de profundidad,
56970
curvas de Bzier, 4745
eliminacin de polgonos, 5689
estilos de lnea, 1967
estilos de relleno, 2123
fuente luminosa, 65960
mezcla de color, 1523, 1845
normalizacin de vectores, 6678
planos de recorte opcionales,
40910
semitonos (tramado), 6689
superficies de Bzier, 4778
texturado, 6689, 6712, 6734
variacin de la intensidad con la
profundidad, 571
glEnableClientState:
indicadores de aristas, 2156
matrices de colores, 1856
matrices de coordenadas de textura, 6756
matrices de vrtices, 1457
normales a la superficie, 6678
glEnd, 8889
glEndList, 1556, 787
glEvalCoord:
curva de Bzier, 4745
superficie de Bzier, 4778
glEvalMesh:
curva de Bzier, 477
superficie de Bzier, 4789

glFlush, 801
glFog, 571
glFrontFace, 2157
glFrustum, 3989
glGenLists, 1567
glGenTextures, 677
glGet**, 229, 2956, 3145, 410,
772
glGetTexLevelParameter, 679
glIndex, 1834
glInterleavedArrays, 1867
glIndexPointer, 1878
glInitNames, 7123
glIsList, 1567
glIsTexture, 6778
glLight, 6589
glLightModel, 6624
glLineStipple, 1967
glLineWidth, 1956
glListBase, 1578
glLoadIdentity, 88, 2934, 314
glLoadMatrix, 2934
glLoadName, 7123
glLogicOp, 1523
glMap:
curva de Bzier, 4745
superficie de Bzier, 4778
glMapGrid:
curva de Bzier, 477
superficie de Bzier, 4789
glMaterial, 6645
glMatrixMode, 789, 88, 2945,
314, 396
glMultMatrix, 2945
glNewList, 1556, 787

ZZ_03_INDICE_OPENGL_HEARN_1P.qxd

894

09/10/2005

23:35

Pgina 894

ndice de funciones OpenGL

glNormal, 6667
glNormalPointer, 6678

glPushMatrix, 2956
glPushName, 7123

glOrtho, 397

glRasterPos, 14950, 155


glReadBuffer, 1512
glReadPixels, 1512, 2667
glRect, 13940
glRenderMode, 7112
glRotate, 293

glTexCoordPointer, 6756
glTexEnv, 6745
glTexImage1D, 6689
glTexImage2D, 6712
glTexImage3D, 6734
glTexParameter, 66970, 6726,
6789
glTexSubImage, 6778
glTranslate, 293

glScale, 293
glSelectBuffer, 7112
glShadeModel, 1978, 2134, 6667

glVertex, 79, 8890


glVertexPointer, 1457, 1867
glViewport, 3145, 399

glPixelStore, 14950
glPixelZoom, 2678
glPointSize, 1956
glPolygonMode, 2146, 5701
glPolygonOffset, 2145
glPolygonStipple, 2123
glPopAttrib, 22930
glPopMatrix, 2956
glPopName, 7123
glPushAttrib, 22930

glTexCoord, 66970, 6729

Funciones de la biblioteca GLU


gluBeginCurve, 4801
gluBeginSurface, 4812
gluBeginTrim, 4834
gluBuild*MipmapLevels, 6789
gluBuild*Mipmaps, 6789
gluCylinder, 4267
gluDeleteNurbsRenderer, 4801
gluDeleteQuadric, 4267
gluDisk, 4267
gluEndCurve, 4801
gluEndSurface, 4812
gluEndTrim, 4834

gluGetNurbsProperty, 4823
gluLoadSamplingMatrices, 4834
gluLookAt, 397
gluNewNurbsRenderer, 4802
gluNewQuadric, 4256
gluNurbsCallback, 4834
gluNurbsCallbackData, 4834
gluNurbsCurve, 4801
gluNurbsProperty, 4812, 4823
gluNurbsSurface, 4812

gluPerspective, 3989
gluPickMatrix, 7123
gluPwlCurve, 4834
gluQuadricCallback, 4278
gluQuadricDrawStyle, 4256
gluQuadricNormals, 4278
gluQuadricOrientation, 4267
gluQuadricTexture, 679
gluSphere, 4256

gluOrtho2D, 79, 88, 3145


gluPartialDisk, 4267

Funciones de la biblioteca GLUT


glutAddMenuEntry, 7178
glutAddSubMenu, 7201
glutAttachMenu, 7178
glutBitmapCharacter, 155
glutButtonBoxFunc, 711

glutDestroyWindow, 3167
glutDetachMenu, 7234
glutDeviceGet, 710
glutDialsFunc, 711
glutDisplayFunc, 767, 31920
glutFullScreen, 3167

glutCreateMenu, 717
glutCreateSubWindow, 3189
glutCreateWindow, 767, 3156
glutDestroyMenu, 720

glutGet, 320
glutGetMenu, 7201
glutGetWindow, 3167
glutHideWindow, 3189

glutIconifyWindow, 3178
glutIdleFunc, 31920, 772
glutInit, 767, 3145
glutInitDisplayMode, 767, 1823,
3156, 5689, 772
glutInitWindowPosition, 767, 3156
glutInitWindowSize, 767, 3156
glutKeyboardFunc, 705
glutMainLoop, 767, 31920

ZZ_03_INDICE_OPENGL_HEARN_1P.qxd

09/10/2005

23:35

Pgina 895

ndice de funciones OpenGL


glutMotionFunc, 705
glutMouseFunc, 7001
glutPassiveMotionFunc, 705
glutPopWindow, 3178
glutPositionWindow, 3167
glutPostRedisplay, 31920
glutPushWindow, 3178
glutRemoveMenuItem, 7234
glutReshapeFunc, 1589, 3178
glutReshapeWindow, 3167
glutSetColor, 1845
glutSetCursor, 3189
glutSetIconTitle, 3178
glutSetMenu, 720

glutSetWindow, 3167
glutSetWindowTitle, 3178
glutShowWindow, 3189
glutSolidCone, 4245
glutSolidCube, 417
glutSolidDodecahedron, 417
glutSolidIcosahedron, 4179
glutSolidOctahedron, 417
glutSolidSphere, 424
glutSolidTeapot, 4256
glutSolidTetrahedron, 417
glutSolidTorus, 4245
glutSpaceballButtonFunc, 710
glutSpaceballMotionFunc, 710
glutSpaceballRotationFunc, 711
glutSpecialFunc, 707

glutStrokeCharacter, 155
glutSwapBuffers, 6667, 772
glutTabletButtonFunc, 710
glutTabletMotionFunc, 710
glutWireCone, 424
glutWireCube, 417
glutWireDodecahedron, 417
glutWireIcosahedron, 417
glutWireOctahedron, 417
glutWireSphere, 424
glutWireTeapot, 4256
glutWireTetrahedron, 417
glutWireTorus, 4245

895

ZZ_03_INDICE_OPENGL_HEARN_1P.qxd

09/10/2005

23:35

Pgina 896

IIIII

IIIIIII

IIIIIIIIIIIIIIIIIII

IIIII

III

IIII

IIIIIIIIIIIIIIIIIIIIII
IIIIIII

IIIII

et/h

IIII

.n

M. Pauline Baker pertenece al Departamento de Informtica y a la Escuela


de Informtica de la Universidad de Indiana-Universidad Purdue. La Dra.
Baker es una eminente cientfica y dirige el Laboratorio de Tecnologa Ubicua
para Visualizacin y Espacios Interactivos, colaborando con diversos grupos de
investigacin en la utilizacin de la infografa y de la realidad virtual para la
exploracin de datos cientficos. Anteriormente, la Dra. Baker era Directora
asociada de entornos de visualizacin y entornos virtuales en NCSA (National
Center for Supercomputer Applications), Universidad de Illinois.

li b r o sit

Acerca de los autores


Donald Hearn se incorpor a la Facultad de Informtica de la Universidad
de Illinois en Urbana-Champaign en 1985. El Dr. Hearn ha impartido un
amplio rango de cursos sobre grficos por computadora, visualizacin
cientfica, ciencias de la computacin, matemticas y ciencia aplicada.
Asimismo, ha dirigido numerosos proyectos de investigacin y ha publicado
diversos artculos tcnicos en estas reas.

w.

Novedades principales
Proporciona explicaciones completas y exhaustivas de la biblioteca bsica
de programacin grfica OpenGL y de las bibliotecas auxiliares GLU y
GLUT.
Incluye un amplio conjunto de ms de 100 ejemplos de programacin para
ilustrar el uso de las funciones OpenGL.
Presenta ejemplos de programacin en C11, con ms de 20 programas
C11 completos.
Combina la explicacin de los mtodos infogrficos tridimensionales y
bidimensionales.
Incluye los ms recientes avances en las tcnicas y aplicaciones infogrficas.

Incluye:
w

En esta tercera edicin se presentan los principios bsicos de diseo,


utilizacin y comprensin de los sistemas y aplicaciones infogrficos, junto con
numerosos ejemplos de programacin en OpenGL. Se analizan en profundidad
los componentes tanto hardware como software de los sistemas grficos,
utilizndose un enfoque integrado para relacionar los temas de grficos
bidimensionales y tridimensionales. Sin presuponer ningn conocimiento
previo del lector en el tema de grficos por computadora, los autores
presentan los conceptos fundamentales y los utilizan para mostrar cmo crear
todo tipo de imgenes, desde simples dibujos lineales hasta escenas
fotorrealistas altamente complejas.

earn

IIII

LibroSite es una pgina


web asociada al libro,
con una gran variedad
de recursos y material
adicional tanto para los
profesores como para
estudiantes. Apoyos a la
docencia, ejercicios de
autocontrol, enlaces
relacionados, material
de investigacin, etc.,
hacen de LibroSite el
complemento
acadmico perfecto
para este libro.

Grficos por computadora con OpenGL

3 ed.

3 edicin

Grficos por computadora


con OpenGL
www.librosite.net/hearn

Hearn
Baker

Donald Hearn
M. Pauline Baker
www.pearsoneducacion.com

También podría gustarte