O objetivo da Matriz de Projeção Model View


102

Para que fins estamos usando a Matriz de projeção Model View? Por que os sombreadores exigem a Matriz de projeção do Model View?


12
Basta verificar este link: songho.ca/opengl/gl_transform.html
iKushal

3
Sugeri abrir um site Stack Exchange dedicado a Computação Gráfica e selecionei esta pergunta como um exemplo de pergunta . Siga computergraphics.stackexchange.com se estiver interessado em ver o site sendo lançado!
limpar

Respostas:


196

As matrizes de modelo, visualização e projeção são três matrizes separadas. Modelos de mapas do espaço de coordenadas local de um objeto para o espaço do mundo, visualização do espaço do mundo para o espaço da câmera, projeção da câmera para a tela.

Se você compor todos os três, pode usar o único resultado para mapear todo o caminho do espaço do objeto ao espaço da tela, tornando-o capaz de descobrir o que você precisa para passar para o próximo estágio de um pipeline programável a partir das posições do vértice de entrada.

Nos antigos pipelines de funcionalidade fixa, você aplicaria o modelo e a visualização juntos e, em seguida, calcularia a iluminação usando outro resultado derivado deles (com algumas correções para que, por exemplo, normais ainda tenham comprimento de unidade, mesmo se você aplicou algum dimensionamento ao objeto ) e, em seguida, aplique a projeção. Você pode ver isso refletido no OpenGL, que nunca separa as matrizes do modelo e da visão - mantendo-as como uma única pilha da matriz do modelo. Portanto, às vezes você também vê isso refletido nos sombreadores.

Portanto: a matriz de projeção da visualização do modelo composto é frequentemente usada por shaders para mapear a partir dos vértices carregados para cada modelo para a tela. Não é obrigatório, existem várias maneiras de conseguir a mesma coisa, é apenas normal porque permite todas as transformações lineares possíveis. Por causa disso, uma versão menos composta dele também era a norma em seu antigo mundo de pipeline fixo.


3
então, para vários objetos (malhas), precisamos de várias matrizes modelView, não é?
Yuriy Vikulov,

5
Supondo que eles possam se mover de forma independente ou tenham sido posicionados separadamente, sim. Portanto, essa é, de longe, a maneira mais comum de proceder - passar modelView ou projectionModelView como um uniforme para o programa de sombreador, tendo-o configurado para o modelo atual na CPU.
Tommy,

Oi Tommy, você pode sugerir qualquer código de amostra para a funcionalidade de panorâmica no Opengl Es2.0 no Android usando esta Matriz de Projeção Model View, se possível. Consultei mais links, não consegui ter nenhuma ideia clara. Se algum código de amostra significa, é fácil de entender para mim ..
harikrishnan

1
Eu tenho uma pergunta. Se openGL usando a matriz MV como uma e se formos ir do espaço da câmera para o espaço do mundo, precisaremos inverter (matriz de projeção * matriz de visualização) * (posição do cursor), mas se a visualização do modelo for uma matriz composta. como separamos o modelo e a matriz de exibição para que eu possa usar a matriz de exibição para esse cálculo. Então eu preciso mantê-los separados?
Evren Bingøl

@ EvrenBingøl Você já obteve sua resposta? Eu mantive meu modelo e as matrizes de visualização separadas, mas gostaria de saber a resposta real à sua pergunta se devo continuar separando-as ou não.
tom_mai78101

9

Porque as matrizes são convenientes. As matrizes ajudam a converter localizações / direções em relação a diferentes espaços (um espaço pode ser definido por 3 eixos perpendiculares e uma origem).

Aqui está um exemplo de um livro especificado por @ legends2k nos comentários.

Os residentes da Cartésia usam um mapa de sua cidade com a origem centrada sensivelmente no centro da cidade e eixos direcionados ao longo dos pontos cardeais da bússola. Os residentes da dislexia usam um mapa de sua cidade com as coordenadas centralizadas em um ponto arbitrário e os eixos correndo em algumas direções arbitrárias que provavelmente pareciam uma boa ideia na época. Os cidadãos de ambas as cidades estão bastante satisfeitos com seus respectivos mapas, mas o Engenheiro de Transporte do Estado atribuiu a tarefa de fazer um orçamento para a primeira rodovia entre Cartésia e Dislexia precisa de um mapa com os detalhes de ambas as cidades, que, portanto, apresenta uma terceira coordenada sistema que é superior a ele, embora não necessariamente a qualquer outra pessoa.

Aqui está outro exemplo,

Suponha que você tenha criado um objeto carro em um jogo com suas posições de vértice usando as coordenadas do mundo. Suponha que você tenha que usar este mesmo carro em algum outro jogo em um mundo totalmente diferente, você tenha que definir as posições novamente e os cálculos ficarão complexos. Isso ocorre porque você novamente tem que calcular as posições da janela, capô, farol, rodas, etc., no carro em relação ao novo mundo.

Veja este vídeo para entender os conceitos de modelo, vista e projeção. (altamente recomendado)

Então veja isso para entender como os vértices no mundo são representados como matrizes e como eles são transformados.


Se você pensar nisso profundamente, perceberá que embora a transformação seja baseada na origem de um objeto (ou seja, ponto único), todos os vértices do objeto (malha / modelo formalmente) sofrerão a transformação, ou seja, todos os 1000 vértices serão multiplicados pela matriz do modelo. Portanto, seu ponto de vista não está bem formulado. A matriz do modelo é simplesmente a matriz que transforma os vértices do espaço do modelo no espaço do mundo. Não há benefício de desempenho aqui, é apenas conveniência.
legends2k

Se sim, por que eles simplesmente não representam cada ponto em um único espaço 3D? Deve haver benefícios quando você usa a saída de uma cena para outra cena que poderia ser uma entrada para outra cena móvel :)
cegprakash

1
Eles não representam todos os vértices em um único espaço, pois é conveniente trabalhar em um espaço relativo do que em um espaço maior, como o mundo. Digamos que um robô, quando comandado a se mover 2 metros para a frente, fazê-lo errado é mais apropriado para ele do que localizar o centro do mundo e então calcular as coordenadas resultantes corretas.
legends2k

Acho que você está certo .. De qualquer forma, o fragment shader será chamado para cada pixel e estaremos realizando multiplicações de matrizes para cada pixel no caso de malhas complexas. : |
cegprakash de

2
No shader de fragmento, apenas cálculos de iluminação / coloração são feitos, no momento em que os dados alcançam o shader de fragmento, todos os cálculos de posição estão completos (ou seja, no shader de vértice); uma explicação melhor sobre por que usar sistemas de coordenadas múltiplas está aqui . Este livro é um excelente recurso matemático para jogos 3D. O mesmo capítulo de um PDF de amostra do site do livro .
legends2k
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.