realidade virtual aula 4 remis balaniuk. exercício de montagem de um objeto 3d –escreva um...

42
Realidade Virtual Aula 4 Remis Balaniuk

Upload: internet

Post on 22-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Realidade VirtualAula 4

Remis Balaniuk

Page 2: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Exercício de Montagem de um objeto 3D

– Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema de coordenadas (0,0,0), com lados tendo tamanho 1.

– Programe uma tecla que dê uma volta com a câmera ao redor do cubo.

– Programe uma tecla que dê uma volta com a luz ao redor do cubo.

Page 3: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações

• Os modelos (topologias) dos objetos de uma cena virtual normalmente não mudam durante uma simulação, e quando precisam mudar por exigência da aplicação isso requer algoritmos e interfaces que podem ser bastante complexos.

• Já a representação dos objetos mudam constantemente e isso pode ser feito por uma série de operações matemáticas razoavelmente simples chamadas de transformações.

Page 4: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações

• As transformações de Translação, Escala e Rotação que serão apresentadas neste módulo são o “coração” de todas as aplicações em Computação Gráfica. 

• Veremos que as transformações podem ser expressas de forma simples, através da Multiplicação Matricial e  que as Coordenadas Homogêneas permitem um tratamento uniforme para as transformações.

• Começaremos estudando as transformações em 2D para depois extende-las a 3D.

Page 5: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Princípios das Transformações 2D

• Transformações são usadas para gerar um novo ponto (x’, y’) a partir das coordenadas (x,y) de um ponto que descreve o objeto original.

• Se o objeto original é uma linha, é suficiente aplicar as transformações aos pontos extremos e então desenhar a linha entre os dois pontos transformados para obter a transformação da linha.

• O mesmo é verdade para polígonos e objetos.• Ou seja, se temos que, por exemplo, rotacionar

um objeto tridimensional complexo, basta aplicar a mesma operação de rotação a todos os seus pontos e este terá sido rotacionado.

Page 6: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Princípios das Transformações 2D

• As transformações ditas “rígidas” são aquelas que não mudam a topologia ou a forma do objeto, só a sua representação.

• As tranformações rígidas básicas são a translação, rotação e a mudança de escala.

• Qualquer movimentos complexo em 3D pode ser decomposto nessas 3 transformações básicas.

• Por exemplo, um objeto que cai está ao mesmo tempo se transladando e rodando (rotacionando em torno de sí mesmo) ao mesmo tempo.

Page 7: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Princípios das Transformações 2D

• Como as transformações são aplicadas vértice a vértice do objeto, a aplicação uma a uma de cada transformação básica para compor um movimento complexo causaria movimentos não realistas e seria muito custoso em termos de performance.

• Por isso é importante que múltiplas transformações possam ser “concatenadas”, ou combinadas de forma a definir um movimento mais complexo numa única operação a ser aplicada sobre os vértices.

• Duas transformações combinadas então devem produzir uma única transformação que tem o mesmo efeito que a aplicação seqüencial das duas transformações originais.

• Assim, se T é uma transformação de translação e R uma transformação de rotação, pela propriedade da concatenação C = TR é uma transformação que produz o efeito combinado das duas transformações originais – translação e rotação.

Page 8: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Dica

• Se você não conhece ou não lembra os conceitos básicos de matrizes (soma, multiplicação, transposição, matriz identidade, etc) procure estuda-los para aproveitar melhor esse capítulo do curso.

Page 9: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Translação (Translation)

• Pontos do Plano XY podem ser deslocados (transladados) para novas posições através da adição de um deslocamento às coordenadas desses pontos.

• Considerando um vetor de deslocamento d=(dx,dy), consideramos que dx representa um deslocamento paralelo ao eixo X e dy um deslocamento paralelo ao eixo Y.

• Assim, para um ponto p=(x,y), a translação definirá uma nova posição p’=(x’,y’)=(x,y) + (dx,dy) = (x+dx,y+dy).

• Em notação matricial: P=(x y), T=(dx dy) e P’=P+T

Page 10: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Exemplo de translação dx=150,dy=50

Page 11: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Escala (Scale)

• Pontos podem ser submetidos a transformação de escala segundo os valores sx e sy (fatores de escala) que significam compressão (se 0<s<1) ou estiramento (se s>1) segundo as direções dos eixos X e Y respectivamente.

• Para o ponto p=(x,y) sua nova posição pode ser obtida pela multiplicação de seus valores, segundo as seguintes equações:– x’=x*sx e y’=y* sy

Page 12: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Escala (Scale)

• Vamos considerar um ponto P(x y) como sendo uma Matriz [1x2]. Se multiplicarmos por uma Matriz [2x2], obteremos uma outra Matriz, também [1x2], que podemos interpretar como sendo um outro ponto:

• Se então P’=P.S e (x’,y’)=(x.Sx, y.Sy)

y

x

s

syxyx0

0.''

y

x

s

sS

0

0

Page 13: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Escala (Scale)• exemplos de escala para o polígono do exemplo anterior:

•a esquerda: (sx=1 sy=0.5), a direita: (sx=1, sy=2)

Page 14: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Escala (Scale)

• Note-se que a operação de escala é relativa à origem do sistema de coordenadas.

• O polígono torna-se menor e mais próximo dos eixos quando o fator de escala é menor que 1.0.

• Se os fatores de escala forem maiores que 1.0, o polígono será maior e mais afastado dos eixos.

• Para evitar esse efeito de afastamento/aproximação deve-se primeiro fazer uma translação do objeto para a origem do sistema de coordenada, seguida da escala, seguida da translação oposta para que volte à posição original.

• Note que as proporções do polígono também mudaram devido às escalas diferenciadas.

• Temos uma escala diferenciada quando sx sy e uma escala uniforme quando sx = sy.

• Numa escala uniforme as proporções não são afetadas pela transformação.

Page 15: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Rotação (Rotation)

• Pontos podem sofrer rotação de um ângulo (phi) relativa à origem.

• A rotação 2D, no sentido anti-horário, é definida matematicamente como:

• Na forma matricial:

• Se então P’=P.R

)cos(.)sin(.'

)sin(.)cos(.'

yxy

yxx

)cos()sin(

)sin()cos().()''(

yxyx

)cos()sin(

)sin()cos(

R

Page 16: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Rotação (Rotation)

• Ângulos positivos são medidos no sentido anti-horário, de X para Y e sentido horário para ângulos negativos.

• As equações que definem matematicamente a rotação são melhor entendidas se aplicarmos os princípios da Trigonometria a partir da ilustração da fig. abaixo:

x’=L.cos(+) = L.cos()cos()-L.sin()sin() = x. cos()-y. sin()

X=L.cos() e y= L.sin()

y’=L.sin(+) = L.sin()cos()+L.cos()sin() = x. sin()+y. cos()

Page 17: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Rotação (Rotation)

• Exemplo de rotação do polígono anterior com =30°:

Page 18: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformação de Rotação (Rotation)

• Note-se novamente que a rotação ocorre relativa à origem do sistema de coordenadas e não em torno de sí mesmo

• Para obter uma rotação em torno de sí mesmo deve-se primeiro fazer uma translação do objeto para a origem do sistema de coordenada, seguida da rotação, seguida da translação oposta para que volte à posição original.

Page 19: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Coordenadas Homogêneas

• A representação matricial para translação, escala e rotação é, respectivamente:– P’=P+T, P’=P.S e P’=P.R

• Infelizmente, segundo essas equações, a translação é tratada diferentemente (como uma adição) em comparação com a escala e a rotação (multiplicações).

• Seria importante podermos tratar todas as três transformações de forma uniforme ou homogênea e assim poder facilmente combiná-las (concatená-las). Veremos agora como fazer isso.

Page 20: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Coordenadas Homogêneas

• Se expressarmos os pontos em Coordenadas Homogêneas, as três transformações poderão ser tratadas como multiplicações matriciais.

• Coordenadas homogêneas foram desenvolvidas na Geometria e posteriormente aplicadas na Computação Gráfica. 

• Em coordenadas homogêneas, um ponto P (x, y) é representado como P (w.x, w.y, w) para qualquer fator de escala w 0.

• Assim, dado um Ponto P (x, y, w) em Coordenadas Homogêneas podemos obter sua representação em coordenadas cartesianas 2D efetuando o seguinte cálculo: x=x/w e y=y/w

Page 21: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Coordenadas Homogêneas

• No espaço Bi-Dimensional , w será adotado como igual a 1 e portanto não executaremos as divisões.

• Neste caso, o uso das coordenadas homogêneas tem somente o objetivo de permitir a combinação das três transformações geométricas básicas.

• Em coordenadas homogêneas a representação matricial da transformação de Translação é:

– A matriz da direita é chamada de “matriz de transformação”

1

010

001

).1()1''(

yx dd

yxyx

Page 22: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Coordenadas Homogêneas

• De forma semelhante, a representação matricial da transformação de Escala é:

• Finalmente, a representação matricial da transformação de Rotação é:

100

00

00

).1()1''( y

x

S

S

yxyx

100

0)cos()sin(

0)sin()cos(

).1()1''(

yxyx

Page 23: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Coordenadas Homogêneas• Como exemplo do uso de coordenadas homogêneas, vamos imaginar

o que acontece se um ponto P é transladado por T1 com deslocamento (dx1 , dy1) para P’ e então transladado por T2 com deslocamento (dx2 , dy2) para P’’.

• Intuitivamente podemos esperar que o resultado seja uma translação composta e igual a (dx1 + dx2, dy1 + dy2).

• Então vejamos: P’=P. T1 e P’’=P’. T2 , logo P’’=(P. T1). T2 , ou seja P’’=P. T1. T2 , ou:

• A matriz resultante de T1.T2 é chamado de composição ou concatenação das duas translações.

1

010

001

).1(

1

010

001

.

1

010

001

).1()1''''(

21212211 yyxxyxyx dddd

yx

dddd

yxyx

Page 24: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Combinação das Transformações 2D

• A idéia básica da composição de transformações reside no fato de que é mais eficiente aplicar uma única transformação composta a um ponto do que uma série de transformações simples, uma após a outra. 

• Consideremos o problema da rotação de um objeto em torno de um ponto arbitrário P1.

• Como somente conhecemos a rotação em torno da origem, vamos converter nosso problema original (desconhecido) em três diferentes problemas (já conhecidos).

• Assim, para rotacionar em torno de P1, uma seqüência de três Transformações Fundamentais serão necessárias.  – (1)     – Transladar todo o objeto de forma de forma que P1 seja a nova

origem;– (2)     – Rotacionar todo o objeto e– (3)     – Transladar o objeto todo de volta de forma que a origem volte a

ser a inicial.

Page 25: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Combinação das Transformações 2D

• Considerando que P1 = (x1,y1), a primeira translação é de (-x1 , -y1) e a última translação é o inverso (x1 , y1).

Page 26: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Combinação das Transformações 2D

Page 27: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Combinação das Transformações 2D

• Um processo semelhante é usado na transformação de Escala de um Objeto relativa a um Ponto arbitrário P1 (para que esse ponto não se mova após a operação terminada).

• A sequência é a mesma do exemplo anterior: translação do objeto de forma que P1 esteja na origem, escala, translação do objeto para que P1 volte à sua posição original.

• A Composição dessas Transformações é:

Page 28: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Combinação das Transformações 2D

• Esta Composição de transformações, aqui demonstrada, será continuamente utilizada em nossas operações de visualização 2D e 3D.

• Devemos observar que normalmente a escolha de P1 - centro de rotação e de escala - não é arbitrária, mas convenientemente adotada como sendo o centro geométrico (ou de gravidade) do objeto.

• Desta forma, garantimos que as operações relacionadas com a origem do sistema de coordenadas (rotação e escala) não produzirão deslocamentos ou distorções indesejáveis nas imagens transformadas.

Page 29: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Exercício

• Para a figura abaixo, calcule a posição dos vértices após uma rotação de 90 em torno do ponto p2.

x

y

p1=(2,3) p2=(5,3)

p3=(3.5,1)

p4=(3.5,5)

Page 30: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações em 3D

• A extensão de 2D para 3D é imediata nos casos de translação e escala:– Translação:

– Escala

1

0100

0010

0001

.''''

dzdydx

wzyxwzyx

1000

000

000

000

.''''Sz

Sy

Sx

wzyxwzyx

Page 31: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações em 3D

• No caso da rotação é um pouco mais complicado.

• Um rotação 2D ocorre sempre em torno do eixo que “sai” do plano (z).

• Já uma rotação 3D pode ocorrer em torno de qualquer eixo.

• As rotações básicas, em torno dos eixos x,y e z do sistema de coordenadas do objeto, são chamadas de roll (em torno de x), pitch (em torno de z) e yaw (em torno de y)

Page 32: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações em 3D

• A notação mais usada para definir uma rotação, usada pelo OpenGL e pelo Chai, é definida por um vetor 3D representando o eixo de rotação e um escalar representando o ângulo de rotação:– glRotate*(a,x,y,z)

Page 33: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações em 3D

• A matriz de transformação no caso das rotações básicas seriam então definidas por:

1000

0cossin0

0sincos0

0001

:0,0,1,*aa

aaaglRotate

1000

0cos0sin

0010

0sin0cos

:0,1,0,*aa

aa

aglRotate

1000

0100

00cossin

00sincos

:1,0,0,*aa

aa

aglRotate

Page 34: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações em 3D

• Para uma rotação em torno de um eixo qualquer (x,y,z) para um ângulo a a matriz de rotação é definida da seguinte forma:– v=(x,y,z)T – u=v/||v||=(x’,y’,z’)T ( ||v|| = )

– e M=uuT + (cos a)(I-uuT)+(sin a) S (I é a matriz identidade)

0''

'0'

''0

xy

xz

yz

S

222 zyx

Page 35: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações em 3D

• A matriz de transformação será definida por:

• onde m representa os elementos da matriz de rotação M

1000

0

0

0

mmm

mmm

mmm

Page 36: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações no SAI• Na classe cGenericObject as transformações são obtidas usando

os seguintes métodos: //! Translate this object by a specified offsetvoid translate(const cVector3d& a_translation);

//! Translate this object by a specified offset void translate(const double a_x, const double a_y,

const double a_z);

//! Rotate this object by multiplying with a specified rotation matrix

void rotate(const cMatrix3d& a_rotation);

//! Rotate this object around axis a_axis by angle a_angle (radians)

void rotate(const cVector3d& a_axis, const double a_angle);

Page 37: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações no SAI

• Note que a rotação pode ser definida pela matriz de rotação ou pelo formato OpenGL com um eixo de rotação e um ângulo.

• As transformações no Chai ocorrem com relação à origem e orientação do sistema de coordenadas local.

• Não é possível concatenar transformações no Chai. Cada transformação pedida é realizada isoladamente, o que impede a mudança do centro da rotação por exemplo.

• Mudança de escala ainda não foi implementada no Chai.

Page 38: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Transformações no SAI

• A hierarquia de objetos tem um papel importante no resultado das transformações pois a origem e a orientação do sistema de coordenadas local de um objeto é definido pelo objeto pai (se for o objeto raiz será com relação à origem da cena).

• Veremos isso em detalhe na aula 5.

Page 39: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Exercícios

1) Adicione teclas aos projeto anterior do cubo de forma que seja possível mover e rotacionar o cubo em torno dos eixos principais usando as transformações nativas do Chai.

2) Adapte o cubo gerado de forma que ele não esteja definido em torno da origem e sim a uma distância de 0.5 da origem. Teste as teclas de rotação nessa configuração.

3) Reimplemente as operações de movimento do objeto calculando a matriz de transformação. Nessa implementação faça com que a rotação do objeto seja em torno de um ponto arbitrário definido como parâmetro.

4) Implemente um cubo que orbita continuamente em torno do centro e em torno de sí mesmo ao mesmo tempo.

Page 40: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Implementando rotações e translações diretamente

• No projeto aula3.bpr são propostas 4 rotinas que implementam rotações e translações manipulando matrizes de transformação (ao invés de simplesmente chamar os métodos translate e rotate do Chai).

• Essas rotinas ilustram os conceitos apresentados nessa aula e dão mais flexibilidade às transformações rígidas.

Page 41: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Implementando rotações e translações diretamente

• A rotina “roda” implementa a rotação de um objeto passado como parâmetro.

• A rotação é feita em torno de um centro de rotação (centroRot) seguindo um eixo de rotação (eixo) e com um certo ângulo (ângulo).

• O centro de rotação pode ser uma posição absoluta (nesse caso deve-se usar recalCentro=false) ou uma posição definida no sistema de coordenadas do próprio objeto (nesse caso deve-se usar recalCentro=true para que a posição global do centro seja recalculada).

void roda(cMesh *obj,cVector3d centroRot, cVector3d eixo, double angulo, bool recalCentro);

Page 42: Realidade Virtual Aula 4 Remis Balaniuk. Exercício de Montagem de um objeto 3D –Escreva um projeto no Chai que crie um cubo, centrado na origem do sistema

Implementando rotações e translações diretamente

• As rotinas “rotacao”, “translacao” e “multiplica” são subrotinas usadas para implementar “roda”.

• Note que “roda” lê a matriz de transformação atual do objeto através de obj->getPos() e obj->getRot() que fornecem respectivamente os dados de translação e rotação.

• Em seguida essa matriz é manipulada através dos métodos da classe cMatrixGL.

• No final de “roda” a matriz de transformação recalculada é colocada de volta no objeto usando:

obj->setRot(matriz.getRot()); obj->setPos(matriz.getPos());