From 4a05bda62f3ed42d99475fc9b9d4dd8f61fe66e4 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 28 Jul 2018 12:27:40 +0200 Subject: [PATCH] adjust HSV jitter, add average --- engine/brush.cpp | 13 +++++++++---- engine/brush.h | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/engine/brush.cpp b/engine/brush.cpp index 7fe3580..48a1623 100644 --- a/engine/brush.cpp +++ b/engine/brush.cpp @@ -144,10 +144,11 @@ ui::StrokeSample ui::Stroke::randomize_sample(const glm::vec2& pos, float pressu s.size = 800.f * m_brush.m_tip_size * (1.f - rnd_nor() * m_brush.m_jitter_scale) * size_dyn; s.flow = m_brush.m_tip_flow * (1.f - rnd_nor() * m_brush.m_jitter_flow) * flow_dyn; auto hsv = convert_rgb2hsv(m_brush.m_tip_color); - hsv.x = hsv.x + (rnd_nor() - 0.5f) * m_brush.m_jitter_hue + (pressure * 2.0f - 0.5f) * m_brush.m_tip_hue * m_brush.m_tip_hue_pressure; - hsv.y = hsv.y + (rnd_nor() - 0.5f) * m_brush.m_jitter_sat + (pressure * 2.0f - 0.5f) * m_brush.m_tip_sat * m_brush.m_tip_sat_pressure; - hsv.z = hsv.z + (rnd_nor() - 0.5f) * m_brush.m_jitter_val + (pressure * 2.0f - 0.5f) * m_brush.m_tip_val * m_brush.m_tip_val_pressure; - s.col = convert_hsv2rgb(hsv); + hsv.x = glm::clamp(glm::mix(hsv.x, (pressure - 0.5f) * 2.0f, m_brush.m_tip_hue * (float)m_brush.m_tip_hue_pressure) + (rnd_nor() - 0.5f) * m_brush.m_jitter_hue, 0.f, 1.f); + hsv.y = glm::clamp(glm::mix(hsv.y, (pressure - 0.5f) * 2.0f, m_brush.m_tip_sat * (float)m_brush.m_tip_sat_pressure) + (rnd_nor() - 0.5f) * m_brush.m_jitter_sat, 0.f, 1.f); + hsv.z = glm::clamp(glm::mix(hsv.z, (pressure - 0.5f) * 2.0f, m_brush.m_tip_val * (float)m_brush.m_tip_val_pressure) + (rnd_nor() - 0.5f) * m_brush.m_jitter_val, 0.f, 1.f); + m_hsv_jitter.add(hsv); + s.col = convert_hsv2rgb(m_hsv_jitter.average()); return s; } std::vector ui::Stroke::compute_samples() @@ -204,6 +205,8 @@ void ui::Stroke::add_point(glm::vec2 pos, float pressure) m_curve = glm::min(m_curve + 0.1f, 1.f); pressure = pressure * glm::pow(m_curve, 2.f); #endif // __IOS__ + m_pressure_buff.add(pressure); + pressure = m_pressure_buff.average(); if (m_brush.m_tip_size_pressure) m_step = glm::max(m_brush.m_tip_spacing * m_brush.m_tip_size * pressure * 800.f, 1.f); @@ -222,6 +225,8 @@ void ui::Stroke::start(const ui::Brush& brush) { m_curve = 0.f; m_curve_angles.clear(); + m_pressure_buff.clear(); + m_hsv_jitter.clear(); m_last_kp = 0; m_dist = 0.f; m_brush = brush; diff --git a/engine/brush.h b/engine/brush.h index 369d0c6..34bf44b 100644 --- a/engine/brush.h +++ b/engine/brush.h @@ -83,6 +83,8 @@ public: Camera m_camera; ui::Brush m_brush; cbuffer m_curve_angles; + cbuffer m_pressure_buff; + cbuffer m_hsv_jitter; StrokeSample m_prev_sample; std::vector m_keypoints; std::vector m_samples;