Está en la página 1de 32

C4.

3D ENGINE GEOMETRY
Se estudian las aplicaciones prcticas del material presentado en los tres primeros
captulos.
Primero, se trata la naturaleza de lneas y planos en el espacio.
Posteriormente, se introduce el concepto de frustum, examinando parte de la
matemtica que describe la cmara virtual.
4.1 Rectas en el espacio.
Definicin (1.1). Dados dos puntos 3 2 1
V P , P
, la lnea recta que los atraviesa
puede expresarse en forma paramtrica como:
(4.1) ( ) ( )
2 1
1 P P P t t t + con R t
El segmento que conecta
1
P
con
2
P
, corresponde a los valores de
[ ] 1 0, t
.
Definicin (1.2). Un rayo es una lnea que se encuentra limitada en cierto sentido por
un punto concreto, y se extiende hasta el infinito en el sentido opuesto.
Los rayos suelen expresarse mediante la ecuacin paramtrica:
(4.2) ( ) V S P t t +
1
con 0 t
Que es equivalente a la ecuacin 4.1, sean:
1
P S
y
1 2
P P V
.
4.1.1 Distancia entre punto y recta.
Teorema (1.1). Sean un punto
Q
y una recta definida por un punto
S
y un vector
direccin V , la distancia entra ambos viene puede obtenerse a partir de la expresin:
( )
( ) [ ]
2
2
2
V
d
V S Q
S Q


Demostracin:
La distancia d puede obtenerse a partir del vector
S Q
, como la magnitud de su
componente perpendicular a V .
Mediante el teorema de pitgoras, es posible obtener la distancia al cuadrado:
(4.3) ( ) ( ) [ ] ( )
( )
2
2 2 2 2
1
]
1


V
V S Q
S Q S Q S Q
V
V
proj d
Tras simplificar y tomar la raz cuadrada, obtenemos:
(4.4)
( )
( ) [ ]
2
2
2
V
d
V S Q
S Q


4.1.2 Distancia entre dos rectas en el espacio.
1
Teorema (1.2)
Dos rectas se cruzan en el espacio cuando no son paralelas y no intersectan.
Demostracin:
La mnima distancia entre dos lneas que se cruzan puede obtenerse encontrando los
parmetros
R t t
2 1
,
que minimizan la aplicacin
( ) ( )
2 2 1 1
t t P P
.
Sean las rectas ( )
1 1
t P y ( )
2 2
t P , definidas como: (4.5)
( )
( )
2 2 2 2 2
1 1 1 1 1
V S P
V S P
t t
t t
+
+
Entonces la distancia al cuadrado entre los puntos de ambas rectas puede expresarse
como:
(4.6) ( ) ( ) ( )
2
2 2 1 1 2 1
t t t t f P P ,
Desarrollando el cuadrado y sustituyendo ( )
1 1
t P y ( )
2 2
t P por sus correspondientes
definiciones:
(4.7)
( ) ( ) ( ) [ ]
( ) ( ) ( ) ( )
( ) ( ) ( )( )
( ) ( ) ( )
( )
1 1 2 2 1 1 2 2 2 1 2 1
2 2 2
2
2
2
2
2
2 1 1 1
2
1
2
1
2
1
1 1 2 2 1 1 2 2 2 1 2 1
2
2 2 2
2
1 1 1
2 2 2 1 1 1
2
2 2 2
2
1 1 1
2 2 1 1
2
2 2
2
1 1
2
2 2 1 1 2 1
2
2 2
2
2
2
V t V t V t S V t S S S
V t S V t S V t S V t S
V t V t V t S V t S S S V t S V t S
V t S V t S V t S V t S
t t t t
t t t t f
+ + +
+ + + + +
+ + + + + +
+ + + + +
+

P P P P
P P ,
El valor mnimo de ( )
3 2
2 1
R R t t f : , puede obtenerse derivando parcialmente con
respecto a
1
t
y
2
t
, e igualando las expresiones resultantes a cero:
(4.8)
( ) [ ]
( ) [ ]
1 1 2 2 1 2 2
2
2 2
2
1 1 2 2 2 2 1 2 2 2
2
2
2
2
2
1 2 2 1 2 1 1
2
1
1
1 1 2 2 1 1 2 1 1 1
2
1
2
1
1
2 2 2 2
2 2
2 2 2 2
2 2
V t V V S V S V t
t
V t V t V t S V t S V t
t
f
V t V V S V S tV
t
V t V t V t S V t S V t
t
f
+

+ +

+ +

+ +

Igualando a cero ambas expresiones:


2
(4.9)
( )
( )
0
0 2
0
0 2
1 1 2 2 1 2 2
2
2 2
2
1 1 2 2 1 2 2
2
2 2
2
1 2 2 1 2 1 1
2
1 1
1
1 2 2 1 2 1 1
2
1 1
1
+

+ +

+ +

V t V V S V S V t
t
f
V t V V S V S V t
t
f
V t V V S V S V t
t
f
V t V V S V S V t
t
f
El sistema resultante puede escribirse en forma matricial como:
( )
( )
2 1 2 2 1 2 2
2
2 2 1 1 2
1 2 1 1 2 1 1 1 2 2
2
1 1
1 1 2 2 1 2 2
2
2 2
1 2 2 1 2 1 1
2
1 1
0
0
S S V V S V S V V
S S V V S V S V V
V V V S V S
V V V S V S
+ +
+ +

+
+ +
V t t
t V t
t V t
t V t
(4.10)
( )
( )
1
]
1

1
]
1

1
]
1

2 1 2
1 1 2
2
1
2
2 2 1
2 1
2
1
V S S
V S S
V V
V V
t
t
V
V
Y, resolvindolo:
( )
( )
1
]
1

1
]
1

1
]
1


2 1 2
1 1 2
1
2
2 2 1
2 1
2
1
2
1
V S S
V S S
V V
V V
V
V
t
t
(4.11)
( )
( )
( )
1
]
1

1
]
1

1
]
1


2 1 2
1 1 2
1
2
1 2 1
2 1
2
2
2
2
2
1
2
2 1
2
1
1
V S S
V S S
V V
V V
V V V
V
V V
t
t
Si los vectores
2 1
V , V
son unitarios, entonces los clculos se simplifican, pues
1
2
2
2
1
V V .
Sustituyendo los valores de
2 1
t t ,
en ( )
2 1
t t f , , se tiene la distancia al cuadrado entre
las dos rectas que se cruzan.
Si la cantidad ( ) 0
2
2
2
1
2
2 1
V V V V , entonces las dos rectas son paralelas, en cuyo caso
la distancia entre ambas rectas es igual a la distancia entre cualquier punto de una de
ellas y la otra.
3
4.2 Planos en el espacio:
Definicin (2)
Dado un punto P y un vector normal N , el plano que contiene a P y es
perpendicular a N , se define como el conjunto de puntos ( ) { } 0 P P N | P S .
Esto es, el conjunto de puntos cuya diferencia con P es perpendicular a la direccin
normal N .
La ecuacin general de un plano viene dada por la expresin:
(4.12)
0 + + + D Cz By Ax
Donde:
-
( ) C B A , , N
- P N D
- La distancia al plano paralelo que pasa por el origen viene dada por:
N
D
d
Cuando el vector N es unitario, entonces es posible obtener la distancia y la posicin
relativa de cualquier punto arbitrario
Q
, mediante la ecuacin:
(4.13)
D d + Q N
Si 0 d , entonces
Q
reside en el plano.
Si 0 > d , entonces
Q
se encuentra en el lado en el que apunta la normal, o positivo.
Si 0 < d , entonces
Q
se encuentra en el lado en el lado negativo.
Resulta til representar un plano mediante un vector de cuatro coordenadas, utilizando
la notacin abreviada
D N,
.
Mediante el uso de coordenadas homogneas:
Q L d
con
D N, L
{ } 0 Q L | Q S
Dado que
Q
es un punto se hace
1
w
Q
.
4.2.1 Interseccin de recta y plano.
4
Es una operacin comn, en concreto durante el recorte poligonal (polygon clippling).
Teorema (2.1)
Sean la recta
( ) V S P t t +
y el plano
D N,
, no paralelos, stos intersectan en un
punto.
Demostracin:
Puede obtenerse el punto de interseccin entre ambos resolviendo, para R t , la
ecuacin:
(4.14)
( ) 0 + D t P N
Sustituyendo
( ) V S P t t +
en 4.14:
(4.15)
( ) 0 + + + + D t D t V N S N V S N
Y, despejando el parmetro R t :
(4.16)
( )
V N
S N
S N V N

+

D
t D t
Sustituyendo el valor obtenido de
t
en la expresin de
( ) t P
, se obtiene el punto de
interseccin.
Si 0 V N , entonces la lnea es paralela al vector director del plano.
Al utilizar coordenadas homogneas, la expresin 4.16 quedara:
(4.17)
V L
S L

t
Dado que S es un punto, su coordenada 1 w .
Como V es un vector, su coordenada 0 w .
4.2.2 Interseccin de planos.
Es comn el definir regiones del espacio mediante un conjunto de planos que
constituyen un poliedro convexo.
5
Los vrtices y lados del poliedro as definido, pueden obtenerse determinando los
puntos de interseccin de subconjuntos de tres planos.
Teorema (2.2). Sean 1 1 1
D , N L
y 2 2 2
D , N L
dos planos arbitrarios, no
paralelos, stos intersectan en una recta.
Demostracin:
La direccin V de la recta de interseccin, es perpendicular a las normales de ambos
planos; es decir:
2 1
N N V
Para obtener un punto arbitrario de la recta de interseccin, basta con construir un tercer
plano
0
3
V, L
, que pasa por el origen y cuya direccin normal es V .
Los tres planos as formados siempre intersectan en un punto, que, junto con la normal
V , permite definir la recta buscada.
(4.22)
1
1
1
]
1

1
1
1
]
1

0
2
1
1
1 1 1
1 1 1
D
D
z y x
x x x
z y x
V V V
N N N
N N N
Q
La recta de interseccin de los planos no paralelos
1
L
y
2
L
, viene dada por la
expresin:
( ) V Q P t t +
Teorema (2.3). Sean 1 1 1
D , N L
, 2 2 2
D , N L
, y 3 3 3
D , N L
tres planos
arbitrarios, cuyos vectores normales no residen en el mismo plano, stos intersectan en
un punto.
Demostracin:
Es posible encontrar un punto
Q
que resida en los tres planos a la vez, resolviendo el
sistema:
(4.18)
0
0
0
3
2
1



Q L
Q L
Q L
Que, escrito en forma matricial, resulta:
6
(4.19)
1
1
1
]
1


3
2
1
D
D
D
Q M
Donde la matriz M viene dada por: (4.20)
1
1
1
]
1

z y x
z y x
z y x
3 3 3
1 2 2
1 1 1
N N N
N N N
N N N
M
Y, resolviendo para
Q
:
(4.21)
1
1
1
]
1


3
2
1
1
D
D
D
M Q
Si M es singular, entonces los tres planos no intersectan en un punto, siendo el caso en
que las tres normales son co-planarias.
7
4.2.3 Transformar un plano.
Sean una matriz de transformacin
3 3
M
y un vector de translacin T .
Un plano se define mediante: - Un punto arbitrario del plano, P.
- El vector normal, N .
Para transformar un vector, es necesario emplear la transpuesta
de la inversa de la matriz de transformacin M; adems, por
ser un vector fijo, no puede ser trasladado, por lo que no tiene
sentido sumarle T :
( ) N M N
T
1

Para transformar un punto, es necesario transformar el
punto multiplicando por M, y trasladarlo sumndole T
:
T MP P +
Por otra parte, la ecuacin del plano viene dada por:
0 + + + D Cz By Ax

Con:
( )
P N
, ,

D
C B A N
Por lo tanto,
P N D Nota:
( ) [ ] ( ) T MP N M +

T
1
( ) ( ) T N M MP N M

T
1
T
1 ( ) C A B A C B A + +
( ) [ ] ( ) [ ] T N M MP N M
T
T
1
T
T
1

B A B A
T

, trabajando
con vectores columna.
( ) ( ) T M N MP M N
1 T 1 T
( )
T T T
A B AB
T M N P N
1 T T

8
T M N P N
1 T

T M N
1 T
D
Al emplear coordenadas homogneas, la traslacin se incluye en la matriz de
transformacin
4 4
M
, siendo:
La inversa de M:
1
1
1
1
]
1

1 0
1
3 3
1
3 3 1
4 4
T M M
M
La transpuesta de la inversa:
( )
( )
1
1
1
1
]
1

1
0
1
3 3
T
1
3 3
T
1
4 4
T M
M
M
El producto escalar de la cuarta fila de
( )
T
1
4 4

M
con el vector
D C B A , , , S
, es la
cantidad T M N
1 T
D D .
Teorema (2.4)
Empleando coordenadas homogneas, es posible tratar los planos como tuplas de cuatro
elementos, al igual que con los puntos y los vectores.
Para transformar un plano L, se emplea la transpuesta de la inversa de la matriz
homognea de transformacin:
( ) L M L
T
1
con
D N, L
9
4.3 El Frustum.
Definicin (3.1). El frustum es la regin del espacio que contiene todo lo que es
visible en una escena tridimensional.
Se modela como una pirmide, cuyo vrtice coincide con la posicin de la cmara,
porque de este modo corresponde con el volumen exacto que abarcara una cmara
mirando a travs de una ventana rectangular (la pantalla).
Comprende el espacio delimitado por seis planos:
Cuatro planos laterales : izquierda, derecha, abajo y arriba; que intersectan en el
punto donde est situada la cmara.
Dos planos frontales : que definen la mnima y la mxima profundidad, dentro de
las cuales los objetos son visibles.
- El plano cercano situado a una distancia
n
de la cmara.
- El plano lejano situado a una distancia
f
de la cmara.
El frustum est alineado con el sistema coordenado de la cmara.
Definicin (3.2). El espacio de cmara (camera space o eye space), es el sistema de
coordenadas local de la cmara:
- La cmara esta est situada en el origen.
- El eje
x
apunta a la derecha.
- El eje
y
apunta hacia arriba.
- El eje z apunta a:
10
En un sistema que satisface la regla de la mano derecha (rigth-handed
system), el eje z apunta en la direccin opuesta a la que apunta la
cmara.
Por ejemplo: OpenGL
En un sistema que satisface la regla de la mano izquierda, el eje z
apunta en la misma direccin que la cmara (left-handed system).
Por ejemplo: DirectX
4.3.1 Campo de visin.
Definicin (3.3). El plano de proyeccin, es un plano perpendicular a la direccin en
la que apunta la cmara, situado a una distancia focal
e
de la cmara, y que intersectan
el plano izquierdo, en 1 x , y el plano derecho, en 1 x ; as como el plano inferior
en
a y
, y el plano superior en
a y
(siendo
a
la relacin de aspecto).
Definicin (3.4). La distancia focal
e
, es la distancia desde la cmara al plano de
proyeccin. Depende del ngulo horizontal de visin.
Definicin (3.5). El ngulo horizontal de visin es el ngulo

, formado por los


planos izquierdo y derecho del frustum.
Teorema (3.1). La distancia distancia focal
e
y el ngulo horizontal de visin

,
estn relacionados del siguiente modo:
(4.27)

,
_

2
1

tan
e
(figure 4.10)
La distancia focal y el ngulo de visin son inversamente proporcionales.
Por ejemplo: para efectuar un zoom, la cmara disminuye el ngulo de visin, lo que
produce una mayor distancia focal.
Definicin (3.5). La relacin de aspecto (
a
) de una pantalla, se define como su
altura dividida por su anchura.
11
Por ejemplo: al visualizar en una resolucin de 480 640 pxeles, la relacin de
aspecto es 75 0. .
Como la mayora de monitores son rectangulares, y no cuadrados o circulares, los
campos de visin horizontal y vertical no son iguales.
Definicin (3.6). El ngulo vertical de visin es el ngulo

, formado por los planos


inferior y superior del frustum. Depende de la relacin de aspecto y de la distancia
focal.
Los planos superior e inferior intersectan con el plano de proyeccin en
a y t
.
Teorema (3.2). El ngulo vertical de visin

, depende de la distancia focal


e
, y de
la relacin de aspecto
a
; del siguiente modo:
(4.28)
,
_

e
a
arctan 2
(figure 4.11)
El plano de proyeccin constituye un rea rectangular, situada entre los planos frontales
(cercano y lejano), y paralela a stos.
El frustum abarca un volumen rectangular en el espacio.
Por ejemplo:
La funcin glFrustum() requiere especificar el plano de proyeccin mediante un
rectngulo situado a una distancia
n
de la cmara, donde
n
es la distancia de la
cmara al plano frontal cercano.
Basndonos en los vrtices del plano de proyeccin, de 1 t x e
a y t
, y
escalndolos por un factor de
e
n
, podemos calcular los vrtices que debemos pasar a la
funcin:
- El vrtice izquierdo en
e
n
x
- El vrtice derecho en
e
n
x
- El vrtice inferior en
e
an
y
- El vrtice superior en
e
an
y
Al multiplicar por
e
n
los vrtices del plano de proyeccin, situados a una profundidad
e
, y por razones de semejanza entre tringulos, obtenemos los vrtices
correspondientes del plano frontal cercano, situados a una profundidad
e
e
n
n
,
_

12
4.3.2 Planos del frustum.
Por convenio, las normales de los planos del frustum apuntan al interior de ste.
Los planos laterales pasan por el origen, por lo que su trmino independiente es
0 D . Las normales se obtienen rotando 90 la direccin del plano.
El plano lejano se encuentra a una distancia
f
del origen, siguiendo la direccin
de su normal. Su normal apunta en direccin opuesta a la cmara.
El plano cercano se encuentra a una distancia
n
del origen, en direccin opuesta
a su normal. Su normal apunta en la misma direccin que la cmara.
OpenGL:
- La cmara apunta a

z
:
( ) 1 0 0 , ,
.
- La normal del plano cercano es
( ) 1 0 0 , ,
. Al estar normalizada, el trmino
independiente indica la distancia al origen; el signo indica el sentido relativo a la
normal, n D .
- La normal del plano lejano es
( ) 1 0 0 , ,
. Al estar normalizada, el trmino
independiente indica la distancia al origen; el signo indica el sentido relativo a la
normal,
f D +
.
En el campo horizontal de visin (plano XZ ), los planos izquierdo y derecho se
representan como una recta. El producto vectorial es positivo en el sentido contrario a
las agujas del reloj
( ) ccw j k i
.
- El vector director del plano derecho es:
( ) e , ,0 1
.
Hay que girarlo 90 a la izquierda:
( ) ( ) 1 0 0 1
90
, , , ,

e e
.
13
Como el plano pasa por el origen, 0 D .
- El vector director del plano izquierdo es:
( ) e , ,0 1
.
Hay que girarlo 90 a la derecha, lo que equivale a girar 90 a la izquierda el
vector opuesto:
( ) ( ) 1 0 0 1
90
, , , ,

e e
.
Como el plano pasa por el origen, 0 D .
Procediendo de forma anloga en el plano YZ , con los planos inferior y superior; el
sentido del producto vectorial cambia
( ) cw i k j
.
- El vector director del plano inferior:
( ) e a , , 0
.
Hay que girarlo 90 a la izquierda, lo que equivale a girar 90 a la derecha el
vector opuesto:
( ) ( ) a e e a , , , ,

0 0
90
.
Como el plano pasa por el origen, 0 D .
- El vector director del plano superior:
( ) e a , , 0
.
Hay que girarlo 90 a la derecha:
( ) ( ) a e e a , , , ,

0 0
90
.
Como el plano pasa por el origen, 0 D .
Plano
D N,
con N vector unitario
Cercano
n , , , 1 0 0
Lejano
f , , , 1 0 0
Izquierdo
0
1
1
0
1
2 2
, , ,
+

+ e e
e
Derecho
0
1
1
0
1
2 2
, , ,
+

e e
e
Inferior
0 0
2 2 2 2
, , ,
a e
a
a e
e
+

+
Superior
0 0
2 2 2 2
, , ,
a e
a
a e
e
+

14
4.4 Interpolacin correctora de la perspectiva.
Cuando un GPU proyecta (renderiza) un tringulo en la pantalla, muestrea (rasteriza)
su superficie escaneando una lnea (scanline) cada vez.
Junto con la posicin, los vrtices del tringulo incluyen ciertos atributos: iluminacin,
proyeccin de las texturas
La informacin asociada a los vrtices de cada tringulo es interpolada a lo largo de su
superficie. Al dibujar una lnea, los valores correspondientes a cada pxel se obtienen
interpolando los valores conocidos para los lmites izquierdo y derecho.
Interpolar a lo largo de la superficie de un tringulo es un proceso no lineal; divisiones
iguales en el plano de proyeccin, corresponden con divisiones cada vez mayores en la
superficie del tringulo, conforme aumenta la distancia a la cmara.
Figura 4.13. Pg 117
Emplear un mtodo de interpolacin lineal para proyectar texturas supone una mala
aproximacin, pues las distorsiones en el mapa de bits son demasiado aparentes.
El hardware moderno tambin utiliza interpolacin no lineal para el resto de atributos;
las primeras GPUs empleaban una aproximacin lineal, pues la diferencia no se aprecia
tanto como con las texturas.
15
4.4.1 Interpolacin de la profundidad.
La GPU interpola linealmente el recproco de la coordenada z de cada vrtice.
Durante la rasterizacin, se muestrean los puntos de cada segmento de la superficie del
tringulo que corresponden con cada pxel de la pantalla.
Cada muestra corresponde a un pxel, y se obtiene lanzando un rayo (ray casting) que
pasa por un punto del plano de proyeccin, calculando la interseccin de ste con la
superficie del tringulo.
Los puntos del plano de proyeccin, correspondientes a los pxeles de la pantalla,
poseen una separacin fija (perodo de muestreo).
Figura 4.14. Pg 118
Si la recta escaneada pasa por el origen, el tringulo est de canto y no es visible.
En caso contrario, es posible describir la lnea de la superficie el tringulo mediante la
ecuacin:
(4.29) c bz ax + con 0 c
Sea un punto
z x,
que pertenece a la recta, y sea el rayo que parte del origen en
direccin a dicho punto, es posible calcular el punto
z x ,
, de interseccin de dicho
rayo con el plano de proyeccin.
La coordenada z del plano de proyeccin es e z .
La coordenada x del plano de proyeccin puede calcularse partiendo de la razn de
semejanza entre tringulos:
(4.30)
z
e
x
x

Despejando
x
:
x
e
z
x
Sustituyndolo en 4.29:
16
(4.31)
c z b x
e
a
c bz x
e
az

,
_

+ +
Y despejando
z
1
:
(4.32)
c
b
x
ce
a
c
b x
e
a
z
b x
e
a
c
z c z b x
e
a
+

,
_

,
_

+

,
_

+
1
Sean 1 1
z x ,
y 2 2
z x ,
, los puntos terminales del segmento escaneado, del tringulo;
as como
1 1
z x ,
y
2 2
z x ,
, sus imgenes en el plano de proyeccin; y sea
3 3
z x ,

un punto cualquiera del segmento.
Es posible expresar
3
x
mediante la interpolacin lineal de
1
x
y
2
x
:
( )
2 1 3
1 x t x t x +
con
[ ] 1 0, t
La coordenada
3
z
correspondiente al tringulo, se obtiene mediante la expresin 4.32:

( ) [ ]
c
b
x t x t
ce
a
z c
b
x
ce
a
z
+ + +
2 1
3
1
1 1
( )
( )
( )
( ) ( )
( )
( ) t
z
t
z
t
c
b
x
ce
a
t
c
b
x
ce
a
t
c
b
x t
ce
a
t
c
b
x t
ce
a
t
c
b
x t
ce
a
t
c
b
c
b
x t
ce
a
t
c
b
t
c
b
c
b
x t
ce
a
x t
ce
a
c
b
x t
ce
a
x t
ce
a
z
2 1
2 1
2 1
2 1
2 1
2 1
3
1
1
1
1
1 1
1
1
1
1
+

,
_

+ +
,
_

+
+ +
+
,
_

+
+ +
+
Lo que prueba que el recproco de 3
z
, se interpola linealmente de forma correcta a lo
largo de la superficie del tringulo.
17
4.4.2 Interpolacin de los atributos.
Durante la rasterizacin, los atributos de los vrtices se interpolan a lo largo de la
superficie del tringulo.
Sean 1 1
z x ,
y 2 2
z x ,
, los puntos terminales del segmento escaneado, cuyos valores
de profundidad son
1
z
y
2
z
, respectivamente; y sean
1
b
y
2
b
los atributos asociados
a dichos puntos.
El valor interpolado para cualquier punto intermedio,
3
b
, forma la misma proporcin
con la diferencia total a lo largo del segmento, que el valor interpolado para
3
z
:
(4.34)
1 2
1 3
1 2
1 3
z z
z z
b b
b b

Sea la expresin obtenida para


3
z
:
(4.35)
( )
( ) t
z
t
z
z t
z
t
z z
2 1
3
2 1 3
1
1
1
1 1
1
1 1
+
+
Sustituyndola en 4.34 y despejando
3
b
:
( )( ) ( )( ) ( ) ( )
1 2 1 1 2 3 1 3 1 2 1 2 1 3
1 2
1 3
1 2
1 3
b b z b b z z z b b z z b b
z z
z z
b b
b b

( )
1 2
1 2 1
1 2
1 2
3 1 3
z z
b b z
z z
b b
z b b


( ) ( ) ( )
1 2
1 2 2 1
1 2
2 1 1 1 2 1
1 2
1 1 2 1 1 2 1
1
1 2
1 2 1
z z
b z b z
z z
z b b b b z
z z
z b z b b b z
b
z z
b b z

+ +

+ +
+

1 2
2 1 1 2
1 2
1 2
3
1 2
1 2 2 1
1 2
1 2
3 3
z z
b z b z
z z
b b
z
z z
b z b z
z z
b b
z b

18
( ) ( ) ( )
2 1 1 2 1 2 3 1 2 3
b z b z b b z z z b +
( ) ( ) ( )
1 2
2 1
2 1
1 2
2 1
3
1
1
1
1
1
tz z t
z z
z z
tz z t
z
t
z
t
z
+

( )
( )
( )
( )
( ) ( )
( )
( ) ( ) ( ) ( )
( )
( ) ( )
( )
( ) ( ) [ ] [ ]
( )
( ) ( ) ( )
( )
( ) ( ) ( )
( )
( )
( )
( )
1 2
1 2
2 1 1 2
1 2
2 1 2 1 1 1 2 2
1 2
2 1 1 2 1 1 2 1 2 2
1 2
2 1 1 2 2 1 1 2 1 1 2 2
1 2
2 1 1 1 2 2 1 2 1 2 2 1
1 2
2 1 1 1 2 2 1 2 1 2 2 1
1 2
2 1 1 2 2 1 1 2 1 1 2 2 1 2 1 2 2 1
2 1 1 2
1 2
1 2 2 1
1 2 3
1
1
1
1
1
1
1
1 1
1
1 1
1
1 1 1 1
1
1 1
1
z z
tz z t
t b z t b z
tz z t
t b z z z t b z z z
tz z t
t b z z z z t b z z z z
tz z t
t b z z t b z z t b z z t b z z
tz z t
t b z z t b z z t b z z t b z z
tz z t
t b z z t b z z t b z z t b z z
tz z t
t b z z b z z t t b z z b z z t b z z b z z
b z b z
tz z t
b b z z
z z b

+
+

+
+

+
+

+
+

+
+

+
+

+
+ +

+
+


(4.36)
( )
( )
1 2
2 1 1 2
3
1
1
tz z t
t b z t b z
b
+
+

Lo que prueba que la obtencin de


3
b
requiere una interpolacin no lineal de los
puntos terminales
1
b
y
2
b
.
En cambio, el valor de
3
3
z
b
s que puede ser interpolado linealmente a lo largo de la
superficie del tringulo.
Multiplicando, en 4.36, numerador y denominador por
2 1
1
z z
, y despejando
3
3
z
b
:
:
( )
( ) ( )
( ) ( )

,
_

,
_

+
+

+
+
t
z
b
t
z
b
z t
z
b
t
z
b
t
z
t
z
t
z
t
z
t
z
b
t
z
b
b
2
2
1
1
3
2
2
1
1
2 1 2 1
2
2
1
1
3
1 1
1
1
1
1
1
1
1
1
(4.37)
( ) t
z
b
t
z
b
z
b
2
2
1
1
3
3
1 +
19
A pesar de que la interpolacin del atributo b no es lineal, cuando la GPU rasteriza un
segmento, obtiene el valor correspondiente al atributo de la siguiente manera:
- Interpola linealmente el valor de
z
1
, y calcula su recproco z .
- Interpola linealmente
z
b
, y lo multiplica por el valor obtenido para. z .
4.5 Proyeccin.
El vrtice situado en el punto P , se proyecta haciendo intersectar un rayo que parte del
origen, y pasa por dicho punto, con el plano de proyeccin.
Las coordenadas proyectadas vienen dadas por las frmulas:
(4.38) x
z
P
P
e
x
y
z
P
P
e
y e P
P
e
z
z
z

El signo negativo se debe a que la cmara apunta a

z
(OpenGL, rigth-handed).
Las tcnicas de HSR, sombreado, iluminacin, requieren cierta informacin til
acerca de la profundidad, por lo que los pipelines grficos utilizan coordenadas
homogneas para proyectar los vrtices en un espacio de cuatro dimensiones.
20
4.5.1 Proyeccin en perspectiva.
Con el fin de mantener informacin acerca de la profundidad, se proyecto el frustum a
un cubo centrado en el origen (espacio homogneo de recorte).
Figura 4.15. Pg 122
Cada lado del frustum se proyecta sobre el rango
[ ] 1 1,
.
La proyeccin se realiza mediante una matriz 4 4 , utilizando coordenadas
homogneas.
Sea
1 P P P , , , P
z y x

una coordenada homognea en el espacio de la cmara que se


encuentra en el interior del frustum.
El plano cercano se encuentra en
n z
, de modo que las proyecciones de las
coordenadas
x
e
y
sobre l, pueden expresarse como:
(4.39)
x
z
P
P
n
x

,
_


y
z
P
P
n
y

,
_

Todo punto situado del plano cercano satisface r x l y


t y b
.
Proyectando ambos rangos en el intervalo
[ ] 1 1,
:
[ ] [ ] ( )
[ ] [ ] ( )
[ ] [ ] ( ) 1
2
1 1 2 0
2
2 0 1 0
1
1 0


l r
l x x x x
l r
l x x x x
l r
l x x x r l x
. , ,
. , ,
. , ,
(4.40)
( ) 1
2


l r
l x x
(4.41)
( ) 1
2


b t
t y y
Sustituyendo los valores de
x
e
y
dados por 4.39:

,
_

,
_


,
_

,
_


,
_

,
_

,
_

,
_


l r
l r
P
P
l r
n
l r
l r l
P
P
l r
n
l r
l
P
P
l r
n
l r P
lP
l r P
nP
l r P
lP nP
l r
l P
P
n
x
z
x
z
x
z
x
z
z
z
x
z
z x
x
z
2 2 2
1
2 2
1
2 2
1
2
1
2
21
(4.42)
,
_

,
_


l r
l r
P
P
l r
n
x
z
x
2
(4.43)
,
_

,
_


b t
b t
P
P
b t
n
y
z
y
2
La coordenada z de cualquier punto en el interior del frustum satisface
n P f
z

.
Es necesario proyectar 1 n y
1 f
; transformacin que invierte el sentido del
eje z , por lo que se invierte tambin el sentido positivo de giro (left-handed).
Por otro lado, en lugar de la coordenada z , se proyecta su recproco
z 1
. De este
modo, los valores de profundidad proyectados pueden ser interpolados linealmente
durante la rasterizacin.
La funcin proyectora para la coordenada z tiene la forma:
(4.44)
B
z
A
z +
Dndole valores conocidos, es posible plantear un sistema de dos ecuaciones con dos
incgnitas:
(4.45) [ ] [ ]

'

+
+


B
f
A
B
n
A
z f n z
1
1
1 1, ,
Resolviendo para A y B :
( )
n f
nf
A
nf
n f A
f
A
n
A
f
A
n
A
B
f
A
B
n
A

,
_

+
+
2
2 2 1 1
1
1
( )
( )
( )
( )
n f
n f
f n
f n
B
f n f n B f fB nB n
A f B
A n B
B
f
A
B
n
A

+

+ +

+
+
0
1
1
1
1
(4.46)
n f
nf
A

2
y
n f
n f
B

22
(4.47)
n f
n f
P n f
nf
n f
n f
z n f
nf
z
z

+
+

,
_

+
+

,
_


1 2 1 2
Las ecuaciones 4.42, 4.43 y 4.47 contienen una divisin por
z
P
; por lo tanto, el
punto
z y x , , P
, expresado en coordenadas homogneas, equivale al punto:
(4.48)
z z z z
P P z P y P x , , , P
tras dividir por la coordenada
w
.
Las funciones:
(4.49)
z x z
z
x
z
P
l r
l r
P
l r
n
P
l r
l r
P
P
l r
n
P x

+
+

1
]
1

,
_

,
_


2 2
(4.50)
z y z
z
y
z
P
b t
b t
P
b t
n
P
b t
b t
P
P
b t
n
P y

+
+

1
1
]
1

,
_

,
_


2 2
(4.51)
n f
nf
P
n f
n f
P
n f
n f
P n f
nf
P z
z z
z
z

+

1
]
1

+
+

,
_


2 1 2
Son aplicaciones lineales de las coordenadas del punto P, de modo que es posible
emplear una matriz
4 4
M
para calcular la proyeccin P de dicho punto:
(4.52)
1
1
1
1
]
1

1
1
1
1
1
1
1
]
1


1
0 1 0 0
2
0 0
0
2
0
0 0
2
rustum
z
y
x
P
P
P
n f
nf
n f
n f
b t
b t
b t
n
l r
l r
l r
n
P M P
f
La matriz de proyeccin en perspectiva,
frustum
M
, es la utilizada por OpenGL, generada
por la funcin glFrustum().
Proyecta los puntos, del espacio de la cmara, al espacio homogneo de recorte, de tal
modo que la coordenada
w
guarda el la coordenada z original negada.
Posteriormente, la GPU emplea el recproco de la coordenada
w
para interpolar los
atributos de cada vrtice, utilizando la ecuacin 4.37 (4.4.2).
Para construir un frustum que no est limitado en profundidad, se hace
f
;
quedando la siguiente matriz de proyeccin:
23
(4.52-b)
( )
1
1
1
1
1
1
]
1


0 1 0 0
2 1 0 0
0
2
0
0 0
2
lim
frustum infinite
n
b t
b t
b t
n
l r
l r
l r
n
f
M M
La matriz de proyeccin
infinite
M
permite renderizar cualquier punto cuyo profundidad
sea mayor o igual a
n
; incluyendo los puntos en el infinito, cuya coordenada 0 w .
Sea
0 , , , Q
z y x
Q Q Q
un punto situado a una profundidad infinita de la cmara, en la
direccin z y x
Q Q Q , ,
, su proyeccin resulta:
(4.53)
1
1
1
1
1
1
]
1


+
+

+
+

1
1
1
1
]
1

1
1
1
1
1
1
]
1


z
z
z y
z x
z
y
x
Q
Q
Q
b t
b t
Q
b t
n
Q
l r
l r
Q
l r
n
Q
Q
Q
n
b t
b t
b t
n
l r
l r
l r
n
2
2
0
0 0 0
2 1 0 0
0
2
0
0 0
2
infinite
1
Q M Q
La posterior divisin por
w
produce un punto con una coordenada 1 z , que es el
valor mximo que puede tomar z , ya que es el lmite donde est situado del plano
lejano en el espacio homogneo de recorte.
La habilidad de proyectar puntos situados en el infinito es necesaria para aplicar la
tcnica de sombreado (T10).
24
4.5.2 Proyeccin paralela u ortogrfica.
Una proyeccin paralela es aquella en la que no se produce ninguna distorsin de la
perspectiva. Los puntos del espacio de la cmara se proyectan lanzando rayos paralelos
a la direccin de la cmara.
Figura 4.16. Pg 126
El volumen de visin se define mediante un rectngulo situado en el plano XY , y las
distancias a los planos cercano y lejano.
Al no producirse distorsin en la perspectiva, la profundidad z puede ser interpolada
linealmente, por lo que la proyeccin a coordenadas normalizadas de dispositivo, de
cualquier punto
z y x , , P
situado en el espacio de la cmara, es una aplicacin
lineal.
[ ] [ ] ( ) 1
2
1 1


l r
l x x x r l x . , ,
( )
l r
l r
P
l r l r
r l x
l r
l r l x
x
P x
l r
l x x
x
x

+

2 2 2 2
1
2
(4.54)
l r
l r
P
l r
x
x


2
(4.55)
b t
b t
P
b t
y
y


2
La coordenada z se obtiene de la misma manera, salvo que es necesario invertir el eje
z , siendo la proyeccin una aplicacin z z :
[ ] [ ] [ ] 1
2
1 1


n f
n z z z n f z . , ,
1 1 f n
25
[ ]
( )
n f
n f
P
n f n f
n f n z
n f
n z
z
P z
n f
n z z
z
z

+

2 2 2
1
2 2
1
2
(4.54)
n f
n f
P
n f
z
z


2
En forma matricial:
(4.57)
1
1
1
1
]
1

1
1
1
1
1
1
1
]
1


1
1 0 0
2
0 0
0
2
0
0 0
2
z
y
x
P
P
P
n f
n f
n f
b t
b t
b t
l r
l r
l r
0
P M P
ortho
Matriz utilizada por OpenGL para la proyeccin ortogrfica, generada por glOrtho.
Tras la transformacin, la coordenada
w
de P es 1, en lugar de almacenar la
coordenada z original, por lo que al dividir posteriormente por
w
, el punto P no se
proyecta en perspectiva.
4.5.3 Extraccin de los planos de frustum.
Resulta sencillo obtener los planos del frustum a partir de una matriz de proyeccin M
.
En el espacio homogneo, los planos del frustum siempre son los mismos, y las
normales de dichos planos son paralelas a los ejes coordenados.
Figura 4.17. Pg 127
La inversa de la matriz de proyeccin,
1
M
, transforma los puntos del espacio
homogneo al espacio de la cmara.
Sea L cualquiera de los seis planos expresados en coordenadas del espacio
homogneo, el mismo plano expresado en coordenadas de la cmara se obtiene como:
Tabla 4.2
(4.58)
( ) [ ] L M L M L M L

T T 1 1
T
1
1
Cada normal contiene dos coordenadas
distintas de
cero, de valor 1 t .
Es posible obtener cualquier plano del frustum
como
Plano
,D N
Cercano
1 1 0 0 , , ,
Lejano
1 1 0 0 , , ,
Izquierdo
1 0 0 1 , , ,
Derecho
1 0 0 1 , , ,
Superior
01 1 0 , ,
Inferior
1 0 1 0 , , ,
26
la suma o diferencia de dos columnas de
T
M
, lo que
equivale a sumar las columnas correspondiente
de M.
(4.59)
2 4 1 4 3 4
2 4 1 4 3 4
inferior derecho lejano
superior izquierdo cercano
M M M M M M
M M M M M M

+ + +
Las frmulas descritas en 4.59 son vlidas para cualquier matriz de proyeccin, con la
excepcin del plano lejano para la matriz infinita de proyeccin, dada en 4.52.
Por otra parte, si se conocen la distancia focal
e
y la relacin de aspecto
a
, resulta ms
eficiente obtener los planos mediante las frmulas descritas en la tabla 4.1.
T4. Resumen.
Recta
Ecuacin de la recta que pasa por el punto 0
P
, y se extiende en paralelo a la direccin V :
( ) V P P t t +
0
Distancia del punto
Q
a la recta
( ) t P
:
( )
( ) [ ]
2
2
0
2
0
V
d
V P Q
P Q


Plano
Ecuacin del plano de normal N que contiene el punto
0
P
:
0 + D P N con
0
P N D
y
z y x , , P
27
0 P L con
D N, L
y
1 , , , P z y x
Distancia del punto
Q
al plano L:
Q L d
Transformar un plano: ( ) L M L
T
1
con
D N, L
Interseccin de recta y plano
El parmetro R t donde la recta
( ) V Q P t t +
intersecta al plano L, viene dado por:
V L
Q L

t
Frustum
La distancia focal,
e
de un frustum con un ngulo horizontal de visin

, viene dada por:

,
_

2
tan
1

e
Dada una relacin de aspecto

, el plano paralelo al plano cercano y situado a una


distancia
n
de la cmara, est limitado por:
e
n
x t
e
e
an
y t
Interpolacin correctora de la perspectiva.
En la proyeccin en perspectiva se interpola el valor de profundidad z , interpolando
linealmente su recproco
z
1
:
( ) t
z
t
z z
2 1 3
1
1
1 1
+
Con los atributos se aplica una frmula similar:
( ) t
z
b
t
z
b
z
b
2
2
1
1
3
3
1 +
con
1
b
,
2
b
atributos
Proyeccin en perspectiva.
Matriz de proyeccin en pespectiva que transforma puntos del espacio de la cmara al
espacio homogneo de recorte:
28
1
1
1
1
1
1
1
]
1

0 1 0 0
2
0 0
0
2
0
0 0
2
rustum
n f
nf
n f
n f
b t
b t
b t
n
l r
l r
l r
n
f
M
Para construir un frustum con una profundidad infinita, se hace tender a infinito la distancia
al plano lejano
f
:
( )
1
1
1
1
1
1
]
1


0 1 0 0
2 1 0 0
0
2
0
0 0
2
lim
frustum infinite
n
b t
b t
b t
n
l r
l r
l r
n
f
M M
Ejercicios del captulo 4.
1. Obtener el plano
D N,
que contiene los puntos
0 2 1 , ,
,
1 0 2 , ,
y
1 2 3 , ,
.
Sean los vectores:
1 2 1 0 2 1 1 0 2
1
, , , , , , V
2 2 1 1 2 3 1 0 2
2
, , , , , , V
La direccin normal N puede obtenerse como:
2 1
V V N
j i i j k k j i
k j i
3 6 2 2 2 2 4
2 2 1
1 2 1 + + + + +


El trmino independiente:
( ) 12 0 0 12 1 0 2 0 3 6 + + , , , , P N D
Por lo tanto, el plano pedido puede expresarse como:
12 3 6 12 0 3 6 + y x , , ,
29
2. Dada la recta
( ) V S P t t +
, encontrar la expresin para el parmetro
t
que
represente el punto de dicha recta ms cercano a otro punto
Q
.
( ) ( ) [ ] ( ) [ ] [ ] ( ) [ ]
( ) ( ) Q S V Q S
V Q S Q V S Q P Q P Q P
+ +
+ +
t V t
t t t t t
2
2 2 2
2 2 2 2 2
( ) ( ) [ ]
( ) Q S V
Q S V Q S
+
+ +
2 2
2
2
2 2
2
tV
dt
t V t d
( ) ( )
( ) ( )
2 2
2 2
0 2 2
V V
t t tV
S Q V Q S V
Q S V V Q S V


+
( )
2
V
t
S Q V

3. Sea
o
75 el ngulo del campo horizontal de visin, calcular el ngulo


correspondiente del campo vertical de visin, para una pantalla de
1024 1280
.
La relacin de aspecto es:
8 0
1024
1280
. a
3032 1
2
75
tan
1
.

,
_

e
1
]
1

,
_


,
_


,
_


,
_

2
75
8 0 atan 2
1
atan atan 2
2
tan tan .
e
a
e
a
e
a

63.0883
4. Expresar los planos izquierdo, derecho, inferior y superior, sabiendo que el
ngulo del campo horizontal de visin es
o
90 y la relacin de aspecto
75 0. a
.
Izquierdo:
1
1
0
1
1 0 0 1
2 2
+

+


e e
e
e e
norm
, , , , , ,
Derecho:
1
1
0
1
1 0 0 1
2 2
+

+


e e
e
e e
norm
, , , , , ,
30
Superior:
2 2 2 2
0 0 0
a e
a
a e
e
a e e a
norm
+

+


, , , , , ,
Inferior:
2 2 2 2
0 0 0
a e
a
a e
e
a e e a
norm
+

+


, , , , , ,
La distancia focal es:
1
2
90
tan
1

,
_

e
Izquierdo:
2
1
0
2
1
, ,
Derecho:
2
1
0
2
1
, ,
Superior:
6 0 8 0 0 . , . ,
Inferior:
6 0 8 0 0 . , . ,
4
5
4
5
16
25
4
3
1
2 2
2 2

,
_


,
_

+ + a e
6 0
5
3
4
5
4
3
2 2
.
+ a e
a
5. Si la coordenada
z
del espacio homogneo ocupa el rango
[ ] 1 0,
en lugar
de
[ ] 1 1,
, derivar una matriz de proyeccin perspectiva que proyecte
0 n
y
1 f
.
B
z
A z +
,
_


1
( )
( )
( )
( )
n f
f
B f f n B f Bf Bn
f B A
Bn A
n f
nf
f n
nf
A
nf f n A
nf
nf f n A
nf
Af An
f
A
n
A
B
f
A
B
n
A


+
+
+

+
+
1
0 1 0 1 0
1
0
n f
f
P n f
nf
n f
f
P n f
nf
z
z z

+

,
_

,
_


1 1
n f
nf
P
n f
f
P
n f
f
P
P
n f
nf
P z
z z
z
z
z

,
_


31
1
1
1
1
]
1

1
1
1
1
1
1
1
]
1


1
0 1 0 0
0 0
0
2
0
0 0
2
rustum
z
y
x
P
P
P
n f
nf
n f
f
b t
b t
b t
n
l r
l r
l r
n
P M P
f
1
1
1
1
1
1
]
1


+
+

+
+

1
1
1
1
]
1

1
1
1
1
1
1
]
1


z
z
z y
z x
z
y
x
Q
Q
Q
b t
b t
Q
b t
n
Q
l r
l r
Q
l r
n
Q
Q
Q
n
b t
b t
b t
n
l r
l r
l r
n
2
2
0
0 0 0
1 0 0
0
2
0
0 0
2
infinite
1
Q M Q
6. Probar que la distancia
d
desde un punto
Q
a una lnea
( ) V S P t t +

puede expresarse como:
( )
V
V S Q
d
32