private void Transform(AstroObject astroObject, Matrix3D baseTransformation, FrameworkElement txt)
      {
         // Transform Model
         if (astroObject == null)
         {
            return;
         }
         var m = Matrix.Identity;
         m *= Matrix.CreateTranslation(0, 60, 0);
         m *= Matrix.CreateRotationX(Microsoft.Xna.Framework.MathHelper.ToRadians(90));
         m *= baseTransformation.ToXnaMatrix();
         astroObject.Transform = m;
         astroObject.IsVisible = true;

         // Transform FrameworkElement
         // Center at origin of the TextBlock
         var centerAtOrigin = Matrix3DFactory.CreateTranslation(-txt.ActualWidth * 0.5, -txt.ActualHeight * 0.5, 0);
         // Swap the y-axis
         var scale = Matrix3DFactory.CreateScale(1, -1, 1);
         // Move a bit away from the center
         var translation = Matrix3DFactory.CreateTranslation(0, 50, 0);
         // Calculate the complete transformation matrix based on the first detection result
         var world = centerAtOrigin * translation * scale * baseTransformation;

         // Calculate the final transformation matrix by using the camera projection matrix 
         var vp = Matrix3DFactory.CreateViewportTransformation(Viewport.ActualWidth, Viewport.ActualHeight);
         var mp = Matrix3DFactory.CreateViewportProjection(world, Matrix3D.Identity, arDetector.Projection, vp);

         // Apply the final transformation matrix to the TextBox
         txt.Projection = new Matrix3DProjection { ProjectionMatrix = mp };
         txt.Visibility = Visibility.Visible;
      }