static void DrawArc(PanoramicCamera src, Vector3 normal, float positionInOtherDimension, float radius) { if (normal == Vector3.up) { //var from = new Vector3(Mathf.Sin(-(src.horizontalFieldOfView / 2f * Mathf.Deg2Rad)), 0, Mathf.Cos(-(src.horizontalFieldOfView / 2f * Mathf.Deg2Rad))); var from = new Vector3(0, Mathf.Sin((src.verticalFieldOfView * positionInOtherDimension * Mathf.Deg2Rad)), Mathf.Cos(-(src.verticalFieldOfView * positionInOtherDimension * Mathf.Deg2Rad)));; from = Quaternion.Euler(0, -src.horizontalFieldOfView * .5f, 0) * from; Handles.DrawWireArc(src.transform.position, src.transform.rotation * normal, src.transform.rotation * from, src.horizontalFieldOfView, radius); } else { var from = new Vector3(0, Mathf.Sin(-(src.verticalFieldOfView / 2f * Mathf.Deg2Rad)), Mathf.Cos(-(src.verticalFieldOfView / 2f * Mathf.Deg2Rad))); Handles.DrawWireArc(src.transform.position, src.transform.rotation * Quaternion.Euler(0, src.horizontalFieldOfView * positionInOtherDimension, 0) * normal, src.transform.rotation * Quaternion.Euler(0, src.horizontalFieldOfView * positionInOtherDimension, 0) * from, src.verticalFieldOfView, radius); } }
static void DrawLine(PanoramicCamera src, Vector2 angles) { var p = new Vector3(0, Mathf.Sin(-(src.verticalFieldOfView * angles.y * Mathf.Deg2Rad)), Mathf.Cos(-(src.verticalFieldOfView * angles.y * Mathf.Deg2Rad)));; p = Quaternion.Euler(0, -src.horizontalFieldOfView * angles.x, 0) * p; Handles.DrawLine( src.transform.TransformPoint(p * src.farClipPlane), src.transform.TransformPoint(p * src.nearClipPlane)); }
static void RenderSelected(PanoramicCamera src, GizmoType gizmoType) { Handles.color = Color.gray; DrawDoubleArc(src, Vector3.up, 0f); DrawDoubleArc(src, Vector3.left, 0f); for (float i = 0.5f; i > 0f; i -= .25f) { DrawQuadrupleArc(src, Vector3.left, i); DrawQuadrupleArc(src, Vector3.up, i); } DrawLine(src, new Vector2(.5f, .5f)); DrawLine(src, new Vector2(.5f, -.5f)); DrawLine(src, new Vector2(-.5f, -.5f)); DrawLine(src, new Vector2(-.5f, .5f)); }
static void DrawDoubleArc(PanoramicCamera src, Vector3 normal, float positionInOtherDimension) { DrawArc(src, normal, positionInOtherDimension, src.nearClipPlane); DrawArc(src, normal, positionInOtherDimension, src.farClipPlane); }
static void DrawQuadrupleArc(PanoramicCamera src, Vector3 normal, float positionInOtherDimension) { DrawDoubleArc(src, normal, positionInOtherDimension); DrawDoubleArc(src, normal, -positionInOtherDimension); }