silvânia de assis guilherme de melo moisés tadeu cardoso isabela de oliveira glauber ataíde...
TRANSCRIPT
![Page 1: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/1.jpg)
Silvânia de AssisGuilherme de Melo Moisés Tadeu CardosoIsabela de OliveiraGlauber AtaídeHenrique de Araujo
1
![Page 2: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/2.jpg)
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
![Page 3: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/3.jpg)
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
![Page 4: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/4.jpg)
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
![Page 5: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/5.jpg)
A biblioteca gráfica OpenGL é capaz de trabalhar com 3 tipos de LUZ:
Ambiente, Difusa Especular.
5
![Page 6: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/6.jpg)
Observe como a iluminação é importante para a representação de Objetos 3D:
6
![Page 7: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/7.jpg)
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íciesDefinida somente pelas intensidades de luz ambiente RGB
7
![Page 8: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/8.jpg)
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 contrasteglBegin(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
![Page 9: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/9.jpg)
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
![Page 10: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/10.jpg)
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
![Page 11: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/11.jpg)
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
![Page 12: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/12.jpg)
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
![Page 13: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/13.jpg)
• 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
![Page 14: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/14.jpg)
• 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
![Page 15: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/15.jpg)
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
![Page 16: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/16.jpg)
16
![Page 17: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/17.jpg)
17
![Page 18: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/18.jpg)
18
![Page 19: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/19.jpg)
19
![Page 20: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/20.jpg)
20
![Page 21: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/21.jpg)
• 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
![Page 22: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/22.jpg)
glVertex3fv( v )
Número deNúmero decomponentescomponentes2 - (x,y) 3 - (x,y,z)4 - (x,y,z,w)
Tipo de dadoTipo de dadob - byteub - unsigned bytes - shortus - unsigned shorti - intui - unsigned intf - floatd - double
vetorvetoromita o “v” qdo
coords dadas uma a uma
glVertex2f( x, y )
22
![Page 23: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/23.jpg)
• 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
![Page 24: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/24.jpg)
• 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
![Page 25: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/25.jpg)
• 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
![Page 26: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/26.jpg)
• 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
![Page 27: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/27.jpg)
• 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
![Page 28: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/28.jpg)
• 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
![Page 29: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/29.jpg)
PixelsPixels
VérticesVértices
Listas deDisplay
AvaliadorPolinomial
Operaçõespor vértice
& Montagemde primitivas
Rasterização
Memória de Textura
Operaçõespor Fragmento
FrameBuffer
Operaçõessobrepixels
29
![Page 30: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/30.jpg)
Baseado no Jogo Metal Gear
30
![Page 32: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/32.jpg)
32
![Page 34: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/34.jpg)
34
![Page 35: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/35.jpg)
35
![Page 36: Silvânia de Assis Guilherme de Melo Moisés Tadeu Cardoso Isabela de Oliveira Glauber Ataíde Henrique de Araujo 1](https://reader036.vdocuments.mx/reader036/viewer/2022070508/570638621a28abb823900995/html5/thumbnails/36.jpg)
#include "Nanna.h“#include <iostream>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