diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs
index 81014acf4..d6e44fcd0 100644
--- a/Source/Editor/Viewport/EditorViewport.cs
+++ b/Source/Editor/Viewport/EditorViewport.cs
@@ -1427,6 +1427,26 @@ namespace FlaxEditor.Viewport
return new Ray(nearPoint + viewOrigin, Vector3.Normalize(farPoint - nearPoint));
}
+ ///
+ /// Projects the point from 3D world-space to viewport coordinates.
+ ///
+ /// The input world-space location (XYZ in world).
+ /// The output viewport window coordinates (XY in screen pixels).
+ public void ProjectPoint(Vector3 worldSpaceLocation, out Float2 viewportSpaceLocation)
+ {
+ viewportSpaceLocation = Float2.Minimum;
+ var viewport = new FlaxEngine.Viewport(0, 0, Width, Height);
+ if (viewport.Width < Mathf.Epsilon || viewport.Height < Mathf.Epsilon)
+ return;
+ Vector3 viewOrigin = Task.View.Origin;
+ Float3 position = ViewPosition - viewOrigin;
+ CreateProjectionMatrix(out var p);
+ CreateViewMatrix(position, out var v);
+ Matrix.Multiply(ref v, ref p, out var vp);
+ viewport.Project(ref worldSpaceLocation, ref vp, out var projected);
+ viewportSpaceLocation = new Float2(projected.X, projected.Y);
+ }
+
///
/// Called when mouse control begins.
///