32
Computação Gráfica TCC-00291 Assunto: Primeiros passos

Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Computação Gráfica!TCC-00291!

Assunto: Primeiros passos!

Page 2: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Pipeline simplificado!

2!

GPU Data Flow!Application! Framebuffer!

Processamento de vértices! Rasterização! Processamento

de fragmento!

Vertex Shader!

Fragment Shader!

Page 3: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Programa básico!

3!

Escrever programas OpenGL modernos consiste em, !essencialmente:!

•  Escrever shaders;!•  Criar buffers e carregar dados;!•  “Conectar” dados e variáveis dos shaders; e!•  Renderizar.!

Page 4: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Programa básico!

4!

Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!

Page 5: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Programa básico!

5!

Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!Normalmente, utiliza-se uma janela do sistema.!

•  Necessidade de comunicação com a API do sistema de janelas.!

•  Cada sistema de janela tem uma interface diferente… !

•  Opções: GLFW (C++), LWJGL(Java), …!!Obs: Veremos exemplos em Java adiante.!

Page 6: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

6!

Objetos geométricos são representados através de vértices.!

Page 7: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

7!

Objetos geométricos são representados através de vértices.!!Def.: Um vértice é uma coleção de atributos.!!

•  Coordenadas no espaço;!•  Cores;!•  Coordenadas de textura;!•  Vetor normal; e!•  …!

Page 8: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

8!

Objetos geométricos são representados através de vértices.!!Def.: Um vértice é uma coleção de atributos.!!

•  Coordenadas no espaço;!•  Cores;!•  Coordenadas de textura;!•  Vetor normal; e!•  …!

!Obs.: As coordenadas do ponto são armazenadas usando 4! coordenadas. (Voltaremos a este assunto!!)

Page 9: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

9!

Os dados relacionados aos vértices devem ser armazenados em arrays, chamados de “vertex buffer objects”, ou VBOs.!

Page 10: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

10!

Os dados relacionados aos vértices devem ser armazenados em arrays, chamados de “vertex buffer objects”, ou VBOs.!

VBOs devem ser organizados em arrays, chamados de “vertex array objects”, ou VAOs.!

Page 11: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

11!

Os dados relacionados aos vértices devem ser armazenados em arrays, chamados de “vertex buffer objects”, ou VBOs.!

VBOs devem ser organizados em arrays, chamados de “vertex array objects”, ou VAOs.!

As informações contidas nos VBOs devem ser organizadas de acordo com as primitivas geométricas que representam.!

Page 12: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

12!

GL_POINTS!

GL_LINES!

GL_LINE_STRIP!

GL_LINE_LOOP!

GL_TRIANGLES!

GL_TRIANGLE_STRIP!

GL_TRIANGLE_FAN!

Page 13: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Visão geral!Representação de geometria!

13!

Primitiva Descrição #verts

GL_POINTS Renderiza um ponto por vértice.! n!

GL_LINES Renderiza uma linha para cada par de vértice.! 2n!

GL_LINE_STRIP Renderiza uma linha para cada novo vértice, conectando com o anterior.! n+1!

GL_LINE_LOOP Renderiza todos os vértices em um loop de segmentos.! n!

GL_TRIANGLES Renderiza um triângulo para cada trio de vértices.! 3n!

GL_TRIANGLE_STRIP Renderiza um triângulo para cada novo vértice, conectado com os dois anteriores.! n+2!

GL_TRIANGLE_FAN Renderiza um triângulo para cada novo par de vértices, usando o vértice inicial.! n+2!

Page 14: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!!

14!

Page 15: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

15!

Desenharemos um triângulo com cores distintas em seus vértices.!

Page 16: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

16!

Desenharemos um triângulo com cores distintas em seus vértices.!!!Objetivos:

•  Manipular dados de vértices;!•  Organizar dados para serem renderizados; e!•  Construir primitivas geométricas!

Page 17: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

17!

Primeiro passo:!Determinar a quantidade de memória necessária.

Page 18: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

18!

Primeiro passo:!Determinar a quantidade de memória necessária.

Posição:!1 triângulo x !

3 vértices por triângulo x!4 coordenadas por vértice!

XYZW!

Page 19: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

19!

Primeiro passo:!Determinar a quantidade de memória necessária.

Cores:!1 triângulo x !

3 vértices por triângulo x!4 canais por vértice!

RGBA!

Page 20: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

20!

Segundo passo:!Antes de inicializar os VBOs, precisamos criar os dados

Page 21: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

21!

Terceiro passo:!Criação e inicialização dos VBOs

Page 22: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

22!

Terceiro passo:!Criação e inicialização dos VBOs

Qual a função do método flip()?!http://download.java.net/jdk7/archive/b123/docs/api/java/nio/Buffer.html!

Page 23: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

23!

Terceiro passo:!Criação e inicialização dos VBOs

Page 24: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

24!

Terceiro passo:!Criação e inicialização dos VBOs

http://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml!glBindBuffer ?!

Page 25: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

25!

Terceiro passo:!Criação e inicialização dos VBOs

https://www.opengl.org/sdk/docs/man4/xhtml/glBufferData.xml!glBufferData ?!

Page 26: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

26!

Quarto passo:!Criação e inicialização dos VAOs

Exercício: consultar a documentação dos métodos.!

Page 27: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

27!

Quinto passo:!Renderização dos VAOs.

Obs:•  Deve ser chamado depois da definição dos shaders.•  É normalmente invocado no callback de display.

Page 28: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

28!

Quinto passo:!Renderização dos VAOs.

Obs:•  Deve ser chamado depois da definição dos shaders.•  É normalmente invocado no callback de display.

glDrawArrays?!http://www.opengl.org/sdk/docs/man4/xhtml/glDrawArrays.xml!

Page 29: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

29!

Escondemos parte do código em uma classe auxiliar:!!ShaderProgram.java Em breve, veremos seu conteúdo.!

Page 30: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

30!

Escondemos parte do código em uma classe auxiliar:!!ShaderProgram.java Em breve, veremos seu conteúdo.!!Código completo:Ver página do curso.!

Page 31: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Hello World!Desenhando um triângulo!

31!

Códigos OpenGL escritos em o u t r a s l i n g u a g e n s s ã o análogos.!!C++: http://openglbook.com/the-book/chapter-2-vertices-and-shapes/!

!Python:h t t p : / / p y o p e n g l . s o u r c e f o r g e . n e t /documentation/index.html!!

JavaScript:http://www.khronos.org/webgl/wiki/Main_Page!

Page 32: Computação Gráficaanselmo/cursos/CGI/slidesNovos/... · Visão geral! Programa básico! 5! Uma aplicação OpenGL precisa de um lugar para renderizar a informação processada.!!

Computação Gráfica!TCC-00291!

Assunto: Primeiros passos!