Tanoda
Frustum.cs
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) Ultraleap, Inc. 2011-2020. *
3 * *
4 * Use subject to the terms of the Apache License 2.0 available at *
5 * http://www.apache.org/licenses/LICENSE-2.0, or another agreement *
6 * between Ultraleap and you, your company or other organization. *
7 ******************************************************************************/
8
10using Leap.Unity.Infix;
11using UnityEngine;
12
13namespace Leap.Unity.Geometry {
14
15 [System.Serializable]
16 public struct Frustum {
17
18 [SerializeField]
19 private float _angle;
20 public float angle {
21 get { _angle = Mathf.Clamp(_angle, -179f, 179f); return _angle; }
22 set { _angle = Mathf.Clamp(value, -179f, 179f); }
23 }
24 public float near;
25 public float far;
26 public Transform transform;
27
28 public Frustum(float angle, float near = 0.10f, float far = 0.50f,
29 Transform transform = null)
30 {
31 this._angle = angle; this.near = near; this.far = far;
32 this.transform = transform;
33 }
34
35 public void Draw(Drawer drawer) {
36 var forward = Vector3.forward;
37 var alpha = 0.3f;
38 var color = LeapColor.cerulean.WithAlpha(alpha);
39
40 // Near surface.
41 var nearVec = forward * near;
42 var nearRad = Mathf.Tan(angle/2f * Mathf.Deg2Rad) * near;
43 var nearCircle = new Geometry.Circle(center: nearVec,
44 direction: forward, radius: nearRad, transform: transform);
45 nearCircle.Draw(drawer, color);
46
47 // Far surface.
48 var farVec = forward * far;
49 var farRad = Mathf.Tan(angle/2f * Mathf.Deg2Rad) * far;
50 var farCircle = new Geometry.Circle(center: farVec,
51 direction: forward, radius: farRad, transform: transform);
52 farCircle.Draw(drawer, color);
53
54 var nearCirclePoints = nearCircle.Points(7);
55 var farCirclePoints = farCircle.Points(7);
56 for (var i = 0; i < 7; i++) {
57 nearCirclePoints.MoveNext();
58 farCirclePoints.MoveNext();
59 drawer.Line(nearCirclePoints.Current, farCirclePoints.Current);
60 }
61
62 for (var rMult = 0.8f; rMult > 0.1f; rMult -= 0.2f) {
63 drawer.color = color.WithAlpha(rMult * rMult * alpha);
64 nearCircle.radius = nearRad * rMult;
65 nearCircle.Draw(drawer);
66 }
67
68 for (var rMult = 0.8f; rMult > 0.1f; rMult -= 0.2f) {
69 drawer.color = color.WithAlpha(rMult * rMult * alpha);
70 farCircle.radius = farRad * rMult;
71 farCircle.Draw(drawer);
72 }
73 }
74
75 }
76
77}
Simple drawing interface abstraction (intended for debug drawing, not production!) with statically-ac...
Definition: Drawer.cs:19
void Line(Vector3 a, Vector3 b)
Definition: Drawer.cs:140
Color color
Calls the setColor delegate.
Definition: Drawer.cs:26
Frustum(float angle, float near=0.10f, float far=0.50f, Transform transform=null)
Definition: Frustum.cs:28
void Draw(Drawer drawer)
Definition: Frustum.cs:35