Índice

WebGL2Fundamentals.org

Fix, Fork, Contribute

Nomenclaturas das Matrizes WebGL

Esta publicação é a continuação de uma série de postagens sobre a WebGL. O primeiro artigo apresentou os fundamentos da WebGL e o anterior foi sobre câmeras 3D.

Como todo o site falou que, praticamente tudo na WebGL é 100% feito por você - com excessão de alguns nomes pré-definidos como gl_Position - quase tudo na WebGL poderá ser definido por você, programador.

Dito isto, existem algumas convenções de nomenclatura comuns ou semi-comuns. Especialmente quando se trata de matrizes. Eu não sei quem apresentou primeiro essas nomenclaturas. Eu acho que as aprendi dos Padrões de Anotações e Semânticas da NVIDIA. Isso é um pouco mais formal, pois era uma maneira de tentar fazer shaders funcionarem em mais situações ao decidir nomes específicos. Está meio que, desatualizado, mas os fundamentos básicos ainda duram até hoje.

Aqui vai uma lista da minha cabeça

  • world matrix (em alguns casos, model matrix)

    uma matriz que pega os vértices de um modelo e os move para o world space

  • camera matrix

    uma matriz que posiciona a câmera no mundo. É uma outra maneira de dizer que essa é a world matrix da câmera.

  • view matrix

    uma matriz que move tudo que está dentro do mundo para a frente da câmera. Está matriz é o inverso da camera matrix.

  • projection matrix

    uma matriz que converte um frustum space (ou tronco de espaço, na tradução literal) em um clip space (ou espaço de clipe, na tradução literal) ou algum espaço ortográfico num clip space. Outra forma de pensar a respeito disso é como a matriz retornada pela função ortographic ou ortho e/ou perspective da biblioteca matemática.

  • local matrix

    ao usar um gráfico de cena (scene graph), a matriz local é a matriz em qualquer nó, em específico, no gráfico antes de se multiplicar com qualquer um dos outros nós.

Se um shadder precisar de uma destas combinações, eles geralmente são listados da direita para a esquerda mesmo que no shader eles fossem multiplicados à direita. Por exemplo:

worldViewProjection = projection * view * world

As outras duas coisas mais comuns a se fazer com uma matriz seria obter o inverso

viewMatrix = inverse(cameraMatrix)

E para transpor

worldInverseTranpose = transpose(inverse(world))

Espero que conhecendo esses termos, você possa olhar para o shader de outra pessoa e, se você tiver sorte, eles usaram nomes que são parecidos ou muito semelhantes a esses apresentados aqui. Então, você poderá aproveitar o que esses shaders estão fazendo.

Agora vamos aprender sobre animação, a seguir.

Problemas/Bug? Pergunte no github.
comments powered by Disqus