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

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

Silicon Graphics OpenGL - Apresentação

Apresentações semelhantes


Apresentação em tema: "Silicon Graphics OpenGL - Apresentação"— Transcrição da apresentação:

1 Silicon Graphics OpenGL - Apresentação
Interface para Programação de Aplicações Gráficas Fornece métodos para programação grãfica Realiza a interface entre Software e as chamadas de acesso ao hardware pelo SO. Máquina de Estados A cada estado produz um resultado diferente Deve-se habilitar os estados para tal efeito Renderizador Resultado final é uma imagem O que é?

2 Silicon Graphics OpenGL - Apresentação
Produzir Software que tenha algum conteúdo gráfico Bi ou Tridimensional Software para produção de gráficos estatísticos Produzir Software visual de Simulação Simuladores de Carro ou de Avião para teste de performance e qualidade Produzir Jogos e Animações Mercado que vem crescendo desde o surgimento das áreas Outros O que é? Para que Serve?

3 Silicon Graphics OpenGL - Apresentação
Define-se a Janela de Contexto Algumas bibliotecas, como o Glut facilitam essa operação. Define as janelas de Visualização Caso nenhuma janela de visualização esteja definida, a janela de contexto será a janela de visualização. Define o tipo de Projeção a ser usado Ortográfica ou Perspectiva O que é? Para que Serve? Como Funciona?

4 Silicon Graphics OpenGL - Apresentação
Habilita os estados da máquina de estados Operações como teste de profundidade, antialiasing, mapeamento de textura 1D, 2D ou 3D, iluminação, sombras, etc. Carrega a matriz Identidade Para garantir que a matriz do mundo possa ser recuperada. Posiciona a Câmera De modo a visualizar objetos corretamente. { O que é? Para que Serve? Como Funciona?

5 Silicon Graphics OpenGL - Apresentação
Empilha a matriz atual Para recuperá-la posteriormente Realiza transformações ({Rotação, Escala, Translado, Multiplicação de Matriz}) Realiza processo de renderização (Aplica Textura) (Aplica transparência) (aplica reflexao) Desenha primitivas Recupera matriz do mundo } e Desenha na Tela. O que é? Para que Serve? Como Funciona?

6 Silicon Graphics OpenGL - Apresentação
A OpenGL define suas próprias estruturas de dados. Muitas delas são compatíveis com as das linguagens de programação que utiliza sua API, porém apresentaremos as estruturas e a estrutura de nomenclatura das funções da OpenGL: Dados primitivos: os dados primitivos da OpenGL iniciam com GL e o tipo. Segue uma tabela com os tipos de dados da OpenGL e os valores que podem assumir. O que é? Para que Serve? Como Funciona? Estrutura

7 Silicon Graphics OpenGL - Apresentação
O que é? Para que Serve? Como Funciona? Estrutura

8 Silicon Graphics OpenGL - Apresentação
Com os tipos básicos de dados definidos fica fácil reconhecer funções e quais são os tipos de parâmetros de funções da OpenGL. As funções OpenGL tem a seguinte estrutura de nomenclatura: (biblioteca)nomeDaFunção<n>(sufixo)[v], onde: biblioteca indica a qual biblioteca a função pertence, por exemplo, uma função pura da OpenGL inicia com o prefixo gl..., uma da Glu com glu..., etc. O que é? Para que Serve? Como Funciona? Estrutura

9 Silicon Graphics OpenGL - Apresentação
(biblioteca)nomeDaFunção<n>(sufixo)[v] nomeDaFunção é o nome da função a ser usada. Exemplo: gluPerspective, o que indica que é a função perspectiva va biblioteca Glu (GL utility library). n indica quantos dados serão passados como parâmetro e Sufixo é um dos sufixos dos tipos de dados básicos da openGL, indicando se é Glbyte, Glint, etc. confira a tabela noamente para saber os sufixos possíveis o terminador v é opcional e indica que o argumento é um vetor com n componentes do tipo definido. O que é? Para que Serve? Como Funciona? Estrutura

10 Silicon Graphics OpenGL - Apresentação
Utilizando Visual C++ 6 Inicie novo projeto: Win32 Application No Menu Project->Settings No Tab: “Link”, no campo “Object/Library Modules”, adicione: “OpenGL32.lib”, “Glu32.lib”, “Glaux.lib” Adicione um arquivo C++ source ao projeto. O arquivo deve incluir os seguintes cabeçalhos: “windows.h”, “gl/gl.h”, “gl/glu.h”, “gl/glaux.h”, entre <>, ex: #include <gl/gl.h> Como Fazer? O que é? Para que Serve? Como Funciona? Estrutura

11 Silicon Graphics OpenGL - Apresentação
Como trabalharemos sem o auxílio da GLUT, necessita-se de um pouco de conhecimento sobre programação em Windows: Declara-se as variáveis globais que o Windows necessita para a definição da Janela de Contexto: HDC hDC=NULL; //Dispositivo de cont. privado HGLRC hRC=NULL;/ /Cont. permanente de renderização HWND hWnd=NULL; // Instância da janela HINSTANCE hInstance; // Instância da Aplicação Quaisquer outras variáveis necessárias para a sua aplicação. O que é? Como Fazer? Variáveis Para que Serve? Como Funciona?

12 Silicon Graphics OpenGL - Apresentação
Para que o Programa possa referenciar uma função é necessário definir um protótipo da função em C para referências em qualquer parte do programa. Define-se o protótipo da função para tratamento de mensagens do Windows. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); O que é? Como Fazer? Variáveis Para que Serve? CallBack? Como Funciona?

13 Silicon Graphics OpenGL - Apresentação
Em Windows a rotina principal chama-se WinMain que exige, como parâmetros: HINSTANCE hInstance, // Instância HINSTANCE hPrevInstance, // Instância prévia LPSTR lpCmdLine,// Parâmetros de linha de comando int nCmdShow // Estado de Exibição da janela Com exceção do parâmetro de linha de comando, os outros parâmetros são automaticamente preenchidos pelo Sistema Operacional. A primeira coisa a se fazer é declarar a variável que armazenará a estrutura de mensagens do windows: MSG msg; O que é? Como Fazer? Variáveis Para que Serve? CallBack? Como Funciona? WinMain?

14 Silicon Graphics OpenGL - Apresentação
A rotina principal tem as seguintes obrigações: Definir o contexto de renderização; Relizar o loop para: Recuperar as mensagens que o SO envia para a janela/aplicação e realizar os procedimentos necessários de acordo com a mensagem recebida. Estamos prontos para iniciar a configuração da janela de renderização (contexto) e habilitar a OpenGL a realizar os procedimentos para o programa. O que é? Como Fazer? Variáveis Para que Serve? CallBack? Como Funciona? WinMain?

15 Silicon Graphics OpenGL - Apresentação
Inicializaremos a janela de Renderização com o procedimento OGLInit que possuirá os parâmetros: String Título int largura, int altura int profundidade de cores (1,2,8,16,32,... E bool telacheia O Processo de criação do contexto de renderização é de difícil entendimento, porém, segue os seguintes passos: Define-se o estilo da janela através de um objeto da classe janela Nomeia a classe e tenta registrá-la Como Fazer? OGLInit Variáveis CallBack? WinMain?

16 Silicon Graphics OpenGL - Apresentação
Determina se é em tela cheia Se for inicializa as configurações Tenta mudar os atributos de exibição do SO Atribui o modelo de exibição da janela (tela cheia ou janela): Tenta criar a janela; Define o descritor do formato de pixel para dizer ao Windows como desenhar; Tenta recuperar um contexto de dispositivo (para gerenciamento de exibição dependendo do seu monitor) Procura um formato de pixel compatível com o descritor; Tenta atribuir o descritor de formato de pixel encontrado ao Windows; Tenta criar o contexto de renderização; tenta ativar o contexto de renderização; Mostra a Janela Coloca a janela no topo Coloca o foco do teclado na janela Inicializa as projeções do OpenGL Tenta Inicializar os Parâmetors (estados) da OpenGL Retorna True se em todas as tentativas obtiver sucesso OGLInit Como Fazer? Variáveis CallBack? WinMain?

17 Silicon Graphics OpenGL - Apresentação
As inicializações das projeções serão efetuadas no procedimento ResizeGL() para manter a taxa de aspecto. Dois tipos de projeções: Ortográfica: Preserva Paralelismo entre retas, não fornece sensação de profundidade e Perspectiva: Retas paralelas convergem em um ponto no infinito, retira o paralelismo das retas, fornece sensação de profundidade. OGLInit Como Fazer? Projeções Variáveis CallBack? WinMain?

18 Silicon Graphics OpenGL - Apresentação
Ortográfica: Verifica se altura=0 (para efeito de prevenção de divisão por 0). Se for atribua 1 a ela. Defina a Viewport (janela de visualização) com o comando: glViewport(0,0,largura,altura); Ajuste o modo de definição da matriz para matriz de projeção com o comando: glMatrixMode(GL_PROJECTION); com o comando: glLoadIdentity(); definimos a matriz de projeção como sendo a identidade. Defina a projeção ortográfica com o comando glOrtho(esq., dir., base, topo, perto longe), onde esses valores definem o volume de visão como na figura a seguir: OGLInit Como Fazer? Projeções Variáveis CallBack? WinMain?

19 Silicon Graphics OpenGL - Apresentação
Como Fazer? OGLInit Topo Projeções Variáveis Esq. Longe Dir. CallBack? Direção do plano de Visão Base Perto WinMain?

20 Silicon Graphics OpenGL - Apresentação
Ortográfica: Determinado o Volume de visualização muda-se o modelo da matriz para o Modelo/Visão, que define os objetos do mundo, com o comando: glMatrixMode(GL_MODELVIEW); Recarrega a matriz identidade com o comando glLoadIdentity(); Retorna do procedimento. OGLInit Como Fazer? Projeções Variáveis CallBack? WinMain?

21 Silicon Graphics OpenGL - Apresentação
Perspectiva: Verifica se altura=0 (para efeito de prevenção de divisão por 0). Se for atribua 1 a ela. Defina a Viewport (janela de visualização) com o comando: glViewport(0,0,largura,altura); Ajuste o modo de definição da matriz para matriz de projeção com o comando: glMatrixMode(GL_PROJECTION); com o comando: glLoadIdentity(); definimos a matriz de projeção como sendo a identidade. Defina a projeção perspectiva com um dos comandos abaixo: glFrustum(esq., dir., base, topo, perto longe) gluPerspective(fovy,aspect,zPerto,zLonge), onde esses valores definem o volume de visão como na figura a seguir: OGLInit Como Fazer? Projeções Variáveis CallBack? WinMain?

22 Silicon Graphics OpenGL - Apresentação
glFrustum(esq.,dir.,base,topo,perto,longe) Como Fazer? OGLInit Topo Projeções Variáveis Frustum Dir. CallBack? Esq. Base WinMain? Perto Longe

23 Silicon Graphics OpenGL - Apresentação
gluPerspective(fovy,aspecto,perto,longe) OGLInit Como Fazer? Aspecto=l/a Variáveis Projeções fovy a l CallBack? q WinMain? Perto Longe

24 Silicon Graphics OpenGL - Apresentação
Perspectiva: Determinado o Volume de visualização muda-se o modelo da matriz para o Modelo/Visão, que define os objetos do mundo, com o comando: glMatrixMode(GL_MODELVIEW); Recarrega a matriz identidade com o comando glLoadIdentity(); Retorna do procedimento. OGLInit Como Fazer? Projeções Variáveis CallBack? WinMain?

25 Silicon Graphics OpenGL - Apresentação
Inicialização dos estados da OpenGL Habilita os estados da OpenGL para efeitos de renderização. Os comandos são: GLShadeModel(modelo), para determinar o tipo de sombreamento usado para iluminação. glEnable(GL_Estado), Habilita a OpenGL a realizar os cálculos de renderização para o estado definido. O Estado especifica iluminação, teste de profundidade, transparência, luzes (caso a iluminação esteja habilitada), materiais, textura, etc. glClearColor(f,f,f), determina com que cor limpar a tela; glClearDepth(f) determina qual a profundidade do buffer de profundidade a ser limpa; glHint(chave, valor) determina miscelânea para renderização, tais como cálculo de perspectiva. OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? WinMain?

26 Silicon Graphics OpenGL - Apresentação
A qualquer momento, dentro do programa, pode-se desenhar um objeto na tela. O procedimento para desenho encontra-se entre os comandos: glBegin(tipoDePrimitiva) e glEnd(). Antes de determinar como se desenha na tela do computador usando a OpenGL precisaremos introduzir as primitivas gráficas suportadas pela OpenGL. São elas: Pontos, Linhas, polígonos (não côncavos), triângulos, quadriláteros, malha de linhas, malha de linhas conectadas, malha de triângulos, triânculos centrados e malha de quadriláteros. A seguir encontra-se uma figura de como são esses objetos e o s seus nomes para passar como parâmetro para a OpenGL. OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

27 Silicon Graphics OpenGL - Apresentação
OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

28 Silicon Graphics OpenGL - Apresentação
Entre os métodos glBegin e glEnd existem apenas um conjunto de funções da OpenGL que são permitidas. São eles: glVertex*() - atribui a coordenada do vértice; glColor*() - atribui uma cor ao vértice glIndex*() - atribui o índice de cor (apenas se trabalharmos com o modo indexado de cores) glNormal*() - Atribui uma normal ao vértice (ou ao plano) glEvalCoord*() - calcula coordenadas glCallList() glCallLists() - executa listas de exibição glTexCoord*() atribui coordenadas de textura glEdgeFlag*() - controla desenho de bordas glMaterial*() - atribui propriedades de reflexão * significa que o método possui n parâmetros ,sufixo e pode possuir o terminador v; OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

29 Silicon Graphics OpenGL - Apresentação
Portanto, caso desejemos desenhar um triângulo vermelho cujos vértices estão definidos pelos vetores (matrizes linha) v1,v2 e v3 e cuja normal é definida pelo vetor n procederíamos de uma das seguintes formas: glBegin(GL_TRIANGLE); glColor3f(1.0f,0.0f,0.0f); glNormal3fv(*n); glVertex3fv(*v1); glVertex3fv(*v2); glVertex3fv(*v3); glEnd(); ou: OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

30 Silicon Graphics OpenGL - Apresentação
glBegin(GL_TRIANGLE); glColor3f(1.0f,0.0f,0.0f); glNormal3f(n[0],n[1],n[2]); glVertex3f(v1[0],v1[1],v1[2]); glVertex3f(v2[0], v2[1], v2[2]); glVertex3f(v3[0], v3[1], v3[2]); glEnd(); repare que como as funções chamadas terminam em 3f os vetores devem ser do tipo Glfloat e possuir três elementos. Entre os comandos glBegin e glEnd podem vir quaisquer outros comandos que a linguagem de programação permitir. OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

31 Silicon Graphics OpenGL - Apresentação
Para visualizar efetivamente a Cena deve-se especificar a posição e orientação da câmera hipotética que irá registrá-la. Isso é realizado especificando a posição da câmera, ou seja, do plano de visão; A direção para onde a câmera aponta e O vetor que indica a direção de cima (upVector) da câmera. Em OpenGL define-se a câmera em qualquer parte do código (exceto entre glBegin() e glEnd()) co mo comando: gluLookAt(Xc,Yc,Zc,Xd,Yd,Zd,Xu,Zu,Du); Como Fazer? OGLInit Variáveis Projeções CallBack? MEFInit WinMain? Desenhando E a Cena?

32 Silicon Graphics OpenGL - Apresentação
Transformações OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

33 Silicon Graphics OpenGL - Transformações
Procedimentos utilizados para: Modificar o valor de cada vértice de um objeto V’=Mtn.Mtn-1.(...).Mt2.Mt1.V Modificar o Valor da matriz de exibição do mundo Objetivo: Posicionar os objetos no mundo de maneira a compor a cena desejada. Como Fazer? O que são? Variáveis CallBack? WinMain?

34 Silicon Graphics OpenGL - Transformações
Translação: Move linearmente um vértice de uma posição a outra do espaço cartesiano Rotação: Rotaciona (translada de maneira circular) um ponto em torno de um eixo na angulação desejada Escala: Altera o tamanho de um objeto por transladar os vértices do mesmo de maneira desigual. O que são? Como Fazer? Quais São? Variáveis CallBack? WinMain?

35 Silicon Graphics OpenGL - Transformações
Definido pela Matriz: 1 0 0 Tx 0 1 0 Ty 0 0 1 Tz No OpenGL glTranslate(s)[v](Tx,Ty,Tz) ou: Tx Ty Tz 1 e pelo comando glMultMat{f,v}(const TIPO *mat) Como Fazer? O que são? Translação Variáveis Quais São? CallBack? Pilha de Matriz WinMain? Como Fazer

36 Silicon Graphics OpenGL - Transformações
Definido por Matriz: Seja v=(x,y,z)T e u=v/||v||=(x’,y’,z’). Seja também S, a matriz: 0 -z’ y’ z’ x’ -y’ x’ 0 A matriz de Rotação R será (m representam os elementos de M): m m m 0 Dado que: M=u.uT+(cos a).(I-u.uT)+(sen a).S Como Fazer? O que são? Translação Variáveis Quais São? Rotação CallBack? Pilha de Matriz Como Fazer WinMain?

37 Silicon Graphics OpenGL - Transformações
No OpenGL utiliza-se o comando: glRotate(s)[v](a,x,y,z) ou o comando glMultMatriz{f,d}(const TIPO mat*), onde *mat é o vetor bidimensional contendo a transposta da matriz R previamente apresentada. Como Fazer? O que são? Translação Variáveis Quais São? Rotação CallBack? Pilha de Matriz Como Fazer WinMain?

38 Silicon Graphics OpenGL - Transformações
Definido pela Matriz E=: Sx 0 Sy 0 0 Sz 0 No OpenGL glScale(s)[v](Tx,Ty,Tz) ou: glMultMat{f,d}(const TIPO *mat), onde mat é um vetor bidimensional da matriz transposta de E fornecida acima. Como Fazer? O que são? Translação Variáveis Quais São? Rotação Pilha de Matriz CallBack? Escala WinMain? Como Fazer

39 Silicon Graphics OpenGL - Transformações
Ao executar os comandos gl(Rotate,Translate,Scale)* a OpenGL modifica a matriz do Mundo e o resultado final da cena será: R=Mm.Mp.Objeto Para recuperar a matriz do Mundo prévia à operação realizada existem 2 procedimentos: Multiplicar a matriz do mundo pela matriz inversa da operação realizada ou Empilhar a matriz do mundo atual, realizar as operações desejadas e desempilhá-la novamente. O que são? Como Fazer? Quais São? Variáveis Pilha de Matriz CallBack? Como Fazer WinMain?

40 Silicon Graphics OpenGL - Transformações
Manipulando a pilha de matrizes: Comandos: glPushMatrix(): empilha a matriz do Mundo glPopMatriz(): Desempilha a matriz do mundo OpenGL suporta até 32 matrizes de ordem 4 e inicia com 2 matrizes de ordem 4, uma sendo a matriz de projeção e outra sendo a matriz inicial do mundo O que são? Como Fazer? Quais São? Variáveis Pilha de Matriz CallBack? WinMain?

41 Silicon Graphics OpenGL - Transformações
Quaisquer transformações ou comando para empilhar matrizes: Antes de executar o comando glBegin(primitiva) e/ou depois do comando glEnd() O que são? Como Fazer? Quais São? Variáveis Pilha de Matriz CallBack? Como Fazer WinMain?

42 Silicon Graphics OpenGL - Apresentação
Iluminação OGLInit Como Fazer? Projeções Variáveis MEFInit CallBack? Desenhando WinMain?

43 Silicon Graphics OpenGL - Iluminação
Criar a sensação de Profundidade Sem iluminação Objetos parecem planos Adicionar Realismo à cena A sensação de profundidade provê mais realismo Deixar a cena mais bonita. Como Fazer? Para que serve? Variáveis CallBack? WinMain?

44 Silicon Graphics OpenGL - Iluminação
Observe como a iluminação é importante para a representação de Objetos 3D: Para que serve? Como Fazer? Exemplos Variáveis CallBack? WinMain?

45 Silicon Graphics OpenGL - Iluminação
Criadas através de Fontes de luz: Um ponto no Infinito (ex: o Sol) Um ponto próximo (ex: uma lâmpada incandescente) Uma fonte de luz distribuída (ex: lâmpadas de Neon ou de Gás) Alteram um dos 3 Modelos de Iluminação: Luz Ambiente: modelo básico de iluminação (padrão no OpenGL), o objeto não é iluminado diretamente pela fonte de luz, mas pela luz refletida de outros objetos. É uma aproximação do efeito global de iluminação difusa. Para que serve? Como Fazer? Exemplos Variáveis Luzes CallBack? WinMain?

46 Silicon Graphics OpenGL - Iluminação
Reflexão Difusa: Iluminação constante sobre a superfície independente da direção do espectador. A quantidade fracional de luz incidente que é difusamente refletida pode ser ajustada pelo parâmetro Kd=[0,1] (coeficiente de reflexão difusa) O raio de luz reflete de acordo com a angulação relativa á normal do plano tangente à superfície atingida. Como Fazer? Para que serve? Variáveis Exemplos CallBack? Luzes WinMain? q q

47 Silicon Graphics OpenGL - Iluminação
Reflexão Especular: Iluminação não constante sobre a superfície. A quantidade fracional de luz incidente pode ser totalmente refletida, causando o efeito do Ponto Brilhante no objeto. (ex: maçã, metais, vidros, etc.) O raio de luz reflete de acordo com a angulação relativa á normal do plano tangente à superfície atingida, porém sua intensidade não é constante (como na reflexão difusa). Para que serve? Como Fazer? Exemplos Variáveis Luzes CallBack? WinMain?

48 Silicon Graphics OpenGL - Iluminação
Exemplos de Iluminações: Como Fazer? Para que serve? Iluminação especular: Variáveis Exemplos Cor: Ambiente+Difusa Luzes CallBack? WinMain?

49 Silicon Graphics OpenGL - Iluminação
Luzes em OpengL: Vetores quadridimensionais representando os valores R,G,B e alfa. GLfloat Luz[]={ 0.5f,0.5f,0.5f,1.0f }; No OpenGL a luz ambiente iluminará toda a cena, pois ela não é proveniente de um ponto específico. Declara-se a luz ambiente da seguinte forma: glLightfv(GL_LIGHT1, GL_AMBIENT, Luz) Onde: Light1 é a variável interna da OpenGL que armazenará os atributos para a luz. GL_AMBIENT é a constante que identifica o tipo de iluminação e Luz é a cor da iluminação. Para que serve? Como Fazer? Exemplos Variáveis Luzes CallBack? Representação WinMain?

50 Silicon Graphics OpenGL - Iluminação
Para a luz difusa : Ilumina todo e qualquer objeto que esteja no raio de iluminação Para isso, precisa-se de uma posição para a fonte de luz: glFloat Posicao=(x,y,z,p), onde p indica se a luz é posicional ou se ela é direcional(está no infinito) Defina a luz: glLightfv(GL_LIGHT1, GL_DIFFUSE, Luz); e a posição: glLightfv(GL_LIGHT1, GL_POSITION,posicao); Para que serve? Como Fazer? Exemplos Variáveis Luzes CallBack? Representação WinMain?

51 Silicon Graphics OpenGL - Iluminação
Onde definir? As luzes devem ser definidas fora do escopo glBegin(...) e glEnd(), pois os comandos glEnable e glLight(s)[v]não são permitidos dentro desse escopo. A OpenGL permite até 8 luzes definidas no ambiente. A luz especular é definida de maneira idêntica à ambiente, com a exceção de que a variável do modelo de iluminação é GL_SPECULAR Leitura Recomendada: OpenGL RedBook para maiores informações sobre Iluminação. Para que serve? Como Fazer? Exemplos Variáveis Luzes CallBack? Representação WinMain?

52 Silicon Graphics OpenGL - Iluminação
As declarações de iluminação serão, em nosso exemplo, realizadas dentro do procedimento MEFInit, responsável por ajustar a máquina de estados da OpenGL no estado inicial para os procedimentos de desenho. Considerando que os vetores de definição das cores da luz e do posicionamento da luz difusa já estão definidos declara-se os seguintes comandos: glLightfv(GL_LIGHTn, GL_AMBIENT,Luz1) glLightfv(GL_LIGHTn, GL_DIFFUSE,Luz2) glLightfv(GL_LIGHTn, GL_POSITION,pos) E habilita-se a luz GL_LIGHTn com os comandos: glEnable(GL_LIGHTn) e glEnable(GL_LIGHTING) Como Fazer? Para que serve? Variáveis Exemplos CallBack? Luzes WinMain? Representação Como Fazer?

53 Silicon Graphics OpenGL - Apresentação
Materiais Como Fazer? Para que serve? Variáveis Exemplos CallBack? Luzes WinMain? Representação Como Fazer?

54 Silicon Graphics OpenGL - Materiais
Estruturas que indicam como o objeto refletirá a luz O quanto de cada componente da luz é refletido, como a luz será refletida e Luz emitida (pelo próprio objeto) Como Fazer? O que são? Variáveis CallBack? WinMain?

55 Silicon Graphics OpenGL - Materiais
Idêntico ao definido pela física óptica (exceto a refração) Objetos sob luz branca refletirão a componente do material atribuído ao objeto Cada tipo de iluminação tem uma cor a ser refletida A intensidade da cor pode ser modificada pelo coeficiente de reflexão especular O que são? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

56 Silicon Graphics OpenGL - Materiais
Cor de reflexão difusa do material=(Rm,Gm,Bm)=(255,0,0) Cor da luz emitida pela fonte de luz=(Re,Ge,Be)=(0,255,255) Cor da luz refletida (pela iluminação difusa) (Id) = (min(Rm,Re),min(Gm,Ge),min(Bm,Be))= (0,0,0) Cor do objeto a ser desenhado na tela=Ia+Id+Ie Cor do pixel a ser desenhado na tela=Ia+Id+Is O que são? Como Fazer? Funcionamento Variáveis CallBack? WinMain? q q

57 Silicon Graphics OpenGL - Materiais
O material é definido pelas cores de reflexão ambiente, difusa, especular e de emissão e pelo coeficiente de brilho (Shininess). As cores são definidas através de um vetor quadridimensional representando os coeficientes R,G,B e alfa da cor (assim como é feito para as luzes). O coeficiente de Brilho é um valor escalar e indica o expoente especular do material. O que são? Como Fazer? Funcionamento Variáveis Representação CallBack? WinMain?

58 Silicon Graphics OpenGL - Materiais
Os materiais são definidos internamente no OpenGL através do comando: glMaterial(s)[v](FRONT,Modelo,Dado), onde: Modelo=GL_AMBIENT,GL_DIFFUSE, GL_SPECULAR, GL_EMISSION ou GL_SHININESS e Dado é o dado de definição de cor do material ou o coeficiente exponencial para a reflexão especular (expoente especular). O que são? Como Fazer? Funcionamento Variáveis Representação CallBack? Como Fazer? WinMain?

59 Silicon Graphics OpenGL - Materiais
Glfloat mat=(1.0f,0.0f,0.0f,1.0f); GLfloat bri=50.0f; ... (Rotina de desenho) glPushMatrix() glMaterialfv(FRONT,GL_AMBIENT,mat); glMaterialfv(FRONT,GL_DIFFUSE,mat); glMaterialfv(FRONT,GL_SPECULAR,mat); glMaterialfv(FRONT,GL_EMISSION,mat); glMaterialfv(FRONT,GL_AMBIENT,bri); glBegin;... glEnd();}... O que são? Como Fazer? Funcionamento Variáveis Representação CallBack? Como Fazer? WinMain?

60 Silicon Graphics OpenGL - Transparência
Transparência (Blending) O que são? Funcionamento Representação Como Fazer?

61 Silicon Graphics OpenGL - Transparência
Método para deixar objetos transparentes; Combina cores de objetos que já estão no buffer de profundidade com os objetos (transparentes) desenhados; Cria efeitos visuais avançados; Não funciona para partes de objetos, apenas para objetos inteiros; Como Fazer? Transparencia? Variáveis CallBack? WinMain?

62 Silicon Graphics OpenGL - Transparência
Utiliza o valor Alfa da cor do objeto para cálculo da transparência; Ocorre após a rasterização da cena, mas antes da plotagem dos pixels; O valor Alfa pode ser usado no alpha test para aceitar ou rejeitar um fragmento baseado no valor alfa; Sem o blending os objetos são desenhados considerando Opacidade plena. Com o Blending controla-se o quanto da cor existente deve ser combinada com o novo fragmento. Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

63 Silicon Graphics OpenGL - Transparência
Pensamento natural: RGB=cor, Alfa=opacidade Visão se um objeto através de um vidro verde: Parte verde, proveniente do vidro, Parte outra cor, proveniente de objetos A porcentagem varia dependendo da propriedade de transmissão do vidro Se o vidro transmite 80% da luz que incide nele (opacidade de 20%), então 20% será verde (cor do vidro) e 80% será a cor do objeto que se vê através do vidro. Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

64 Silicon Graphics OpenGL - Transparência
Resultado final depende dos fatores Fonte e Destino; Durante o blending: valores do fragmento em processo (fonte) e valores de cor do pixel armazenado (destino) São combinados através de um processo de 2 estágios. Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

65 Silicon Graphics OpenGL - Transparência
Especifica-se como computar os fatores Fonte e Destino; Tais fatores são quádruplas RGBA que são multiplicados por cada componente RGBA da fonte e do destino, respectivamente; Os resultados são, então, adicionados. Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

66 Silicon Graphics OpenGL - Transparência
Matematicamente: Sejam os fatores de blending da fonte e do destino: (Sr,Sg,Sb,Sa) e (Dr,Dg,Db,Da) respectivamente; Seja os valores RGBA da fonte e destino: (Rs,Gs,Bs,As) e (Rd,Gd,Bd,Ad) respectivamente; O valor RGBA final será: (RsSr+RdDr,GdDg+GsSg,BsSb+BdDb,AsSa+AdDa) Cada componente dessa quádrupla será limitado ao intervalo [0,1] e modificado se necessário. Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

67 Silicon Graphics OpenGL - Transparência
Gerando os Fatores Fonte e Destino: através da função glBlendFunc(Glenum sf,Glenum df) Glenum é um vetor com quatro elementos (R,G,B,A). OpenGL define alguns fatores padrão: GL_ZERO=(0,0,0,0) GL_ONE=(1,1,1,1) GL_DST_COLOR=cor do píxel destino GL_SRC_COLOR=Cor do pixel fonte GL_ONE_MINUS_DST_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

68 Silicon Graphics OpenGL - Transparência
Cada fator tem um Fator relevante a ser usado na função glBlendFunc; Nem todas as combinações dos fatores fonte e destino fazem sentido; Alguns usos práticos para os fatores serão vistos no slide seguinte; A tabela a seguir demonstra os fatores relevantes para cada variável definida no slide anterior: Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

69 Silicon Graphics OpenGL - Transparência
Desenha figura composta metade de um objeto, metade de outro: Source=GL_ONE, desenhe a imagem fonte; Source e Destiny=GL_SRC_ALPHA e Desenhe a 2a. Imagem com alfa=0.5. Desenhar 3 imagens igualmente: source=GL_ONE, desenhe, e as seguintes proceda da mesma maneira que anteriormente, com alfa= Transparencia? Como Fazer? Funcionamento Variáveis CallBack? WinMain?

70 Silicon Graphics OpenGL - Transparência
Habilite o BLEND em qualquer parte do programa (exceto no escopo do glBegin() e glEnd()) com o comando glEnable(GL_BLEND); Desabilite a máscara de profundidade: glDepthMask(GL_FALSE); Defina como ocorrerá o blend com a função glBlendFunc(srcfctr,dstfctr) Desenhe; Habilite a máscara de profundidade e desabilite o blend. Transparencia? Como Fazer? Funcionamento Variáveis Como Fazer? CallBack? WinMain?

71 Silicon Graphics OpenGL - Antialiasing
Como Fazer? Transparencia? Funcionamento Como Fazer?

72 Silicon Graphics OpenGL - Antialiasing
Método para eliminar o efeito “escada” de linhas com inclinação no intervalo |(0o,90o)| Ocorre devido aos pixels serem um método discreto de desenho. Como Fazer? O que é? Variáveis CallBack? WinMain?

73 Silicon Graphics OpenGL - Antialiasing
Calcula-se qual a porcentagem da reta contida no pixel (p) Realiza um Blending com a cor do pixel de acordo com a porcentagem calculada. Como Fazer? O que é? Funcionamento

74 Silicon Graphics OpenGL - Antialiasing
Em OpenGL pode-se implementar um algoritmo que faça o antialiasing utilizando Blending ou Habilitar a Máquina de Estados para realizar o trabalho automaticamente. Usa-se os comandos: void glHint(GLenum target, GLenum hint); e glEnable(GL_POINT_SMOOTH) ou glEnable(GL_LINE_SMOOTH) Onde os parâmetros target e hint são: Como Fazer? O que é? Funcionamento Como Fazer?

75 Silicon Graphics OpenGL - Antialiasing
GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT, GL_POLYGON_SMOOTH_HINT Especifica a qualidade de amostragem de pontos, linhas ou pol~igonos desejada durante a operação de antialiasing; GL_FOG_HINT Especifica se os cálculos para geração de neblina serão feitos por pixel (GL_NICEST) ou por vértice (GL_FASTEST); Como Fazer? O que é? Funcionamento Como Fazer?

76 Silicon Graphics OpenGL - Antialiasing
GL_PERSPECTIVE_CORRECTION_HINT Especifica a qualidade de cores e de interpolação de coordenadas de textura desejadas; Como Fazer? O que é? Funcionamento Como Fazer?

77 Silicon Graphics OpenGL - Neblina
Como Fazer? O que é? Funcionamento Como Fazer?

78 Silicon Graphics OpenGL - Neblina
Um método para fazer objetos desaparecerem de acordo aom a distância em uma dada direção; Produz cenas mais realistas; é um termo geral usado para descrever efeitos atmosféricos similares; pode ser usado para simular neblina, fumaça ou poluição; É muito utilizado em aplicações de simulação visual, onde a visibilidade limitada precisa ser aproximada. O que é? Como Fazer?

79 Silicon Graphics OpenGL - Neblina
Combina a cor da neblina com a cor do objeto a ser desenhado de acordo com o fator de blending da neblina; Esse fator, f, é computado por uma das 3 equações a serem mostradas e limitado ao intervalo [0,1]; Como Fazer? O que é? Funcionamento

80 Silicon Graphics OpenGL - Neblina
Onde z é a distância entre o ponto de visão e o centro do fragmento; Os valores para density, start e end são especificados no comando glFog(GLenum pname, TIPO param); caso pname seja GL_FOG_MODE, a variável param deve ser GL_EXP, GL_EXP2 ou GL_LINEAR; se pname for GL_FOG_DENSITY, GL_FOG_START ou GL_FOG_END, param é (ou aponta para) o valor de density, start ou end na equação; O que é? Funcionamento

81 Silicon Graphics OpenGL - Neblina
Os valores padrão são 1,0 e 1, respectivamente; Se pname for GL_FOG_COLOR, então param é (ou aponta para) o conjunto de valores que especifica a cor da neblina; A figura a seguir demonstra o gráfico das funções de visibilidade GL_EXP, GL_EXP2 e GL_LINEAR: Como Fazer? O que é? Funcionamento

82 Silicon Graphics OpenGL - Neblina
Primeiramente habilita-se a máquina de estados a gerar a neblina com glEnable(GL_FOG); Ajusta o modo da neblina com glFog(s): glFogi(GL_FOG_MODE,GL_EXP); aplica a cor da neblina com glFog(s)[v]: glFogfv(GL_FOG_COLOR,*cor); determina a densidade da neblina: glFogf(GL_FOG_DENSITY,0.35f); determina como será o cálculo da neblina: glHint(GL_FOG_HINT,GL_DONT_CARE) Como Fazer? O que é? Funcionamento Como Fazer?

83 Silicon Graphics OpenGL - Textura
Mapeamento de Textura Como Fazer? O que é? Funcionamento Como Fazer?

84 Silicon Graphics OpenGL - Textura
Método para se aplicar uma imagem a um objeto geométrico; Reduz complexidade de construção de cenas; Um muro pode ser formado com diversas primitivas (paralelepípedos) representando os tijolos ou Com um único paralelepípedo e uma textura de Tijolos aplicada a ele. O que é?

85 Silicon Graphics OpenGL - Textura
Especifica-se uma imagem ao OpenGL; Imagem=Matriz bidimensional com valores de cores (pixels); Indica como a imagem será aplicada a cada pixel renderizado; Habilita mapeamento de Textura e Desenha a cena especificando ambas as coordenadas geométricas e de textura. O que é? Funcionamento

86 Silicon Graphics OpenGL - Textura
OpenGL não possui métodos para carregar imagens, deve ser implementado pelo programador; Através de MipMapping especifica-se uma única textura em muitas resoluções diferentes evitando aplicar uma textura com resolução completa a um fragmento distante do ponto de visão (aumentando performance) O que é? Funcionamento Especificando

87 Silicon Graphics OpenGL - Textura
Existem 2 comandos para especificar a textura com os dados carregados na memória: glTexImage2D, para texturas bidimensionais (imagens) glTexImage1D, para texturas unidimensionais (funções) O que é? Funcionamento Especificando

88 Silicon Graphics OpenGL - Textura
glTexImage2D: Parâmetros: GLenum target: reservado para uso futuro; Glint nível: usado se for especificado múltiplas resoluções para cálculo de MipMapping (LOD) Glint Componentes: inteiro de 1 a 4 indicando qual dos componentes (R,G,B ou A) será usado para modulação ou transparência; GLsizei width, GLsizei height: Respectivamente: :Largura e altura da imagem; Glint Borda: Indica a largura da borda (geralmente zero) GLenum Formato, GLenum Tipo: Descrevem o formato e o tipo de dados dos dados da imagem da textura O que é? Funcionamento Especificando

89 Silicon Graphics OpenGL - Textura
glTexImage2D: Parâmetros: GLvoid *pixels: Contêm os dados da imagem- textura, que descreve a imagem em si. Supondo que carregamos uma imagem na memória e que seus pixels estão definidos no formato RGBA, especificamos uma textura da seguinte forma: glTexImage2D(GL_TEXTURE_2D,0,3,32,32,0, GL_RGBA,GL_UNSIGNED_BYTE,&imagem) O que é? Funcionamento Especificando

90 Silicon Graphics OpenGL - Textura
Controle de Filtros: Após especificarmos a imagem precisamos especificar como ela será tratada, pois as imagens são retangulares e podem ser aplicadas a objetos não retangulares; Existem 2 classes de filtros para texturas: Filtro de Magnificação, caso a porção da imagem mapeada seja maior que a porção definida e Filtro de Minificação, caso a porção da imagem mapeada seja menor que a porção definida. O que é? Funcionamento Especificando

91 Silicon Graphics OpenGL - Textura
GL_TEXTURE_MAG_FILTER GL_NEAREST GL_LINEAR GL_TEXTURE_MIN_FILTER GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR Controle de Filtros: O Comando OpenGL para a especificação dos filtros é: glTexParameteri(GL_Texture2D,filtro,procedimento), onde Filtro é GL_TEXTURE_MAG_FILTER ou GL_TEXTURE_MIN_FILTER E procedimento é dado pela tabela: O que é? Funcionamento Especificando

92 Silicon Graphics OpenGL - Textura
Controle de Filtros: Métodos: GL_NEAREST: Utiliza o texel cujas coordenadas se aproxima do centro do Pixel, pode causar aliasing; GL_LINEAR: Utiliza uma função linear para combinar os texels envolvidos no processo, produz resultados visivelmente melhores; GL_NEAREST_MIPMAP_NEAREST: Procura o MipMap cujo texel cujas coordenadas se aproximam do centro do Pixel de maneira mais eficiente; GL_NEAREST_MIPMAP_LINEAR: Procura o MipMap cujo texel cujas coordenadas se aproximam do centro do Pixel de maneira mais eficiente e calcula a contribuição dos outros texels para o cálculo da cor a ser aplicada no pixel; O que é? Funcionamento Especificando

93 Silicon Graphics OpenGL - Textura
Controle de Filtros: Métodos: GL_LINEAR_MIPMAP_NEAREST: Procura o MipMap cujo texel cujas coordenadas se aproximam do centro do Pixel de maneira mais eficiente e calcula, de acordo com os outros MipMaps (anterior ou posterior) as contribuições do texel para o pixel; GL_LINEAR_MIPMAP_LINEAR: Procura o MipMap cujo texel cujas coordenadas se aproximam do centro do Pixel de maneira mais eficiente e calcula , de acordo com outros MipMaps (anterior ou posterior) a contribuição dos outros texels vizinhos para o cálculo da cor a ser aplicada no pixel; O que é? Funcionamento Especificando

94 Silicon Graphics OpenGL - Textura
Controle de Filtros: Definindo método de aplicação: A textura é definida através de uma imagem bidimensional com dimensões x e y; Ao se aplicar a textura em um objeto, pode ocorrer que coordenadas de texels estejam fora do limite da imagem; Define-se o comportamento da textura para quando isso ocorre através da função glTexParameter(i,f)[v](target,pname,param), Onde Target deve sempre ser GL_TEXTURE_1D ou GL_TEXTURE_2D; O que é? Funcionamento Especificando

95 Silicon Graphics OpenGL - Textura
Controle de Filtros: glTexParameter(i,f)[v](target,pname,param), : Pname pode ser: GL_TEXTURE_WRAP_S, para o comportamento no eixo S (Largura) ou GL_TEXTURE_WRAP_T, para o comportamento no eixo T (altura); Param é o valor assumido e pode ser: GL_REPEAT (repete a textura) ou GL_CLAMP (Copia a última linha ao longo do resto da textura) O que é? Funcionamento Especificando

96 Silicon Graphics OpenGL - Textura
Existem 3 funções possíveis para computar a cor final do objeto a ser desenhado: Usar a cor da textura como cor final; Modular a cor da textura de acordo com a cor do material do objeto ou Combinar a cor da textura com a cor do fragmento a ser desenhado; O que é? Funcionamento Especificando Como Aplicar?

97 Silicon Graphics OpenGL - Textura
Modulação e Transparência: Especifica como a textura será aplicada à geometria; É obtida através da função glTexEnv(i,f)[v](Target,pname,param) Target deve sempre ser GL_TEXTURE_ENV; Se pname for GL_TEXTURE_ENV_MODE, param pode ser: GL_DECAL: Simplesmente aplica a textura e a cor do pixel será a cor do texel da textura atribuido a ele; GL_MODULATE: Modula a cor da textura de acordo com o material do objeto ou GL_BLEND: Aplica transparência à textura permitindo transparência seletiva na textura. O que é? Funcionamento Especificando Como Aplicar?

98 Silicon Graphics OpenGL - Textura
Para habilitar o mapeamento de textura utiliza-se a função glEnable com um dos dois parâmetros: GL_TEXTURE_1D: para texturas unidimensionais ou GL_TEXTURE_2D: para texturas bidimensionais; O que é? Funcionamento Especificando Como Aplicar? Habilitando

99 Silicon Graphics OpenGL - Textura
Entre o glBegin e glEnd e para cada vértice utiliza-se a função: glTexCoord(1,2)(f,d)[v](dado) para especificar qual coordenada de textura (texel) aplicar àquele vértice. Ou, Deixar a OpenGL calcular as coordenadas automaticamente. (Trabalho para graduação) O que é? Funcionamento Especificando Como Aplicar? Habilitando Desenhando


Carregar ppt "Silicon Graphics OpenGL - Apresentação"

Apresentações semelhantes


Anúncios Google