mirror of
https://github.com/TheRedShip/RT_GPU.git
synced 2025-09-27 18:48:36 +02:00
+ | Fog imGUI
This commit is contained in:
@ -50,6 +50,12 @@ int main(int argc, char **argv)
|
||||
glBufferData(GL_UNIFORM_BUFFER, sizeof(GPUCamera), nullptr, GL_DYNAMIC_DRAW);
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 0, cameraUBO);
|
||||
|
||||
GLuint volumeUBO;
|
||||
glGenBuffers(1, &volumeUBO);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, volumeUBO);
|
||||
glBufferData(GL_UNIFORM_BUFFER, sizeof(GPUVolume), nullptr, GL_STATIC_DRAW);
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 1, volumeUBO);
|
||||
|
||||
shader.attach();
|
||||
|
||||
Vertex vertices[3] = {{{-1.0f, -1.0f}, {0.0f, 0.0f}},{{3.0f, -1.0f}, {2.0f, 0.0f}},{{-1.0f, 3.0f}, {0.0f, 2.0f}}};
|
||||
@ -70,6 +76,9 @@ int main(int argc, char **argv)
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, cameraUBO);
|
||||
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(GPUCamera), &camera_data);
|
||||
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, volumeUBO);
|
||||
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(GPUVolume), &scene.getVolume());
|
||||
|
||||
shader.set_int("u_frameCount", window.getFrameCount());
|
||||
shader.set_int("u_objectsNum", object_data.size());
|
||||
shader.set_int("u_pixelisation", window.getPixelisation());
|
||||
|
@ -15,6 +15,12 @@
|
||||
Scene::Scene()
|
||||
{
|
||||
_camera = new Camera(glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f), -90.0f, 0.0f);
|
||||
|
||||
_gpu_volume.enabled = false;
|
||||
_gpu_volume.sigma_a = glm::vec3(0.0001f);
|
||||
_gpu_volume.sigma_s = glm::vec3(0.0800f);
|
||||
_gpu_volume.sigma_t = _gpu_volume.sigma_a + _gpu_volume.sigma_s;
|
||||
_gpu_volume.g = 0.9f;
|
||||
}
|
||||
|
||||
Scene::~Scene()
|
||||
@ -143,6 +149,11 @@ std::vector<GPUMaterial>& Scene::getMaterialData()
|
||||
return (_gpu_materials);
|
||||
}
|
||||
|
||||
GPUVolume &Scene::getVolume()
|
||||
{
|
||||
return (_gpu_volume);
|
||||
}
|
||||
|
||||
Camera *Scene::getCamera(void) const
|
||||
{
|
||||
return (_camera);
|
||||
|
@ -215,6 +215,29 @@ void Window::imGuiRender()
|
||||
|
||||
ImGui::End();
|
||||
|
||||
ImGui::Begin("Fog settings");
|
||||
|
||||
has_changed |= ImGui::Checkbox("Enable", &_scene->getVolume().enabled);
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::SliderFloat("Absorption", &_scene->getVolume().sigma_a.x, 0., 0.1))
|
||||
{
|
||||
_scene->getVolume().sigma_a = glm::vec3(_scene->getVolume().sigma_a.x);
|
||||
_scene->getVolume().sigma_t = _scene->getVolume().sigma_a + _scene->getVolume().sigma_s;
|
||||
has_changed = true;
|
||||
}
|
||||
if (ImGui::SliderFloat("Scattering", &_scene->getVolume().sigma_s.x, 0., 0.5))
|
||||
{
|
||||
_scene->getVolume().sigma_s = glm::vec3(_scene->getVolume().sigma_s.x);
|
||||
_scene->getVolume().sigma_t = _scene->getVolume().sigma_a + _scene->getVolume().sigma_s;
|
||||
has_changed = true;
|
||||
}
|
||||
if (ImGui::SliderFloat("G", &_scene->getVolume().g, 0., 1.))
|
||||
has_changed = true;
|
||||
|
||||
ImGui::End();
|
||||
|
||||
|
||||
ImGui::Render();
|
||||
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
||||
|
||||
|
Reference in New Issue
Block a user