Example #1
0
        public static Matrix <float> GetViewMatrix(Vector <float> cameraPos, Vector <float> frontPosition,
                                                   Vector <float> upPosition)
        {
            var targetDirection = (cameraPos - frontPosition)
                                  .Normalize(1);

            var cameraRight = upPosition.CrossProduct(targetDirection)
                              .Normalize(1);

            var cameraUp = targetDirection.CrossProduct(cameraRight)
                           .Normalize(1);

            var lookAt = Matrix <float> .Build.Dense(4, 4);

            lookAt.SetRow(0, cameraRight.AddValueToEnd(0));
            lookAt.SetRow(1, cameraUp.AddValueToEnd(0));
            lookAt.SetRow(2, targetDirection.AddValueToEnd(0));
            lookAt.SetRow(3, new[] { 0f, 0f, 0f, 1f });

            var identityMatrix = GetIdentityMatrix(4, 4);

            identityMatrix.SetColumn(3, -cameraPos.AddValueToEnd(1));
            identityMatrix[3, 3] = 1f;

            return(lookAt * identityMatrix);
        }