280 likes | 443 Views
Projeções Clássicas e Matrizes de Projeção do OpenGL. Projeções Planas Cônicas. A. A p. B. B p. realista. não preserva escala não preserva ângulos. Projeções Planas Paralelas. A. A p. B. B p. pouco realista. preserva paralelismo possui escala conhecida.
E N D
Projeções Planas Cônicas A Ap B Bp • realista • não preserva escala • não preserva ângulos
Projeções Planas Paralelas A Ap B Bp • pouco realista • preserva paralelismo • possui escala conhecida
Classificação das projeções planas • Paralelas • ortográficas dp // n • plantas • elevações • iso-métrica • oblíquas dp não é paralela an • cavaleiras • cabinet • Cônicas • 1 pto de fuga • 2 ptos de fuga • 3 ptos de fuga
1 1/2 a a Projeções de um cubo • Paralelas 1 1 1 1 planta ou elevação iso-métrica Cabinete (a=45 ou 90) Cavaleira (a=45 ou 90) • Cônicas 1 pto de fuga 2 ptos de fuga
Projeção plana é uma transformação linear? Ou seja: T(P+Q) = T(P)+T(Q) e T(aP) = aT(P) ? 2V 2V V plano de projeção (2V)p¹ 2(Vp) 2Vp V Vp O Vp O cp cp Projeções cônicas não são TL, paralelas podem ser.
P+Q P Pp+ Qp Q Pp Pp Qp O Qp Projeção plana paralela é uma transformação linear? T(P+Q) = T(P)+T(Q) ? retas paralelas projetam em paralelas T( 0 ) = 0 ? Projeção paralela em plano que passa pela origem é uma transformação linear
Matrizes de projeções Cavaleiras e Cabinetes y y M 1 k (1,1,1) a 1 x x z Â3 Â2 1 0 -k.cos(a) M = 0 1 -k.sin(a) T(1,0,0) = (1,0) T(0,1,0) = (0,1) T(0,0,1) = ( -k cos a, -k sin a )
Matrizes de projeções pseudo-isométricas y y M j jp 1 (1,1,1) x i x ip kp k z Â3 Â2 T(1,0,0) = (cos 30 ,-sin 30) T(0,1,0) = (0,1) T(0,0,1) = (-cos 30, -sin 30) cos30 0 -cos30 M = -sin30 1 -sin30
ye P Pp ze xe yp xp d d = = ye -ze xe -ze d yp ye = -ze Projeção cônica simples zp = -d xe ye yp xp d -ze xp xe = -ze d d = n y xe e z z e e
d xp xe = -ze ye P d yp ye = Pp -ze ze xe xp d 0 0 0 d xe (d/-ze) xe yp 0 d 0 0 ye d ye (d/-ze) ye zp 0 0 d 0 ze d ze -d 0 0 -1 0 1 1 -ze 1 Projeção cônica simples zp = -d xe = = = ¸ w w
Simplificação da projeção cônica Projeção cônica Projeção ortográfica plano de projeção eye direção de projeção plano de projeção
ze = -f ye ze xe ze = -n n 0 0 0 0 n 0 0 0 0 0 0 -1 0 ye ze xe Distorce o frustum de visão para o espaço da tela [ P ] = d = n ze = -n ze = -f
n 0 0 0 0 n 0 0 0 0 n+f n Ÿ f 0 0 -1 0 Uma equação para profundidade Ptos no near (z=-n): Ptos no far (z=-f): [ P ] =
ye ze xe 0 1 0 -(r+l)/2 0 0 1 -(t+b)/2 [ T ] = 0 0 +(f+n)/2 1 0 0 1 0 ye ze xe Translada o paralelepípedo de visão para origem t b l r (t-b)/2 -(t-b)/2 -(r-l)/2 (f-n)/2 -(f-n)/2 (r-l)/2
ye ze xe 0 0 0 2/(r-l) 0 0 2/(t-b) 0 0 -2/(f-n) 0 0 1 0 0 0 yd near 1 1 1 -1 -1 -1 zd xd far Escala o paralelepípedo de visão no cubo [-1,1]x[-1,1]x[-1,1] (t-b)/2 -(t-b)/2 -(r-l)/2 (f-n)/2 -(f-n)/2 (r-l)/2 far near [S] =
n 0 0 0 0 n 0 0 0 0 n+f n Ÿ f 0 0 -1 0 0 1 0 -(r+l)/2 0 0 1 -(t+b)/2 [ T ] = 0 0 +(f+n)/2 1 0 0 1 0 0 0 0 2/(r-l) 0 0 2/(t-b) 0 [S] = 0 -2/(f-n) 0 0 1 0 0 0 Matriz Frustum do OpenGL [ P ] = [S TP ] = OpenGL Spec
Projeção Cônica (Frustum) void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); view frustum ye ze xe camera (eye) Obs.: near e far são distâncias(> 0) Plano de projeção bottom right left top far near ye xe ze ze
Projeção Cônica (Perspective) void glPerspective( GLdouble fovy, GLdouble aspect, GLdouble near_, GLdouble far_ ); w ye aspect = w/h ze h xe near far fovy xe ze
0 1 0 -(r+l)/2 0 0 1 -(t+b)/2 [ T ] = 0 0 +(f+n)/2 1 0 0 1 0 0 0 0 2/(r-l) 0 0 2/(t-b) 0 [S] = 0 -2/(f-n) 0 0 1 0 0 0 Matriz Ortho do OpenGL OpenGL Spec
Projeção Paralela(Ortho) near top far ye bottom ze A xe left right void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); void gluOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top );
Glu Look At void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); Dados: eye, ref, up (definem o sistema de coordenadas do olho) Determine a matriz que leva do sistema de Coordenadas dos Objetos para o sistema de Coordenadas do Olho up eye center Coordenadas dos Objetos Coordenadas do Olho
vup eye view y0 center x0 z0 y0 x0 z0 Calcula o sistema - xe ye ze dados: eye, center, up view = center - eye vup ze eye view center ze = – view / ||view||
vup ze xe eye view y0 center ye vup ze x0 xe eye z0 view y0 ye center vup ze xe x0 eye z0 view Calcula o sistema - xe ye ze xe = (vup x ze) / ||vup x ze|| ye = zex xe
ye ze xe eye 1 0 0 -eyex 0 1 0 -eyey 0 0 1 -eyez 0 0 0 1 [ T] = y0 center ye y0 x0 ze xe z0 eye x0 z0 center Translada o eye para origem
xex xey xez 0 yex yey yez 0 zex zey zez 0 0 0 0 1 [R ] = ye y0 ye , yo ze xe ze , zo eye x0 xe , xo z0 center Roda xe ye ze para xo yo zo
xex xey xez 0 yex yey yez 0 zex zey zez 0 0 0 0 1 [R ] = 1 0 0 -eyex 0 1 0 -eyey 0 0 1 -eyez 0 0 0 1 [ T] = Matriz Look At do OpenGL ze = – view / ||view|| [ R T] =? xe = (vup x ze) / ||vup x ze|| ye = zex xe
ye y0 ze xe ye eye x0 z0 ze xe center ye ye ze ze xe eye xe [ S ] ye [ T2 ] y0 [ P ] ze center [ R ] xe [ T ] x0 ye near 1 1 1 z0 -1 -1 -1 ze xe far Concatenação das transformações [ R ] [ T ] [ P ] [ T2 ] [ S ]