Upload
lamhanh
View
223
Download
0
Embed Size (px)
Citation preview
Computação Gráfica - OpenGl 02
Prof. Jorge [email protected]
www.univasf.edu.br/~jorge.cavalcanti
www.twitter.com/jorgecav
Universidade Federal do Vale do São FranciscoCurso de Engenharia da Computação
30/01/2018Página 2Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Primitivas Gráficas
• São elementos básicos que compõem um desenho;
• Em OpenGL são definidas em um sistema de coordenadasbidimensionais por meio de vértices;
• A partir de primitivas simples é possível criar estruturas maiscomplexas.
• Objetos e cenas criados usando OpenGl consistem em umconjunto de primitivas gráficas simples que são combinadas paraformar os modelos.
• OpenGL fornece ferramentas para desenhar pontos, linhas,"polilinhas" e polígonos, que são formados por um ou maisvértices.
30/01/2018Página 3Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
• OpenGL possui 10 primitivas geométricas
– um tipo de ponto
– três tipos de linhas
– seis tipos de polígonos.
• Os vértices são definidos pelo comando Vertex
glVertex2f( float x, float y); //vértice para um eixo 2D
glVertex3d(double x,double y, double z); //vértice para um exixo 3D
• As primitivas precisam ser delimitadas através de Begin ... Endconforme abaixo:
Begin (nome da primitiva);
... // aqui serão colocados comandos Vertex.
End ();
Primitivas Gráficas
30/01/2018Página 4Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
• Ponto– a primitiva responsável em desenhar pontos na tela é
GL_POINTS
– O código no exemplo abaixo desenha 3 pontos na tela. Cada vértice torna-se um ponto
glBegin( GL_POINTS );
glVertex2f( xf, yf);
glVertex2f( xf, yf);
glVertex2f( xf, yf);
glEnd();
– O tamanho do ponto pode ser modificado através do comando glPointSize (GLint tamanho), bastando passar como parâmetro o tamanho do ponto.
Primitivas Gráficas
30/01/2018Página 5Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Primitivas Gráficas
• Exemplo para desenhar três pontos pretos na tela:
glBegin(GL_POINTS);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex2i(100, 50);
glVertex2i(100, 130);
glVertex2i(150, 130);glEnd()
30/01/2018Página 6Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
• Linhas– GL_LINES : O terceiro ponto é ignorado pois a linha é formada por
dois vértices.
• Se houvesse um quarto vértice, uma nova linha entre o terceiro e quarto vértice seria exibida
– GL_LINE_STRIP: cria linhas consecutivas, ligando o primeiro vértice com o segundo, o segundo com o terceiro e assim por diante
– GL_LINE_LOOP : Funciona de maneira semelhante ao anterior, porém o último vértice é ligado a primeira, devido a isso o LOOP no seu nome.
– O espessura de uma linha pode ser modificada através do comando glLineWidth (GLint espessura), bastando passar como parâmetro a espessura da linha
Primitivas Gráficas
30/01/2018Página 7Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
• Polígonos
– Áreas formadas por várias linhas conectadas
– Arestas do polígono não podem se cruzar
– Devem ser áreas convexas
– O número de segmentos do polígono não é restrito
– OpenGL assume que todos os polígonos são simples
• Problema da superfície construída a partir de quadriláteros
– Quadriláteros são polígonos não planares
– Caso seja feita alguma transformação, podem deixar de
ser polígonos simples
– Para evitar que isto aconteça, é sempre bom utilizar triângulos para compor as superfícies, pois triângulos são sempre co-planares
Primitivas Gráficas
30/01/2018Página 8Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
• Polígonos– GL_TRIANGLES: Desenha triângulos a cada 3 vértices fornecidos;
– GL_TRIANGLE_STRIP: Uma série de triângulos conectados. Após o desenho do primeiro triângulo, cada vértice adicional forma um novo triângulo com dois últimos pontos fornecidos;
– GL_TRIANGLE_FAN: Uma série de triângulos com um único vértice em comum. O vértice comum é o primeiro vértice fornecido;
– GL_QUADS: Desenha um quadrilátero a cada 4 vértices fornecidos;
– GL_QUAD_STRIP: Desenha uma série de quadriláteros. Após o primeiro, apenas mais 2 vértices precisam ser fornecidos para o desenho do segundo quadrilátero;
– GL_POLYGON: Desenha polígonos convexos simples com um número arbitrário de vértices
Primitivas Gráficas
30/01/2018Página 9Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Primitivas Gráficas
GL_LINES
0
1
2
3 5
4
GL_LINE_STRIP
0
1
2
3
GL_LINE_LOOP
0 1
234
GL_POLYGON
(convexo)
04
3
2
1
GL_QUADS
03
21
4 7
65
GL_QUAD_STRIP
0
31
2 4
5
GL_TRIANGLES
0
1
2
34
5
GL_TRIANGLE_STRIP
1
02
3
4
5
GL_TRIANGLE_FAN
0
1
2 3
4
GL_POINTS
01
2
30/01/2018Página 14Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Primitivas GráficasExercícios – Reproduzir as seguintes figuras:
Obs:
1 - Considere a janela de visualização (gluOrtho2D) com 20 X 20 e a janela da aplicação com 400 x 400.
2 - A ordem dos vértices é no sentido anti-horário
21 3
30/01/2018Página 15Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização
• Temos que definir nosso espaço de desenho. Chamamos esse espaço de volume de visualização .
• Esse volume pode ter a principio as seguintes formas – De um paralelepípedo – projeção ortográfica.
– De um tronco de pirâmide – projeção perspectiva.
• Para permitir a visualização de objetos tridimensionais é necessário usar projeção para converter as coordenadas 3D em coordenadas 2D que correspondem a uma visão específica do objeto.
30/01/2018Página 16Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização• Projeção em perspectiva: é a que acontece no processo de
formação de imagens em nossos olhos ou numa câmera fotográfica, por isso é a que gera imagens mais realistas.
30/01/2018Página 17Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização• Projeção paralela ou ortogonal : é a forma mais simples de
projeção. Nela a imagem de um ponto é definida como a projeção normal deste ponto no plano de projeção. A projeção paralela pode ser vista como uma projeção perspectiva onde o centro de projeção está no infinito.
30/01/2018Página 18Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização• Projeções em OpenGl
– O OpenGL mantém três matrizes de transformação ModelView, Projection e ViewPoint, que são usadas para transformar um ponto qualquer dado em um ponto da janela de visualização.
– Cada ponto especificado é multiplicado por essas matrizes.
– O comando glMatrixMode deverá ser utilizado antes dos comandos que especificam as formas de projeção, que são definidas com os comandos: glOrtho, glFrustum ou gluPerpective.
• Ex.: Projeção Ortogonal
glMatrixMode( GL_PROJECTION );glLoadIdentity();glOrtho(X min, X max, Y min, Y max, Near, Far);
30/01/2018Página 19Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização• Projeções em OpenGl
• (GL_PROJECTION) – avisa a OpenGL que todas as futuras alterações, tais como operações de escala, rotação e translação, irão afetar a "câmera" (ou observador).
• (GL_MODELVIEW) - avisa a OpenGL que todas as futuras alterações, tais como operações de escala, rotação e translação, irão afetar os modelos da cena (=o que é desenhado).
– As transformações geométricas aplicadas usando comandos OpenGL do tipo glTranslate, glRotate ou glScale, são sempre armazenadas em uma matriz MODELVIEW.
• A função glLoadIdentity(); chamada em seguida, faz com que a matriz corrente seja inicializada com a matriz identidade (nenhuma transformação é acumulada).
• Caso você faça a projeção com os comandos glOrtho ou glFrustum, o OpenGL especifica uma matriz default, na qual a câmera está alinhada com o eixo z.
30/01/2018Página 20Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização
• Projeção ortogonal:
glMatrixMode( GL_PROJECTION );glLoadIdentity();glOrtho(X min, X max, Y min, Y max, Near, Far);
Obs: Qualquer coordenada fora desses limites faz com que o ponto são seja visualizado na tela.
30/01/2018Página 21Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização• Projeção em perspectiva:
glMatrixMode( GL_PROJECTION );glLoadIdentity(); glFrustum(X min, X max, Y min, Y max, Near, Far);
Obs: Qualquer coordenada fora desses limites faz com que o ponto são seja visualizado na tela.
Os parâmetros Near e Far são sempre coordenadas positivas de Z.
30/01/2018Página 22Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Visualização
•Projeção em perspectiva:
• Existe uma função presente na GLU que fornece uma outra maneira de se realizar um projeção perspectiva em OpenGL. Ela permite que seja especificado o ângulo de visão (ou field of vision) da projeção
• Esta função recebe como uns dos parâmetros o valor do ângulo de visão. Sua sintaxe é descrita abaixo:
gluPerspective (ângulo, aspecto, near, far), onde:ângulo -> é o ângulo de visão, usado para determinar a “altura”do volume de visualizaçãoaspecto -> Tamanho (w na figura) / Altura (h na figura) da janela de visualização.near e far -> idênticos aos parâmetros do comando Frustum.
Ir ao Programa de Demonstração de Parâmetros e Perspectivas
30/01/2018Página 25Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Projeção Perspectiva
30/01/2018Página 26Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Projeção Perspectiva
30/01/2018Página 27
• Janela de Seleção (window)– Área de trabalho da aplicação com a qual se deseja
trabalhar;
– Área do universo de interesse;
– Porção visível do universo;
– Coordenadas do SRU.
• Janela de exibição (viewport)– Área de exibição, dentro de tela;
– Área da tela para onde o conteúdo da window será mapeado;
– Região de desenho na tela;
– Coordenadas do SRD.
Definição do Espaço de Trabalho
Computação Gráfica OpenGl– Parte 02 – Prof. Jorge Cavalcanti
30/01/2018Página 28
Definição do Espaço de Trabalho
Zoom?
Computação Gráfica OpenGl– Parte 02 – Prof. Jorge Cavalcanti
30/01/2018Página 29Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Definição do Espaço de Trabalho
• Window X Viewport
30/01/2018Página 30Computação Gráfica OpenGl– Parte 02
– Prof. Jorge Cavalcanti
Definição do Espaço de Trabalho
• Window X Viewport
• Ver demo e infograph 3D
30/01/2018Página 31
• Definindo a window– Em 2D – gluOrtho2D(left, right, bottom, top)
– Em 3D:
– Projeção Ortogonal - glOrtho(X min, X max, Y min, Y max, Near, Far)
– Projeção Perspectiva - glFrustum(X min, X max, Y min, Y max, Near, Far)
– Projeção Perspectiva - gluPerspective (ângulo, aspecto, near, far)
• Definindo a viewport– glViewport(X, Y, largura, altura);
– X e Y inteiros – coordenada do canto inferior esquerdo da janela.
– Normalmente delimitada pela janela GLUT.
– Código Exemplo 1 – Casa simples, com recurso de alteração de tamanho da janela.
– Código Exemplo 2 – 02 viewports
Definição do Espaço de Trabalho
Computação Gráfica OpenGl– Parte 02 – Prof. Jorge Cavalcanti