65 const glm::mat4 view_projection = view.projection * view.view;
67 glm::vec2 lo { 1.F, 1.F };
68 glm::vec2 hi { -1.F, -1.F };
69 bool any_in_front =
false;
71 for (
int i = 0; i < 8; ++i) {
72 const glm::vec3 corner {
73 (i & 1) ? world_bounds.max.x : world_bounds.min.x,
74 (i & 2) ? world_bounds.max.y : world_bounds.min.y,
75 (i & 4) ? world_bounds.max.z : world_bounds.min.z,
78 const glm::vec4 clip = view_projection * glm::vec4(corner, 1.F);
82 const glm::vec2 ndc { clip.x / clip.w, clip.y / clip.w };
83 lo = glm::min(lo, ndc);
84 hi = glm::max(hi, ndc);
92 .min = glm::clamp(lo, glm::vec2(-1.F), glm::vec2(1.F)),
93 .max = glm::clamp(hi, glm::vec2(-1.F), glm::vec2(1.F)),