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. ///