Primeiro, eu recomendo apenas armazenar a posição como um vetor separadamente, isso facilitará muito as coisas computacionalmente. Enfim...
[x (dot) right, y (dot) up, z (dot) look]
não é a matriz de exibição real. A matriz em si é da forma:
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
onde a matriz 3x3 superior esquerda representa rotações, escala, etc. Toda a orientação da câmera é feita lá. A linha e a coluna restantes são usadas para tradução e algumas outras coisas de perspectiva complicadas nas quais não vou entrar agora.
Quando você obtém a matriz (assumindo que seja uma matriz 4x4), a tradução sempre será armazenada na última linha ou na última coluna, dependendo de sua classe de matriz ser da ordem da linha principal ou da coluna principal.
O que você provavelmente está confundindo é o fato de precisar dos produtos de ponto. O que está acontecendo é a simplificação da matemática da matriz, há respostas mais detalhadas nesta pergunta do Stack Overflow: /programming/349050/calculating-a-lookat-matrix
A solução pode ser encontrada aqui , você precisa pegar o inverso da matriz e obter a tradução disso:
Vector3 ViewTrans = Matrix.Invert(ViewMatrix).Translation;
Position = ViewTrans;