improving brush tips browser, average stroke direction
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user