Post on 08-Nov-2018
LEI / LCC
Departamento de Informática
Universidade do Minho
Computação Gráfica
Computação Gráfica
António Ramires Fernandes António Ramires Fernandes –– Computação Gráfica 09/10Computação Gráfica 09/10
Transformações Geométricas
Vectores
• Magnitude
• Vector Normalizado v
=
222|| zyxv ++=
• Vector Normalizado (magnitude = 1)
• Produto Interno
|| v
vvnorm =
DI-UM Computação Gráfica 09/10 2
∑=
=⋅
3
1
*i
ii uvuv
)cos(|||||||| α××=⋅ uvuv
v u
α
Vectores
• Projecção2|||| n
nvnv
⋅=
v
n v||
v⊥
• Produto Externo
)sin(|||||| α××=×
−
−
−
=
×
uvuv
uvuv
uvuv
uvuv
u
u
u
v
v
v
xyyx
xzzx
yzzy
y
x
y
x
zz
DI-UM Computação Gráfica 09/10 3
n v||
α
u
v
v x u
Escala
• Escala Uniforme– Seja p um ponto e k um escalar,
p’ = kp
yp’
• Escala Não Uniforme– Seja p um ponto e k1,k2 um par de
escalares,
p’ = Kp
yp’
DI-UM Computação Gráfica 09/104
x
p
=
y
x
k
k
y
x
0
0
'
'
kyy
kxx
=
=
'
'equações
forma matricial
x
p
p’
=
y
x
k
k
y
x
2
1
0
0
'
'
yky
xkx
2
1
'
'
=
=equações
forma matricial
Translação
• Seja p um ponto e T um vector,
y
p T
Tpp +='
y’y
DI-UM Computação Gráfica 09/105
x
p
p’
T
Translação do ponto num sistema fixo�
Translação do sistema de coordenadas na direção inversa
p
x’-T x
Rotação
• Rotação em torno da origem
– A direcção da rotação é anti-horária
p
p’
y y
DI-UM Computação Gráfica 09/106
x
pαp
αx
Rotação do ponto num sistema fixo�
Rotação do sistema de coordenadas na direção inversa
Rotação
• Seja p = (a,b) e p’ = (a’, b’)
p
p’
α
y
||)cos(
)sin(|'|'
)cos(|'|'
ω
αω
αω
=
+=
+=
p
a
pb
pa
ω
Trigonometria
DI-UM Computação Gráfica 09/107
x
)sin()cos()cos()sin()sin(
)sin()sin()cos()cos()cos(
||)sin(
αωαωαω
αωαωαω
ω
+=+
−=+
=p
b
−=
b
a
b
a
)cos()sin(
)sin()cos(
'
'
αα
αα
)cos()sin('
)sin()cos('
αα
αα
bab
baa
+=
−=equações
forma matricial
ω
Rotação
• Vejamos qual o resultado de escrevermos o novo sistema de coordenadas em função dos eixos do sistema original
y
))cos(),(sin('
))sin(),(cos('
αα
αα
=
−=
y
x
DI-UM Computação Gráfica 09/108
αx
−=
)cos()sin(
)sin()cos(
αα
ααR
A definição dos eixos do novo sistema (x’,y’) corresponde às
linhas da matriz R
Rotação
• Rotação Inversa
• Se
−=
)cos()sin(
)sin()cos(
αα
ααα
R
• Então
DI-UM Computação Gráfica 09/109
−−
−−−=
−)cos()sin(
)sin()cos(
αα
ααα
R
IRR =− αα
Rotação
• Sabemos que
• Logo
)sin()sin(
)cos()cos(
αα
αα
−=−
=−
• Logo
DI-UM Computação Gráfica 09/1010
TRR
R
αα
ααα
αα
αα
αα
=
−=
−−
−−−=
−
−)cos()sin(
)sin()cos(
)cos()sin(
)sin()cos(
Composição de Transformações
• Translação + Translação
y Tpp +='
DI-UM Computação Gráfica 09/1011
x
y
p
p’
p’’
T1
T2
T
TpTTpp
Tpp
Tpp
+=++=
+=
+=
21
2
1
''
'''
'
Composição de Transformações
• Rotação + Rotação
p
p’
y
p’α2
yp’’ p’
yp’’
+ =
DI-UM Computação Gráfica 09/1012
x
pα1
x
p
x
pα+ =
pRpRRp
pRp
pRp
⋅=⋅⋅=
⋅=
⋅=
ααα
α
α
12
2
1
''
'''
'
Composição de Transformações
• Rotação + Translação– A ordem das transformações é relevante!
y
p
y
p p’T
y
p p’
p’’α
translação rotação
)('' TpRp +=−α
DI-UM Computação Gráfica 09/1013
x x x
p’’α
x
y
p
x
y
pp’
α p’’
x
y
pp’
α
Ttranslaçãorotação
)('' pRTpα−
+=
Composição de Transformações
• Rotação de p em torno de um ponto arbitrário o
y
p
o
p’
α
DI-UM Computação Gráfica 09/1014
x
p’
Composição de Transformações
• Rotação de p em torno de um ponto arbitrário o
y
p
o
p’
α
y
p
o
T
T
y
p
o
DI-UM Computação Gráfica 09/1015
xo1
p1 p2
α
T
p’
-T
Tpp −= 2'
x
p1
o1T
Tpp +=1
xo1
p1 p2
α
T
12 pRpα
=
TTpRp −+= )('α
Composição de Transformações
• E se quisermos em seguida rodar o resultado p’ em torno de outro ponto arbitrário?
• Sabemos que:
11)('
1TTpRp −+=
α
• Logo:
DI-UM Computação Gráfica 09/1016
22
11
)'(''2
1
TTpRp −+=α
α
2211 )))(((''12
TTTTpRRp −+−+=αα
Coordenadas Homogéneas
• Pretende-se uniformizar a forma das transformações geométricas
• Para tal recorre-se a coordenadas homogéneas.
• Em 2D, um ponto P(X,Y) em coordenadas cartesianas representa-• Em 2D, um ponto P(X,Y) em coordenadas cartesianas representa-se por p(x,y,w) em coordenadas homogéneas,
Sendo
• Por omissão considera-se w = 1
DI-UM Computação Gráfica 09/1017
w
yY
w
xX == ,
Coordenadas Homogéneas
• Pontos com coordenadas homógeneas distintas representam o mesmo ponto 2D
• O ponto em coordenadas cartesianas é obtido dividindo as duas primeiras coordenadas pela
=
wx
w
y
x
P
/
3
w
w=1
P3
P2
cartesianas é obtido dividindo as duas primeiras coordenadas pela última coordenada.
• Para vectores w = 0, porquê? (tip: diferença de pontos)
=
wy
wxP
/
/2
≈
2
6
4
1
3
2
DI-UM Computação Gráfica 09/10 18
x
y
Coordenadas Homogéneas
• Revisitar Transformações Geométricas
– Pontos têm mais uma coordenada, logo rotações e escalas são representadas por matrizes 3x3. Seja p =(x,y,1)
– Escalas– Escalas
DI-UM Computação Gráfica 09/1019
)1,,(
1100
00
00
' 212
1
ykxky
x
k
k
p =
= )1,,(
1100
01
0
001
2
1
2
1
yxyk
xk
k
k
p =
=
escala (k1,k2) escala inversa
Coordenadas Homogéneas
• Revisitar Transformações Geométricas
– Rotações
)1,(0
0)cos()sin(
0)sin()cos(
'2
pRpR
y
x
pα
αα
αα
=
=
−
= )1,()1,(0
ppRRpRR
p ==
=− αα
DI-UM Computação Gráfica 09/1020
)1,(110
0
1100
0)cos()sin('2
2pR
pRyp
α
ααα =
=
= )1,()1,(110
022
ppRRpRR
p ==
=
−
−
αα
αα
rotação α rotação inversa
Coordenadas Homogéneas
• Revisitar Transformações Geométricas
– Translações também podem ser representadas por uma matriz 3x3
01pTI
xtx
DI-UM Computação Gráfica 09/1021
)1,(110
1100
102
TppTI
ytp y +=
=
=
Com coordenadas homogéneas todas as transformações geométricas podem ser representadas por matrizes 3x3
Composição de Transformações
• Todas as transformações podem ser definidas através de matrizes 3x3
• A composição de múltiplas transformações geométricas resulta • A composição de múltiplas transformações geométricas resulta na multiplicação de matrizes 3x3
• Ou seja, qualquer transformação geométrica, por mais complexa que seja, pode ser representada por uma única matriz
DI-UM Computação Gráfica 09/1022
Composição de Transformações
• Translação + Rotação
=
×+××+×
×+××+×=
=
101100100
100
10
0
10
TR
R
TITRIRTIM
• Inversa
DI-UM Computação Gráfica 09/1023
−=
−=
=
−
=
=
=
=
−−
−−−
−
−
1010
1010
0
1010
0
10
0
10
11
111
1
1
TRRTRR
TIRTIR
RTIM
TT
Composição de Transformações
• Como interpretar uma sequência de transformações?(leitura da direita para a esquerda, c/ transformações inversas)
y’ y’ y’
-T2 -Rz(90)-T1
)0,2,1(),90(),0,1,1(
'
21
21
−===
=
TRRT
pRTTp
z
DI-UM Computação Gráfica 09/1024
y
x
y
x
y’
x’
y
x
y’
x’
y’’
x’’
y
x
y’
x’
y’’
x’’
y’’’
x’’’
Composição de Transformações
– Lendo da esquerda para a direita podemos determinar o que acontece ao objecto em cada passo
)0,2,1(),90(),0,1,1(
'
21
21
−===
=
TRRT
pRTTp
z
DI-UM Computação Gráfica 09/1025
y
x
y
x
x’
y
x
y’’
x’’
y
x
y’’’
x’’’
T1 Rz(90) T2
Composição de Transformações
• Duas formas de ver o problema
y’ x
x’ y’’ x’’’
DI-UM Computação Gráfica 09/1026
y
x
x’
y’’
x’’
y’’’
x’’’
y
y’
x’ y’’
x’’
y’’’
x’’’
y
x
y’’’
x’’’
=
Transformações Geométricas 3D
• Escala
Para definir uma escala uniforme em todos os eixos temos a = b = c definimos a seguinte matriz
pc
b
a
p
=
1000
000
000
000
'
seguinte matriz
Para definir uma escala não-uniforme atribuímos diferentes coeficientes na diagonal
DI-UM Computação Gráfica 09/10 27
'
1000
01
00
001
0
0001
p
c
b
a
p
=
Transformações Geométricas 3D
• Escala em OpenGL
– glScaled(GLdouble x, GLdouble y, GLdouble z)
– glScalef(GLfloat x, GLfloat y, GLfloat z);
DI-UM Computação Gráfica 09/1028
Transformações Geométricas 3D
• Translação
pt
t
py
x
=010
001
' '010
001
pt
t
py
x
−
−
=
DI-UM Computação Gráfica 09/1029
pt
tp
z
y
=
1000
100
010' '
1000
100
010p
t
tp
z
y
−
−=
Transformações Geométricas 3D
• Translação em OpenGL
– glTranslate{d,f}(x,y,z);
DI-UM Computação Gráfica 09/1030
Transformações Geométricas 3D
• Rotação 3D em torno dos eixos
– A rotação inversa é obtida pela inversa da matriz, ou seja, pela transposta
−
=
1000
0100
00cossin
00sincos
)(αα
αα
αRz
DI-UM Computação Gráfica 09/10 31
−=
1000
0cossin0
0sincos0
0001
)(αα
αααRx
−=
1000
0cos0sin
0010
0sin0cos
)(αα
αα
αRy
Transformações Geométricas 3D
• Rotação em torno de uma direcção arbitrária (solução algébrica)– Pretende-se aplicar uma rotação de α graus em torno de n
p’ = ucos(α)+vsin(α)
Para determinar u precisamos de calcular h
Cálculo da projecção do vector op em n resulta no vector oh vhCálculo da projecção do vector op em n resulta no vector oh
h = o + oh
u = p – h
v = n x u
DI-UM Computação Gráfica 09/1032
α
pp’
u v
n
h
o
+−+
++−
−++
=
1000
0
0
0
2
2
2
ctzsxtyzsytxz
sxtyzctysztxy
sytxzsztxyctx
R
Sendo n = (x,y,z) obtem-se a seguinte form matricial
c = cos(α), s = sin(α), t = (1-c)
Transformações Geométricas 3D
• Rotação em OpenGL
– glRotate{d,f}(ang,x,y,z);
• sendo ang o ângulo de rotação em graus;• e (x,y,z) o vector que define o eixo de rotação;
DI-UM Computação Gráfica 09/1033
Sistemas de Coordenadas
• Um triplo de vectores (u,v,w) pode definir um sistema de coordenadas 2D desde que sejam linearmente independentes.
• Um conjunto de 2 vectores é linearmente independente se nenhum dos vectores se puder escrever como uma combinação linear dos restantes,vectores se puder escrever como uma combinação linear dos restantes,
• ou seja, não existe nenhuma combinação de números a1,a2, a3,sendo pelo menos um deles diferente de zero, tal que
0321 =++ wauava
DI-UM Computação Gráfica 09/10 34
Sistemas de Coordenadas
• Uma matriz invertível pode ser vista como uma transformação entre sistemas de coordenadas.
• Uma matriz invertível implica que os seus vectores (linha ou coluna) sejam linearmente independentes.linearmente independentes.
• Os vectores de uma matriz invertível representam um sistema de eixos, ou seja, um sistema de coordenadas.
DI-UM Computação Gráfica 09/10 35
Sistemas de Coordenadas
• Um conjunto de vectores (v1,...vn) forma uma base ortogonal se
• Um conjunto de vectores (v1,...,vn) forma uma base ortonormal se
0,),,( =⋅≠∀ ji vvjiji
• Um conjunto de vectores (v1,...,vn) forma uma base ortonormal se
DI-UM Computação Gráfica 09/10 36
≠
==
=⋅∀
ji
ji
vvji
ij
ijji
,0
,1
),,(
δ
δ
Sistemas de Coordenadas
• Uma matriz cujos vectores coluna formem uma base ortonormal é uma matriz ortogonal
• Se G é ortogonal então
TGG =−1
• Um caso particular são as rotações!
TGG =−1
DI-UM Computação Gráfica 09/10 37
Sistemas de Coordenadas
• Object Space ou Modelling Space (Espaço local)
– Este espaço é o sistema de coordenadas relativas a um objecto (ou grupo de objectos).
– Permite-nos definir coordenadas relativas.– Permite-nos definir coordenadas relativas.
DI-UM Computação Gráfica 09/1038
Sistemas de Coordenadas
• World Space (Espaço Global)
– Este espaço engloba todo o universo e permite-nos exprimir as coordenadas de forma absoluta.exprimir as coordenadas de forma absoluta.
– É neste espaço que os modelos são compostos para criar o mundo virtual
DI-UM Computação Gráfica 09/10 39
Sistemas de Coordenadas
• Camera Space (Espaço da Câmara)
– Este sistema de coordenadas esta associado ao observador, ou câmara.
– A sua origem é a posição da câmara.
– O seu sistema de eixos é determinado pela orientação da câmara.
DI-UM Computação Gráfica 09/1040
Sistemas de Coordenadas
DI-UM Computação Gráfica 09/10 41
Sistemas de Coordenadas
• Screen Space (Espaço do ecrã)
– Espaço 2D onde é visualizado o mundo virtualo mundo virtual
– Resultado de uma projecção
DI-UM Computação Gráfica 09/10 42
Sistemas de Coordenadas
Object Space
World Space
DI-UM Computação Gráfica 09/10 43
World Space
Screen Space
Camera Space
Transformações Geométricas
• As transformações mencionadas até agora permitem-nos posicionar os objectos no espaço global.
Demo!!!Demo!!!(transformações geométricas)
DI-UM Computação Gráfica 09/1044
Transformações Geométricas
• Desenhar um boneco de neve!
DI-UM Computação Gráfica 09/1045
Transformações Geométricas
Modelar um boneco de neve com esferas e um cone
void drawSnowMan() {
glColor3f(1.0f, 1.0f, 1.0f);
// Draw Body
glTranslatef(0.0f ,0.75f, 0.0f);
glutSolidSphere(0.75f,20,20);
// Draw Head
glTranslatef(0.0f, 1.0f, 0.0f);
glutSolidSphere(0.25f,20,20);
DI-UM Computação Gráfica 09/1046
// Draw Eyes
glPushMatrix();
glColor3f(0.0f,0.0f,0.0f);
glTranslatef(0.05f, 0.10f, 0.18f);
glutSolidSphere(0.05f,10,10);
glTranslatef(-0.1f, 0.0f, 0.0f);
glutSolidSphere(0.05f,10,10);
glPopMatrix();
// Draw Nose
glColor3f(1.0f, 0.5f , 0.5f);
glutSolidCone(0.08f,0.5f,10,2);
}
Transformações Geométricas
Object Space
World Space
DI-UM Computação Gráfica 09/1047
World Space
Camera Space
Screen Space
Transformações Geométricas
• Por omissão (em OpenGL) considera-se que a câmara se encontra na origem, a apontar na direcção do Z negativo.
• Como definir uma câmara com posição e orientação arbitrárias?
• Que dados são necessários para definir uma câmara?
DI-UM Computação Gráfica 09/1048
Transformações Geométricas
• Dados para definir uma câmara:
– posição– direcção– direcção– "este lado para cima"
DI-UM Computação Gráfica 09/10 49
Transformações Geométricas
• Operações sobre a câmara:
– Definição do sistema de coordenadas
– Translação da posição da câmaradir
cyup
cz
cx
• Podemos facilmente especificar os eixos do sistema de coordenadas da câmara. Assumindo que os vectores fornecidos se encontram normalizados
• É necessário normalizar todos os vectores (cx,cy,cz)
DI-UM Computação Gráfica 09/10 50
dircxcy
updircx
dircz
×=
×=
−=
Transformações Geométricas
• Podemos então definir uma transformação que permita posicionar a câmara:
−=
PosMF
=
−=
321
321
321
1
czczcz
cycycy
cxcxcx
M
o
PosMF
DI-UM Computação Gráfica 09/10 51
Transformações Geométricas
• Posicionamento da câmara em OpenGL
– gluLookAt( posx, posy, posz,
atx, aty, atz,
upx, upy, upz)
sendo:
pos – a posição da câmaraat – um ponto para onde a câmara apontaup – a direcção do vector vertical
DI-UM Computação Gráfica 09/1052
Transformações Geométricas
Object Space
World Space
DI-UM Computação Gráfica 09/1053
World Space
Camera Space
Screen Space
Transformações Geométricas
• Perspectiva - View Frustum– Pirâmide truncada que define a região visível
DI-UM Computação Gráfica 09/10 54
farplane
Em OpenGL o plano de projecção é o near plane
nearplane
Transformações Geométricas
• O plano de projecção é um plano perpendicular ao eixo do Z, a uma distância n da origem
• A câmara encontra-se situada na origem, a apontar na direcção do eixo do Z negativodo Z negativo
• Calculo das projecções de um ponto 3D (px ,py ,pz )(no espaço câmara) no plano de projecção
PyPz
ny
PxPz
nx
−=
−=
DI-UM Computação Gráfica 09/10 55
Transformações Geométricas
• Clip Space
– O clip space é um espaço intermédio entre o espaço câmara e o espaço ecrã.espaço ecrã.
– O view frustum é convertido para um cubo cuja gama de valores nas três coordenadas é [-1,1].
– Desta forma, é extremamente simples determinar qual a geometria que se encontra dentro do view frustum.
DI-UM Computação Gráfica 09/1056
Transformações Geométricas
• O plano de projecção é definido pelos seus limites de variação • x = [l,r] e y = [t,b]
X
Y
rlb
t
plano de projecção
DI-UM Computação Gráfica 09/1057
1f
-1 1
-1
X
Z
X
Z
nl r
X rl
ViewFrustum => Clip space
limites de variaçãode z = [n,f]
Transformações Geométricas
• Definição do Frustum em OpenGL
– glFrustum(left,right,bottom,top,near,far);
DI-UM Computação Gráfica 09/1058
Transformações Geométricas
• O GLU fornece uma alternativa mais simpática:
– gluPerspective(fy, ratio, near,far);
– sendo– sendo• fy – ângulo de visão em y. • ratio – relação fovx/fovy near
bottomtopf y
*2
)arctan(( −=
DI-UM Computação Gráfica 09/10 59
Transformações Geométricas
• Projecção Ortográfica em OpenGL
– glOrtho(left,right,bottom,top,near,far);
DI-UM Computação Gráfica 09/1060
Transformações Geométricas
• Screen Space
– Sejam cx e cy as coordenadas normalizadas em clip space de um ponto
2)1(
lcw xx +=
– As coordenadas do viewport, ou janela, (wx , wy ), com uma determinada largura le altura a são definidas da seguinte forma:
2)1(
2acw yy +=
DI-UM Computação Gráfica 09/10 61
Transformações Geométricas
• Viewport em OpenGL
– glViewport(x,y,width,height);
DI-UM Computação Gráfica 09/1062
Transformações Geométricas
Demo(projecções - Nate Robbins)
DI-UM Computação Gráfica 09/1063
Transformações Geométricas
• Matrizes em OpenGL
ModelViewGL_MODELVIEW
Object Space
World Space
DI-UM Computação Gráfica 09/1064
GL_MODELVIEW
ProjectionGL_PROJECTION
World Space
Camera Space
Screen Space
OpenGL
void changeSize(int w, int h) {
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width).
if(h == 0)
h = 1;
float ratio = 1.0* w / h;Setup da projecção
Necessário quando a // Set the viewport to be the entire window
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
// Reset the coordinate system before modifying
glLoadIdentity();
// Set the correct perspective.
gluPerspective(45,ratio,1,1000);
glMatrixMode(GL_MODELVIEW);
}
DI-UM Computação Gráfica 09/1065
Necessário quando a janela sofre modificações, ou ao iniciar a aplicação
OpenGL
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,
0.0,0.0,0.0,0.0,0.0,0.0,
0.0f,1.0f,0.0f);
glRotatef(a,0.1,0);
glutSolidTeapot(1);
a++;
glutSwapBuffers();
}
DI-UM Computação Gráfica 09/1066
Buffers
• Color Buffer
– O OpenGL permite ter 2 buffers distintos.
– Em cada instante visualiza-se um buffer e escreve-se no outro.
– No final da frame trocam-se os buffers.
DI-UM Computação Gráfica 09/1067
Buffers
• Color Buffer em OpenGL
– Na inicialização
• glutDisplayMode(GLUT_DOUBLE | ...);• glutDisplayMode(GLUT_DOUBLE | ...);
– No final de cada frame
• glutSwapBuffers();
DI-UM Computação Gráfica 09/1068
Buffers
• Depth Buffer ou Z-Buffer
– Buffer que armazena os valores de Z dos pixels que já foram desenhados
– Permite assim criar uma imagem correcta sem ser necessário – Permite assim criar uma imagem correcta sem ser necessário ordenar e dividir polígonos
DI-UM Computação Gráfica 09/1069
Buffers
• Depth Buffer em OpenGL
– Na inicialização
• glutInitDisplayMode(GLUT_DEPTH | ... );• glutInitDisplayMode(GLUT_DEPTH | ... );
• glEnable(GL_DEPTH_TEST);
– No início de cada frame• glClear(GL_DEPTH_BUFFER_BIT | ...);
DI-UM Computação Gráfica 09/1070
Buffers
• limitações do Z-Buffer - precisão
near = 0.01far=100.0
near = 0.0001far=100.0
near = 0.000001far=100.0
DI-UM Computação Gráfica 09/1071
Buffers
• limitações do Z-Buffer
– número de bits determina precisão
– Z-Buffer não é linear: mais detalhe perto do near plane
– Muitos bits são usados para distâncias curtas
DI-UM Computação Gráfica 09/1072
Buffers
• A precisão do Z-Buffer é definida por intervalos crescentes desde o near plane até ao far plane
• Exemplo (16 bits):• Exemplo (16 bits):
– zNear = 1; zFar = 1000– z = 10 : intervalo 0.00152– z = 900 : intervalo 12.51
DI-UM Computação Gráfica 09/1073
Buffers
• A precisão do Z-Buffer é dependente da relação entre o near plane e o far plane
• Exemplo (16 bits):
– zFar = 1000; z = 900– zNear = 1 : intervalo 12.51– zNear = 0.01: intervalo 143.25
DI-UM Computação Gráfica 09/1074
Buffers
• Z-Buffer: mais bits => mais precisão
• Exemplo :
– zFar = 1000; z = 900; zNear = 0.01– zFar = 1000; z = 900; zNear = 0.01– 24 bits: intervalo 0.483– 16 bits: intervalo 143.25
DI-UM Computação Gráfica 09/1075
Referências
• Mathematics for 3D Game Programming & Computer Graphics, Eric Lengyel
• 3D Math Primer for Graphics and Game Development, Fletcher Dunn e Ian ParberryDunn e Ian Parberry
• Interactive Computer Graphics: A Top Down Approach with OpenGL, Edward Angel
• OpenGL Reference Manual, OpenGL Architecture Review Board
• "Learning to love your z-buffer, http://sjbaker.org/steve/omniv/love_your_z_buffer.html
DI-UM Computação Gráfica 09/1076