private static GetFrustum ( |
||
camera | ||
near | Vector3 | |
far | Vector3 | |
frustumAspect | float | |
return | bool |
private static bool GetFrustum(Camera camera, Vector3[] near, Vector3[] far, out float frustumAspect)
{
frustumAspect = GetFrustumAspectRatio(camera);
if (frustumAspect < 0f)
{
return false;
}
if (far != null)
{
far[0] = new Vector3(0f, 0f, camera.farClipPlane);
far[1] = new Vector3(0f, 1f, camera.farClipPlane);
far[2] = new Vector3(1f, 1f, camera.farClipPlane);
far[3] = new Vector3(1f, 0f, camera.farClipPlane);
for (int i = 0; i < 4; i++)
{
far[i] = camera.ViewportToWorldPoint(far[i]);
}
}
if (near != null)
{
near[0] = new Vector3(0f, 0f, camera.nearClipPlane);
near[1] = new Vector3(0f, 1f, camera.nearClipPlane);
near[2] = new Vector3(1f, 1f, camera.nearClipPlane);
near[3] = new Vector3(1f, 0f, camera.nearClipPlane);
for (int j = 0; j < 4; j++)
{
near[j] = camera.ViewportToWorldPoint(near[j]);
}
}
return true;
}
public void OnSceneGUI() { Camera camera = (Camera)base.target; if (CameraEditor.IsViewPortRectValidToRender(camera.rect)) { SceneViewOverlay.Window(new GUIContent("Camera Preview"), new SceneViewOverlay.WindowFunction(this.OnOverlayGUI), -100, base.target, SceneViewOverlay.WindowDisplayOption.OneWindowPerTarget); Color color = Handles.color; Color color2 = CameraEditor.kGizmoCamera; color2.a *= 2f; Handles.color = color2; Vector3[] array = new Vector3[4]; float num; if (CameraEditor.GetFrustum(camera, null, array, out num)) { Vector3 vector = array[0]; Vector3 vector2 = array[1]; Vector3 vector3 = array[2]; Vector3 vector4 = array[3]; bool changed = GUI.changed; Vector3 vector5 = Vector3.Lerp(vector, vector3, 0.5f); float num2 = -1f; Vector3 a = CameraEditor.MidPointPositionSlider(vector2, vector3, camera.transform.up); if (!GUI.changed) { a = CameraEditor.MidPointPositionSlider(vector, vector4, -camera.transform.up); } if (GUI.changed) { num2 = (a - vector5).magnitude; } GUI.changed = false; a = CameraEditor.MidPointPositionSlider(vector4, vector3, camera.transform.right); if (!GUI.changed) { a = CameraEditor.MidPointPositionSlider(vector, vector2, -camera.transform.right); } if (GUI.changed) { num2 = (a - vector5).magnitude / num; } if (num2 >= 0f) { Undo.RecordObject(camera, "Adjust Camera"); if (camera.orthographic) { camera.orthographicSize = num2; } else { Vector3 a2 = vector5 + camera.transform.up * num2; camera.fieldOfView = Vector3.Angle(camera.transform.forward, a2 - camera.transform.position) * 2f; } changed = true; } GUI.changed = changed; Handles.color = color; } } }