Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAna Sofia Valgueiro Carreiro Alterado mais de 8 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.