28
Visualização Visualização Tridimensional Tridimensional

Visualização Tridimensional

  • Upload
    aliya

  • View
    65

  • Download
    0

Embed Size (px)

DESCRIPTION

Visualização Tridimensional. - PowerPoint PPT Presentation

Citation preview

Page 1: Visualização Tridimensional

Visualização Visualização TridimensionalTridimensional

Page 2: Visualização Tridimensional

Quando se trabalha em três Quando se trabalha em três dimensões, o SRU (Sistema de dimensões, o SRU (Sistema de Referência do Universo) passa a Referência do Universo) passa a ser composto por três eixos ser composto por três eixos ortogonais entre si (x,y e z) e ortogonais entre si (x,y e z) e pela origem (0.0,0.0,0.0). Uma pela origem (0.0,0.0,0.0). Uma coordenada é agora formada coordenada é agora formada pelos valores de x, y e z, que pelos valores de x, y e z, que correspondem às posições ao correspondem às posições ao longo dos respectivos eixoslongo dos respectivos eixos

Page 3: Visualização Tridimensional

O processo de visualização 3D é O processo de visualização 3D é mais complexo do que o 2D, pois mais complexo do que o 2D, pois compreende um numero maior compreende um numero maior de etapas. Esta complexidade de etapas. Esta complexidade existe porque quase todos os existe porque quase todos os dispositivos de saída, tais como dispositivos de saída, tais como monitores e impressoras, são monitores e impressoras, são somente 2D. Assim é preciso somente 2D. Assim é preciso definir como a cena 3D e definir como a cena 3D e projetada em uma imagem 2D. projetada em uma imagem 2D.

Page 4: Visualização Tridimensional

Visualização 3D: câmera sintética

* Corresponde ao pipeline clássico devisualização de objetos 3D;

* Câmera é localizada e orientada no SRU;

* Coordenadas dos objetos são transformadas para o SRC;

* Coordenadas são projetadas no plano de projeção;

* Coordenadas são mapeadas para a viewport.

Page 5: Visualização Tridimensional

Câmera Sintética Câmera Sintética (Observador)(Observador)

A primeira etapa do processo de A primeira etapa do processo de visualização 3D é a definição da visualização 3D é a definição da cena 3D. Nesta etapa cada um cena 3D. Nesta etapa cada um dos objetos que farão parte do dos objetos que farão parte do mundo 3D é incluído e mundo 3D é incluído e posicionado no SRU (escala, posicionado no SRU (escala, translação e rotação).translação e rotação).

Page 6: Visualização Tridimensional

Para localizar a câmara é necessário especificar a sua posição

Page 7: Visualização Tridimensional

O próximo passo consiste na O próximo passo consiste na especificação do observador especificação do observador virtual, um componente virtual, um componente fundamental do processo de fundamental do processo de visualização 3D. Este visualização 3D. Este observador define de que local observador define de que local deseja-se que a cena 3D seja deseja-se que a cena 3D seja exibida, por exemplo, de cima, exibida, por exemplo, de cima, do lado direito ou do esquerdo.do lado direito ou do esquerdo.

Page 8: Visualização Tridimensional

Portanto, a especificação do Portanto, a especificação do observador inclui a sua posição e observador inclui a sua posição e orientação, ou seja, onde o orientação, ou seja, onde o observador está e para onde ele está observador está e para onde ele está olhando dentro do universo. A olhando dentro do universo. A necessidade da existência do necessidade da existência do observador deve-se ao fato de que um observador deve-se ao fato de que um mesmo conjunto de objetos 3D, visto mesmo conjunto de objetos 3D, visto de diferentes lugares, tem diferentes de diferentes lugares, tem diferentes coordenadas para cada posição.coordenadas para cada posição.

Page 9: Visualização Tridimensional

Câmera FotográficaCâmera Fotográfica

Como a imagem gerada a partir da Como a imagem gerada a partir da posição e orientação do observador é posição e orientação do observador é estática, faz-se analogia com uma foto. estática, faz-se analogia com uma foto. Pode-se dizer que se obtém uma Pode-se dizer que se obtém uma fotografia quando a câmera está em uma fotografia quando a câmera está em uma determinada posição direcionada para o determinada posição direcionada para o objeto. A posição da câmera é dada por objeto. A posição da câmera é dada por um ponto (x,y,z) e sua orientação é dada um ponto (x,y,z) e sua orientação é dada por um ponto alvo (x,y,z) e um vetor por um ponto alvo (x,y,z) e um vetor chamado up.chamado up.

Page 10: Visualização Tridimensional
Page 11: Visualização Tridimensional

ProjeçõesProjeções

Page 12: Visualização Tridimensional

Paralela OrtográficaParalela Ortográfica – As – As projetantes são paralelas entre si, projetantes são paralelas entre si, passam pelos pontos que definem os passam pelos pontos que definem os objetos e interseccionam o plano objetos e interseccionam o plano com um ângulo de 90 graus.com um ângulo de 90 graus.

PerspectivaPerspectiva – As projetantes – As projetantes emanam de um único ponto que está emanam de um único ponto que está a uma distância finita do plano de a uma distância finita do plano de projeção e passam pelos pontos que projeção e passam pelos pontos que definem os objetos.definem os objetos.

Page 13: Visualização Tridimensional

Transformações de Transformações de VisualizaçãoVisualização

Duas interpretações:Duas interpretações: Levam a câmera até a cena Levam a câmera até a cena

que se quer visualizarque se quer visualizar Levam os objetos da cena Levam os objetos da cena

até uma câmera até uma câmera estacionáriaestacionária

gluLookAt(ObsgluLookAt(Obsxx,Obs,Obsyy,Ob,Obssz,alvo,alvoxx,alvo,alvoyy,alvo,alvozz,up,up

xx, up, upyy, up, upzz);); ObsObs = ponto onde a = ponto onde a câmera será posicionadacâmera será posicionadaAlvoAlvo = ponto para onde a = ponto para onde a câmera será apontadacâmera será apontadaupup = vetor que dá a = vetor que dá a direção “para cima” da direção “para cima” da câmera.câmera.

x

y

z

alvo

Obs

Up

Page 14: Visualização Tridimensional

Funções OpenGLFunções OpenGL

As funções descritas abaixo são As funções descritas abaixo são utilizadas para configurar a utilizadas para configurar a câmera sintética e a projeção câmera sintética e a projeção perspectiva quando se está perspectiva quando se está trabalhando com OpenGLtrabalhando com OpenGL

Page 15: Visualização Tridimensional

gluLookAtgluLookAt;; define a transformação de define a transformação de visualização. visualização. Seu protótipo é: Seu protótipo é: void gluLookAt( GLdouble obsx, GLdouble obsy, GLdouble obsz, GLdouble alvox, GLdouble alvoy, GLdouble alvoz, GLdouble upx, GLdouble upy, GLdouble upz );. Descrição dos Descrição dos parâmetros: obsparâmetros: obsxx, obs, obsyy e obs e obszz são usados são usados para definir as coordenadas x, y e z, para definir as coordenadas x, y e z, respectivamente, da posição da câmera (ou respectivamente, da posição da câmera (ou observador); alvoobservador); alvoxx, alvo, alvoyy e alvo e alvozz são usados são usados para definir as coordenadas x, y e z, para definir as coordenadas x, y e z, respectivamente, da posição do alvo, isto é, respectivamente, da posição do alvo, isto é, para onde o observador está olhando; uppara onde o observador está olhando; upxx, , upupyy e up e upzz são as coordenadas x, y e z, que são as coordenadas x, y e z, que estabelecem o vetor estabelecem o vetor upup..

Page 16: Visualização Tridimensional

gluPerspective;gluPerspective; Esta função estabelece os Esta função estabelece os parâmetros da Projeção Perspectiva, atualizando a parâmetros da Projeção Perspectiva, atualizando a matriz de projeção perspectiva. Seu protótipo é: matriz de projeção perspectiva. Seu protótipo é: void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar );.Descrição dos parâmetros:Descrição dos parâmetros: fovyfovy é o ângulo, em é o ângulo, em graus, na direção y (usada para determinar a graus, na direção y (usada para determinar a "altura" do volume de visualização); "altura" do volume de visualização); aspectaspect é a é a razão de aspecto que determina a área de razão de aspecto que determina a área de visualização na direção x, e seu valor é a razão em x visualização na direção x, e seu valor é a razão em x (largura) e y (altura); (largura) e y (altura); zNearzNear, que sempre deve ter , que sempre deve ter um valor positivo maior do que zero, é a distância um valor positivo maior do que zero, é a distância do observador até o plano de corte mais próximo do observador até o plano de corte mais próximo (em z); (em z); zFarzFar, que também sempre tem um valor , que também sempre tem um valor positivo maior do que zero, é a distância do positivo maior do que zero, é a distância do observador até o plano de corte mais afastado (em observador até o plano de corte mais afastado (em z). Esta função sempre deve ser definida ANTES da z). Esta função sempre deve ser definida ANTES da função função gluLookAtgluLookAt, e no modo GL_PROJECTION. , e no modo GL_PROJECTION.

Page 17: Visualização Tridimensional

GLvoid glFrustum ( GLdouble esquerda, GLdouble direita, GLdouble baixo, GLdouble cima, GLdouble proximo, GLdouble afastado)

Page 18: Visualização Tridimensional

Função Perspectiva

Page 19: Visualização Tridimensional

Função Perspectiva

Page 20: Visualização Tridimensional

Exemplo 1Exemplo 1

O código fonte “Exemplo3D.cpp desenha O código fonte “Exemplo3D.cpp desenha um cubo com projeção perspectiva. O cubo um cubo com projeção perspectiva. O cubo é um dos objetos predefinidos da biblioteca é um dos objetos predefinidos da biblioteca GLUT. As funções GLUT. As funções gluPerspectivegluPerspective e e gluLookAtgluLookAt são utilizadas como segue: são utilizadas como segue:

gluPerspective(60, fAspect, 0.5, 500);gluPerspective(60, fAspect, 0.5, 500);

gluLookAt(40, 60, 100, 0, 0, 0, 0, 1, 0);gluLookAt(40, 60, 100, 0, 0, 0, 0, 1, 0);

Page 21: Visualização Tridimensional

Defina a variável global:Defina a variável global:

GLfloat fAspect;GLfloat fAspect;

Em seguida crie uma rotina com o Em seguida crie uma rotina com o nome nome EspecificaParametrosVisualizacEspecificaParametrosVisualizacaoao, ,

como segue:como segue:

Page 22: Visualização Tridimensional

// Função usada para especificar o volume de // Função usada para especificar o volume de visualizaçãovisualização

void EspecificaParametrosVisualizacao(void)void EspecificaParametrosVisualizacao(void)

{{

// Especifica sistema de coordenadas de projeção// Especifica sistema de coordenadas de projeção

glMatrixMode(GL_PROJECTION);glMatrixMode(GL_PROJECTION);

// Inicializa sistema de coordenadas de projeção// Inicializa sistema de coordenadas de projeção

glLoadIdentity();glLoadIdentity();

////Especifica a projeção Especifica a projeção perspectiva(angulo,aspecto,zMin,zMaxperspectiva(angulo,aspecto,zMin,zMax))

gluPerspective(60,fAspect,0.5,500);gluPerspective(60,fAspect,0.5,500);

Page 23: Visualização Tridimensional

// Especifica sistema de coordenadas do // Especifica sistema de coordenadas do modelomodelo

glMatrixMode(GL_MODELVIEW);glMatrixMode(GL_MODELVIEW);

// Inicializa sistema de coordenadas do // Inicializa sistema de coordenadas do modelomodelo

glLoadIdentity();glLoadIdentity();

// Especifica posição do observador e // Especifica posição do observador e do alvodo alvo

gluLookAt(40,60,100, 0,0,0, 0,1,0);gluLookAt(40,60,100, 0,0,0, 0,1,0);

}}

Page 24: Visualização Tridimensional

Na função desenha, acrescente o Na função desenha, acrescente o cubo como definido abaixo, antes de cubo como definido abaixo, antes de glflush.glflush.

// Função da GLUT para fazer o // Função da GLUT para fazer o desenho de um cubo desenho de um cubo

// com a cor corrente// com a cor corrente

glutWireCube(50);glutWireCube(50);

Page 25: Visualização Tridimensional

Em seguida em:Em seguida em:

void AlteraTamanhoJanela(GLsizei w, GLsizei void AlteraTamanhoJanela(GLsizei w, GLsizei h)h)

Acrescente a variável global declarada Acrescente a variável global declarada anteriormente como:anteriormente como:

// Calcula a correção de aspecto// Calcula a correção de aspecto

fAspect = (GLfloat)w/(GLfloat)h;fAspect = (GLfloat)w/(GLfloat)h;

logo depois de glViewport. E por último logo depois de glViewport. E por último acrescente a rotina criada anteriormente acrescente a rotina criada anteriormente também: também:

EspecificaParametrosVisualizacao();EspecificaParametrosVisualizacao();

Page 26: Visualização Tridimensional

Projeção OrtográficaProjeção Ortográfica

Para trabalhar com projeção Para trabalhar com projeção ortográfica, basta configurá-la ortográfica, basta configurá-la através da chamada para a seguinte através da chamada para a seguinte função:função:

Void glOrtho(GLdouble left, Void glOrtho(GLdouble left, GLdouble right, GLdouble GLdouble right, GLdouble bottom, GLdouble top, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)near, GLdouble far)

Page 27: Visualização Tridimensional

Os valores left e right especificam os Os valores left e right especificam os limites min e max no eixo X; limites min e max no eixo X; analogamente, bottom e top analogamente, bottom e top especificam os limites min e max no especificam os limites min e max no eixo Y, enquanto near e far eixo Y, enquanto near e far especificam os limites min e max no especificam os limites min e max no eixo Z, geralmente com os valores eixo Z, geralmente com os valores negativos para o lado oposto da negativos para o lado oposto da posição do observador.posição do observador.

Page 28: Visualização Tridimensional

Exercício 1Exercício 1

Aplicar no codigo fonte Aplicar no codigo fonte Exemplo3D.cpp uma projeção Exemplo3D.cpp uma projeção ortográfica utilizando a função ortográfica utilizando a função glOrtho:glOrtho:

glOrtho(-65.0, 65.0, -65.0, 65.0, -glOrtho(-65.0, 65.0, -65.0, 65.0, -400.0, 400.0);400.0, 400.0);