reset direction smoothing when angle is big
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user