-
Notifications
You must be signed in to change notification settings - Fork 0
/
frustum.hpp
33 lines (28 loc) · 1.33 KB
/
frustum.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once
#include <array>
#include <glm/glm.hpp>
#include "camera.hpp"
/* Klasa do reprezentacji ściętego ostrosłupa widoku kamery. */
class Frustum {
private:
// Współczyniki równań sześciu płaszczyzn ściętego ostrosłupa.
std::array<glm::vec4, 6> planes;
// Wskaźnik do macierzy projekcji kamery, która korzysta z obiektu tej klasy.
const glm::mat4x4 *projMat;
// Wskaźnik do kamery, której tyczy się "frustum".
const Camera *camera;
enum Side {left = 0, right, top, bottom, near, far};
/* Zwraca 1, gdy 'point' leży po dobrej stronie płaszczyzny, czyli po tej, w którą skierowany
jest jej wektor normalny; -1 w przeciwnym przypadku i 0, gdy 'point' leży dokładnie na
płaszczyźnie określonej przez 'plane'. */
int SignedDistToPoint(int plane, const glm::vec3 &point) const;
public:
/* 'camera' - wskaźnik do kamery, której tyczy się "frustum".
'projMat' - macierz projekcji kamery. */
Frustum(const Camera* camera, const glm::mat4x4* projMat);
// "Wyciąga" współczynniki równań płaszczyzn "frustum" z macierzy projekcji.
void ExtractPlanes();
/* Odpowiada na pytanie, czy kostka złożona z punktów w 'points' znajduje się w
w środku tego "frustum". */
bool IsCubeInside(const std::array<glm::vec3, 8> &points) const;
};