Transformações e processadores: trabalho, trabalho, trabalho

A observação do número de bits de informação necessários na confecção de uma tela nos dá apenas uma idéia parcial da quantidade de processamento envolvido. Para se ter uma idéia da carga total do processamento, temos que falar sobre um processo matemático denominado transformação. As transformações são utilizadas sempre que alteramos a maneira como vemos alguma coisa. Uma imagem de um carro que se move em nossa direção, por exemplo, utiliza transformações para fazer com que o carro pareça maior à medida que se move. Outro exemplo de uma transformação é quando o mundo tridimensional criado por um programa de computador tem que ser "achatado" bidimensionalmente para ser exibido na tela. Vejamos a matemática envolvida nesta transformação (que é utilizada em todos os quadros de um jogo tridimensional) para se ter uma idéia do que o computador está fazendo. Utilizaremos alguns números fictícios, mas que nos darão uma idéia da quantidade de matemática envolvida na geração de uma tela. Não se preocupe em como fazer os cálculos, pois isso é tarefa do computador. Tudo isso é para que você tenha uma idéia do trabalho pesado do computador ao rodar um jogo.

A primeira parte do processo tem algumas variáveis importantes:

  • X = 758 - a altura do "mundo" que estamos observando
  • Y = 1024 - a largura do mundo que estamos observando
  • Z = 2 - a profundidade (frente e verso) do mundo que estamos observando
  • Sx = altura da nossa janela no mundo
  • Sy = largura da janela no mundo
  • Sz = uma variável de profundidade determina quais objetos são visíveis na frente de outros objetos escondidos
  • D = .75 - a distância entre o nosso olho e a janela neste mundo imaginário

Primeiro, calcule o tamanho das janelas no mundo imaginário.

Agora que o tamanho da janela foi calculado, uma transformação da perspectiva é utilizada para dar um passo à frente na projeção do mundo na tela. Nesta etapa, incluímos mais algumas variáveis.

Assim, um ponto (X, Y, Z, 1.0) no mundo tridimensional imaginário teria a posição transformada de (X', Y', Z', W'), que obtemos através das seguintes equações:

Agora, uma outra transformação deve ser aplicada antes da imagem ser projetada no monitor, mas você começa a perceber o nível de computação envolvido - e isso tudo para um único vetor (linha) na imagem. Imagine os cálculos em uma cena complexa com muitos objetos e caracteres. Imagine isso sendo feito 60 vezes por segundo. Não é ótimo que alguém tenha inventado o computador?

No exemplo abaixo, você verá uma sequência animada mostrando uma caminhada pelo escritório da HowStuffWorks nos Estados Unidos. Primeiro, observe que esta seqüência é muito mais simples que a maioria das cenas em um jogo tridimensional. Não existem oponentes pulando por detrás de escrivaninhas, nem mísseis ou lanças voando pelo ar e muito menos demônios rangendo os dentes materializados em cubículos. Do ponto de vista "o-que-estará-na-cena", isso é animação simples. Até mesmo esta simples seqüência, no entanto, trabalha com muitas questões que já vimos. As paredes e a mobília possuem texturas que cobrem as estruturas e raios que representam relâmpagos fornecem a base para as sombras. Da mesma forma, conforme o ponto de vista é alterado durante a caminhada pelo escritório, observe como alguns objetos se tornam visíveis nos cantos e aparecem por detrás das paredes (você está visualizando os efeitos dos cálculos da Z-buffer). Conforme todos esses elementos aparecem antes que a imagem possa ser de fato devolvida ao monitor, é óbvio que até mesmo uma CPU moderna possa precisar de ajuda para realizar todo o processamento necessário aos jogos e gráficos tridimensionais. É nesse momento que entram em cena as placas de co-processadores de gráficos.