Motores
Com certeza, o termo mais conhecido entre qualquer gamer é “engine”, conhecido também,
em português, como motor. Mas o que é um motor? Como, quando e onde são feitos? Como
são usados? O que esperar de cada um deles? Estas são as questões a que, ironicamente,
qualquer gamer imponente, orgulhoso e soberano não saberá responder.
Definir o significado e a utilidade de um motor, para quem não é da área da programação,
não é uma tarefa fácil. Poderiamos dizer que é o pilar sustentador de um jogo, são as
engrenagens que o jogador não pode ver. Porém essa resposta teoricamente explicativa não
esclarece nada.
Vamos começar pela exclusão do conceito: “engines são programas que fazem os jogos”.
Em parte, a afirmação está correta, mas motores não são obrigatoriamente programas ou um monte de aplicativos e ferramentas de auxílio com interface visual e linguagens de scripting
com regras e constantes próprias, como 3D Game Studio, entre outros.
A maior parte dos motores é constituída de código, normalmente armazenados em um
arquivo DLL. Instruções como “desenhe o personagem”, “se o objeto está em uma superfície inclinada, deslize em direção à depressão”, “ilumine a superfície se está apontada para a luz”, “crie o volume da sombra e realize sua extrusão “, então, são chamadas e executadas no jogo.
Motores são desenvolvidos, normalmente, com linguagens de programação de alta performance,
como C++. Os códigos contendo as instruções e rotinas são compilados em DLLs ou LIBs, arquivos binários que armazenam todo o código compilado que é utilizado pelo executável.
Existem também os motores do tipo software, ou framework, oferecendo aplicações com
interface visual ou simples linguagens de programação/scripting para a criação e edição dos mais variados eventos e efeitos.
Encontramos diversas características muito peculiares ao analisarmos os diversificados
tipos de motores. A maioria deles usada apenas em projetos que envolvem programação
de baixo nível, como Half-Life 2, é desenvolvida para executar apenas uma ou poucas tarefas.
Como processar o controle de física e colisão da cena, renderização, animação facial e controle de dispositivos de rede são algumas das funcionalidades que possuem os motores
especializados.
Vamos exemplificar o uso de um elemento técnico de um pequeno motor de tratamento
de personagens animados: para carregar apenas um modelo e renderizar, precisamos de
centenas de linhas de código para abrir o arquivo, ler o que está contido nele, converter para o cachê de vértices do Direct3D e, finalmente, executar a animação. Então, para simplificar esse processo, podemos escrever um simples motor para que possa carregar o arquivo com apenas dois ou três métodos. Consideramos então a classe MD2Loader:
Código:
MD2Loader md2file;
md2file.LoadMD2(“tris.md2”);
md2file.RenderMD2();
Assim, com um comando carregamos o arquivo e com outro o desenhamos. Criar componentes
como este faz com que o resto do desenvolvimento do jogo torne-se mais simples.