Click or drag to resize
Ab4d.SharpEngine logo

CameraUtilsGetPerspectiveWorldSize Method

GetPerspectiveWorldSize calculates a size in 3D world from a screen size (screenSize in screen coordinates) that is at lookDirectionDistance and shown with perspective camera with fieldOfView and in SceneView with viewSize.

Namespace: Ab4d.SharpEngine.Utilities
Assembly: Ab4d.SharpEngine (in Ab4d.SharpEngine.dll) Version: 2.0.8956+4c7684e186ca1be74e7a284fbe739d9a1b843d3c
Syntax
C#
public static Vector2 GetPerspectiveWorldSize(
	Vector2 desiredScreenSize,
	float lookDirectionDistance,
	float fieldOfView,
	Vector2 viewport3DSize
)

Parameters

desiredScreenSize  Vector2
Size on screen (in same units as viewSize - without DPI scale)
lookDirectionDistance  Single
distance from camera in the camera's look direction (see remarks for more info)
fieldOfView  Single
camera's field of view
viewport3DSize  Vector2
SceneView's size as Vector2

Return Value

Vector2
3D world size as Vector2
Remarks

GetPerspectiveWorldSize calculates a size in 3D world from a screen Size (screenSize in screen coordinates) that is at lookDirectionDistance and shown with perspective camera with fieldOfView and in SceneView with viewSize.

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:

C#
var targetPosition = new Vector3(x,y,z);
var cameraPosition = Camera1.GetCameraPosition();

var distanceVector = targetPosition - cameraPosition;

var lookDirection = Vector3.Normalize(Camera1.GetLookDirection());

// To get look direction distance we project the distanceVector to the look direction vector
var lookDirectionDistance = Vector3.Dot(distanceVector, lookDirection);

var screenSize = GetPerspectiveScreenSize(worldSize, lookDirectionDistance, Camera1.FieldOfView, viewSize)
See Also