Matrizes

Eu, há um tempinho atrás, quando estava aprendendo OpenGL, fiquei em dúvida quanto a matrizes. Qual era a sua utilidade no mundo 3D. Então achei este tutorial no site do NeHe e resolvi traduzir, pro pessoal que tem as mesmas dúvidas! Ele é um tutorial bem simples, porém útil.

Tutorial por Paul Frazee (The Rainmaker);

Matrizes

A Matriz Identidade

As Matrizes são o que fazem o mundo 3D funcionar. Sem elas, rotação e translação seria impossível. Teríamos que definir cada vértice na mão! Essa é uma péssima idéia para qualquer programador com experiência 3D. Uma matriz padrão num mundo 3D tem 4×4 elementos.

[1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]

Se você multiplicar qualquer ponto pela matriz acima, seria equivalente a multiplicar por 1 (um), nenhuma mudança ocorreria, por isso é chamada de Matriz Identidade. Naturalmente, queremos um pouco mais que isso, então temos também a…

A Matriz de Translação

tx, ty e tz representam os nossos valores de translação:

[ 1,  0,  0, 0]
[ 0,  1,  0, 0]
[ 0,  0,  1, 0]
[tx, ty, tz, 1]

A Matriz de Rotação

Rotação no Eixo X

[ 1,         0,          0, 0]
[ 0, cos(xrot), -sen(xrot), 0]
[ 0, sen(xrot),  cos(xrot), 0]
[ 0,         0,          0, 1]

Rotação no Eixo Y

[ cos(yrot), 0, sen(yrot), 0]
[         0, 1,         0, 0]
[-sen(yrot), 0, cos(yrot), 0]
[         0, 0,         0, 1]

Rotação no Eixo Z

[ cos(zrot), -sin(zrot), 0, 0]
[ sin(zrot),  cos(zrot), 0, 0]
[         0,          0, 1, 0]
[         0,          0, 0, 1]

A Matriz de Escala

sx, sy e sz representam nossos valores de escala (redimensionamento)

[ sx,  0,  0, 0]
[  0, sy,  0, 0]
[  0,  0, sz, 0]
[  0,  0,  0, 1]

Você pode combinar as matrizes multiplicando elas juntas. Transformando um ponto a partir de qualquer uma dessas matrizes, terá o resultado desejado. Repare que a translação muda o eixo para qualquer outra operação. Se você transladar -5, rodando no eixo Y, o eixo central será (0,0,-5).

— // —

Como eu disse, tutorial curto, porém bem útil!

Eu sei que este tutorial é antigo, e que já existem traduções, mas acho que não custa nada mostrar aqui né…

Valeu!

Anúncios

Um pouquinho de OpenGL

Você já deve ter ouvido falar nisso né? Pois então:

“A OpenGL (Open Graphics Library) é uma especificação definindo uma API multiplataforma e multi-linguagem para a escrita de aplicações capazes de produzir gráficos computacionais 3D (bem como gráficos computacionais 2D). A interface consiste em cerca de 250 funções diferentes que podem ser utilizadas para desenhar cenas tridimensionais complexas. A OpenGL é bastante popular na indústria dos videogames e compete diretamente com o Direct3D (no Microsoft Windows). O OpenGL é bastante utilizado em ferramentas CAD, realidade virtual, simulações e visualizações científicas e desenvolvimento no campo dos videogames.” – Wikipédia

Então, como você pode ver, não é fraco não né!

Multiplataforma, muito poderosa, opensource, multilinguagem, quer mais alguma coisa?

OpenGL também é utilizado para jogos 3D, porém, ela só renderiza polígonos (baixo nível), então o resto é feito na raça. Se você quiser programar um jogo utilizando OpenGL nativamente (digo, sem nenhuma engine), é provável que você sofra um pouco, porém você está programando em um nível baixo, então tem mais liberdade e tal…

Mas OpenGL é útil para muitas outras coisas, como citadas acima no texto extraído da Wikipédia, e se você está precisando fazer algum desses tipos de softwares, concerteza você está com a API certa! =D

Além de tudo isso, OpenGL é até que fácil de se programar, suas funções são auto-explicativas e, para facilitar, as funções tem várias versões diferenciadas pelos parâmetros.

Como eu disse, OpenGL só renderiza, para criar a Janela, por exemplo, você vai precisar de alguma outra API. Pode usar a API Win32, GLUT, SDL, Allegro, GTK, e assim por diante!

Bom, mas chega de enrolação, eu vou mostrar alguns sites bons! Começando pelo mestre do OpenGL, o NeHe! Tem um curso completo de OpenGL, e com os códigos fontes em várias linguagens e APIs! Se você der uma procurada, concerteza você acha a tradução dos tutoriais do NeHe, eu sei que tem, se eu não me engano, achei na PDJ, dê uma pesquisada lá! Ahh, mas também não esqueça de acessar o Site Oficial do OpenGL, e baixar o RedBook, que é um livro excelente de OpenGL distribuído digitalmente e gratuitamente!

Ufa! Aqui vem a listinha boa:

Mas como eu sempre digo, acesse a UniDev e a PDJ, tem vários tutoriais úteis e os fóruns são excelentes!

Alguns livros que recomendo, além do RedBook, são:

  • OpenGL SuperBible
  • Begining OpenGL Game Programming
  • OpenGL Game Development

Entre outros… e você pode adquirir de modos alternativos…

Bom, talvez eu poste algum tutorial de AllegroGL, mas não prometo heein! =D

Bons estudos!

Desenvolvimento com OGRE3D

Ogre3D é uma engine gráfica muito poderosa! As imagens dos projetos feitos com ela são impressionantes!

A UniDev recentemente lançou uma nova área no Fórum sobre Ogre3D. Parece que vai dar certo, muita gente tá postando e já saíram alguns tópicos com bastantes links interessantes. Mas eu vou aproveitar para postar algumas coisas, caso você não queira, ou não possa acessar a UniDev agora.

Bom, a OGRE é uma engine Multiplataforma e totalmente Opensource (licença LGPL), sem contar que é Orientada a Objetos. Mas antes que você pense, ela não é uma GameEngine, e sim uma Engine Gráfica, ou seja, ela só manipula os gráficos do jogo, você vai precisar de outras bibliotecas ou engines para o controle de Input (entrada), sons, física, e etc.

Você pode encontrar tutoriais no fórum da UniDev, lá já foram criados tópicos cheio de dicas sobre o assunto. Como por exemplo este: Iniciando em Ogre3D. Sem contar que o nosso amigo Andrei Regiani(tiozorak da UniDev) escreveu um tutorial básico para a UDZine #3, que sairá em breve!

Muito obrigado, espero que você goste da Ogre!

Até mais.