1 / 28

Visualização Tridimensional

Visualização Tridimensional.

aliya
Download Presentation

Visualização Tridimensional

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visualização Tridimensional

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

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

  4. Visualização 3D: câmera sintética * Corresponde ao pipeline clássico de visualizaçã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.

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

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

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

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

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

  10. Projeções

  11. Paralela Ortográfica – As projetantes são paralelas entre si, passam pelos pontos que definem os objetos e interseccionam o plano com um ângulo de 90 graus. Perspectiva – As projetantes emanam de um único ponto que está a uma distância finita do plano de projeção e passam pelos pontos que definem os objetos.

  12. Transformações de Visualização • Duas interpretações: • Levam a câmera até a cena que se quer visualizar • Levam os objetos da cena até uma câmera estacionária • gluLookAt(Obsx,Obsy,Obsz,alvox,alvoy,alvoz,upx, upy, upz); Obs = ponto onde a câmera será posicionada Alvo = ponto para onde a câmera será apontada up = vetor que dá a direção “para cima” da câmera. Up y alvo Obs x z

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

  14. gluLookAt; define a transformação de visualização. 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 parâmetros: obsx, obsy e obsz são usados para definir as coordenadas x, y e z, respectivamente, da posição da câmera (ou observador); alvox, alvoy e alvoz são usados para definir as coordenadas x, y e z, respectivamente, da posição do alvo, isto é, para onde o observador está olhando; upx, upy e upz são as coordenadas x, y e z, que estabelecem o vetor up.

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

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

  17. Função Perspectiva

  18. Função Perspectiva

  19. Exemplo 1 O código fonte “Exemplo3D.cpp desenha um cubo com projeção perspectiva. O cubo é um dos objetos predefinidos da biblioteca GLUT. As funções gluPerspective e gluLookAt são utilizadas como segue: gluPerspective(60, fAspect, 0.5, 500); gluLookAt(40, 60, 100, 0, 0, 0, 0, 1, 0);

  20. Defina a variável global: GLfloat fAspect; Em seguida crie uma rotina com o nome EspecificaParametrosVisualizacao, como segue:

  21. // Função usada para especificar o volume de visualização void EspecificaParametrosVisualizacao(void) { // Especifica sistema de coordenadas de projeção glMatrixMode(GL_PROJECTION); // Inicializa sistema de coordenadas de projeção glLoadIdentity(); //Especifica a projeção perspectiva(angulo,aspecto,zMin,zMax) gluPerspective(60,fAspect,0.5,500);

  22. // Especifica sistema de coordenadas do modelo glMatrixMode(GL_MODELVIEW); // Inicializa sistema de coordenadas do modelo glLoadIdentity(); // Especifica posição do observador e do alvo gluLookAt(40,60,100, 0,0,0, 0,1,0); }

  23. Na função desenha, acrescente o cubo como definido abaixo, antes de glflush. // Função da GLUT para fazer o desenho de um cubo // com a cor corrente glutWireCube(50);

  24. Em seguida em: void AlteraTamanhoJanela(GLsizei w, GLsizei h) Acrescente a variável global declarada anteriormente como: // Calcula a correção de aspecto fAspect = (GLfloat)w/(GLfloat)h; logo depois de glViewport. E por último acrescente a rotina criada anteriormente também: EspecificaParametrosVisualizacao();

  25. Projeção Ortográfica Para trabalhar com projeção ortográfica, basta configurá-la através da chamada para a seguinte função: Void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

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

  27. Exercício 1 Aplicar no codigo fonte Exemplo3D.cpp uma projeção ortográfica utilizando a função glOrtho: glOrtho(-65.0, 65.0, -65.0, 65.0, -400.0, 400.0);

More Related