improving brush tips browser, average stroke direction

This commit is contained in:
2019-01-31 13:56:54 +01:00
parent ff633eb2c8
commit c451acb6bc
8 changed files with 61 additions and 26 deletions

View File

@@ -170,22 +170,31 @@ std::vector<StrokeSample> Stroke::compute_samples()
float pressure = glm::lerp(A.pressure, B.pressure, t);
auto s = randomize_sample(pos, pressure, 0);
if (m_brush->m_tip_angle_follow)
if (s.valid())
{
auto& pre = m_prev_sample;
glm::vec2 v = glm::normalize(s.origin - pre.origin);
float curve_angle = -glm::orientedAngle(v, glm::vec2(1, 0));
// NOTE: average angles need correction for 0-360 discontinuity
//m_curve_angles.add(curve_angle);
//float avg = m_curve_angles.average();
s.angle += curve_angle;
if (m_brush->m_tip_angle_follow)
{
glm::vec2 v = s.origin - m_prev_sample.origin;
if (v.length() > 0)
{
m_direction.add((v));
auto avg = m_direction.average();
float curve_angle = -glm::orientedAngle(glm::normalize(avg), glm::vec2(1, 0));
// NOTE: average angles need correction for 0-360 discontinuity
//m_curve_angles.add(curve_angle);
//float avg = m_curve_angles.average();
s.angle += curve_angle;
}
}
m_prev_sample = s;
samples.push_back(s);
}
m_prev_sample = s;
if (!s.valid())
else
{
LOG("Invalid sample");
samples.push_back(s);
}
}
return samples;
}
@@ -237,7 +246,7 @@ void Stroke::start(const std::shared_ptr<Brush>& brush)
{
m_hold_points.clear();
m_curve = 0.f;
m_curve_angles.clear();
m_direction.clear();
m_pressure_buff.clear();
m_hsv_jitter.clear();
m_last_kp = 0;