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

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

Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1.

Apresentações semelhantes


Apresentação em tema: "Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1."— Transcrição da apresentação:

1 Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1

2 OpenGL e uma biblioteca de funções para desenvolver aplicações gráficas em 2D e 3D, portáteis e interativas, foi desenvolvida em 1992 pela Silicon Graphics. O OpenGL foi desenvolvido em C, mas e integrável com outras linguagens como Java, Python e C++. 2

3 A utilização do OpenGL pela industria de desenvolvimento de jogos e muito intensa, hoje muitos jogos utilizama biblioteca para seu desenvolvimento, entre eles podemos citar: Half Life, Medal of Honor, NeverWinter Nights, Unreal Tournament, Alone in the Dark, entre inúmeros outros títulos. 3

4 As rotinas de exibição de objetos de OpenGL são sempre iguais. O que difere o uso de OpenGl em uma plataforma UNIX ou PC, ou em ferramentas como Delphi, C Builder, Borland C, Visual C ou Visual Basic é a forma de inicializar e integrar a biblioteca OpenGL em cada linguagem e a forma de definir em que janela(ou parte dela) a imagem será exibida. 4

5  A biblioteca gráfica OpenGL é capaz de trabalhar com 3 tipos de LUZ:  Ambiente,  Difusa  Especular. 5

6 Observe como a iluminação é importante para a representação de Objetos 3D: 6

7  Luz Ambiente  Um objeto que não esteja diretamente iluminado é ainda visível por causa da luz refletida a partir doutras superfícies. Modelada por uma simples fonte de luz ambiente. Em vez de calcular as reflexões nas superfícies dos objetos, especifica-se uma luz ambiente constante para todas as superfícies Definida somente pelas intensidades de luz ambiente RGB 7

8  Exemplo Completo de Luz Difusa: // As funções "DefineLuz", "DesenhaCubo”  procedure DefineLuz; const // Define a cor da luz ambiente. LuzAmbient : Array[0..3] of GLfloat = (1.0, 1.0, 1.0, 1.0); begin // Habilita o uso de iluminação glEnable(GL_LIGHTING); // Ativa o uso da luz ambiente glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @LuzAmbient); // Ativa o "Color Tracking" glEnable(GL_COLOR_MATERIAL); end;  procedure DesenhaCubo; begin  glColor3f(0,0,0.5); // Define a de contraste glBegin(GL_POLYGON); // face 1  glNormal3f(0,0,1); glVertex3f(10.0, 10.0, 10.0); glVertex3f(-10.0, 10.0, 10.0); glVertex3f(-10.0, -10.0, 10.0); glVertex3f(10.0, -10.0, 10.0);  glEnd; glColor3f(0.5,0.5,0); // Define a cor amarela glBegin(GL_POLYGON); // face 2  glNormal3f(0,0,-1); glVertex3f(10.0, 10.0, -10.0); glVertex3f(10.0, -10.0, -10.0); glVertex3f(-10.0, -10.0, -10.0); glVertex3f(-10.0, 10.0, -10.0);  glEnd; 8

9 Luz difusa  responsável pelo efeito de "degradé" nos objetos;  a cor da luz difusa(r,g,b);  a posição da luz(x,y,z). Os passos para fazer isso são: definir cor da luz Ambiente, posição e a cor da Luz Difusa, através de constantes 9

10  const  LuzAmbiente : Array[0..3] of GLfloat = (0.5, 0.5, 0.5, 1.0); // Cor da Luz Difusa LuzDifusa : Array[0..3] of GLfloat = (0.8, 0.8, 0.8, 1.0); // Posição da Luz Difusa PosicaoLuz : Array[0..3] of GLfloat = (30.0, 30.0, 0.0, 1.0);  Ativar o uso da luz ambiente e o "Color Tracking"(conforme exemplo anterior)  // Habilita o uso de iluminação glEnable(GL_LIGHTING); // Ativa o uso da luz ambiente glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @LuzAmbient); // Ativa o "Color Tracking" glEnable(GL_COLOR_MATERIAL); Definir e ativar uma luz Difusa Em OpenGl podemos ter até 8 pontos de Luz. Cada um deles designado por uma constante(GL_LIGHT0, GL_LIGHT1, GL_LIGHT2,...). NoExemplo a seguir definimos as características da luz de número 0(zero).  glLightfv(GL_LIGHT0, GL_AMBIENT, @LuzAmbiente); glLightfv(GL_LIGHT0, GL_DIFFUSE, @LuzDifusa ); glLightfv(GL_LIGHT0, GL_POSITION,@PosicaoLuz ); glEnable(GL_LIGHT0);  // Exibe uma linha da posição da luz até (0,0,0) glBegin(GL_LINES); glVertex4fv(@PosicaoLuz); glVertex3f(0,0,0); 10

11 Uma luz do tipo Especular  é a responsável pela geração de pontos de brilho no objeto;  o brilho é da cor da luz;  há um ponto a partir do qual ela é emitida;  seu brilho é emitido indistintamente em todas as direções;  cada tipo de material(objeto) tem um grau de especularidade (que em outras palavras define a capacidade de brilho do material).  a posição da luz(x,y,z).  a cor da luz difusa(r,g,b);  a cor da luz especular(r,g,b);  a cor especular do objeto(r,g,b);  o capacidade de brilho do objeto, ou o grau de concentração do brilho(algo como o grau de polimento do objeto); 11

12  definir cor da luz Ambiente, a posição e a cor da Luz Difusa e da Luz especular, através de constantes const  LuzAmbiente : Array[0..3] of GLfloat = (0.5, 0.5, 0.5, 1.0); LuzDifusa : Array[0..3] of GLfloat = (0.4, 0.4, 0.4, 1.0); LuzEspecular: Array[0..3] of GLfloat = (1.0, 0.0, 1.0, 1.0); PosicaoLuz : Array[0..3] of GLfloat = (0.0, 20.0, 60.0, 1.0); Especularidade: Array[0..3] of GLfloat = (0.0, 0.0, 0.0, 1.0);  Ativar o uso da luz ambiente e o "Color Tracking"(conforme exemplo anterior) // Habilita o uso de iluminação glEnable(GL_LIGHTING); // Ativa o uso da luz ambiente glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @LuzAmbient); // Ativa o "Color Tracking" glEnable(GL_COLOR_MATERIAL);  Definir e ativar uma luz Especular // Define os parâmetros da Luz número Zero glLightfv(GL_LIGHT0, GL_AMBIENT, @LuzAmbiente); glLightfv(GL_LIGHT0, GL_DIFFUSE, @LuzDifusa ); glLightfv(GL_LIGHT0, GL_SPECULAR, @LuzEspecular ); glLightfv(GL_LIGHT0, GL_POSITION, @PosicaoLuz ); glEnable(GL_LIGHT0);  Definir a cor especular do obejto // Define a reflectancia do material glMaterialfv(GL_FRONT,GL_SPECULAR, @Especularidade);  Definir o grau de especularidade do objeto // Define a concentração do brilho. // Quanto maior o valor do Segundo parametro, mais concentrado será o brilho. // (Valores válidos: de 0 a 128)  glMateriali(GL_FRONT,GL_SHININESS,20); 12

13 Possui primitivas geométricas (pontos, linhas, polígonos e imagens) e operações para especificar os objetos geométricos a serem renderizados em duas ou três dimensões. Capaz de gerar imagens de alta qualidade. Independente de plataforma. Objetos complexos devem ser construídos a partir de primitivas geométricas simples. 13

14 Uma vez emitido um vértice (glVertex), este é desenhado com as propriedades (cor, material, normal, coordenadas de textura etc) registradas nas variáveis de estado correspondentes. Conclusão: Antes de emitir um vértice, assegurar-se que cor, material, normal e etc, têm o valor certo. 14

15 Valor Significado GL_POINTS Pontos individuais GL_LINES Pares de vértices interpretados como segmentos de reta individuais. GL_LINE_STRIP Serie de segmentos de reta conectados. GL_LINE_LOOP Igual ao anterior. Ultimo vertice conectado a primeiro GL_TRIANGLES Triplas de vértices interpretados como triângulos. GL_TRIANGLE_STRIP Cadeia triângulos conectados. GL_TRIANGLE_FAN Leque de triângulos conectados. GL_QUADS Quadrupla de vértices interpretados como quadriláteros. GL_QUAD_STRIP Cadeia de quadriláteros conectados. GL_POLYGON Borda de um polígono convexo simples. 15

16 16

17 17

18 18

19 19

20 20

21 Todos os comandos começam com o prefixo gl (Ex.: glClearColor). As palavras nos nome dos comandos começam com letras maiúsculas (Ex.: glColor()). O sufixo indica o número e o tipo dos argumentos (Ex.: glVertex2i(1,3)). As constantes começam com GL_ (Ex.: GL_COLOR_BUFFER_BIT). 21

22 glVertex3fv( v ) Número de componentes 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Tipo de dado b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double vetor omita o “v” qdo coords dadas uma a uma glVertex2f( x, y ) 22

23 A OpenGL funciona como uma máquina de estados. Os estados correntes permanecem ativos até que sejam modificados. Exemplo: a cor de desenho corrente é aplicada a qualquer primitiva geométrica até que seja modificada. 23

24 Existem vários estados: –Cor de desenho corrente. –Transformações de visualização e projeção. –Padrões de linhas e polígonos. –Modo de desenho dos polígonos. –Posição e característica das fontes de luz. –Propriedades dos materiais associados aos objetos. –etc. 24

25 Vários estados se referem a modos que estão habilitados ou desabilitados. Estes estados são modificados através dos comandos: – glEnable() e glDisable(). –Exemplo: glEnable(GL_LIGHTINING). 25

26 Alguns comandos para ler um estado: –glGetBooleanv(), glGetDoublev(), glGetFloatv(), glGetIntegerv(), glPointerv() ou glIsEnabled(). Comandos para salvar um estado: – glPushAttrib() e glPushClientAttrib(). Comandos para restaurar um estado: – glPopAttrib() e glPopClientAttrib(). 26

27 GLU (OpenGL Utility Library) –Parte do padrão OpenGL. –NURBS, trianguladores, quádricas, etc. AGL, GLX, WGL –Camadas entre o OpenGL os diversos sistemas de janelas. GLUT (OpenGL Utility Toolkit) –API portátil de acesso aos sistemas de janelas. –Encapsula e esconde as camadas proprietárias. –Não é parte official do OpenGL. 27

28 Rendering – processo através do qual um computador gera imagens a partir de um modelo. Pixel – menor elemento visível que um dispositivo gráfico pode apresentar. Uma imagem é formada por vários pixels. Plano de bits – área de memória que armazena um bit de informação para cada pixel. Framebuffer – estrutura que armazena todas as informações necessárias para que o display gráfico possa controlar a intensidade da cor em cada pixel. 28

29 Pixels Vértices Listas de Display Avaliador Polinomial Operações por vértice & Montagem de primitivas Rasterização Memória de Textura Operações por Fragmento Frame Buffer Operações sobre pixels 29

30 Baseado no Jogo Metal Gear 30

31 } 31

32 32

33 33

34 34

35 35

36 #include "Nanna.h“ #include using namespace std; void Nanna::draw() { glColor3f(1,0,0); glBegin(GL_QUADS); glVertex3f(this->getX(), this->getY(), 0); glVertex3f(this->getX() + this->getLargura(), this->getY(), 0); glVertex3f(this->getX() + this->getLargura(), this->getY() + this- >getAltura(), 0); glVertex3f(this->getX(), this->getY() + this->getAltura(), 0); glEnd(); } 36


Carregar ppt "Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1."

Apresentações semelhantes


Anúncios Google