Camera |
public static Size GetPerspectiveWorldSize( Size desiredScreenSize, double lookDirectionDistance, double fieldOfView, Size viewport3DSize )
GetPerspectiveWorldSize calculates a size in 3D world from a screen Size (screenSize in screen coordinates) that is at distanceFromCamera and shown with perspective camera with fieldOfView and in Viewport3D with viewport3DSize.
To get the most accurate results the lookDirectionDistance must not be the direct distance from the camera but the distance in the camera's look direction. The lookDirectionDistance can be calculated with the following code:
var targetPosition = new Point3D(x,y,z); var cameraPosition = Camera1.GetCameraPosition(); var distanceVector = targetPosition - cameraPosition; var lookDirection = Camera1.LookDirection; lookDirection.Normalize(); // To get look direction distance we project the distanceVector to the look direction vector var lookDirectionDistance = Vector3D.DotProduct(distanceVector, lookDirection); var screenSize = GetPerspectiveScreenSize(worldSize, lookDirectionDistance, Camera1.FieldOfView, viewport3DSize)