• Nenhum resultado encontrado

11-Visu3D

N/A
N/A
Protected

Academic year: 2021

Share "11-Visu3D"

Copied!
19
0
0

Texto

(1)

Programação Gráfica 3D

Prof. Rogério Celestino dos Santos

(2)

Visualização 3D

ƒ Quando se trabalha com três dimensões, o SRU

t t ê i

passa a ser composto por três eixos

ƒ X,Y,Z

ortogonais entre si pela origem (0 0 0 0 0 0) ƒ ortogonais entre si pela origem (0.0,0.0,0.0)

Uma coordenada agora é formada pelos alores

ƒ Uma coordenada agora é formada pelos valores x,y,z

P id tifi f il t i é

ƒ Para identificar facilmente como o eixo z é

posicionado em relação à x e y, normalmente se usa a regra da “mão direita” ou regra da “mão esquerda” a regra da mão direita ou regra da mão esquerda

ƒ No caso de OpenGL o padrão é a “mão direita”

(3)

Visualização 3D

ƒ Indicador aponta para o positivo de y

ƒ Polegar aponta para o positivo de x

(4)

Visualização 3D

ƒ O processo de visualização 3D é mais complexo do

2D i d ú i d

que o 2D, pois compreende um número maior de etapas.

ƒ Está complexidade existe porque quase todos os

dispositivos de saída (monitores e impressoras) são dispositivos de saída (monitores e impressoras) são somente 2D.

ƒ Assim, é preciso definir como a sena 3D será

(5)

Visualização 3D

ƒ A primeira etapa do processo de visualização 3D é a

d fi i ã d 3D

definição da cena 3D.

N t t t d bj t f ã t d d

ƒ Nesta etapa todos objetos que farão parte do mundo

3D é incluído e posicionado na SRU por meio de escala rotação e translação

escala, rotação e translação.

ƒ O próximo passo consiste na especificação de um

ƒ O próximo passo consiste na especificação de um

observador virtual.

ƒ Esse observador define de que local deseja-se que a

cena 3D seja exibida. cena 3D seja exibida.

(6)

Câmera Sintética

ƒ A especificação do observador inclui a sua posição e a

orientação, ou seja, onde o observador está e para onde ele está ç j p olhando

A analogia câmera normal em nosso ni erso

ƒ A analogia: câmera normal em nosso universo

ƒ Podemos mover a câmera para qualquer posição e orientaçãoPodemos mover a câmera para qualquer posição e orientação no espaço

ƒ A câmera pode tirar fotos simples ou tornar-se uma filmadora, que mostra nosso universo de diferentes orientações

ƒ Nossa câmera sintética é um programa de computador que

produz, a partir de uma descrição dos objetos, a imagem na tela do computador

(7)

Câmera Sintética

ƒ A localização e orientação da câmara processa-se no

d bj t li

espaço dos objetos e, para o realizar, empregam-se as coordenadas e métrica do mundo dos objetos.

ƒ Em termos de OpenGL diz-se que tal se realiza em

modo de vista de modelo (GL MODELVIEW) e que modo de vista de modelo (GL_MODELVIEW) e que, portanto, esta localização é afectada pela matriz de

transformação corrente neste modo.ç

(8)

Câmera Sintética

ƒ Para localizar a câmara é necessário

especificar a sua posição (através do respectivo especificar a sua posição (através do respectivo

vetor) e a sua orientação.

ƒ Orientar uma câmara significa dirigi-la numa dada direção (view vector) por meio do vector (at vector) especificando o ponto para o qual a (at vector) especificando o ponto para o qual a câmara é apontada e definir também a direção para cima da própria câmara (up vector).

(9)

Câmera Sintética

void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,

GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz );

ƒ Os parâmetros:

ƒ eyex, eyey e eyez são usados para definir as coordenadas x, y e z,

respectivamente, da posição da câmera (ou observador);

ƒ centerx, centery e centerz são usados para definir as coordenadas x, y e z,

respectivamente, da posição do alvo, isto é para onde o observador está olhando (normalmente o centro da cena);

(normalmente, o centro da cena);

ƒ upx, upy e upz são as coordenadas x, y e z, que estabelecem o vetor up (indica o

"lado de cima" de uma cena 3D)

ƒ O comando gluLookAt() deve ser chamado antes das operações de transformações dos

ƒ O comando gluLookAt() deve ser chamado antes das operações de transformações dos

(10)

Exercícios

1. Agora altere o parâmetro upy para -1 e veja o que acontece com o cubo

com o cubo.

2. Depois, atribua o valor 1 para upy novamente.

3. Em seguida, altere o parâmetro eyez para 100, compile e

3. Em seguida, altere o parâmetro eyez para 100, compile e visualize o resultado.

4. Depois altere este mesmo parâmetro para 300, compile e

i li lt d t

visualize o resultado novamente.

5. Na seqüência, passe o valor 200 para este parâmetro.

6 Altere o parâmetro centerx para 20 compile e execute o

6. Altere o parâmetro centerx para 20, compile e execute o programa.

7. Agora altere este mesmo parâmetro para -20, compile e execute o programa.

(11)

Projeção

ƒ Quando se está trabalhando com a representação de objetos no espaço 3D existe uma etapa obrigatória: objetos no espaço 3D existe uma etapa obrigatória: mapear suas representações 3D para imagens 2D.

ƒ Está operação de obter representações 2D de objetos 3D é chamada projeção.

ƒ Objetos 3D, em geral são representados por uma coleção d t ( é ti )

de pontos (vértices)

ƒ A projeção desses objetos é definida por raios de projeção

ƒ A projeção desses objetos é definida por raios de projeção (segmentos de retas) chamados de projetantes, que passa através de cada vértice do objeto e interseccionam um

(12)

Projeção

ƒ As projeções são usualmente divididas em dois tipos

i i i

principais:

ƒ Projeção Paralela Ortográfica:

ƒ As projetantes são paralelas entre si passam pelos

ƒ As projetantes são paralelas entre si, passam pelos pontos que definem os objetos e interseccionam o plano com o ânulo de 90°

(13)

Projeção Paralela Ortográfica

ƒ Neste tipo de projeção simplesmente descartamos uma

d di õ

das dimensões.

ƒ Por exemplo, um ponto (x,y,z) será mapeado para simplesmente (x y)

simplesmente (x,y).

ƒ Este tipo de projeção é bastante utilizada em projetos arquitetônicos e de peças mecânicas, pois os desenhos q p ç , p assim obtidos podem ser utilizados para medirmos as dimensões dos objetos representados.

ƒ Na projeção ortográfica, não importa a distância entre o objeto e o observador, o objeto vai sempre ser

visualizado do mesmo tamanho diferentemente da visualizado do mesmo tamanho, diferentemente da projeção perspectiva.

(14)

Projeção Paralela Ortográfica

ƒ Em OpenGL a chamada que especifica uma projeção ortográfica no espaço 2D já conhecida é a:

no espaço 2D já conhecida é a:

ƒ gluOrtho2D( double left, double right, double bottom, double top ); ƒ No espaço 3D a chamada é:p ç

ƒ glOrtho(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);

ƒ Esta chamada define no espaço 3D um paralelepípedo

ƒ Esta chamada define no espaço 3D um paralelepípedo.

Somente serão visualizados os objetos que estiverem dentro deste paralelepípedo, denominado o Volume de Visualização

glMatrixMode( GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho( -5.0, 5.0, 0.0, 7.5, -100.0, glOrtho( 5.0, 5.0, 0.0, 7.5, 100.0, 100.0); glPopMatrix();

(15)

Projeção Perspectiva

ƒ As projetantes emanam de um único ponto que está

di tâ i fi it d l j ã

uma distância finita do plano e projeção e passam pelos pontos que definem os objetos

(16)

Projeção Perspectiva

ƒ Este é o tipo de projeção que o nosso cérebro

" l l " ó

"calcula" para nós

N t ti d j ã f ô d

ƒ Neste tipo de projeção ocorre o fenômeno de

foreshortening em Inglês, ou seja, objetos mais

longes do observador irão aparecer menores na longes do observador irão aparecer menores na imagem.

ƒ Há várias maneiras de especificarmos uma projeçãoHá várias maneiras de especificarmos uma projeção perspectiva em OpenGL. A principal delas é:

(17)

Projeção Perspectiva

gluPerspectiva( double fovy, double aspect, double near, double far);

ƒ fovy especifica o ângulo do field-of-view, ou seja, do campo de visão da câmera

sintética

ƒ aspect especifica a razão entre a largura w e a altura h da janela

ƒ near especifica a distância do plano de recorte próximo à câmera

ƒ far especifica a distância do plano de recorte longe da câmera

glMatrixMode( GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPerspective( 10.0, 1.33, 5.0, 10.0); glPopMatrix(); glPopMatrix();

(18)

Exercícios

1. Altere sua aplicação para utilizar projeção perspectiva gluPerspective(60 fAspect 0 5 500);

gluPerspective(60,fAspect,0.5,500);

2. Agora inclua a função abaixo no código fonte para que através destas alterações é possível alterar a posição do observador mantendo sempre o mesmo alvo

o mesmo alvo.

// Callback para gerenciar eventos do teclado para teclas especiais (F1, PgDn, entre outras) void SpecialKeys(int key, int x, int y) {

switch (key) {

case GLUT KEY LEFT : obsX -=10; break;

No início do programa, acrescente as variáveis globais que aparecem abaixo.

GLdouble obsX=0, obsY=0, obsZ=200;

Troque a linha de código gluLookAt(40 60 100 0 0 0 0 1 0); case GLUT_KEY_LEFT : obsX -=10; break;

case GLUT_KEY_RIGHT: obsX +=10; break; case GLUT_KEY_UP : obsY +=10;break; case GLUT_KEY_DOWN : obsY -=10;break; case GLUT_KEY_HOME : obsZ +=10;break; case GLUT_KEY_END : obsZ -=10;break; }

glLoadIdentity();

Troque a linha de código gluLookAt(40,60,100, 0,0,0, 0,1,0); para gluLookAt(obsX,obsY,obsZ, 0,0,0, 0,1,0);.

Na função main inclua a seguinte chamada de função

glutSpecialFunc(SpecialKeys); antes da chamada para a

função Inicializa();

3. Coloque 2 no lugar de fAspect, compile e execute para ver o que acontece.

glLoadIdentity();

gluLookAt(obsX,obsY,obsZ, 0,0,0, 0,1,0); glutPostRedisplay();

}

4. Troque o valor 2 por 0.5, compile e execute novamente.

5. Coloque novamente a variável fAspect no segundo parâmetro da gluPerspective.

Com estes testes, foi possível verificar as conseqüências de alterar a razão de aspecto.

(19)

Exercício (5 ptos) 10/10

1. Altere a implementação para que seja desenhada uma pirâmide.

1 Utilize os comando de desenho de primitivas (GL TRIANGLES)

1. Utilize os comando de desenho de primitivas (GL_TRIANGLES)

2. Para desenhar somente as linhas utilize os comandos

1. glPolygonMode(GL_FRONT, GL_LINE); //Parte da frente em formato de linhas

2. glPolygonMode(GL_BACK, GL_LINE); //Parte de trás em formato de linhas

3 Necessário 4 triângulos

3. Necessário 4 triângulos.

4. Utilização do comando glVertex3f ou glVertex3d. 3 Dimensões

Referências

Documentos relacionados

The UV-B treatments did not show any important effect on glucose levels of tomatoes at any harvest stages; whereas, UVB8 treatment showed high glucose levels in tomatoes at the

Neste local , pode ser encontrado desde a borda da mata (onde um indivíduo foi capturado com rede ornitológica) até a pelo menos 300m em seu interior , onde foram

CARACTERIZAÇÃO DO POTENCIAL ANTIFÚNGICO DE NOVOS SAIS IMIDAZÓLICOS EM CANDIDA ALBICANS: ESTUDO IN VITRO.. Porto Alegre, dezembro

Még épp annyi idejük volt, hogy gyorsan a fejük búbjáig húzták a paplant, és Mary Poppins már nyitotta is az ajtót, és lábujjhegyen átosont a

Os estudos originais encontrados entre janeiro de 2007 e dezembro de 2017 foram selecionados de acordo com os seguintes critérios de inclusão: obtenção de valores de

ado a necessidade de modificar o pré- se manter o dorso do frango à 95C por 30 minutos, este procedimento desnaturava o colágeno, formando um gel scrito

Considerando que o MeHg é um poluente ambiental altamente neurotóxico, tanto para animais quanto para seres humanos, e que a disfunção mitocondrial é um

Avaliou-se o comportamento do trigo em sistema de plantio direto em sucessão com soja ou milho e trigo, sobre a eficiência de aproveitamento de quatro fontes