Переделка камеры
This commit is contained in:
parent
4901238b21
commit
15bbb9e349
@ -12,6 +12,13 @@
|
|||||||
// Стандартный угол обзора
|
// Стандартный угол обзора
|
||||||
#define CAMERA_FOVy 60.0f
|
#define CAMERA_FOVy 60.0f
|
||||||
|
|
||||||
|
struct CameraData
|
||||||
|
{
|
||||||
|
glm::mat4 projection;
|
||||||
|
glm::mat4 view;
|
||||||
|
glm::vec3 position;
|
||||||
|
};
|
||||||
|
|
||||||
class Camera
|
class Camera
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -28,6 +35,7 @@ class Camera
|
|||||||
void setPerspective(float fov, float aspect); // Устанавливает заданную матрицу перспективы
|
void setPerspective(float fov, float aspect); // Устанавливает заданную матрицу перспективы
|
||||||
void setOrtho(float width, float height); // Устанавливает заданную ортографическую матрицу
|
void setOrtho(float width, float height); // Устанавливает заданную ортографическую матрицу
|
||||||
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
|
void setSensitivity(float sensitivity); // Изменяет чувствительность мыши
|
||||||
|
CameraData& getData(); // Данные о камере для шейдера
|
||||||
protected:
|
protected:
|
||||||
Camera(const glm::vec3 &position, const glm::vec2 &xyOffset); // Защищенный (protected) констуктор камеры без перспективы
|
Camera(const glm::vec3 &position, const glm::vec2 &xyOffset); // Защищенный (protected) констуктор камеры без перспективы
|
||||||
void recalcTarget(); // Пересчет цели, на которую смотрит камера
|
void recalcTarget(); // Пересчет цели, на которую смотрит камера
|
||||||
|
@ -8,7 +8,8 @@ layout(std140, binding = 0) uniform Camera
|
|||||||
{
|
{
|
||||||
mat4 projection;
|
mat4 projection;
|
||||||
mat4 view;
|
mat4 view;
|
||||||
};
|
vec3 position;
|
||||||
|
} camera;
|
||||||
|
|
||||||
layout(std140, binding = 2) uniform Light
|
layout(std140, binding = 2) uniform Light
|
||||||
{
|
{
|
||||||
@ -22,6 +23,6 @@ out vec2 texCoord;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = projection * view * model * vec4(pos, 1.0);
|
gl_Position = camera.projection * camera.view * model * vec4(pos, 1.0);
|
||||||
texCoord = inTexCoord;
|
texCoord = inTexCoord;
|
||||||
}
|
}
|
||||||
|
@ -139,3 +139,11 @@ void Camera::setSensitivity(float sens)
|
|||||||
{
|
{
|
||||||
sensitivity = sens;
|
sensitivity = sens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Данные о камере для шейдера
|
||||||
|
CameraData& Camera::getData()
|
||||||
|
{
|
||||||
|
static CameraData data;
|
||||||
|
data = {getProjection(), getView(), position};
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
@ -115,7 +115,7 @@ int main(void)
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Uniform-буферы
|
// Uniform-буферы
|
||||||
UBO cameraUB(sizeof(glm::mat4)*2, 0);
|
UBO cameraUB(sizeof(CameraData), 0);
|
||||||
UBO material_data(sizeof(Material), 1);
|
UBO material_data(sizeof(Material), 1);
|
||||||
UBO light_data(&light, sizeof(PointLight), 2);
|
UBO light_data(&light, sizeof(PointLight), 2);
|
||||||
|
|
||||||
@ -128,8 +128,7 @@ int main(void)
|
|||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
// Загрузка данных о камере
|
// Загрузка данных о камере
|
||||||
cameraUB.loadSub(&camera.getProjection(), sizeof(glm::mat4), 0);
|
cameraUB.loadSub(&camera.getData(), sizeof(CameraData));
|
||||||
cameraUB.loadSub(&camera.getView(), sizeof(glm::mat4), sizeof(glm::mat4));
|
|
||||||
|
|
||||||
// Тут производится рендер
|
// Тут производится рендер
|
||||||
scene.render(model_uniform, material_data);
|
scene.render(model_uniform, material_data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user