Transformações geométricas no plano e no espaço
Sistemas de Coordenadas Sistemas de Referência com finalidades específicas: SRU Sistema de Referência do Universo SRO Sistema de Referência do Objeto SRN Sistema de Referência Normalizado SRD Sistema de Referência do Dispositivo
Sistema de Referência do Universo Universo ou mundo (onde o objeto está) Pode ser em milímetros ou quilômetros Não necessariamente será cartesiano Localização de aviação: o ideal é o polar Apresentam limites extremos (coordenadas máximas e mínimas do universo)
Sistema de Referência do Objeto Cada objeto é um miniuniverso Centro de gravidade do objeto (pivô) pode coincidir com o centro do sistema
Sistema de Referência Normalizado Coordenadas normalizadas 0OxO1 e 0OyO1 Intermediário entre SRU e SRD Torna a geração das imagens independente do dispositivo
Sistema de Referência do Dispositivo Coordenadas que podem ser fornecidas diretamente a um dispositivo Ex: Vídeo (800x600 pixels)
Transformações entre Sistema de Coordenadas Polar para Cartesiano Objeto é descrito no SRO e deve passar para o sistema de coordenadas global da cena
Transformações em pontos e objetos Translação Escalonamento Reflexão Rotação Cisalhamento
Translação x' = x + Tx y' = y + Ty z' = z + Tz Objetos são descritos por pontos principais. Apenas esses pontos são transformados e o objeto é redesenhado
Translação y x
Escalonamento x' = x S x y' = y S y z' = z S z Caso o objeto não esteja na origem, o mesmo será transladado
Escalonamento y x
Reflexão É um caso específico de escalonamento, onde por exemplo: Se x' = -x, então S x =-1 e a reflexão é em yz. Se y' = -y, então Sy =-1 e a reflexão é em xz. Se z' = -z, então S z =-1 e a reflexão é em xy. É uma operação utilizada justamente no efeito de reflexão em uma superfície polida
rotação Rotacionando em torno da origem (2D): x' = xcos(θ) y sen(θ) y' = ycos(θ) + x sen(θ) Caso o objeto não esteja na origem, o mesmo será transladado
rotação y x
rotação Considerando as três coordenadas: Rotação em torno do eixo z o plano xy Rotação em torno do eixo y o plano xz Rotação em torno do eixo x o plano yz y' a y y x' x a x z
Rotação do plano XY x' = xcos(α) y sen(α) y' = ycos(α) + x sen(α) z' = z
Rotação do plano ZX x' = x cos(δ) + z sen(δ) y' = y z' = z cos(δ) - x sen(δ)
Rotação do plano YZ x' = x y' = y cos(β) - z sen(β) z' = z cos(β) + y sen(β)
Rotação As matrizes de rotação apresentadas são ortonormais R -1 = R T A ordem em em que as matrizes são multiplicadas (rotação são efetuadas) altera o resultado final M x N x O O x N x M se M O
cisalhamento Ex: x' = x + Sy y' = y z' = z Outros tipos de deformações podem ser utilizadas x' = x y' = ax + y + bz z' = cx + z
Coordenadas Homogêneas Cisalhamento, Rotação, Escala: Multiplicação de matrizes Combinação de transformações obtida pela multiplicação consecutiva das matrizes de transformação Translação: Soma de Matrizes Para simplificar utilizamos coordenadas homogêneas (x',y',z',m) (x,y,z) = (x'/m, y'/m, z'/m)
Coordenadas Homogêneas (2) Se M=0, os pontos estão fora do espaço dimensional, mas... podemos ter M=0, significando que M tende a zero, representando pontos no infinito Representações de números muito grandes ou muito pequenos: (1,2,3,10000) i(0.0001, 0.0002, 0.0003) (1,2,3,0.0001) i(10000, 20000, 30000)
Coordenadas Homogêneas (3) Transformação de Escala Transformação de Rotação
Projeções Geométricas Desenhar o objeto em 2D Aplicar transformações Ex: Perspectiva Isométrica Rotação do eixo y de 45 Rotação do eixo x de 35 26 Projeção do novo plano (z=0) [ x' y' z' ١] = [ x y z ١] ٠,٧٠٧ ٠ ٠,٧٠٧ ٠ ٠,٤٠٨ ٠,٨١٦ ٠,٤٠٨ ٠ ٠ ٠ ٠ ٠ ٠ ٠ ٠ ١
Transformações com OpenGL gltranslatef (7,-4,5); gltranslatef (T x,t y,t z ); glscalef(1,0.5,1); glscalef(s x,s y,s z ); glrotatef(30,1,0,1); glrotatef(angulo,x,y,z); (x,y,z) são as coordenadas que determinam o vetor de rotação. Ex: (0,0,1) define que a rotação será em torno do eixo z.
Transformações com OpenGL Para usar uma matriz particular de transformação, pode-se utilizar a função glmultmatrix(float M[16]) Utiliza-se como argumento uma matriz de 16 elementos que representa [ o conteúdo de uma ] matriz 4x4 Ex: Para cisalhamento utiliza-se o vetor [1 0 0 0 S 1 0 0 0 0 0 1 0 0 0 1], representando a matriz 1 0 0 0 S 1 0 0 0 0 1 0 0 0 0 1
Processamento de vértices
OpenGL - Matrizes de Transformação OpenGL mantém três matrizes de transformação Modelview (relativo ao objeto) Projection (relativo à projeção) Texture (relativo à textura) Qualquer uma pode ser alterada A função MatrixMode determina qual matriz será utilizada
OpenGL - Matrizes de Transformação (2) glmatrixmode(gl_projection);//usa matriz de projeção glloadidentity();//matriz de projeção = I gluperspective(30.0,width/height,1,1,10);//define opções de visão, alterando a matriz de projeção glmatrixmode(gl_modelview);//usa matriz de modelagem glloadidentity();//matriz de modelagem = I gltranslatef(0,0,2);// Translação de 2 unidades (eixo z) glrotatef(29,1,0,0);//rotação de 29 graus (eixo x)
Criando Objetos com OpenGL Criando um Polígono: glbegin(gl_polygon);//marco o início de um polígono glvertex2i(0,0);//primeiro vértice está em (0,0) glvertex2i(1,0);//segundo vértice está em (1,0) glvertex2i(1,1);//terceiro vértice está em (1,1) glend();//marca o fim do polígono
Argumentos para glbegin()
Polígonos em OpenGL Não podem ser convexos Sem limite para vértices