fix: isPointOnView doesn't work for long distance positions

This commit is contained in:
Ruan Lucas
2022-10-03 18:51:27 -04:00
parent 61747bef85
commit 0a91b8b360

View File

@@ -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);