mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 08:09:19 +02:00
tune headlight parameters, refactor config window
This commit is contained in:
@@ -31,6 +31,8 @@ void gl::glsl_common_setup()
|
|||||||
|
|
||||||
float linear;
|
float linear;
|
||||||
float quadratic;
|
float quadratic;
|
||||||
|
|
||||||
|
float intensity;
|
||||||
float ambient;
|
float ambient;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
2
gl/ubo.h
2
gl/ubo.h
@@ -88,8 +88,8 @@ namespace gl
|
|||||||
float linear;
|
float linear;
|
||||||
float quadratic;
|
float quadratic;
|
||||||
|
|
||||||
|
float intensity;
|
||||||
float ambient;
|
float ambient;
|
||||||
UBS_PAD(4);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(light_element_ubs) == 64, "bad size of ubs");
|
static_assert(sizeof(light_element_ubs) == 64, "bad size of ubs");
|
||||||
|
|||||||
46
renderer.cpp
46
renderer.cpp
@@ -442,6 +442,28 @@ void opengl_renderer::SwapBuffers()
|
|||||||
Timer::subsystem.gfx_swap.stop();
|
Timer::subsystem.gfx_swap.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void opengl_renderer::draw_debug_ui()
|
||||||
|
{
|
||||||
|
if (!debug_ui_active)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ImGui::Begin("headlight config", &debug_ui_active))
|
||||||
|
{
|
||||||
|
ImGui::SetWindowSize(ImVec2(0, 0));
|
||||||
|
|
||||||
|
headlight_config_s &conf = headlight_config;
|
||||||
|
ImGui::SliderFloat("in_cutoff", &conf.in_cutoff, 0.9f, 1.1f);
|
||||||
|
ImGui::SliderFloat("out_cutoff", &conf.out_cutoff, 0.9f, 1.1f);
|
||||||
|
|
||||||
|
ImGui::SliderFloat("falloff_linear", &conf.falloff_linear, 0.0f, 1.0f, "%.3f", 2.0f);
|
||||||
|
ImGui::SliderFloat("falloff_quadratic", &conf.falloff_quadratic, 0.0f, 1.0f, "%.3f", 2.0f);
|
||||||
|
|
||||||
|
ImGui::SliderFloat("ambient", &conf.ambient, 0.0f, 3.0f);
|
||||||
|
ImGui::SliderFloat("intensity", &conf.intensity, 0.0f, 10.0f);
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
// runs jobs needed to generate graphics for specified render pass
|
// runs jobs needed to generate graphics for specified render pass
|
||||||
void opengl_renderer::Render_pass(rendermode const Mode)
|
void opengl_renderer::Render_pass(rendermode const Mode)
|
||||||
{
|
{
|
||||||
@@ -633,18 +655,8 @@ void opengl_renderer::Render_pass(rendermode const Mode)
|
|||||||
if (!Global.gfx_usegles && !Global.gfx_shadergamma)
|
if (!Global.gfx_usegles && !Global.gfx_shadergamma)
|
||||||
glDisable(GL_FRAMEBUFFER_SRGB);
|
glDisable(GL_FRAMEBUFFER_SRGB);
|
||||||
|
|
||||||
if (DebugModeFlag)
|
|
||||||
{
|
|
||||||
ImGui::Begin("light conf");
|
|
||||||
ImGui::SliderFloat("in_cutoff", &in_cutoff, 0.9f, 1.1f);
|
|
||||||
ImGui::SliderFloat("out_cutoff", &out_cutoff, 0.9f, 1.1f);
|
|
||||||
ImGui::SliderFloat("linear", &linear, 0.0f, 1.0f, "%.3f", 2.0f);
|
|
||||||
ImGui::SliderFloat("quadratic", &quadratic, 0.0f, 1.0f, "%.3f", 2.0f);
|
|
||||||
ImGui::SliderFloat("ambient", &ambient, 0.0f, 1.0f);
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
glDebug("uilayer render");
|
glDebug("uilayer render");
|
||||||
|
draw_debug_ui();
|
||||||
Application.render_ui();
|
Application.render_ui();
|
||||||
|
|
||||||
// restore binding
|
// restore binding
|
||||||
@@ -3711,12 +3723,13 @@ void opengl_renderer::Update_Lights(light_array &Lights)
|
|||||||
l->pos = mv * glm::vec4(renderlight->position, 1.0f);
|
l->pos = mv * glm::vec4(renderlight->position, 1.0f);
|
||||||
l->dir = mv * glm::vec4(renderlight->direction, 0.0f);
|
l->dir = mv * glm::vec4(renderlight->direction, 0.0f);
|
||||||
l->type = gl::light_element_ubs::SPOT;
|
l->type = gl::light_element_ubs::SPOT;
|
||||||
l->in_cutoff = in_cutoff;
|
l->in_cutoff = headlight_config.in_cutoff;
|
||||||
l->out_cutoff = out_cutoff;
|
l->out_cutoff = headlight_config.out_cutoff;
|
||||||
l->color = renderlight->diffuse * renderlight->factor;
|
l->color = renderlight->diffuse * renderlight->factor;
|
||||||
l->linear = linear / 10.0f;
|
l->linear = headlight_config.falloff_linear / 10.0f;
|
||||||
l->quadratic = quadratic / 100.0f;
|
l->quadratic = headlight_config.falloff_quadratic / 100.0f;
|
||||||
l->ambient = ambient;
|
l->ambient = headlight_config.ambient;
|
||||||
|
l->intensity = headlight_config.intensity;
|
||||||
light_i++;
|
light_i++;
|
||||||
|
|
||||||
++renderlight;
|
++renderlight;
|
||||||
@@ -3727,6 +3740,7 @@ void opengl_renderer::Update_Lights(light_array &Lights)
|
|||||||
light_ubs.lights[0].dir = mv * glm::vec4(m_sunlight.direction, 0.0f);
|
light_ubs.lights[0].dir = mv * glm::vec4(m_sunlight.direction, 0.0f);
|
||||||
light_ubs.lights[0].color = m_sunlight.diffuse * m_sunlight.factor;
|
light_ubs.lights[0].color = m_sunlight.diffuse * m_sunlight.factor;
|
||||||
light_ubs.lights[0].ambient = 0.0f;
|
light_ubs.lights[0].ambient = 0.0f;
|
||||||
|
light_ubs.lights[0].intensity = 1.0f;
|
||||||
light_ubs.lights_count = light_i;
|
light_ubs.lights_count = light_i;
|
||||||
|
|
||||||
light_ubs.fog_color = Global.FogColor;
|
light_ubs.fog_color = Global.FogColor;
|
||||||
|
|||||||
18
renderer.h
18
renderer.h
@@ -194,6 +194,8 @@ class opengl_renderer
|
|||||||
GLenum static const sunlight{0};
|
GLenum static const sunlight{0};
|
||||||
std::size_t m_drawcount{0};
|
std::size_t m_drawcount{0};
|
||||||
|
|
||||||
|
bool debug_ui_active = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// types
|
// types
|
||||||
enum class rendermode
|
enum class rendermode
|
||||||
@@ -277,6 +279,8 @@ class opengl_renderer
|
|||||||
void draw(const gfx::geometry_handle &handle);
|
void draw(const gfx::geometry_handle &handle);
|
||||||
void draw(std::vector<gfx::geometrybank_handle>::iterator begin, std::vector<gfx::geometrybank_handle>::iterator end);
|
void draw(std::vector<gfx::geometrybank_handle>::iterator begin, std::vector<gfx::geometrybank_handle>::iterator end);
|
||||||
|
|
||||||
|
void draw_debug_ui();
|
||||||
|
|
||||||
// members
|
// members
|
||||||
GLFWwindow *m_window{nullptr};
|
GLFWwindow *m_window{nullptr};
|
||||||
gfx::geometrybank_manager m_geometry;
|
gfx::geometrybank_manager m_geometry;
|
||||||
@@ -412,7 +416,19 @@ class opengl_renderer
|
|||||||
|
|
||||||
bool m_widelines_supported;
|
bool m_widelines_supported;
|
||||||
|
|
||||||
float in_cutoff=0.997f, out_cutoff=0.99f, linear=0.07f, quadratic=0.02f, ambient=0.25f;
|
struct headlight_config_s
|
||||||
|
{
|
||||||
|
float in_cutoff = 1.005f;
|
||||||
|
float out_cutoff = 0.993f;
|
||||||
|
|
||||||
|
float falloff_linear = 0.069f;
|
||||||
|
float falloff_quadratic = 0.03f;
|
||||||
|
|
||||||
|
float intensity = 1.0f;
|
||||||
|
float ambient = 0.184f;
|
||||||
|
};
|
||||||
|
|
||||||
|
headlight_config_s headlight_config;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern opengl_renderer GfxRenderer;
|
extern opengl_renderer GfxRenderer;
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ vec2 calc_point_light(light_s light)
|
|||||||
vec3 light_dir = normalize(light.pos - f_pos.xyz);
|
vec3 light_dir = normalize(light.pos - f_pos.xyz);
|
||||||
vec2 val = calc_light(light_dir);
|
vec2 val = calc_light(light_dir);
|
||||||
val.x += light.ambient;
|
val.x += light.ambient;
|
||||||
|
val *= light.intensity;
|
||||||
|
|
||||||
float distance = length(light.pos - f_pos.xyz);
|
float distance = length(light.pos - f_pos.xyz);
|
||||||
float atten = 1.0f / (1.0f + light.linear * distance + light.quadratic * (distance * distance));
|
float atten = 1.0f / (1.0f + light.linear * distance + light.quadratic * (distance * distance));
|
||||||
|
|||||||
@@ -368,6 +368,8 @@ void ui_layer::render_menu_contents()
|
|||||||
ImGui::MenuItem(LOC_STR(ui_log), "F9", &m_logpanel.is_open);
|
ImGui::MenuItem(LOC_STR(ui_log), "F9", &m_logpanel.is_open);
|
||||||
if (Global.map_enabled && m_map)
|
if (Global.map_enabled && m_map)
|
||||||
ImGui::MenuItem(LOC_STR(ui_map), "Tab", &m_map->map_opened);
|
ImGui::MenuItem(LOC_STR(ui_map), "Tab", &m_map->map_opened);
|
||||||
|
if (DebugModeFlag)
|
||||||
|
ImGui::MenuItem("Headlight config", nullptr, &GfxRenderer.debug_ui_active);
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user