using Godot; using System.Text; using System.Collections.Generic; namespace Rokojori { public class Cameras { public static float ComputeCameraFrameFittingDistance( Camera3D camera, float radius ) { var fovRadians = Mathf.DegToRad( camera.Fov ); return ( radius * 2 ) / Mathf.Tan( fovRadians / 2.0f ); } public static float ComputeCameraFrameFittingDistance( float fovDegrees, float radius ) { var fovRadians = Mathf.DegToRad( fovDegrees ); return ( radius * 2 ) / Mathf.Tan( fovRadians / 2.0f ); } public static float ComputeCameraFittingScale( float fovDegrees, float distance ) { var fovRadians = Mathf.DegToRad( fovDegrees ); return distance / ( 0.5f / Mathf.Tan( fovRadians / 2.0f ) ); } public static float ComputeFOVForBillboard( float fovDegrees, float radius, float placingDistance ) { var fovRadians = Mathf.DegToRad( fovDegrees ); var d = ( radius * Mathf.Tan( fovRadians / 2f ) ) / placingDistance; var rads = 2f * Mathf.Atan( d ); return Mathf.RadToDeg( rads ); } } }