aula_009 - transformacoes geometricas no espaco.pdf

51
Conteúdo : Professores : Anselmo Montenegro Esteban Clua Aula 9 1 - Transformações geométricas no espaço ATENÇÃO: O professor menciona aula 8, mas na verdade o número correto é 9.

Upload: chcp2000

Post on 22-Nov-2015

36 views

Category:

Documents


1 download

TRANSCRIPT

  • Contedo:

    Professores:

    Anselmo MontenegroEsteban Clua

    Aula 9

    1

    - Transformaes geomtricas no espao

    ATENO: O professor menciona aula 8, mas na verdade o nmero correto 9.

  • Transformaes geomtricas no espao2

    DADOSComputaoGrfica

    IMAGENS

    Introduo

    As transformaes geomtricas so operaes fundamentais para a modelagem, visualizao e interao com objetos grficos 3D.Descreveremos os seguintes tpicos:- Escalas, rotaes e translaes no espao.- Esquemas para representao de orientaes.- Composio de transformaes:

    Instanciao de objetos.Hierarquia.

  • Transformaes geomtricas no espao3

    Introduo

    Transformaes de escala, rotao e translao so fundamentais para a criao de cenas compostas por diversos objetos.

    As matrizes de translao e escala so de fato uma simples extenso das matrizes de transformao definidas no plano.

  • Transformaes geomtricas no espao4

    Translaes e escalas

  • Transformaes geomtricas no espao5

    Rotaes

    As operaes de rotao no espao so mais complexas do que no plano.

    Uma extenso natural definirmos a rotao de um objeto a partir da rotao em torno dos eixos cartesianos.

  • Transformaes geomtricas no espao6

    Rotaes

    Podemos facilmente definir as matrizes de rotao em cada eixo.

    As colunas de uma matriz de rotao em torno de um certo eixo cartesiano so dados pela transformao dos vetores da base cannica.

  • Transformaes geomtricas no espao7

    Rotaes no eixo z

  • Transformaes geomtricas no espao8

    Rotaes no eixo x

  • Transformaes geomtricas no espao9

    Rotaes no eixo y

  • Transformaes geomtricas no espao10

    Rotaes nos eixos cartesianos

  • Transformaes geomtricas no espao11

    Matrizes de transformaoEm geral, uma matriz de transformao em coordenadas homogneas tem a seguinte estrutura:

    Se a matriz M e o vetor s tem dimenses 2x2 e 1x2, respectivamente, ento a transformao ocorre no plano homogneo.Se as dimenses forem 3x3 e 3x1, respectivamente, ento a transformao ocorre no espao homogneo.

  • Transformaes geomtricas no espao12

    Matrizes de transformao

    A forma matricial homognea pode representar

    a) Transformaes lineares.b) Translaesc) Transformaes afins.

  • Transformaes geomtricas no espao13

    http://sdcd.gsfc.nasa.gov/SVS/stories/solve/toms.html

    Matrizes de transformao

    A matriz que representa uma transformao afim representa uma transformao linear seguida de uma translao:

    Caso invertssemos a ordem teramos

  • Transformaes geomtricas no espao14

    Tons de cinzaBorramentoDeteco de arestas

    Matrizes de transformao

    Como podemos ver, a ordem influi no resultado.

    Na segunda ordem, a translao no pode ser lida diretamente da ltima coluna ltima matriz.

    Como a ltima linha o vetor [0..0 1] ento estas matrizes mantm os pontos no plano w = 1.

    Nas transformaes projetivas, que sero vistas mais tarde, a ltima linha assume outros valores e os pontos podem ser deslocados do plano w=1.

  • Transformaes geomtricas no espao15

    LAK 5519

    Rotaes e orientaes

  • Transformaes geomtricas no espao16

    ngulos de EulerJ que as rotaes no comutam devemos adotar uma ordem especfica.

    Esta forma de representar orientaes denominada ngulos de Euler.Na literatura de aeronutica estas rotaes so chamadas de

    - Roll - giro em torno do eixo longitudinal- Pitch - ngulo de ataque.- Yaw - giro em torno do eixo vertical.

  • Transformaes geomtricas no espao17

    ngulos de Euler

  • Transformaes geomtricas no espao18

    Modelos matemticos

    Modelos fsicosEstruturas de dados e algoritmos.

    Esquemas de representao.Universo

    FsicoUniverso

    MatemticoUniverso de

    RepresentaoUniverso de

    Implementao

    ngulos de Euler Problemas:

    - Gimbal lock: perda de graus de liberdade em certas configuraes.

    - No so parmetros adequados para interpolaes.

  • Transformaes geomtricas no espao19

    ngulos de Euler - Gimbal Lock

    A ltima operao no ser possvel.

    Original

    Animador deseja rodar o boneco de lado ( ) graus, inclin-lo para frente ( ) e levantar seu brao esquerdo.

  • Transformaes geomtricas no espao20

    EFICINCIAREALISMO

    ngulos de Euler - Gimbal LockMesmo resultado obtido apenas com rotaes no eixo x e y.

    Original

  • Transformaes geomtricas no espao21

    ngulos de Euler

    Apesar de especificarmos 2 parmetros s temos 1 grau de liberdade

  • Transformaes geomtricas no espao22

    ngulos de Euler - interpolao

    Note que em uma interpolao mais natural a cabea no sairia tanto do plano xz.

    Interpolao entre as orientaes (0,90,0) e (0,90,0).

  • Transformaes geomtricas no espao23

    Outras formas de se expecificar orientaes

    Rotaes em torno de um eixo:

    - Euler provou em 1775 que dadas duas posies rotacionadas de um objeto, sempre possvel levar uma posio a outra atravs de uma rotao de um ngulo em torno de um eixo.

    - Esta rotao tem a mesmo comportamento que a interpolao de duas posies atravs de um segmento de reta que os une.

    - Sai da primeira posio indo para a segunda sem oscilaes.

  • Transformaes geomtricas no espao24

    Outras formas de se expecificar orientaes

    Quaternions

    - A especificao de orientaes atravs de rotaes em torno de um eixo no fornece uma lgebra simples para as diversas operaes necessrias para animao.

    - Para isso existe uma estrutura matemtica mais adequada denominada Quaternions.

    - Um boa introduo aos Quaternions pode ser encontrada em: http://www.gamasutra.com/features/19980703/quaternions_01.htm

  • Transformaes geomtricas no espao25

    Transformaes em OpenGLTranslao

    Rotao de angle graus em torno de um eixo (x,y,z).

    Escala

    - glTranslate{fd}(TYPE x, TYPE y, TYPE z);

    - glRotate{fd}(TYPE angle,TYPE x, TYPE y, TYPE z);

    - glScale{fd}(TYPE sx, TYPE sy, TYPE sz);

  • Transformaes geomtricas no espao26

    Transformaes em OpenGL

    Para transformarmos um certo objeto poligonal basta aplicar a matriz de transformao em cada um dos seus vrtices.Por outro lado, no caso geral, as normais destes objetos no seguem a mesma transformao.Exemplo:

  • Transformaes geomtricas no espao27

    Transformaes em OpenGL

    Considere o plano com equao

    Se incluirmos a matriz identidade I = M-1M no alteramos a equao abaixo:

  • Transformaes geomtricas no espao28

    XlibGKSMotifQuickDrawPHIGSRenderWareHOOPSToolBookIUP/luaCanvasDrawDelphiVisualBasicJavaDirectXC / C++GLUTOpenGLC &OpenGL(c/ GLUT)

    Transformaes em OpenGL

    A equao do plano transformado n.p=0

    Logo, temos que a normal transformada

  • Transformaes geomtricas no espao29

    Transformaes em OpenGL

    O processo de instanciao de objeto permite a especificao de modelos complexos atravs de modelos padro simples e transformaes geomtricas. fundamental para a descrio de objetos compostos de vrias partes, principalmente quando h vnculo entre as mesmas.

    Devemos primeiramente esclarecer a questo de ordem e interpretao das transformaes geomtricas compostas.

  • Transformaes geomtricas no espao30

    Transformaes em OpenGL

  • Transformaes geomtricas no espao31

    Transformaes em OpenGL

  • Transformaes geomtricas no espao32

    Transformaes em OpenGL

    s vezes difcil especificar transformaes geomtricas nos casos em que a existe dependncia entre a posio das partes de um objeto composto.Nestas situaes conveniente adotar uma outra interpretao geomtrica para as transformaes compostas.

  • Transformaes geomtricas no espao33

    Transformaes em OpenGL

    Ao invs de considerarmos que as transformaes ocorrem nos objetos, consideramos que elas ocorrem em um sistema de eixos locais que rodam e transladam.

    A idia que os eixos locais inicialmente coincidem com o sistema de referncia global.

    A cada rotao e translao, um dado eixo local muda de posio e/ou orientao.

  • Transformaes geomtricas no espao34

    Transformaes em OpenGL

  • Transformaes geomtricas no espao35

    Transformaes em OpenGL

  • Transformaes geomtricas no espao36

    Transformaes em OpenGL

  • Transformaes geomtricas no espao37

    Transformaes em OpenGL

  • Transformaes geomtricas no espao38

    Transformaes em OpenGL

  • Transformaes geomtricas no espao39

    Transformaes em OpenGL

  • Transformaes geomtricas no espao40

    Transformaes em OpenGLDesenha a base (em xyz);Translada em y;Roda em y; Roda em z;Desenha o ombro (em x1y1z1)Translada em y1 de d1/2;Desenha o ante-brao (em x2y2z2);Translada em y2 de d1/2;Roda em z2Desenha o cotovelo (em x3y3z3);Translada em y3 de d2/2;Desenha o brao (em x4y4z4);Translada em y4 de d2/2;Roda em z4;Desenha o pulso (em x5y5z5);Translada em y5Desenha a mo (em x6y6z6);

  • Transformaes geomtricas no espao41

    Transformaes em OpenGLglMatrixMode(GL_MODELVIEW); /* transformaes do modelo */glLoadIdentity( ); /* carrega a identidade como corrente */desenhaBase( ); /* em xyz */glTranslatef(0,d0,0.); /* translada em y */glRotatef(angy0, 0.,1.,0.); /* roda em y */glRotatef(angz0, 0.,0.,1.); /* roda em z */desenhaOmbro( ); /* em x1y1z1 */glTranslatef(0.,d1/2,0.); /* translada em y1 */desenhaAnteBraco( ); /* em x2y2z2 */glTranslatef(0.,d1/2,0.); /* translada em y2 */glRotatef(angz1, 0.,0.,1.); /* roda em z2 */desenhaCotovelo( ); /* em x3y3z3 */glTranslatef(0.,d2/2,0.); /* translada em y3 */desenhaBraco( ); /* em x4y4z4 */glTranslatef(0.,d2/2,0.); /* translada em y4 */glRotatef(rz5, 0.,0.,1.); /* roda em z4 */desenhaPulso( ); /* em x5y5z5 */glTranslatef(0.,d3,0.0); /* translada em y5 */desenhaMao( ); /* em x6y6z6 */

  • Transformaes geomtricas no espao42

    Transformaes em OpenGL

  • Transformaes geomtricas no espao43

    Transformaes em OpenGL

    Sistemas como o OpenGL utilizam o conceito de matriz corrente.

    Desta forma, apenas uma matriz responsvel por realizar as transformaes geomtricas.

    Esta matriz denominada matriz de modelagem e visualizao (model view matrix).

  • Transformaes geomtricas no espao44

    Transformaes em OpenGL

    Quando fornecemos uma nova matriz M, ela multiplicada pela esquerda pela matriz corrente C. Isto Cnova = CM.

    Geometricamente isto significa que a transformao descrita por M ocorrer primeiro que a transformao dada por C.

    Isto bastante conveniente para o esquema de interpretao do processo de instanciao baseado em eixos locais.

  • Transformaes geomtricas no espao45

    Transformaes em OpenGL

    Existem situaes em que o processo de instanciao no descrito por uma seqncia de transformaes com estrutura linear.

    comum por exemplo, encontrarmos objetos que so descritos por seqncias de transformao estruturadas em forma de rvore.

    Nestes casos definida uma hierarquia sobre o conjunto de transformaes e partes do objeto que especificam o modelo.

  • Transformaes geomtricas no espao46

    Transformaes em OpenGL

    Nestes casos, ao trmino do percorrimento de um dos ramos, necessrio recuperar a matriz do n quando primeiro chegamos a ele.

    Por exemplo, podemos definir os dedos direito e esquerdo da mo de um rob a partir da base da mo.

  • Transformaes geomtricas no espao47

    Transformaes em OpenGL

  • Transformaes geomtricas no espao48

    Transformaes em OpenGL

    Sistemas como o OpenGL implementam uma estrutura de pilha para matrizes de transformao.

    Desta forma, possvel percorrer a rvore saltando e recuperando as matrizes dos ns pai atravs de instrues pop e push.

    Com o mecanismo de pilha, podemos garantir que uma funo retorna sem alterar o estado corrente das transformaes.

  • Transformaes geomtricas no espao49

    Transformaes em OpenGLvoid desenhaDedos(float b,float c, float f, float f )

    /* dedo esquerdo */

    glPushMatrix(); /* Salva matriz corrente C0 */ glTranslatef((f+e)/2,(b+c)/2,0.); /* C=CTesq */ glScalef(e,c,e); /* C=CS */ glutSolidCube(1.0); glPopMatrix(); /* Recupera da pilha C=C0 */

    /* dedo direito */

    glPushMatrix(); /* Salva matriz corrente C0 */ glTranslatef((f+e)/2,(b+c)/2,0.); /* C=CTdir */ glScalef(e,c,e); /* C=CS */ glutSolidCube(1.0); glPopMatrix(); /* Recupera da pilha C=C0 */

    }

  • Transformaes geomtricas no espao50

    Transformaes em OpenGL - exemplo

  • 51

    Contedo:

    Professores:

    Anselmo MontenegroEsteban Clua

    Aula 9

    - Transformaes geomtricas no espao