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