diff --git a/Source/Engine/Level/Actors/Camera.cpp b/Source/Engine/Level/Actors/Camera.cpp index cd5d13702..ab695de5c 100644 --- a/Source/Engine/Level/Actors/Camera.cpp +++ b/Source/Engine/Level/Actors/Camera.cpp @@ -130,10 +130,23 @@ bool Camera::IsPointOnView(const Vector3& worldSpaceLocation) const return false; } + Vector3 cameraUp = mainCamera->GetTransform().GetUp(); + Vector3 cameraForward = mainCamera->GetTransform().GetForward(); + Vector3 directionToPosition = (worldSpaceLocation- mainCamera->GetPosition()).GetNormalized(); + + if (Vector3::Dot(cameraForward, directionToPosition) < 0) + { + return false; + } + + Quaternion lookAt = Quaternion::LookRotation(directionToPosition, cameraUp); + Vector3 lookAtDirection = lookAt * Vector3::Forward; + Vector3 newWorldLocation = mainCamera->GetPosition() + lookAtDirection; + Float2 windowSpace = Float2(); Float2 screenSize = Screen::GetSize(); - mainCamera->ProjectPoint(worldSpaceLocation, windowSpace); + mainCamera->ProjectPoint(newWorldLocation, windowSpace); return (windowSpace.X >= 0 && windowSpace.X <= screenSize.X) && (windowSpace.Y >= 0 && windowSpace.Y <= screenSize.Y);