Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

[D3D/C++]Apresentação à programação Tridimencional


AceStryker
 Compartilhar

Posts Recomendados

Você agora esta começando a aprender sobre o DirectX e o Direct3D e esta na hora de ver as teorias da programação tridimencional, primeiramente quero dizer que este tópico é muito mais teórico que os outros e que 95% dele é necessário saber sobre matemática tridimencional, então você aluninho do ensino fundamental, sugiro que clique em voltar no seu navegador e volte daqui alguns anos ;)

 

Plano Cartesiano

Caso você já tenha passado do nono ano você conhece este sistema de coordenadas, mas o que aprendemos no final do ensino fundamental é o plano cartesiano bidimencional, e este é o tridimencional, mas o que muda?Bom, primeiramente não é só X e Y né, agora temos a profundidade, ou o Z.

 

Vamos começar a relembrar desta matéria aos poucos(mesmo sabendo que no ensino médio não tem como você se esquecer disso kk(os professores não deixaram kk))

 

dx9B3-1.GIF

 

Neste plano cartesiano de 1 dimensão vemos que nosso personagem andou 12 unidades em linha reta, mas e se por acaso ele resolvesse subir?Neste caso seria adicionada mais uma dimensão a nosso plano:

 

dx9B3-2.PNG

 

Sabemos que no ponto (12, 4) é onde nosso personagem esta, e isto é chamado de coodenada.Nas coordenadas como já deve saber X vem sempre na frente de Y.

 

Bom, agora que relembramos o que é um plano cartesiano podemos adicionar mais uma linha perpendicular e chama-la de Z, assim transformando nosso plano em tridimencional:

 

dx9B3-3.PNG

 

Quando vamos utilizar coordenadas tridimencionais com o Z, Z sempre ficará por ultimo

 

Geometria Triangular

Agora sim vamos entrar nos desenhos em 3D.

Vamos pensar que temos um ponto num plano cartesiano tridimencional, então se juntarmos vários pontos e interliga-los podemos criar uma figura geométrica e depois de alguns retoques, uma figura tridimencional.

Caso já tenha lido meu tutorial do OpenGL vimos que a base dos desenhos neste engine é triangulos.Isto também ocorre no DirectX, mas porque isso?Caso você seja leigo, talvez não saiba mas triangulos são as formas geométricas mais brilhantes existentes, estas podem se transformar em qualquer forma, podem criar circulos, esféras, quadrados e muito mais.Além do mais é a base mais resistente de todas :)

 

Mas como construir um triangulo em um plano cartesiano?Bom, para isso utilizamos vértices, que no plano serão conhecidas como pontos(aaaah agora entendi para que aquela conversa de plano cartesiano!).

Um triangulo no DirectX é desenhado com 3 vértices(a vá) e devem estar na ordem horária, depois de criado você pode mexer nele como quiser, textura, posição, etc.

 

dx9B3-5.PNG

 

Neste triangulo temos as seguintes coordenadas:

 

  • (0, 5, 1)
  • (5, -5, 1)
  • (-5, -5, 1)

 

Talvez você reparou que não mexemos no Z, isso é simplesmente porque um triangulo não é uma figura tridimencional, e caso você mude o Z, não fará nenhuma diferença...Caso queira criar uma verdadeira forma tridimencional você deve combinar triangulos, deste modo:

 

dx9B3-4.GIF

 

Mas ao invéz de você criar cada ponto de cada triangulo no jogo o que seria bem demorado, o directX deixa você só dar um array com os vértices(como eu havia dito, em ordem horária)

 

Primitivos

Estes são elementos para que você possa criar uma figura tridimencional, aqui estão seus principais:

  • Pontos
     
    dx9B3-6.GIF
     
  • Retas
     
    dx9B3-7.GIF
     
  • Retas Unidas
     
    dx9B3-8.GIF
     
  • Triangulos
     
    dx9B3-9.PNG
     
  • Triangulos Unidos
     
    dx9B3-10.PNG
     

 

Equivoco Primitivo

 

Este é o equivoco de que os primitivos funcionem apenas de um lado, como no desenho a seguir:

 

dx9B3-12.PNG

 

Como vemos, o triangulo esta desenhado por estar na ordem horária, agora quando invertemos ele não é mais desenhado.O segredo para resolver isso é fácil, mostrar o em ordem horária e anti horária do mesmo jeito

 

dx9B3-13.PNG

 

A Cor

A cor na programação tridimencional é relativamente fácil.Mas a vocês que já estão cantando vitória por serem experts em iluminação e espectros, devo avisa-los que o directX não segue sempre "As leis do universo".Eles não fizeram isso de maldade mas fizeram pois são tantas e tantas leis, sem contar que isso ia ser um pesadelo para a CPU também...

 

A luz é uma onda eletromagnética, cujo comprimento de onda se inclui num determinado intervalo dentro do qual o olho humano é a ela sensível.O DirectX meio que mistura isso com alguns algorítimos da placa de video o no final fica até bem iluminado.Mais para frente vamos aprender como o DirectX faz isso...

 

Cores Subtrativas & Cores Aditivas

 

No decorrer de sua vida você deve ter aprendido que as 3 cores primárias são vermelho, verde e azul.Bom aqui não é bem assim...No DirectX as 3 cores primárias são: magenta, ciano e amarelo.Para entender porque precisamos saber a diferença de cores subtrativas e cores aditivas.

 

A principal diferença é que as cores subtrativas são as cores dos objetos(suas cores principais são amarelo, magenta e ciano), e as aditivas da luz(suas cores principais são verde, vermelho e azul).

Podemos ver que as cores aditivas primárias somadas formam o branco:

 

dx9B3-14.PNG

 

Você também deve ter percebido que você encontrou as 3 cores principais subtrativas, isso ocorre pois estas são exatamente o oposto das cores aditivas.Estas consistem na luz que não fui refletida do objeto, por exemplo se jogarmos uma luz branca num objeto vermelho, ele irá refletir vermelho pois absorve azul e verde.

 

dx9B3-15.PNG

 

Na programação gráfica você sempre usará as cores aditivas pois como sabemos o monitor consiste em luz mas quando se trata de objetos em 3D já é outra história...

 

Coloração Alfa

 

Coloração Alfa como muitos já devem saber também é conhecida como transparencia(porque não disse logo kk), que é uma coloração que permite que a pessoa veja por traz desta cor.Acho que todos vão achar algum lugar para usar isso, como em vidros ou etc..Apenas solte sua imaginação ;)

 

Cores em 32 bits

 

Funções como RGB() e D3DCOLOR_XRGB() são funções que converter a intensidade das cores primitivas aditivas em cores de 32 bits, e agora veremos o que esta por tráz dessas funções!

 

dx9B3-16.GIF

 

Você deve estar pensando agora, como assim?255 não cabe nesse espaço, isso é porque é em hex então 255 = FF

 

Aqui estão as funções do D3D que servem para converter RGB em 32 bits

 

É necessário se cadastrar para acessar o conteúdo.

 

Luz e Cor

Como você deve saber, luz na física é uma coisa muito complicada, todos os dias descobrimos um pouco mais sobre isso, e por isso é bem difícil representa-la no computador, mesmo que seja possível calcular a trajetória da luz(o que necessita de muitos calculos), ainda não achamos um jeito de fazer isso em tempo real, por isso o DirectX dividiu a luz em 3 tipos:

 

  • Luz Difundida
    É a luz que ilumina um objeto indiretamente.Vejam que esta luz tem só uma fonte, ou um local onde a luz vem.
    dx9B3-17.PNG
     
  • Luz Ambiente
    A luz ambiente é aquela que é considerada proveniente de todo lugar, ou seja, ela não tem bem que uma fonte.Todas as áreas são iluminadas da mesma intensidade.
    dx9B3-18.PNG
  • Luz Especular
    Luz especular pode ser relacionada com um olofote, é uma luz bem concentrada.
    dx9B3-19.PNG

 

Créditos:

AceStryker & DirectXTutorial pelas imagens.

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.