12 #ifndef hifi_ConicalViewFrustum_h
13 #define hifi_ConicalViewFrustum_h
17 #include <glm/glm.hpp>
22 using ViewFrustums = std::vector<ViewFrustum>;
24 const float SQRT_TWO_OVER_TWO = 0.7071067811865f;
25 const float DEFAULT_VIEW_ANGLE = 1.0f;
26 const float DEFAULT_VIEW_RADIUS = 10.0f;
27 const float DEFAULT_VIEW_FAR_CLIP = 100.0f;
30 class ConicalViewFrustum {
32 ConicalViewFrustum() =
default;
33 ConicalViewFrustum(
const ViewFrustum& viewFrustum) { set(viewFrustum); }
35 void set(
const ViewFrustum& viewFrustum);
38 const glm::vec3& getPosition()
const {
return _position; }
39 const glm::vec3& getDirection()
const {
return _direction; }
40 float getAngle()
const {
return _angle; }
41 float getRadius()
const {
return _radius; }
42 float getFarClip()
const {
return _farClip; }
44 bool isVerySimilar(
const ConicalViewFrustum& other)
const;
46 bool intersects(
const AACube& cube)
const;
47 bool intersects(
const AABox& box)
const;
48 float getAngularSize(
const AACube& cube)
const;
49 float getAngularSize(
const AABox& box)
const;
51 bool intersects(
const glm::vec3& relativePosition,
float distance,
float radius)
const;
52 float getAngularSize(
float distance,
float radius)
const;
54 int serialize(
unsigned char* destinationBuffer)
const;
55 int deserialize(
const unsigned char* sourceBuffer);
58 void setPositionAndSimpleRadius(
const glm::vec3& position,
float radius);
61 glm::vec3 _position { 0.0f, 0.0f, 0.0f };
62 glm::vec3 _direction { 0.0f, 0.0f, 1.0f };
63 float _angle { DEFAULT_VIEW_ANGLE };
64 float _radius { DEFAULT_VIEW_RADIUS };
65 float _farClip { DEFAULT_VIEW_FAR_CLIP };
67 float _sinAngle { SQRT_TWO_OVER_TWO };
68 float _cosAngle { SQRT_TWO_OVER_TWO };
70 using ConicalViewFrustums = std::vector<ConicalViewFrustum>;