Переделка камеры
This commit is contained in:
parent
f94d55aaf4
commit
5c88cabf7e
|
@ -21,6 +21,15 @@
|
||||||
// Стандартная чувствительность
|
// Стандартная чувствительность
|
||||||
#define CAMERA_DEFAULT_SENSIVITY 0.005f
|
#define CAMERA_DEFAULT_SENSIVITY 0.005f
|
||||||
|
|
||||||
|
// Данные о камере для шейдера
|
||||||
|
struct CameraData
|
||||||
|
{
|
||||||
|
glm::mat4 projection;
|
||||||
|
glm::mat4 view;
|
||||||
|
glm::vec3 position;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Класс камеры
|
||||||
class Camera : public Node
|
class Camera : public Node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -43,6 +52,8 @@ class Camera : public Node
|
||||||
|
|
||||||
void use(); // Использование этой камеры как текущей
|
void use(); // Использование этой камеры как текущей
|
||||||
static Camera& current(); // Ссылка на текущую используемую камеру
|
static Camera& current(); // Ссылка на текущую используемую камеру
|
||||||
|
|
||||||
|
CameraData& getData(); // Данные о камере для шейдера
|
||||||
protected:
|
protected:
|
||||||
Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы
|
Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,3 +181,11 @@ Camera& Camera::current()
|
||||||
else
|
else
|
||||||
return *p_current;
|
return *p_current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Данные о камере для шейдера
|
||||||
|
CameraData& Camera::getData()
|
||||||
|
{
|
||||||
|
static CameraData data;
|
||||||
|
data = {getProjection(), getView(), position};
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
|
@ -112,7 +112,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(LightData), 2);
|
UBO light_data(&light, sizeof(LightData), 2);
|
||||||
|
|
||||||
|
@ -122,8 +122,7 @@ int main(void)
|
||||||
while(!glfwWindowShouldClose(window))
|
while(!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
// Загрузка данных о камере
|
// Загрузка данных о камере
|
||||||
cameraUB.loadSub(&Camera::current().getProjection(), sizeof(glm::mat4), 0);
|
cameraUB.loadSub(&Camera::current().getData(), sizeof(CameraData));
|
||||||
cameraUB.loadSub(&Camera::current().getView(), sizeof(glm::mat4), sizeof(glm::mat4));
|
|
||||||
|
|
||||||
// Очистка буфера цвета
|
// Очистка буфера цвета
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
Loading…
Reference in New Issue