Prévia do material em texto
MATEMÁTICA E FÍSICA APLICADA A JOGOS UNIDADE 3 - GEOMETRIA E MECA� NICA 3D Isabel Cristina Siqueira da Silva Introdução A presente unidade trata dos principais conceitos relacionados à base Matemática e Fı́sica dos conteúdos grá�icos e interativos necessários à construção de jogos digitais no espaço 3D. Neste sentido: Você sabe como representar um vértice no espaço 3D, onde, além dos eixos X e Y, passa-se a ter o eixo Z (profundidade)? Considerando a rotação, especi�icamente, quando um objeto 3D está na origem, como ela se dá em torno de cada um dos três eixos? Como você imagina que câmera e projeções são aplicadas para visualização de uma cena 3D em um jogo digital ou aplicação grá�ica? Como conceitos de iluminação, materiais e sombreamento aplicados a objetos 3D deixam a cena mais realı́stica em um jogo digital ou aplicação grá�ica? Esta unidade aborda conceitos que auxiliarão nas respostas a tais questões, envolvendo: modelagem geométrica de objetos 3D, de modo a entender a noção de representação espacial com o uso do eixo Z juntamente com X e Y; transformações geométricas de objetos 3D, trabalhando translação, escala e rotação; câmera e transformações projetivas, diferenciando as caracterı́sticas da projeção paralela ortográ�ica da projeção perspectiva; interação grá�ica com objetos em um cenário 3D e criação de cenas realı́sticas com uso de iluminação, sombreamento, materiais, gravidade e sistema de partı́culas. 3.1 Modelagem Geométrica de Objetos 3D Para a representação computacional de um objeto devemos, inicialmente, de�inir a descrição geométrica (forma e posição) e os seus atributos visuais (cor, transparência, material, etc.). A descrição geométrica será realizada em relação à dimensionalidade do objeto e, nesta seção, serão abordados os aspectos da representação tridimensional (3D). Além disso, também é necessário de�inir em que sistema de coordenadas o objeto será descrito, de modo a obter uma referência para a descrição geométrica do objeto dentro da área de trabalho. Tal sistema recebe a denominação de sistema de referência do universo (SRU). As de�inições de objetos, no SRU, se dão em relação ao sistema de coordenadas cartesianas (sistema cartesiano), o qual é formado, no espaço 3D, pelos eixos x, y e z. 3.1.1 Incluindo a Terceira Dimensão Um objeto 3D é de�inido em função de suas coordenadas x, y e z. Para a localização de um ponto no espaço 3D, devemos localizá-lo, primeiramente, a partir de duas de suas coordenadas no plano correspondente (xy, xz ou yz). A seguir, projeta-se a terceira coordenada no espaço como exempli�icado na �igura a seguir (ANGEL, 2003; SILVA, 2007). Figura 1 - Representação 3D de um objeto. Fonte: Elaborado pelo autor, 2019. O quadro a seguir apresenta um exemplo de código, em OpenGL, para o desenho de um tetraedro similar ao da �igura anterior. Figura 2 - Exemplo da localização de um ponto no espaço 3D: (a) a partir do plano xy; (b) a partir do plano xz; (c) a partir do plano yz. Fonte: Elaborado pelo autor, 2019. Na �igura a seguir pode ser observada a imagem resultante do código do quadro anterior. Note, no entanto, que foram utilizadas duas rotações, uma de -30º sobre o eixo x e outra de 45º sobre o eixo y. Tais rotações, no espaço 3D, serão discutidas aqui. Esta representação pode se dar através de diferentes formas, como: aramada (wireframe), facetada, por enumeração da ocupação espacial, por decomposição do espaço em octrees ou quadtrees, por partição binária do espaço, por representação implı́cita (WATT, 2000). Figura 3 - Exemplo de código OpenGL para desenho de um tetraedro no espaço 3D. Fonte: Elaborado pelo autor, 2019. Figura 4 - Imagem gerada pelo código do quadro anterior. Fonte: Elaborado pelo autor, 2019. Na �igura a seguir são apresentados exemplos das representações aramadas realizadas através das informações de vértices e arestas que formam o objeto; e facetadas a partir dos vértices e faces que compõem o objeto. A subseção a seguir introduz o uso de primitivas geométricas na biblioteca grá�ica OpenGL. VAMOS PRATICAR? 1) Modele, no espaço 3D, um cubo centrado na origem de lado 1. 2) (OpenGL) A partir do cubo modelado no exercıćio 1, de�ina um cód usando as funções da OpenGL para desenhar o mesmo face a face ( primitiva “GL_QUADS”). Figura 5 - Representação 3D: (a) aramada; (b) facetada. Fonte: Elaborado pelo autor, 2019. 3.1.2 Usando Primitivas 3D Existem, também, diferentes técnicas de modelagem geométrica de objetos, tais como: instanciamento de primitivas, combinação de objetos, geometria sólida construtiva, modelagem por varredura ou sweep (rotacional ou extrusão) entre outros. Como este material possui caráter básico, recomendamos o aprofundamento de tais assuntos através de livros clássicos da Computação Grá�ica. Para o desenho de objetos 3D em OpenGL pode-se fazer uso das primitivas OpenGL de�inindo a terceira coordenada z (ANGEL, 2003; COHEN & MANSSOUR, 2006). Além da possibilidade do uso das primitivas geométricas básicas no espaço 3D, o OpenGL disponibiliza funções para a criação de objetos 3D em modo aramado e sólido. Os objetos 3D listados são gerados na origem do Sistema de Referência do Universo (SRU). Assim, deve-se aplicar transformações geométricas sobre os mesmos a �im de posicioná-los, alterar seu tamanho ou rotacioná-los. Tais transformações serão abordadas na próxima seção. CASO A OpenGL (Open Graphics Library), como seu nome introduz, é uma biblioteca grá�ica (não uma game engine!). Ela foi apresentada pela empresa Silicon Graphics Inc. (SGI), em 1992, e usada em áreas que exigiam visualização complexa de imagens 2D e 3D, como CAD, realidade virtual, simuladores de voo, visualização cientı�́ica entre outras. Além destas, a OpenGL também começou a ser empregada na renderização de grá�icos em videogames. Em um esforço da SGI para obter mais fornecedores para produzir software que seria executado em suas estações de trabalho, esta juntamente com outras empresas (Digital Equipment Corporation, IBM, Intel e Microsoft) formaram o OpenGL Architecture Review Board (ARB), lançando, em 1 de julho de 1992, a versão 1.0 da especi�icação OpenGL. Em 2006, a SGI transferiu o controle padrão OpenGL do ARB para um novo grupo de trabalho no The Khronos Group. A OpenGL é gratuita e independente de plataforma, sendo a API de grá�icos 2D e 3D mais amplamente utilizada, suportada e melhor documentada. O quadro a seguir traz um exemplo de código para desenho de objetos 3D em OpenGL. Tabela 1 - Objetos 3D em OpenGL. Fonte: Elaborado pelo autor, 2019. Para que objetos 3D �iquem mais realı́sticos, é necessário que alguns atributos sejam de�inidos de modo a fornecer maior realismo à cena: iluminação, sombreamento, propriedade dos materiais, textura, de�inições de câmera sintética e projeções entre outros. Figura 6 - Exemplo de código para desenho de objetos 3D em OpenGL. Fonte: Elaborado pelo autor, 2019. 3.2 Transformações Geométricas 3D Assim como no espaço 2D, as operações de translação, escala e rotação podem ser realizadas no espaço 3D a partir da de�inição da coordenada z. Em jogos digitais elas são a forma pela qual se implementa o movimento dos objetos, sua ampliação, redução, espelhamento além de rotação. Para tanto, tem-se que aplicar as respectivas equações para o cálculo das transformações geométricas. Em ferramentas 3D de modelagem e game engines, estes cálculos costumam estar “escondidos” do usuário, que os invoca a partir de comandos simples. Porém, estas apresentam limitações e, por vezes, se faz necessário que o programador de jogos entenda as transformações geométricas a ponto de ser capaz de estendê-las a �im de contornar tais limitações. 3.2.1 Translação, Rotação e Escala Para efetuar a translação de um vértice para uma posição no espaço 3D, devemos adicionar às suas coordenadaso fator de translação desejado (ver Equação 1) (ANTON, 2000). Equação 1 A �igura a seguir traz um exemplo de aplicação da translação sobre os vértices de um cubo. Já a transformação de escala sobre as coordenadas x, y e z de um objeto é aplicada segundo a Equação 2. Equação 2 A �igura a seguir traz um exemplo de aplicação da escala sobre os vértices de um cubo. Figura 7 - Exemplo de translação 3D. Fonte: Elaborado pelo autor, 2019. A transformação de rotação de um vértice V para uma posição V’ deve ser realizada em relação a um dos três eixos: x, y ou z. As Equações 3, 4 e 5 correspondem, respectivamente, às rotações sobre os eixos z, x e y. Equação 3 Equação 4 Equação 5 A �igura a seguir apresenta exemplos da aplicação de uma rotação de 45º sobre um cubo em relação aos três eixos x, y e z. No entanto, cabe ressaltar que a rotação pode ser realizada, ao mesmo tempo, em mais de um eixo. Figura 8 - Exemplo de escala 3D. Fonte: Elaborado pelo autor, 2019. Para sabermos o sentido positivo de rotação sobre um determinado eixo, utilizamos a regra da mão direita como nos exemplos da �igura a seguir (ANTON, 2000; SILVA, 2007). Figura 9 - Exemplo de rotação em torno dos eixos x, y e z. Fonte: Elaborado pelo autor, 2019. Figura 10 - Exemplo da aplicação da regra da mão direita. Fonte: Elaborado pelo autor, 2019. Esta regra prega que é preciso coincidir o polegar da mão direita com a direção do eixo tal como nos exemplos da �igura anterior. 3.2.2 Representação Matricial 3D A exemplo do espaço 2D, transformações geométricas no espaço 3D também podem ser representadas através multiplicação matricial. De modo a exempli�icar tal conceito, as Equações 6 e 7 apresentam, respectivamente, as matrizes canônicas de translação e escala no espaço 3D. Na matriz de translação, representam os fatores de translação, enquanto representam os fatores de escala na matriz correspondente (ANTON, 2000). Equação 6 Equação 7 Já para aplicação da rotação, três matrizes devem ser de�inidas, cada qual responsável pela rotação em torno de um dos eixos – x, y e z. As Equações 8, 9 e 10 trazem, respectivamente, estas matrizes canônicas de rotação (ANTON, 2000). VOCÊ SABIA? Como na detecção de colisão 3D, os cálculos baseados em bounding boxes constituem o algoritmo mais rápido para determinar se as duas entidades do jogo estão sobrepostas ou não. Isso consiste em agrupar as entidades do jogo em uma caixa não rotacionada (alinhada ao eixo) e veri�icar as posições dessas caixas no espaço de coordenadas 3D para ver se elas estão sobrepostas. Equação 8 Equação 9 Equação 10 No espaço 3D, em OpenGL utiliza-se as mesmas funções “glTranslatef”, “glRotatef” e “glScalef”. Devemos, no entanto, considerar o parâmetro correspondente ao eixo z de modo a trabalhar com as três dimensões, de modo a permitir as operações ilustradas nas Figuras 7, 8 e 9. 3.3 Câmera e Transformações Projetivas No espaço 3D, a geração de uma imagem simula o uso de uma câmera fotográ�ica, a chamada câmera sintética. Para tanto, a de�inição de alguns aspectos é importante, tal como: o posicionamento da câmera, a orientação da câmera, o tipo de projeção e a região do SRU a ser exibida. Quanto aos tipos de projeção, podemos trabalhar com dois principais: projeção paralela ortográ�ica e projeção perspectiva. Enquanto na projeção paralela ortográ�ica, as projetantes são paralelas e encontram-se apenas no in�inito, na projeção perspectiva, elas convergem para um único ponto pelo menos. Por �im, além de de�inir projeções e parâmetros de câmera, tem-se que de�inir os planos de corte, que delimitam a partir de onde a câmera “enxerga” e até onde os elementos da cena são visı́veis, comumente referenciados por “near” e “far”. 3.3.1 Câmera Para a geração da imagem, devemos de�inir uma câmera (observador) na cena, de modo a permitir a sua visualização de diferentes posições de no espaço 3D (SILVA, 2007). Como a câmera “olha” para a cena, seu sistema de referência de câmera (SRC) está orientado para a origem do SRU. Por default, a câmera está posicionada na origem do SRU, orientada para o eixo do mesmo (ver �igura a seguir). Costuma-se representar o SRU pela regra da "mão direita" enquanto o SRC pela regra da "mão esquerda"; ambos seguem a seguinte convenção: polegar , indicador e dedo médio , com vemos na �igura a seguir. Figura 11 - Orientação do SRC. Fonte: Elaborado pelo autor, 2019. Ao de�inir uma câmera em uma cena 3D, três atributos principais devem ser especi�icados: sua posição, seu alvo (ponto no SRU para o qual está voltada) e a vertical da câmera (eixo y do SRC). Estes atributos podem ser observados na próxima �igura. A vertical da câmera ( ) diz respeito a sua rotação em relação e ao alvo, no SRU, e determina o sentido do plano XY de projeção do SRC onde a imagem é projetada (similar à obtenção de uma foto no �ilme fotográ�ico). 3.3.2 Projeções Figura 12 - Regras da “mão esquerda” e da “mão direita”. Fonte: Elaborado pelo autor, 2019. Figura 13 - Atributos da câmera sintética. Fonte: Elaborado pelo autor, 2019. Para a visualização de um objeto, devemos projetar suas coordenadas sobre o plano de projeção onde será gerada a imagem. Dentre os tipos de projeções existentes, destacam-se duas: projeção paralela ortográ�ica e projeção perspectiva. A projeção paralela ortográ�ica (ou somente projeção ortográ�ica) caracteriza-se pelas projetantes, responsáveis pela geração da imagem, serem paralelas entre si enquanto as projetantes da projeção perspectiva convergem para o observador, como vemos na �igura a seguir (SILVA, 2007). Na projeção ortográ�ica, os objetos são exibidos com dimensões tal como especi�icadas, sem distorções. Já os objetos exibidos em projeção perspectiva parecem mais reais, pois objetos mais próximos do observador são exibidos em tamanho maior enquanto os objetos mais afastados aparecem menores na cena. Além da câmera e da projeção, a imagem �inal ainda depende da de�inição dos planos de recorte responsáveis por delimitar a área visı́vel do universo que será mapeada para a imagem. Em OpenGL é possı́vel gerar a imagem apenas com a de�inição das projeções, sem especi�icar explicitamente a câmera. Neste caso, assume- se que ela está posicionada sobre o eixo z do SRU e orientada para a origem do mesmo. A biblioteca disponibiliza funções para a projeção ortográ�ica e para a projeção perspectiva (ANGEL, 2003; HILL JR., 2001). A de�inição da projeção ortográ�ica é realizada através da função “glOrtho”, a qual recebe os parâmetros xmin, xmax, ymin, ymax, perto e longe relativos aos planos de recorte. A exemplo da função de recorte 2D, as funções de projeção devem ser de�inidas após a chamada das funções “glMatrixMode(GL_PROJECTION)” e “glLoadIdentity”. Os parâmetros perto e longe correspondem à posição de planos em profundidade ao longo do eixo z do SRC; são distâncias relativas à câmera em direção ao alvo. A projeção perspectiva, em OpenGL, pode ser de�inida de duas formas diferentes através das funções “glFrustum” e “gluPerspective”. A especi�icação da função "glFrustum" é similar à “glOrtho”, uma vez que utiliza os mesmos parâmetros. Já a de�inição da projeção perspectiva através da função “gluPerspective” requer a de�inição de quatro parâmetros apenas: ângulo, aspecto, perto e longe. O ângulo corresponde ao ângulo de abertura que dará os limites em x e y para o recorte da região visı́vel da cena e o parâmetro aspecto faz relação ao aspecto de abertura de tal ângulo (largura e altura da imagem em relação à ). Os parâmetros perto e longe têm a mesma função que nas funções “glOrtho” e “glFrustum”. Figura 14 - Geração da imagem por projeção paralela ortográ�ica e por projeção perspectiva. Fonte: Elaborado pelo autor, 2019. Por �im, para especi�icar uma câmera na cena, devemosutilizar a função “gluLookAt” com os parâmetros de posição, alvo e vertical da câmera. No exemplo do quadro a seguir, posx, posy e posz representam as coordenadas de posição; alvox, alvoy e alvoz representam as coordenadas do alvo; e vertx, verty e vertz correspondem às coordenadas da vertical da câmera. VOCÊ QUER LER? “Physics for Game Developers: Science, math, and code for realistic effects” livro de David M (https://www.amazon.com/David-M- Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1). (https://www.amazon.com/David-M- Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1) Bourg (https://www.amazon.com/David-M- Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1) e Bryan Bywalec (https://www.amazon.com/Bryan- Bywalec/e/B00C557VJQ/ref=dp_byline_cont_book_2), da editora O'Reilly Media, apresenta princıṕios de Fıśica aplicáveis ao desenvolvimento de jogos. Os autores discutem problemas do mundo real, como o movimento de barcos, aviões, carros e bolas esportivas (Bourg (https://www.amazon.com/David-M- Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1) e Bywalec (https://www.amazon.com/Bryan- Bywalec/e/B00C557VJQ/ref=dp_byline_cont_book_2), 2013). Figura 15 - De�inição da câmera através do uso da “gluLookAt". Fonte: Elaborado pelo autor, 2019. https://www.amazon.com/David-M-Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1 https://www.amazon.com/David-M-Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1 https://www.amazon.com/David-M-Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1 https://www.amazon.com/Bryan-Bywalec/e/B00C557VJQ/ref=dp_byline_cont_book_2 https://www.amazon.com/David-M-Bourg/e/B001H6WWWK/ref=dp_byline_cont_book_1 https://www.amazon.com/Bryan-Bywalec/e/B00C557VJQ/ref=dp_byline_cont_book_2 Note que a chamada da função “gluLookAt” deve ocorrer após as chamadas das funções “glMatrixMode(GL_MODELVIEW)” e “glLoadIdentity”, tal como as funções relativas às transformações geométricas e após a de�inição da projeção. 3.4 Cenas Realísticas Imagens e animações geradas gra�icamente apresentam maior grau de realismo a partir da disponibilização de funções ligadas a modelos de iluminação, de sombreamento, de propriedade dos materiais entre outros. As imagens apresentadas na �igura a seguir procuram exempli�icar a importância de determinados aspectos de modo a gerar imagens com maior realismo. Neste tópico não serão apresentados os fundamentos teóricos que embasam o cálculo da iluminação, do sombreamento e das propriedades de re�lexão dos materiais. Assim, recomendamos a leitura de livros clássicos da área da Computação Grá�ica a �im de melhor embasamento em tais assuntos. 3.4.1 Iluminação O conceito de iluminação (ou modelo de re�lexão) para a obtenção do realismo na imagem de uma cena grá�ica é de extrema importância, uma vez que aumenta a percepção da tridimensionalidade dos objetos. O mecanismo de re�lexão de luz de uma superfı́cie depende de vários fatores, como vemos a seguir. Clique nos itens. Adição e habilitação de fontes de luz na cena. Figura 16 - Diferentes possibilidades de geração de uma mesma cena: (a) objetos 3D coloridos; (b) objetos 3D coloridos e com recurso de iluminação e sombreamento; (c) objetos 3D coloridos, com recurso de iluminação e sombreamento e com as propriedades dos materiais de�inidas. Fonte: Elaborado pelo autor, 2019. • • Controle de componentes ambiente, difusa e especular. Posicionamento de fontes de luz. Controle de atenuação de fontes de luz. Cor das fontes de luz. Especi�icação de vetores normais. Re�lexão de luz entre os objetos. Especi�icação de propriedades materiais dos objetos (liso, rugoso, cor etc.). A luz corresponde à porção visı́vel do espectro eletromagnético enquanto a cor é uma sensação provocada pela presença de luz no ambiente (FOLEY, 1990). A percepção humana é responsável pela sensação através de células especializadas da retina (cones e bastonetes). Enquanto os cones são responsáveis pela percepção da cor, os bastonetes são responsáveis pela visão noturna (ARNHEIM, 2016; SILVA, 2007). Assim, fontes de luz cromáticas têm componentes R, G, B (sistema RGB red-green-blue ou vermelho-verde- azul), variando entre , enquanto a luz branca (acromáticas) é representada pelas componentes . Podemos considerar que a iluminação básica de uma cena se dá pela luz ambiente, que corresponde a um valor constante adicional de intensidade de iluminação numa cena. A luz ambiente é caracterizada pela iluminação constante em todos os pontos da cena e por atenuar as diferenças bruscas de iluminação de regiões de acordo com o tipo fontes de luz (pontuais, spot, direcionais). A imagem percebida é, então, formada pela emissão, pela re�lexão e pela transmissão de luz que parte de alguma fonte luminosa, atinge a superfı́cie do objeto e atinge o olho do observador (câmera). Neste sentido, devem ser considerados os modelos de re�lexão de luz dos objetos. Os modelos de re�lexão descrevem como a luz é re�letida pela superfı́cie do objeto em termos de geometria e intensidade (WATT, 2000). Na geometria, considera-se que a direção da re�lexão se relaciona com o ângulo de incidência da luz na superfı́cie; já a intensidade considera que somente parte da energia incidente é re�letida, conforme o tipo de material que forma o objeto e, nesse sentido, por exemplo, há dois tipos principais de re�lexão de luz: difusa e especular. • • • • • • Já a re�lexão especular concentra-se em uma direção e sua intensidade depende da orientação relativa entre luz re�letida e ângulo de visão. Neste modelo de re�lexão, o ângulo de re�lexão da luz sobre um objeto é igual ao ângulo de incidência. Neste sentido, a intensidade de luz re�letida depende do ângulo entre a direção de observação e a direção de re�lexão especular (ARNHEIM, 2016). De um modo geral, a re�lexão especular traduz-se numa região mais clara, com brilho. Já na re�lexão difusa, a rugosidade da superfı́cie diminui a possibilidade de re�lexão da luz incidente numa direção de re�lexão “preferencial”. A luz difusa é uma luz suave, sem a intensidade e sem o brilho da luz especular e re�lete em de todas as direções. Em OpenGL, para obter objetos com tonalização dependendo da iluminação da cena, clique nos números e e veja o que é necessário. Para obter objetos “reativos” à iluminação, devemos fornecer vetores normais às superfı́cies e descrever propriedades materiais dos objetos. Em OpenGL, pode-se habilitar ou desabilitar a iluminação a partir das funções “glEnable(GL_LIGHTING)” e “glDisable(GL_LIGHTING)”. E� possı́vel, também, de�inir até oito fontes de luz a partir da função “glLight(luz, tipo, valor)”, em que “luz” especi�ica uma fonte de luz (8 fontes no total) e pode ser GL_LIGHT0, GL_LIGHT1 até GL_LIGHT7; “tipo” corresponde à propriedade do material (ver tabela a seguir); e “valor” indica o valor da propriedade tipo (ou um vetor de valores). O quadro a seguir exempli�ica um código que faz uso de tais funções. 1 Criar uma fonte de luz. 2 Habilitar a iluminação da cena. 3 Habilitar a fonte de luz e de�inir sua posição. 4 Fornecer informações a respeito dos objetos. Figura 17 - Tipos de luz em OpenGL. Fonte: Elaborado pelo autor, 2019. Os parâmetros , utilizados juntamente com “glLight”, estão relacionados aos valores �loat de�inidos através de um vetor. 3.4.2 Sombreamento O sombreamento está relacionado às estratégias para preenchimento dos pixels no interior de um polı́gono, de acordo com um modelo de iluminação. Em OpenGL, dois tipos de sombreamento são possı́veis: constante (�lat) e Gouraud. O sombreamento constante é usado para exibir objetos facetados com maior velocidade, porém não possui aparência suavizada tal como o Gouraud (FOLEY, 1990). Neste tipo de sombreamento, a cor é calculada sobre um ponto da face a partir de seu vetor normal à superfı́cie e este cálculo é assumido para todos os demais pontos da face. Tal processo é exibido na �igura aseguir. Figura 18 - Exemplo de trecho de código para especi�icação de uma fonte de luz (GL_LIGHT0). Fonte: Elaborado pelo autor, 2019. O sombreamento Gouraud, por sua vez, busca obter suavidade na exibição de objetos com superfı́cies curvas. Este é empregado para obter iluminação contı́nua nas superfı́cies dos triângulos ou quadrados que compõe a malha de um objeto, calculando a iluminação nos cantos de cada triângulo/quadrado e interpolando, linearmente, as cores resultantes de cada pixel coberto pelo triângulo (ver �igura a seguir). Figura 19 - Esquema de cálculo do sombreamento constante (�lat). Fonte: Elaborado pelo autor, 2019. Em OpenGL, o sombreamento é de�inido através da função “glShadeModel” que recebe por parâmetro “GL_FLAT”, para sombreamento constante, ou “GL_SMOOTH”, para o sombreamento Gouraud. 3.4.3 Propriedades dos Materiais Além da iluminação e do sombreamento, as propriedades dos materiais dos objetos também podem ser de�inidas em OpenGL. Quando as propriedades dos materiais são de�inidas, a cena apresenta maior realismo, pois diferentes propriedades de re�lexão dos materiais são tratadas. Assim, ao invés de a�irmar que a esfera da cena da �igura a seguir é vermelha, dizemos que ela é feita de material que re�lete a luz vermelha em maior quantidade (WATT, 2000). Figura 20 - Esquema de cálculo do sombreamento Gouraud. Fonte: Elaborado pelo autor, 2019. Para a de�inição das propriedades dos materiais que constituem os objetos de uma cena, utilizamos a função “glMaterial(face, tipo, valor)”, em que o parâmetro face especi�ica em qual face do objeto as propriedades do material serão especi�icadas - pode ser “GL_FRONT”, “GL_BACK” e “GL_FRONT_AND_BACK”. Os parâmetros tipo e valor são os mesmos passados à função “glLight” (COHEN; MANSSOUR, 2006). O código responsável pela geração da cena exibida na �igura anterior pode ser observado a seguir. Figura 21 - Exemplo de cena com iluminação, sombreamento e propriedade dos materiais. Fonte: Elaborado pelo autor, 2019. Na especi�icação do material apresentada no código do quadro anterior, o parâmetro "GL_SHININESS" especi�ica o aspecto da componente especular do objeto (brilho) e varia de 1 à 128. Quanto menor, maior a área de re�lexão especular do objeto. Ao empregar propriedades de materiais em uma cena OpenGL, devemos incluir a chamada da função “glEnable(GL_COLOR_MATERIAL)”, a qual permite a de�inição de cores para o objeto (HILL JR., 2001). Já as funções “glEnable(GL_DEPTH_TEST)”, “glEnable(GL_NORMALIZE)” e “lClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT)” são responsáveis pelo teste usado para eliminar faces posteriores que não devem ser visualizadas na imagem �inal. 3.4.4 Gravidade e Sistema de Partículas Outros conceitos relacionados à geração de cenas realı́sticas se referem à força da gravidade e à simulação de sistemas de partı́culas (BOURG; BYWALEC, 2013). Figura 22 - Código com exemplo do uso de iluminação, sombreamento e materiais. Fonte: Elaborado pelo autor, 2019. VOCÊ QUER VER? O vıd́eo indexado neste link apresenta um pouco da história da OpenGL e seu papel no desenvolvimento da Computação Grá�ica e Jogos Digitais. Acesse: https://www.youtube.com/watch?v=OExbjBKZtUA (https://www.youtube.com/watch? v=OExbjBKZtUA). https://www.youtube.com/watch?v=OExbjBKZtUA A força da gravidade é calculada em relação à massa de um objeto. Assim, quanto maior o objeto, mais forte a força. Portanto, se a força é escalada de acordo com a massa, a massa é cancelada quando a força é dividida pela massa. Já um sistema de partı́culas é uma coleção de muitas partı́culas minúsculas que, juntas, representam um objeto difuso. VOCÊ O CONHECE? O personagem Mario foi apresentado no jogo “Donkey Cong” como um “jumpman” cuja missão era salvar sua namorada Pauline. Inicialmente, Mario tinha a pro�issão de carpinteiro, porém, após o sucesso do Jogo Mario Bros, no qual o personagem entrava em canos, ele passou a ser considerado encanador. Dentre várias curiosidades sobre a origem do personagem e desenvolvimento dos jogos nos quais atua, a site a seguir traz uma série de apontamentos relevantes sobre a implementação da gravidade no jogo do Super Mario Bros. Acesse: https://hypertextbook.com/facts/2007/mariogravity.shtml (https://hypertextbook.com/facts/2007/mariogravity.shtml). VAMOS PRATICAR? Desa�io 1: Crie um código que simule a gravidade sobre um cubo. Par sempre que o usuário pressionar tecla para cima, o cubo deve dar um sentido de y positivo e retornar para sua posição original. Desa�io 2: Simule uma chuva de esferas que tem inıćio sempre que o pressiona a tecla espaço. https://hypertextbook.com/facts/2007/mariogravity.shtml Assim, durante um perı́odo, as partı́culas são geradas em um sistema, movem-se e morrem. Exemplos de sistemas de partı́culas em jogos digitais são cabelos, chuva, grama, fogo, neblina, entre outros. Síntese Nesta unidade, tivemos a oportunidade de estudar os principais conceitos de Matemática e Fı́sica relacionados a jogos digitais no espaço 3D. Nesta unidade, você teve a oportunidade de: conhecer os conceitos de modelagem geométrica 3D; entender os conceitos de transformações geométricas 3D; compreender câmera e projeções; entender sobre aspectos de cenas realísticas (materiais, iluminação, sombreamento, gravidade e sistemas de partículas). • • • • Bibliografia ANGEL, E. Interactive Computer Graphics: A Top-Down Approach with OpenGL. 3. ed. São Paulo: Addison- Wesley, 2003. ANTON, H.; RORRES, C. Álgebra Linear com Aplicações. 8. ed. São Paulo: Bookman, 2000. ARNHEIM, R. Arte e percepção visual: Uma psicologia da visão criadora (https://www.amazon.com.br/Arte- percep%C3%A7%C3%A3o-visual-psicologia-criadora/dp/8522126003/ref=sr_1_1? adgrpid=63531498407&hvadid=326936684879&hvdev=c&hvlocphy=1001686&hvnetw=g&hvpos=1t1&hvq mt=e&hvrand=5287184770575393815&hvtargid=kwd- 333264134782&hydadcr=5654_10696957&keywords=arte+e+percep%C3%A7%C3%A3o+visual&qid=15692 58307&sr=8-1). São Paulo: Cengage Learning, 2016. BOURG, D. M.; BYWALEC, B. Physics for Game Developers: Science, math, and code for realistic effects. Newton: O'Reilly Media, 2013. CANALTI. COMPUTAÇA� O GRA� FICA — Conceito, Biblioteca OpenGL e Aplicações. Youtube, 21 nov. 2017. Disponı́vel em: https://www.youtube.com/watch?v=OExbjBKZtUA. Acesso em: 26 set. 2019. COHEN, M.; MANSSOUR, I. H. OpenGL: uma abordagem prática e objetiva. São Paulo: Novatec, 2006. FOLEY, J. et al. Computer Graphics – Principles and Practice. São Paulo: Addison-Wesley, 1990. HILL JR., F. S. Computer Graphics using OpenGL (http://www.prenhall.com/hill/). 2. ed. Nova Jersey: Prentice- Hall, 2001. SILVA, I. C. S. Aprendendo computação grá�ica com OpenGL e Blender. Porto Alegre: UniRitter, 2007. THE PHYSICS FACTBOOK. Acceleration Due To Gravity: Super Mario Brothers, [201-]. Disponı́vel em: https://hypertextbook.com/facts/2007/mariogravity.shtml (https://hypertextbook.com/facts/2007/mariogravity.shtml). Acesso em: 26 set. 2019. WATT, A. 3D Computer Graphics. 3. ed. São Paulo: Addison-Wesley, 2000. https://www.amazon.com.br/Arte-percep%C3%A7%C3%A3o-visual-psicologia-criadora/dp/8522126003/ref=sr_1_1?adgrpid=63531498407&hvadid=326936684879&hvdev=c&hvlocphy=1001686&hvnetw=g&hvpos=1t1&hvqmt=e&hvrand=5287184770575393815&hvtargid=kwd-333264134782&hydadcr=5654_10696957&keywords=arte+e+percep%C3%A7%C3%A3o+visual&qid=1569258307&sr=8-1 http://www.prenhall.com/hill/ https://hypertextbook.com/facts/2007/mariogravity.shtml