У меня есть точка в пространстве, представленная матрицей 4x4. Я хотел бы получить координаты экрана для точки. Выбор кажется полной противоположностью тому, что мне нужно. Я использую координаты экрана, чтобы определить, где рисовать текст.
В настоящее время текст, который я рисую, плавает в пространстве далеко перед точками. Я прикрепил скриншот с увеличенным и уменьшенным масштабом, чтобы лучше объяснить. Как вы можете видеть на скриншоте, расстояние между точками одинаково при увеличении, хотя должно быть меньше.
Я пропустил трансформацию? Мировые координаты считают 0,0,0 центром сетки. Я использую SlimDX.
var viewProj = mMainCamera.View * mMainCamera.Projection;
//Convert 4x4 matrix for point to Vector4
var originalXyz = Vector3.Transform(Vector3.Zero, matrix);
//Vector4 to Vector3
Vector3 worldSpaceCoordinates = new Vector3(originalXyz.X, originalXyz.Y, originalXyz.Z);
//Transform point by view projection matrix
var transformedCoords = Vector3.Transform(worldSpaceCoordinates, viewProj);
Vector3 clipSpaceCoordinates = new Vector3(transformedCoords.X, transformedCoords.Y, transformedCoords.Z);
Vector2 pixelPosition = new Vector2((float)(0.5 * (clipSpaceCoordinates.X + 1) * ActualWidth), (float)(0.5 * (clipSpaceCoordinates.Y + 1) * ActualHeight));