diff --git a/Source/Engine/Level/Actors/Camera.cpp b/Source/Engine/Level/Actors/Camera.cpp index a91074ab5..6a6e9edd8 100644 --- a/Source/Engine/Level/Actors/Camera.cpp +++ b/Source/Engine/Level/Actors/Camera.cpp @@ -5,6 +5,7 @@ #include "Engine/Core/Math/Viewport.h" #include "Engine/Content/Assets/Model.h" #include "Engine/Content/Content.h" +#include "Engine/Engine/Screen.h" #include "Engine/Serialization/Serialization.h" #if USE_EDITOR #include "Editor/Editor.h" @@ -120,6 +121,24 @@ void Camera::ProjectPoint(const Vector3& worldSpaceLocation, Float2& cameraViewp cameraViewportSpaceLocation = Float2(clipSpaceLocation); } +bool Camera::CheckPointIsOnView(const Vector3& worldSpaceLocation) const +{ + Camera* mainCamera = Camera::GetMainCamera(); + + if (!mainCamera) + { + return false; + } + + Float2 windowSpace = Float2(); + Float2 screenSize = Screen::GetSize(); + + mainCamera->ProjectPoint(worldSpaceLocation, windowSpace); + + return (windowSpace.X >= 0 && windowSpace.X <= screenSize.X) && + (windowSpace.Y >= 0 && windowSpace.Y <= screenSize.Y); +} + Ray Camera::ConvertMouseToRay(const Float2& mousePosition) const { return ConvertMouseToRay(mousePosition, GetViewport()); diff --git a/Source/Engine/Level/Actors/Camera.h b/Source/Engine/Level/Actors/Camera.h index 2b59ab323..1e38e5e04 100644 --- a/Source/Engine/Level/Actors/Camera.h +++ b/Source/Engine/Level/Actors/Camera.h @@ -168,6 +168,13 @@ public: /// The viewport. API_FUNCTION() void ProjectPoint(const Vector3& worldSpaceLocation, API_PARAM(Out) Float2& cameraViewportSpaceLocation, API_PARAM(Ref) const Viewport& viewport) const; + /// + /// Checks if the 3d point of the world is in the camera's field of view. + /// + /// World Position (XYZ) + /// Returns true if the point is within the field of view + API_FUNCTION() bool CheckPointIsOnView(const Vector3& worldSpaceLocation) const; + /// /// Converts the mouse position to 3D ray. ///