Qwadro neo2 4096x2048 label desc sigma, 3d, direct3d, euclidian, glsl, hlsl, linear algebra, math, matrix, middleware, opengl (gl), qwadro, renderware, rhs, transformation sigma federation column-major... Row-major... Como observado, eu conheço seus maiores pesadelos. Você está perdido no caos que é a guerra infindável das convenções de matrizes entre opengl, o lado azul da força e, direct3d, o lado verde da força.

The Qwadro Matrix

Column-major… row-major… Como observado, eu conheço seus maiores pesadelos. Você está perdido no caos que é a guerra infindável das convenções de matrizes entre OpenGL, o lado azul da força e, Direct3D, o lado verde da força.

OpenGL e Direct3D nos apresentam duas formas, ambas avessas a cada outra, de armazenar em memória e, consequentemente, de computar produtos matemáticos dado o layout de armazenamento. Porém, as duras batalhas de pré-multiplicação e pós-multiplicação vectorial, transposição e cisposição, arranjamento em row-major e column-major, etc, chegam a outro nível no Qwadro, o lado púrpura da força, que simplesmente juntou o pior dos dois mundos.

Enquanto nos ambientes de desenvolvimento usando GLSL uma matriz é tida como naturalmente column-major, e, no HLSL, é tida historicamente como row-major, no Qwadro, uma matriz é tanto column-major quanto row-major ao mesmo tempo. Pensa que estou brincando? Não estou. Contemple você mesmo a materialização do caos nesta mais nova façanha com o selo “Forjado Pelo Diabo” de qualidade da SIGMA.

Layout

No Qwadro, uma matriz é uma combinação híbrida de três matrizes, sendo-as:

  • uma submatriz left-top column-major 3×3, onde residem orientação, escala e deformação;
  • uma submatriz left-bottom row-major 3×1, onde reside translação; e
  • uma submatriz right-top row-major 1×4, onde reside coeficiência projectiva.

Sim. Eu sei que você já quer ir embora. A dor é inevitável, o sofrimento é opcional. Continue lendo. Eu quero compartilhar contigo a dor que foi alcançar este feito.

Basis; escala/deformação e orientação

Basis; onde nós temos os coeficientes representando a escala e/ou a deformação e a orientação. Trata-se de uma matriz 3×3, onde os 3 vetores axiais são arranjados em colunas, como nas convenções de matriz do OpenGL.

O primeiro vetor é o R, que significa right, uma vez que o Qwadro usa o right handled coordinate system, tal como a RenderWare. O segundo vetor é o U, que significa up, uma vez que o Qwadro considera que o eixo Y naturalmente represente deslocamento vertical. O terceiro é o F, que significa far, uma vez que o Qwadro, considera que o eixo Z naturalmente representa distanciamento da origem de referência.

r u f 0 // X
r u f 0 // Y
r u f 0 // Z
0 0 0 0

Translação

Em nossa convenção, os dados de translação são armazenados numa submatriz 3×1, onde os 3 escalares são arranjados em uma linha, como nas convenções de matriz do Direct3D.

0 0 0 0
0 0 0 0
0 0 0 0
x y z 0 // translation (or W)

Este arranjo requer que este vetor seja pré-multiplicado, em contraste com a natural operação de pós-multiplicação.

Coeficiência

Em nossa convenção, os dados de projeção são armazenados numa submatriz 1×4, onde os 4 escalares são arranjados em uma coluna, como nas convenções de matriz do OpenGL.

0 0 0 x // coefficient between X
0 0 0 y // coefficient between Y
0 0 0 z // coefficient between Z
0 0 0 w // coefficient between W elements (1.f = affine)

É esperado que, para uso geral, estes valores sejam [ 0, 0, 0, 1 ], os quais implicam que a matriz representa uma transformação afina, onde o produto da multiplicação de matrizes preservam a proporcionalidade dos valores. Noutro caso, tal matriz representaria uma transformação de projeção perspectiva, onde estes valores perturbam os demais para causar dilatações e contrações ou, doutra forma, distorções no espaço.

Futuramente, eu vamos explicar a diferença entre pré-multiplicar e pós-multiplicar, transposição e cisposição, etc, com códigos, não notações matemáticas que, para programadores, mais criam confusões que soluções. Já faz um tempo que um inscrito solicitou clarificação sobre este tipo de conteúdo, porém, não havíamos encontrado um meio didático de fazer isto. Aliás, ainda não encontramos, então apenas estamos dizendo como fizemos isto no Qwadro.

Matrize são mapas. Antes de ter que entrar na parte matemática da coisa, observe a ocorrência de padrões a seguir. Isto te ajudará a entender visualmente melhor fenômenos tais como a igualdade do produto da inversão transposta e principalmente que matrizes são significantes em diagonal.

// 3x3 cisposition
2  1  0
1  2  1
0  1  2
// 4x3 cisposition
2  1  0  %
1  2  1  %
0  1  2  %
0  1  2  %
// 4x4 cisposition
3  2  1  0
2  3  0  1
1  0  3  2
0  1  2  3

// 3x3 transposition
0  1  2
1  0  1
2  1  0
// 4x3 transposition
0  1  2  %
1  0  1  %
2  1  0  %
0  1  2  %
// 4x4 transposition
0  1  2  3
1  0  3  2
2  3  0  1
3  2  1  0
Requisite por clarificação e/ou mais informações e recursos a respeito do conteúdo tratado aqui. <[email protected]>

Responses

Auto-translate »