Program Listing for File Clouds.hpp
↰ Return to documentation for file (Src/GraphicsEngineOpenGL/scene/atmospheric_effects/clouds/Clouds.hpp
)
#pragma once
#include <memory>
#include "Noise.hpp"
#include "renderer/ShaderProgram.hpp"
#include "scene/AABB.hpp"
#include "util/RandomNumbers.hpp"
class Clouds
{
public:
Clouds();
void render(glm::mat4 projection_matrix, glm::mat4 view_matrix, GLuint window_width, GLuint window_height);
void read();
void create_noise_textures();
glm::mat4 get_model() const;
glm::vec3 get_movement_direction() const { return movement_direction; };
glm::vec3 get_radius() const { return scale_factor / 2.f; };
glm::mat4 get_normal_model() const { return glm::transpose(glm::inverse(model)); };
glm::vec3 get_mesh_scale() const { return scale_factor; };
GLfloat get_movement_speed() const { return movement_speed; };
GLfloat get_density() const { return density; };
GLfloat get_scale() const { return scale; };
GLfloat get_pillowness() const { return pillowness; };
GLfloat get_cirrus_effect() const { return cirrus_effect; };
GLuint get_num_march_steps() const { return num_march_steps; };
GLuint get_num_march_steps_to_light() const { return num_march_steps_to_light; };
bool get_powder_effect() const { return powder_effect; };
std::shared_ptr<ShaderProgram> get_shader_program() const { return shader_program; };
void set_powder_effect(bool cloud_powder_effect);
void set_cirrus_effect(GLfloat cirrus_effect);
void set_pillowness(GLfloat cloud_pillowness);
void set_scale(GLfloat scale);
void set_density(GLfloat density);
void set_movement_speed(GLfloat speed);
void set_scale(glm::vec3 scale);
void set_translation(glm::vec3 translation);
void set_movement_direction(glm::vec3 movement_dir);
void set_num_march_steps(GLuint num_march_steps);
void set_num_march_steps_to_light(GLuint num_march_steps_to_light);
~Clouds();
private:
std::shared_ptr<ShaderProgram> shader_program;
std::shared_ptr<Noise> noise;
std::shared_ptr<RandomNumbers> random_numbers;
glm::mat4 model;
AABB aabb;
GLfloat minX, maxX, minY, maxY, minZ, maxZ;
glm::vec3 movement_direction;
glm::vec3 scale_factor, translation;
GLfloat movement_speed, density, scale, pillowness, cirrus_effect;
GLuint num_march_steps, num_march_steps_to_light;
bool powder_effect;
};