Доработка камеры
This commit is contained in:
parent
24e509aa1f
commit
95162bf637
|
@ -38,8 +38,8 @@ struct CameraData
|
||||||
class Camera : public Node
|
class Camera : public Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Camera(float aspect, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION, float fovy = CAMERA_FOVy); // Конструктор камеры с проекцией перспективы
|
Camera(float aspect, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION, float fovy = CAMERA_FOVy, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Конструктор камеры с проекцией перспективы
|
||||||
Camera(float width, float height, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION); // Конструктор ортографической камеры
|
Camera(float width, float height, const glm::vec3 &position = glm::vec3(0.0f), const glm::vec3 &initialRotation = CAMERA_DEFAULT_ROTATION, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Конструктор ортографической камеры
|
||||||
Camera(const Camera& copy); // Конструктор копирования камеры
|
Camera(const Camera& copy); // Конструктор копирования камеры
|
||||||
Camera& operator=(const Camera& other); // Оператор присваивания
|
Camera& operator=(const Camera& other); // Оператор присваивания
|
||||||
virtual ~Camera(); // Деструктор
|
virtual ~Camera(); // Деструктор
|
||||||
|
@ -50,8 +50,8 @@ class Camera : public Node
|
||||||
|
|
||||||
void rotate(const glm::vec2 &xyOffset); // Поворачивает камеру на dx и dy пикселей с учетом чувствительности
|
void rotate(const glm::vec2 &xyOffset); // Поворачивает камеру на dx и dy пикселей с учетом чувствительности
|
||||||
|
|
||||||
void setPerspective(float fov, float aspect); // Устанавливает заданную матрицу перспективы
|
void setPerspective(float fov, float aspect, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Устанавливает заданную матрицу перспективы
|
||||||
void setOrtho(float width, float height); // Устанавливает заданную ортографическую матрицу
|
void setOrtho(float width, float height, float near = CAMERA_NEAR, float far = CAMERA_FAR); // Устанавливает заданную ортографическую матрицу
|
||||||
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
|
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
|
||||||
const float& getSensitivity() const; // Возвращает чувствительность мыши
|
const float& getSensitivity() const; // Возвращает чувствительность мыши
|
||||||
|
|
||||||
|
|
|
@ -21,17 +21,17 @@ Camera::Camera(const glm::vec3 &pos, const glm::vec3 &initialRotation) : Node(NU
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конструктор камеры с проекцией перспективы
|
// Конструктор камеры с проекцией перспективы
|
||||||
Camera::Camera(float aspect, const glm::vec3 &position, const glm::vec3 &initialRotation, float fovy)
|
Camera::Camera(float aspect, const glm::vec3 &position, const glm::vec3 &initialRotation, float fovy, float near, float far)
|
||||||
: Camera(position, initialRotation)
|
: Camera(position, initialRotation)
|
||||||
{
|
{
|
||||||
setPerspective(fovy, aspect);
|
setPerspective(fovy, aspect, near, far);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конструктор ортографической камеры
|
// Конструктор ортографической камеры
|
||||||
Camera::Camera(float width, float height, const glm::vec3 &position, const glm::vec3 &initialRotation)
|
Camera::Camera(float width, float height, const glm::vec3 &position, const glm::vec3 &initialRotation, float near, float far)
|
||||||
: Camera(position, initialRotation)
|
: Camera(position, initialRotation)
|
||||||
{
|
{
|
||||||
setOrtho(width, height);
|
setOrtho(width, height, near, far);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конструктор копирования камеры
|
// Конструктор копирования камеры
|
||||||
|
@ -90,19 +90,19 @@ const glm::mat4& Camera::getVP()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Устанавливает заданную матрицу перспективы
|
// Устанавливает заданную матрицу перспективы
|
||||||
void Camera::setPerspective(float fovy, float aspect)
|
void Camera::setPerspective(float fovy, float aspect, float near, float far)
|
||||||
{
|
{
|
||||||
projection = glm::perspective(glm::radians(fovy), aspect, CAMERA_NEAR, CAMERA_FAR);
|
projection = glm::perspective(glm::radians(fovy), aspect, near, far);
|
||||||
requiredRecalcVP = true;
|
requiredRecalcVP = true;
|
||||||
for (int cascade = 0; cascade < CAMERA_CASCADE_COUNT; cascade++)
|
for (int cascade = 0; cascade < CAMERA_CASCADE_COUNT; cascade++)
|
||||||
cascade_proj[cascade] = glm::perspective(glm::radians(fovy), aspect, camera_cascade_distances[cascade], camera_cascade_distances[cascade+1]);
|
cascade_proj[cascade] = glm::perspective(glm::radians(fovy), aspect, camera_cascade_distances[cascade], camera_cascade_distances[cascade+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Устанавливает заданную ортографическую матрицу
|
// Устанавливает заданную ортографическую матрицу
|
||||||
void Camera::setOrtho(float width, float height)
|
void Camera::setOrtho(float width, float height, float near, float far)
|
||||||
{
|
{
|
||||||
const float aspect = width / height;
|
const float aspect = width / height;
|
||||||
projection = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, CAMERA_NEAR, CAMERA_FAR);
|
projection = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, near, far);
|
||||||
requiredRecalcVP = true;
|
requiredRecalcVP = true;
|
||||||
for (int cascade = 0; cascade < CAMERA_CASCADE_COUNT; cascade++)
|
for (int cascade = 0; cascade < CAMERA_CASCADE_COUNT; cascade++)
|
||||||
cascade_proj[cascade] = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, camera_cascade_distances[cascade], camera_cascade_distances[cascade+1]);
|
cascade_proj[cascade] = glm::ortho(-1.0f, 1.0f, -1.0f/aspect, 1.0f/aspect, camera_cascade_distances[cascade], camera_cascade_distances[cascade+1]);
|
||||||
|
|
Loading…
Reference in New Issue