A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução a OpenGL (parte final).

Apresentações semelhantes


Apresentação em tema: "Introdução a OpenGL (parte final)."— Transcrição da apresentação:

1 Introdução a OpenGL (parte final)

2 Um tutorial de OpenGL, em língua portuguesa, pode ser encontrado no endereço

3 Tipos de dados OpenGL possui seus próprios tipos de dados.

4 Primitivos gráficos OpenGL
Os primitivos são grafados da forma <prefixo da biblioteca><Raiz><Número de argumentos(opcional)><Tipo de argumentos(opcional)> Como exemplo considere-se a função glVertex3f, onde Vertex é sua raiz, gl indica de qual biblioteca a função faz parte e 3f significa que a função recebe três valores de ponto flutuante(f) como parâmetro. Isso vale para todas as funções OpenGL.

5 Conteúdo de um programa OpenGL
Um programa OpenGL deve conter           Montagem do contexto Função de renderização (especificar nome) glutDisplayFunc Função de “Reshape”(especificar nome) glutReshapeFunc Função principal que chama os demais e pode conter a animação Função laço de processamento (faz os “callbacks”)

6 Montagem do Contexto

7 Montagem do contexto Criação de janela, englobando tamanho e posição
Modo de exibição (um ou dois buffers) Habilitação do teste de profundidade Habilitação da não exibição de superfícies ocultas Limpeza de cores Definição de cor de objetos Limpeza de buffer Configuração dos pixels Habilitação de textura Limpeza de fila de comandos ou troca de “buffers” Modelo de sombreamento Sentido de orientação da numeração de nós Habilitação de periféricos de entrada

8 Como se configuram as opções
Funções glEnable, glDisable, glCullMode, glPolygonMode, glLightModel, etc.

9 Renderização

10 Como renderizar um primitivo geométrico
Transferência para o “framebuffer” Renderizar primitivos OpenGL Definir um grupo de um ou mais vértices Um vértice define: Um ponto Uma extremidade de uma aresta Uma quina de polígono aonde duas arestas se encontram

11 Desenho com OpenGL Para desenhar um primitivo chamar glBegin()
glEnd() fecha uma lista de vértices e seus atributos As coordenadas de um primitivo são fornecidas em ordem anti-horária

12 Chamadas de função para desenhar um primitivo
glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glEnd();

13 Desenho de um triângulo:
glBegin(GL_TRIANGLES); glVertex3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd();

14 Desenho de um triângulo com cores diferentes em cada vértice
glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); //vermelho puro glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); //verde puro glVertex3f(-1.0f, -1.0f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); //azul puro glVertex3f(1.0f, -1.0f, 0.0f); glEnd();

15 Renderização OpenGL Os dados consistem de Os vértices são processados
Coordenadas posicionais Cores Normais Coordenadas de Textura Os vértices são processados De maneira independente Em ordem determinada

16 Tipos de Renderização “Wireframe” Sombreamento plano
Mostra apenas linhas e curvas Os objetos não são preenchidos Sombreamento plano Cálculo de uma só cor para cada polígono Preenche cada polígono com a cor constante

17 Tipos de renderização Suave (sombreamento de Gouraud)
Interpola cor dos vértices ao longo dos polígonos As cores dos vértices podem ser computadas por cálculo de iluminação ou especificadas de forma explícita Mapeamento de Textura Modificação da cor de cada Pixel com cores obtidas a partir de uma imagem

18 Transformações e Matrizes
As transformações de coordenadas são feitas por matrizes São usados como sistemas de coordenadas: Coordenadas do mundo Aplicar matriz modelview Coordenadas do olho Aplicar matriz projection Coordenadas do volume de visualização Aplicar matriz de perspectiva Coordenadas normalizadas do dispositivo Aplicar transformação de viewport Coordenadas da janela

19 Transformações e Matrizes
As transformações de coordenadas mudam o sistema de coordenadas. As coordenadas dos objetos, pontos de iluminação ou de observação serão definidas em coordenadas locais depois da mudança do sistema de coordenadas. A transformação de coordenadas é feita multiplicando as coordenadas correntes pela(s) matriz(es) de transformação.

20 Transformações e Matrizes
Quando as transformações são para posicionar os objetos (desenhar) ou pontos de iluminação usa-se o modo chamado modelview (modo de renderização). Quando as transformações são para posicionar o observador usa-se o modo chamado projection (modo de rasterização).

21 Pilhas de Matrizes OpenGL possui múltiplas pilhas de matrizes
glPushMatrix empilha uma cópia da matriz corrente glPopMatrix desempilha para a matriz corrente Muito útil para figuras definidas de maneira hierárquica

22 Transformações do Modelo
glTranslatef(0.0f, 0.0f, -10.0f); glRotatef(45.0f, 0.0f, 1.0f, 0.0f); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); //vermelho puro glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); //verde puro glVertex3f(-1.0f, -1.0f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); //azul puro glVertex3f(1.0f, -1.0f, 0.0f); glEnd();

23 Rasterização (“Reshape”)

24 Modos A geração dos objetos deve sempre utilizar o modo modelview.
Uma vez definida a geometria do objeto deve-se utilizar o modo projection para a exibição

25 Visualização em OpenGL
A visualização se compõe de duas partes Posicionamento do objeto pela Matriz de Transformação modelview Projeção de visualização pela Matriz de Transformação projection OpenGL suporta tanto as transformações de visualização ortográficas quanto as de perspectiva A câmera OpenGL está inicialmente na origem apontando para a direção z As transformações movem os objetos em relação à câmera

26 Matriz do Modelo de Visualização
Posiciona os objetos em coordenadas do mundo Usualmente formada pela concatenação de transformações simples glRotate(theta, x,y,z) glTranslate(x,y,z) glScale(x,y,z) A ordem das transformações é importante

27 Visualização em OpenGL
Projeção Ortográfica Limites paralelos ao volume de visualização Os objetos são cortados no paralelepípedo de visualização pois existe uma região de visualização delimitada pelos planos de corte glOrtho(left, right, bottom, top, front, back) Projeção em Perspectiva glFrustum, gluPerspective O volume de corte é um tronco de pirâmide Os planos de corte (próximo e distante) não devem ser muito afastados um do outro O plano de corte próximo não deve ficar muito junto ao olho (ou câmera)

28 Posicionamento da Câmera
Usar gluLookAt para especificar Posição do olho Ponto “Look-at” Vetor “up” gluLookAt(10,10,10,1,2,3,0,0,1); O olho está em (10,10,10) O ponto “Look at” está em (1,2,3) O vetor “Up” é (0,0,1) Usualmente isto se faz na matriz GL_PROJECTION e se combina com a matriz de perspectiva

29 Exemplo completo de Visualização
//Primeiramente a Projeção glMatrixMode( GL_PROJECCTION); glLoadIdentity(); gluPerspective(60, 1, 1, 100); gluLookAt(10,10,10,1,2,3,0,0,1) //Depois as transformações do objeto glMatrixMode(GL_MODELVIEW) glLoad Identity(); glTranslate(1,1,1); glRotatef(90, 1,0,0); DrawObject();

30 Laço de Processamento

31 Laço de processamento do GLUT
A função glutMainLoop() dispara o laço de processamento do GLUT, sendo chamada uma única vez em um programa. Esta rotina nunca retorna, só encerrando a aplicação por meio de interrupção. É ela que dispara todas as demais rotinas. Ao detectar um evento é feito um “callback” se o tratamento desse evento tiver sido especificado na aplicação.

32 Funções de “callback”

33 Funções de “callback” GLUT

34 Exemplo de função de espera
void idle(void) { time += 0.05; glutSetWindow(window); glutPostRedisplay(); }

35 Lista das funções GL, GLU e GLUT

36 Funções GL, GLU e GLUT Documentação sobre estas funções pode ser encontrada em:

37 Funções GL, GLU e GLUT GL.htm GLU.htm GLUT.htm

38 Exemplo em C++

39 Exemplo em Delphi

40 Exemplo em C++ Builder

41 Exemplo em VB


Carregar ppt "Introdução a OpenGL (parte final)."

Apresentações semelhantes


Anúncios Google