Eu li a resposta aqui:
O que a placa gráfica faz com o quarto elemento de um vetor como posição final?
"O quarto componente é um truque para acompanhar a projeção em perspectiva. Quando você faz uma projeção em perspectiva, deseja dividir por z: x '= x / z, y' = y / z, mas essa não é uma operação que pode ser implementado por uma matriz 3x3 operando em um vetor de x, y, z. O truque que se tornou padrão para fazer isso é anexar uma quarta coordenada, w, e declarar que x, y, z será sempre dividido por w depois que todas as transformações forem aplicadas e antes da rasterização ".
mas não entendi por que não conseguimos dividir por z usando uma matriz 3x3?
não podemos simplesmente multiplicar por
1/z 0 0
0 1/z 0
0 0 1/z
para obter [x/z y/z 1]
?
matrix
transformation
projection-matrix
Comunidade
fonte
fonte
Respostas:
Porque se você apenas dividir
[x, y, z]
porz
você obtém[x/z, y/z, 1]
e perdeu o valor real dez
, o que é realmente útil se você deseja fazer um corte de plano próximo / distante ou preencher um buffer Z.A melhor maneira de manter algumas informações sobre
z
, pelo menos na GPU, é usar 4 componentes em vez de 3. Na prática, o que está realmente nos dois últimos componentes vetoriais antes da divisão da perspectiva depende de que tipo de projeção e efeitos você quer.Por exemplo, no caso de uma projeção em perspectiva, este é o vetor de 4 componentes resultante:
Após a divisão da perspectiva, o vetor se torna:
E a
c + d/z
peça nos deixa com informações suficientes para preencher o buffer Z.fonte
Tecnicamente, você poderia fazer isso. Mas por que se preocupar? Quando você tiver essa final
z
, poderá:9 * sizeof(float)
bytes de espaço, gastando ciclos para calcular1/z
(uma divisão) e fazendo nove multiplicações e seis adições para obter seu vértice final, ouUm deles parece muito mais ideal para mim, e não é o primeiro. Mesmo que o hardware otimizado exista para a multiplicação da matriz, como certamente existe, ainda é conceitualmente mais complexo do que uma simples divisão.
Além disso, uma matriz 3x3 não pode codificar uma tradução, e assim por uma matriz 4x4 (e, portanto, o quarto
w
de coordenadas) é usado no início do gasoduto de qualquer maneira . Isso significa que você já tem o quarto componente ali, para que possa usá-lo para transportar um valor útil e fazer sua divisão com ele.fonte