fix: isPointOnView doesn't work for long distance positions
This commit is contained in:
@@ -130,10 +130,23 @@ bool Camera::IsPointOnView(const Vector3& worldSpaceLocation) const
|
|||||||
return false;
|
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 windowSpace = Float2();
|
||||||
Float2 screenSize = Screen::GetSize();
|
Float2 screenSize = Screen::GetSize();
|
||||||
|
|
||||||
mainCamera->ProjectPoint(worldSpaceLocation, windowSpace);
|
mainCamera->ProjectPoint(newWorldLocation, windowSpace);
|
||||||
|
|
||||||
return (windowSpace.X >= 0 && windowSpace.X <= screenSize.X) &&
|
return (windowSpace.X >= 0 && windowSpace.X <= screenSize.X) &&
|
||||||
(windowSpace.Y >= 0 && windowSpace.Y <= screenSize.Y);
|
(windowSpace.Y >= 0 && windowSpace.Y <= screenSize.Y);
|
||||||
|
|||||||
Reference in New Issue
Block a user