VGA – Tutorial 13 – Denthor

                       --==[ PARTE 13 ]==--

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

Introdução

Olá de novo! Aqui estou eu, em casa, me recuperando da minha doença e sem nada pra fazer, então é claro que é a hora perfeita de escrever outro tutorial! Depois de um grande atraso entre as partes 11 e 12, dois tutoriais em dois dias não parecem uma má ideia.

Esse tutorial é sobre starfields (campos de estrelas), a pedidos de mais de uma pessoa. Isso é um efeito muito fácil, e você não deveria ter muito problema para pegar o conceito por trás disso. Eu vou fazer um starfield em 3D, um starfield horizontal é muito fácil de fazer com você apenas incrementando um valor de X para cada estrela em cada frame. Eu nem vou perder tempo fazendo código para isso (a menos que me peçam).

Então vou dar uma saída pra pegar meus antibióticos e volto já já com o tutorial! 😉

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 smith9@batis.bis.und.ac.za
6) Escrever para asphyxia@beastie.cs.und.ac.za

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 é um starfield 3D?

Eu não estou certo se eu deveria entrar nesse detalhe. Assista qualquer episódio de Jornada nas Estrelas, Guerra nas Estrelas, ou qualquer outro filme de ficção científica. Em algum lugar você vai ver uma cena em que pode-se notar estrelas passando pra trás de você, com as que estão mais longe se movendo mais devagar que as que estão mais perto.

Isso é um starfield 3D. Se você olhar de perto, vai notar que as estrelas parecem se originar de um ponto, o ponto pra onde você está viajando. Isso é uma ilusão que, ainda bem, acontece automaticamente, você não tem que programar 😉

Starfields parecem muito legais, e podem fazer uma grande diferença comparado com um fundo preto. Fica legal também num protetor de tela 😉

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

Como funcionam?

Isso é bem simples, na verdade. Imagine se quiser, que cada estrela no céu tem coordenadas x, y e z, com você estando no 0,0,0. Fácil? Certo. Agora, se você se mover pra frente, ou seja, aumentar o valor de z, você ainda estará em 0,0,0 para você, mas todos os valores z das estrelas pareceriam ter diminuído pela mesma quantidade.

Em linguagem mais simples, decrementamos o valor z de todas as estrelas de modo que elas chegam mais perto de você, e eventualmente algumas correm pra trás.

Isso resolve todos os nossos problemas. Estrelas que estão mais perto de nós nas escalas de x e y passam por nós mais rápidas que aquelas que estão longe de nós em x e y. A única coisa que devemos observar é que nenhuma estrela esteja em 0,0 , ou seja, exatamente na nossa frente, senão haverá uma colisão que não vai parecer boa.

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

Como programamos isso?

A primeira coisa a ser feita é gerar nosso campo de estrelas. Isso é bem fácil, escolhendo valores de x entre -160 e 160, e valores de y entre -100 e 100, aleatoriamente. Cada z é sequencialmente maior para cada estrela, de modo que não teremos grande áreas sem estrelas. Devemos nos lembrar de checar que não haja estrelas em 0,0!

OK, agora começamos a seção de visualização das estrelas, de verdade. Aqui estão os passos:

1) Converter nossas coordenadas 3D para suas versões 2D. Dê uma olhada no tutorial 8 para ver como se faz isso, mas basicamente dividimos por z.

2) Limpar todas as estrelas velhas que podem estar na tela.

3) Desenhar todas nossas estrelas de acordo com os valores 2D que calculamos em 1)

4) Mover todas as estrelas ou mais pra perto, ou mais pra longe de nós, diminuindo ou aumentando seus valores de z respectivamente.

5) Se o valor z de uma estrela passou para negativo, coloque-a no finalzinho de nossa “fila”, de modo que ela volte de novo.

6) Pule para o passo 1) ad-infinitum.

Como dizem, é isso. No nosso programa de amostra os passos foram colocados em procedures separadas para fácil leitura.

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

O que vem depois?

OK, então, agora temos um campo de estrelas bonito. E agora? Que tal adicionar movimento para a esquerda e para a direita? Um menu ou scrolly em primeiro plano? Que tal descobrir como um túnel de estrelas funciona? Uma rotina 3D legal na frente das estrelas?

Um campo de estrelas pode quase qualquer rotina parecer muito mais profissional, e pode ela mesma ser melhorada para ser um grande efeito todo seu.

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

Fechando

Então, esse foi um outro efeito na série. Você ainda quer mais efeitos, ou o que? Deixe-me um email com ideias para tutoriais. Eu posso não fazer se você não pedir!

Ah, bem, já tomei o remédio, está na hora de ir. Um alô para todas aquelas pessoas que me mandaram email, e para aqueles grandes caras no #coders no IRC (você sabe quem é você ). Uau. Essa é a primeira vez que cumprimento alguém num tutorial. Hmmm… Talvez eu esteja só doente mesmo 😉

Feliz programação, pessoal!

  • Denthor
    19:28
    24-7-94
  • Krull

A Nova Krull's HomePage