Informações Principais
     Resumo
     Abstract
     Introdução
     Conclusão
     Download
  
  
  
 
Introdução
 
 
Acadêmico(a): Rodrigo Peter
Título: Protótipo de um Ambiente 3D para Jogos, Utilizando a Engine Crystal Space com Directx e Linguaguem C++
 
Introdução:
Conforme Rio Gráfica (1985), os jogos eletrônicos integram o mundo da computação porque divertem, instruem e desenvolvem. Fascinantes e irresistíveis, simulam situações da vida real ou da imaginação do ser humano. Segundo Cardoso (2000?), depois da era dos videojogos simbólicos (1971 a 1984, onde os limites tecnológicos do hardware prevaleciam sobre a elaboração sugestiva dos neo-artistas), da era dos videojogos clássicos (1984 – 1993), em que se apresentava um equilíbrio entre a capacidade tecnológica e a elaboração sugestiva e da era dos videojogos românticos (1993 - ...), assiste-se agora ao surgimento de uma nova geração de jogos multimídia, a qual implica o desenvolvimento de novas dimensões de análise. Estes novos tipos de jogos, tendem a afirmar-se como algo diferenciado dos modelos anteriores, que pode-se designar como jogos de realidade complexa, ou seja, fruto da aposta na construção de temas e scripts fortes, os quais buscam inspiração nas características da produção cinematográfica. De acordo com Watt (2000), o mercado dos jogos eletrônicos é um mercado em grande ascendência. As possibilidades para os caminhos da evolução dos jogos e do próprio hardware são infinitos. Muitas empresas estão explorando novos caminhos para o uso da tecnologia 3D em aplicações que não somente jogos, mas também no comércio pela web e em plugins para aplicações comerciais, entre outros. Segundo Lamothe (1999), ao implementar um jogo parte-se de um esqueleto que é utilizado pela maioria dos desenvolvedores. Lamothe (1999) subdivide a execução de um jogo em 8 seções: a) Inicialização: aqui se deve alocar memória, alocar recursos, carregar dados de arquivos, assim como a inicialização de um programa normal; b) Entrar no Game loop: início do loop, todas as ações são controladas aqui até a saída do programa; c) Ler entrada do jogador: os comandos executados pelo jogador são verificados para utilização nas seções de Inteligência Artificial e lógica; d) Executar algoritmos de inteligência artificial e lógica do jogo: seção que detém a maior parte do código. A Inteligência Artificial, a Física e a lógica do jogo são executadas nessa parte. Os resultados obtidos são utilizados para se produzir o próximo quadro do jogo; e) Criar o próximo quadro do jogo: os resultados obtidos nos itens “c” e “d” são graficamente criados, para serem exibidos na tela do computador; f) Sincronizar a Imagem: devido à diferença de velocidade entre as máquinas e a complexidade de cada jogo, o objetivo dessa parte é exatamente a sincronização do jogo para que ele seja executado respeitando uma taxa de atualização. Um valor recomendado é 30 quadros por segundo; g) Final do Game Loop: volta-se ao item “b”; h) Terminar o aplicativo: quando o usuário deseja parar de jogar, deve-se liberar todos os recursos utilizados, e voltar ao sistema operacional. Informações adicionais sobre jogos podem ser encontrados em Beltrão (2000). Segundo Sully (1993), um espaço tridimensional é algo fácil de perceber porém, algo difícil para desenhar e projetar. Pelo motivo de um ambiente 3D ser muito complexo, é freqüentemente útil olhar para este ambiente de dois modos diferentes – uma visualização do topo e outra de frente ou de lado. Embora alguns projetistas possam captar e projetar mentalmente em três dimensões ao mesmo tempo, muitos optam em simplificar este espaço em um modo, focalizando o espaço em apenas duas dimensões em um determinado tempo. Quando analisa-se um ambiente em três dimensões, estas dimensões referem-se às suas coordenadas geométricas. Este é um sistema para mensuração de um espaço em 3D pela utilização de três linhas imaginárias, ou axis (eixos). Pode-se imaginar estas três linhas da seguinte maneira: uma percorrendo de norte a sul, outra percorrendo de leste a oeste e a terceira percorrendo verticalmente através da interseção das duas primeiras linhas. Mais informações sobre ambientes em três dimensões como um sistema de mensuração de um espaço, podem ser encontradas em Raitz (2001) e Silva (2000). Existem diferentes conotações de “espaços em 3D” quando fala-se em gráficos 3D: a) Object space (3D space): este sistema de coordenadas é local para um objeto, constituído por um conjunto de polígonos. Para ter várias instâncias de um mesmo objeto em diferentes locais no ambiente, é necessário o espaço de objeto (object space). O espaço de objeto também é o espaço dentro do qual são modelados os objetos; b) World space (3D space): segundo Tremblay (1999?) este sistema de coordenadas é o mais importante. É neste espaço onde todos os objetos são posicionados, onde se faz a computação física, movimentos e detecção de colisão. Também é neste espaço que a iluminação é computada. Deve-se pensar no espaço do mundo (space world) como o ambiente do jogo; c) View space (3D space): este sistema de coordenadas é relativo à câmara. Objetos no world space são transformados para o view space para saber o que será visível na tela. Este espaço também é chamado de espaço do olho (eye space) ou espaço da câmara (camera space); d) Screen space (2D space): O espaço da tela (screen space) é de fato a representação homogênea das coordenadas na tela. Coordenadas não são pixels. O viewport projeta a view space para a screen space, e a origem na screen space é no centro da tela (para projeções em perspectiva). Os espaços são representados utilizando-se a notação de matrizes. Em uma matriz 3x3 têm-se três vetores. Cada vetor define a direção de um eixo. O primeiro vetor é “direita” (eixo X positivo), o segundo vetor é o eixo Y positivo e o terceiro é o eixo Z positivo. Todos os vetores são ortogonais em unidades de tamanho. Segundo O’Neill (1998), todos os dias da vida tende-se a observar elementos em elevação muito mais do que elementos planos (rentes ao solo). Ao olhar fixamente para o fim de um compartimento, encontrar-se-á na maioria das vezes, dependendo do local onde nos encontramos, mais de 80% da área principal no centro do campo de visão é tomado por superfícies verticais, enquanto os planos de solo e teto estão relegados às extremidades superior e inferior do campo de visão. Os elementos verticais disputam uma grande parte na determinação das características de um ambiente. Os principais elementos de um ambiente segundo O’Neill (1998) são: a) paredes; b) aberturas em paredes; c) portais (passagens de um ambiente ao outro); d) janelas; e) solo e teto do ambiente; f) topografia e declives; g) escadarias; h) cantos (esquinas); i) objetos; j) paisagens; k) iluminação e sombra. Os elementos citados e diversos outros podem ser construídos com engines. Segundo Eberly (2001), para a produção e gerenciamento de imagens realísticas nos jogos, são utilizadas as engines. Engines 3D são Application Programmer Interfaces (API´s) para visualização 3D em tempo real. Uma engine para jogos precisa tratar da questão do gerenciamento dos gráficos de cena que forneça uma eficiente renderização, seja um software ou um hardware renderizador. A engine também precisa ter a capacidade de processar objetos complexos e o movimento dos objetos de forma realista. A engine precisa dar suporte à detecção de colisão, superfícies curvas bem como modelos poligonais, animação, plano geométrico dos detalhes, geração de terrenos e distribuição de espaços. Além disso, a engine precisa ser suficientemente abrangente, para dar suporte aos princípios da orientação à objetos. Conforme Crystal Space (2000?a), a engine Crystal Space (CS) é um “kit” de desenvolvimento para jogos 3D com código aberto, escrita na linguagem de programação C++ e está baseada na licença de uso LGPL. O Crystal Space pode ser utilizado para várias tarefas de visualização em 3D. Ela implementa todos os itens citados acima e é multiplataforma. Suporta as bibliotecas gráficas OpenGL, Glide e DirectX. Levando-se em consideração que o CS possui várias classes para componentes 2D e 3D que correspondem à API’s proprietárias, optou-se pela utilização do DirectX para a renderização do ambiente. Segundo LaMothe (2001?), o DirectX foi criado para solucionar um conjunto de problemas que vem crescendo a cada dia, onde os fabricantes de software surgem em todo lugar, criando novas tecnologias como aceleradores 2D/3D, avançados sintetizadores de som e complicados dispositivos de entrada de dados. A API DirectX, tecnicamente é um conjunto de funções da Component Object Model (COM) que implementam um número de interfaces que habilitam a comunicação com a placa de vídeo, placa de som, placa de rede, dispositivos de entrada de dados e algumas utilidades do sistema operacional. Porém, mais do que isso, abre um caminho ao que os programadores tanto desejam, que é a programação de jogos. Tendo em vista os aspectos citados, procurou-se desenvolver um protótipo de um ambiente 3D para jogos, com a inserção de objetos e efeitos simples neste ambiente e visualização destes em primeira pessoa.