reset direction smoothing when angle is big

This commit is contained in:
2019-02-26 16:48:13 +01:00
parent cedb8bc3fe
commit c66edd9b98

View File

@@ -188,15 +188,18 @@ std::vector<StrokeSample> Stroke::compute_samples()
{
glm::vec2 v = glm::normalize(m_keypoints[m_last_kp].pos - m_keypoints[m_dir_kp].pos);
m_dir_angle = -glm::orientedAngle(v, m_dir_ref);
if (m_brush->m_tip_angle_smooth > 0 && (glm::abs(m_dir_angle) > glm::pi<float>() / 2.f || !m_dir_valid))
if (m_brush->m_tip_angle_smooth > 0 && (glm::abs(m_dir_angle) > glm::radians(30.f) || !m_dir_valid))
{
//if (glm::abs(m_dir_angle) > glm::radians(110.f))
// LOG("BIG ANGLE");
if (glm::abs(m_dir_angle) > glm::radians(100.f))
{
//LOG("BIG ANGLE");
m_direction.clear();
}
auto old_dir = m_dir_ref;
m_dir_ref = v;
m_dir_ref_angle = -glm::orientedAngle(m_dir_ref, { 1, 0 });
m_dir_angle = 0;
//m_direction.clear();
auto angle_diff = -glm::orientedAngle(m_dir_ref, old_dir);
for (int i = 0; i < m_direction.m_count; i++)
m_direction.m_vec[i] -= angle_diff;