VGA – Tutorial 16 – Denthor

--==[ PARTE 16 ]==--

Para obter os programas mencionados neste tutorial, por favor baixe o zip com a versão antiga do tutorial, neste link.

Introdução

Olá. Esse treinamento é sobre escala de um bitmap de tamanho arbitrário a se desenhar, em duas dimensões. O programa de amostra parece funcionar rápido, e o código é documentado. A rotina de escalar é, contudo, totalmente em assembly… espero que isso não vá causar muitos problemas.

EzE lançou um tutorial! É sobre aceleração de 3D para 3D normal e mundos virtuais. Dê uma olhada, é muito bom (embora eu tenha dado umas mexidas no quote dele ;)) Ele estará no PCGPE ][, a ser lançado em breve.

Se você gostaria de me contactar, ou ao time, há muitos modos que você pode fazê-lo:
1) Escrever uma mensagem para Grant Smith/Denthor/Asphyxia em email privado na ASPHYXIA BBS.
2) Escrever para Denthor, Eze, Goth, Fubar ou Nobody na Connectix.
3) Escrever para:
Grant Smith
P.O.Box 270 Kloof
3640
Natal
África do Sul
4) Ligar para mim (Grant Smith) no número (031) 73 2129
(deixe uma mensagem se você ligar quando eu estiver na faculdade)
Ligue para +27-31-73-2129 se você está ligando de fora da África do Sul (A conta é sua ;-))
5) Escrever para denthor@beastie.cs.und.ac.za
6) Escrever para asphyxia@beastie.cs.und.ac.za para falar com todos nós de uma vez.

OBS1 : Se você é um representante de uma companhia ou BBS e quer que a ASPHYXIA faça um demo para você, mande um email pra mim; podemos discutir.
OBS2 : Se você fez/tentou fazer um demo, MANDE PARA MIM! Estamos nos sentindo muito solitários e queremos encontrar/ajudar/trocar código com outros grupos de demos. O que você tem a perder? Mande uma mensagem aqui e podemos ver como transferir. Nós realmente queremos ouvir de você.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

O que é escala?

Acho que a maioria de vocês já sabe isso, mas aqui vai. Digamos que você tenha uma figura (10×10 pixels) e que você queira desenhá-la de um tamanho diferente (digamos, 5×7 pixels), o processo de alterar a figura para caber no novo tamanho se chama escala. Escalar só funciona em áreas retangulares.

Com escala, você pode facilmente esticar e encolher seus bitmaps.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

OK, então como programamos?

Certo. O modo que vou fazer a escala é o seguinte:

Para a área na horizontal, vou calcular um certo valor de passo. Vou então escrever no bitmap, adicionando esse passo à minha posição, e colocar o pixel mais perto na tela. Deixe-me explicar de modo mais simples…

Digamos que eu tenha um bitmap de 10 pixels de largura. Quero encolher para 5 pixels. Ao longo do bitmap eu desenharia sempre o segundo pixel na tela.

Em ascii:

  1234567890   13579
  +--------+   +---+
  |        |   |   |
  | bitmap |   |   |dest
  |        |   |   |
  +--------+   +---+

Como você pode ver, pulando a cada 2 pixels, eu encolhi a figura para uma largura de 5 pixels.

A equação é a seguinte:

        step = larguraoriginal / larguradesejada;

Digamos que temos um bitmap de 100 pixels de largura, que queremos diminuir para 20 pixels.

        step = 100 / 20
        step = 5

Se desenharmos a cada 5 pixels do bitmap original, teremos diminuído na escala corretamente! Isso também funciona para todos os valores, se o “step” for real.

Também encontramos o passo para a altura do mesmo jeito.

Nosso loop horizontal é o seguinte:

   For loop1:=1 to larguradesejada do BEGIN
     putpixel (loop1,height,bitmap[round (curpos)],vga);
     curpos:=curpos+xstep;
   END;

E o loop na vertical é a mesma coisa. Fácil, né? Tão fácil na verdade, que escrevi a rotina em assembly para você ;-)… não se preocupe, ela está comentada.

No programa de amostra, ao invés de usar reais, usei ponto fixo. Volte ao tutorial 14 se você tiver algum problema com ponto fixo, é muito direto.

Também uso transformações de perspectiva em pseudo 3D para fazer as posições suaves… depois do tutorial 8, isso deveria ser moleza.

Não há comandos novos no assembly para você, então você deveria se dar bem com o que você aprendeu no tutorial 7/8… ufa! Um monte de referências passadas lá 😉 Estamos realmente construindo nosso conhecimento 🙂

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Fechando

Bem, é isso. Como você pode ver, o conceito é fácil, e de fato bem óbvio, mas aquilo não me impediu de ter que sentar com um lápis e um pedaço de papel há uns meses para calcular 😉

Tenho um monte de trabalho pela frente por enquanto, então esse pode ser o último treinamento por alguns meses… a menos que eu consiga achar algum tempo livre. Então, por favor, seja paciente!

   [ "Senhor! Meu computador ficou maluco!"
     "O que?" grita o Comandante. "É uma máquina de milhares de dólares! Descubra o que está de errado! Isso é crítico, tenente!"
     "Sim, senhor!"
 A jovem tenente furiosamente digita pelo teclado, mas a máquina a 
   ignora totalmente.
     "O que está havendo, soldado?"
     "Eu não sei, senhor. Ele está fazendo coisas aleatórias, depois que as tarefas que pedi para fazer terminaram. No mundo da informática isso é conhecido como Denthorismo."
 O computador começa a bipar aleatoriamente, e imprimir um programa de folha de pagamento.
 "Faça-o funcionar AGORA, soldado"
 A tenente o ignora, e continua teclando. Ela consegue controle parcial do sistema, pode rodar programas, mas o computador continua rodando tarefas arbitrárias em segundo plano. Um dos técnicos que estavam atrás dela de repente grita 
   "Ei! está acessando os códigos dos mísseis! Ele está querendo lançá-los!"
 A digitação aumenta a velocidade, mas sem disponibilidade. Outro técnico diz 
     "Eu poderia desconectar o computador do link, mas isso levaria horas! E essa coisa terá os códigos em menos de cinco minutos na velocidade que está indo!"
   Um sorriso se forma no rosto da tenente, e ela se reclina na cadeira.
 "Que diabos você está fazendo?" grita o Comandante. "Por que você parou?"
 Novamente, ignorando-o, a tenente se vira para o técnico. 
"Vá desconectar a máquina, eu sei como conseguir o tempo que você precisa."
  "Como você vai fazer isso? A máquina está a toda velocidade!"
Ela sorri de novo, se inclina para frente, digita três letras e aperta o ENTER. O computador range até travar.
 O sorriso se torna malicioso. 
"Talvez isso _tenha_ alguma utilidade, 
   afinal."
                                                                    ]
                                                     - Grant Smith
                                                         15:30
                                                           23-9-94

Tchauuuuu…..

  • Krull

A Nova Krull's HomePage