Por que largura e altura são divididas por 2 na matriz de projeção em perspectiva?

9

Estou usando o OpenGL para aprender computação gráfica. Estou tentando entender matrizes de projeção. O seguinte é mostrado no 'Red Book' do OpenGL:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Não entendo por que a largura e a altura são divididas por 2?

mikeglaz
fonte

Respostas:

11

Como não varia de , varia de .xproj0 0WEudth-WEudth2WEudth2

O importante não é a largura, mas os valores mínimo e máximo de . Como está no centro da janela de exibição, não no canto, os valores mínimo e máximo são mais e menos metade da largura.xproj(0 0,0 0)


BTW, o Red Book não é uma ótima introdução aos gráficos em geral. É um padrão técnico, não um tutorial, portanto, a explicação dos conceitos é suficiente para ser inequívoca - não está tentando ensinar o material. Também trata-se de uma biblioteca de renderização de scanline em particular, por isso há muitos conceitos importantes que ela não descreve, como o BRDFs é importante, como eles se relacionam com as propriedades da superfície do mundo real, o que uma imagem realmente é e muitos técnicas de nível superior.

E, finalmente, mesmo na área em questão - como usar uma GPU para acelerar a renderização - está terrivelmente desatualizada. A arquitetura GL é baseada em GPUs de 20 anos atrás. Embora muitos recursos tenham sido adicionados para acompanhar as alterações no hardware, as abstrações fundamentais não são uma boa maneira de entender as arquiteturas atuais da GPU.

Se você quiser aprender sobre a teoria da computação gráfica, comece com um livro didático adequado, como Renderização com Base Física ou Computação Gráfica: Princípios e Prática, ou um curso on-line. Se você quiser aprender como criar um aplicativo 3D, comece com um tutorial sobre o tipo de aplicativo em que está interessado (por exemplo, se for um jogo, tente um tutorial do Unity).

Dan Hulme
fonte
Uau, é exatamente isso que estou procurando. Comecei a ler um livro de álgebra linear ... mas que tipo de matemática eu preciso saber para renderizar fisicamente?
mikeglaz
2
Espere, você quis dizer "Porque xproj não varia de 0 0WEudth"?
mikeglaz
Para openGL ele precisa projecto de coordenadas do dispositivo normalizado (-1 a 1) de modo que as escalas de -Width / 2 Largura a / 2
PaulHK
Você deve fazer uma outra pergunta sobre PBR, mas aqui é um recurso bom: learnopengl.com/#!PBR/Theory
Alan Wolfe
@ mikeglaz eu fiz, obrigado. Eu diria que se você conhece alguma graduação em álgebra linear e óptica do ensino médio, está bem. Quaisquer detalhes que você ainda não entenda, você já terá as bases para entender lendo a página apropriada da Wikipedia.
Dan Hulme