XNA Ver Matrix - Buscando explicação

votos
6

Eu estou tendo alguns problemas sérios compreender a matriz de visão em XNA. Eu vim muito longe com todas as outras partes e desde que eu acabei de me aprendeu a matemática necessários Eu não quero usar o construída em Matrix-funções sem entender o que fazer primeiro.

Agora eu entendo as noções básicas de rotação, projeção e tradução, mas eu não posso para a vida de mim compreender como a matriz de vista funciona em XNA.

Pelo que eu recolhi, a matriz de vista deve transformar o mundo para o seu próprio espaço. Parece razoável, mas o método Matrix.CreateLookAt na biblioteca é bastante intrigante.

Eu já estabelecida (através de examinar o que as saídas de função de biblioteca) que estes dois pedaços de rendimento código os mesmos resultados:

Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position);
// ..equals this if (Position = (0 0 -5), since LookAt looks at but the above just looks straight down Z)..
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY);

Por que inverter os eixos X e Z? Achei que você deve girar o mundo de acordo com a rotação câmeras, mas na direção oposta, e, em seguida, traduzir o mundo pela mesma quantidade na direção oposta.

Ou é a matriz de vista não usado como uma transformação em todos, mas apenas codifica a posição ea rotação da câmera no mundo?

Publicado 20/08/2009 em 23:21
fonte usuário
Em outras línguas...                            


4 respostas

votos
21

Existem três tipos de transformações que você precisa entender: mundo, vista e projeção.

O mundo transformar mudanças seus modelos coordenadas do espaço de modelo para o espaço mundo. Quando você define os vértices de um modelo, você defini-los em relação à origem desse modelo. O mundo transformar transforma os vértices de modo que eles são relativas a uma origem compartilhada por todos os objetos na cena, ou seja, espaço do mundo.

A vista transformar em seguida, transforma esses vértices para o espaço de exibição. O visualizador / câmera tem uma posição e orientação no espaço vista, e isso é usado para criar a matriz de visão que você aplica a todos os objetos na cena. No espaço vista do espectador / câmera está na origem, então a matriz de visão traduz e gira todos os objetos para colocá-los no espaço de exibição.

Finalmente a projeção transformar determina que tipo de "lente" a câmera usa. Até agora só temos traduzido e girado objetos, não há nenhuma sensação de escala ou perspectiva. A projeção transformar cria um volume de visualização e transforma vértices nessa janela.

Agora, para sua pergunta. Você reflete o sistema de coordenadas sobre o eixo x, então o eixo z e finalmente você traduzi-lo. Isso acontece para produzir o mesmo resultado que a matriz lookat porque a posição está na xz- e plano yz, mas observe o que acontece se você mover a posição de uma unidade se o eixo-y. Em seguida, os dois matricies não será igual

Respondeu 21/08/2009 em 03:37
fonte usuário

votos
5

A matriz de vista está transformando a cena em vista espaço. No espaço vista da câmera virtual está na origem e está olhando na direção z positiva. Existem diferentes maneiras de conseguir isso, mas mais geralmente a matriz de vista consiste de uma tradução e três rotações em torno de cada eixo.

Transformar = Traduzir * rotationZ * rotationY * rotationX

Respondeu 21/08/2009 em 03:41
fonte usuário

votos
4

O link a seguir me ajudou muito a entender e de forma mais eficaz usar matrizes. Você pode encontrá-los interessante:

http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-from-storing-an-orientation-as-3-angles/

Estou a fazer relativamente a mesma coisa que você agora :)

Respondeu 11/03/2011 em 02:09
fonte usuário

votos
1

compondo duas reflexões produz uma rotação, se eu me lembro da minha geometria corretamente.

Respondeu 20/08/2009 em 23:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more