Переделка камеры

This commit is contained in:
Ковалев Роман Евгеньевич 2022-11-23 14:14:20 +03:00 committed by R.E. Kovalev
parent 5d50cdc8ca
commit b328c13135
4 changed files with 21 additions and 5 deletions

View File

@ -12,6 +12,13 @@
// Стандартный угол обзора
#define CAMERA_FOVy 60.0f
struct CameraData
{
glm::mat4 projection;
glm::mat4 view;
glm::vec3 position;
};
class Camera
{
public:
@ -28,6 +35,7 @@ class Camera
void setPerspective(float fov, float aspect); // Устанавливает заданную матрицу перспективы
void setOrtho(float width, float height); // Устанавливает заданную ортографическую матрицу
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
CameraData& getData(); // Данные о камере для шейдера
protected:
Camera(const glm::vec3 &position, const glm::vec2 &xyOffset); // Защищенный (protected) констуктор камеры без перспективы
void recalcTarget(); // Пересчет цели, на которую смотрит камера

View File

@ -8,7 +8,8 @@ layout(std140, binding = 0) uniform Camera
{
mat4 projection;
mat4 view;
};
vec3 position;
} camera;
layout(std140, binding = 2) uniform Light
{
@ -22,6 +23,6 @@ out vec2 texCoord;
void main()
{
gl_Position = projection * view * model * vec4(pos, 1.0);
gl_Position = camera.projection * camera.view * model * vec4(pos, 1.0);
texCoord = inTexCoord;
}

View File

@ -139,3 +139,11 @@ void Camera::setSensitivity(float sens)
{
sensitivity = sens;
}
// Данные о камере для шейдера
CameraData& Camera::getData()
{
static CameraData data;
data = {getProjection(), getView(), position};
return data;
}

View File

@ -115,7 +115,7 @@ int main(void)
};
// Uniform-буферы
UBO cameraUB(sizeof(glm::mat4)*2, 0);
UBO cameraUB(sizeof(CameraData), 0);
UBO material_data(sizeof(Material), 1);
UBO light_data(&light, sizeof(PointLight), 2);
@ -128,8 +128,7 @@ int main(void)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Загрузка данных о камере
cameraUB.loadSub(&camera.getProjection(), sizeof(glm::mat4), 0);
cameraUB.loadSub(&camera.getView(), sizeof(glm::mat4), sizeof(glm::mat4));
cameraUB.loadSub(&camera.getData(), sizeof(CameraData));
// Тут производится рендер
scene.render(model_uniform, material_data);