Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-04-15 17:54:15 +0300
committerHans Goudey <h.goudey@me.com>2022-04-15 17:54:45 +0300
commit47d961a4b1c14b0cee2817de226ee356e711e146 (patch)
tree4c057b00b7eb82144e4acf12196b9bf33481e9a5 /source/blender/blenkernel/intern/curve_poly.cc
parente96a809a68ef40225d5eddfd790644538e171a8d (diff)
Fix: Apply tilt in curves data-block normals calculation
The ported normal calculation from ceed37fc5cbb466a0 neglected to use the tilt attribute to rotate the normals around the tangents. This commit adds that behavior back, adding a new math header file to avoid duplicating the rotation function for normalized axes. Differential Revision: https://developer.blender.org/D14655
Diffstat (limited to 'source/blender/blenkernel/intern/curve_poly.cc')
-rw-r--r--source/blender/blenkernel/intern/curve_poly.cc20
1 files changed, 3 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/curve_poly.cc b/source/blender/blenkernel/intern/curve_poly.cc
index b0ed62d38dd..2db7cd71ad3 100644
--- a/source/blender/blenkernel/intern/curve_poly.cc
+++ b/source/blender/blenkernel/intern/curve_poly.cc
@@ -6,7 +6,7 @@
#include <algorithm>
-#include "BLI_math_vector.h"
+#include "BLI_math_rotation.hh"
#include "BLI_math_vector.hh"
#include "BKE_curves.hh"
@@ -54,20 +54,6 @@ void calculate_tangents(const Span<float3> positions,
}
}
-static float3 rotate_direction_around_axis(const float3 &direction,
- const float3 &axis,
- const float angle)
-{
- BLI_ASSERT_UNIT_V3(direction);
- BLI_ASSERT_UNIT_V3(axis);
-
- const float3 axis_scaled = axis * math::dot(direction, axis);
- const float3 diff = direction - axis_scaled;
- const float3 cross = math::cross(axis, diff);
-
- return axis_scaled + diff * std::cos(angle) + cross * std::sin(angle);
-}
-
void calculate_normals_z_up(const Span<float3> tangents, MutableSpan<float3> normals)
{
BLI_assert(normals.size() == tangents.size());
@@ -98,7 +84,7 @@ static float3 calculate_next_normal(const float3 &last_normal,
const float angle = angle_normalized_v3v3(last_tangent, current_tangent);
if (angle != 0.0) {
const float3 axis = math::normalize(math::cross(last_tangent, current_tangent));
- return rotate_direction_around_axis(last_normal, axis, angle);
+ return math::rotate_direction_around_axis(last_normal, axis, angle);
}
return last_normal;
}
@@ -147,7 +133,7 @@ void calculate_normals_minimum(const Span<float3> tangents,
const float angle_step = correction_angle / normals.size();
for (const int i : normals.index_range()) {
const float angle = angle_step * i;
- normals[i] = rotate_direction_around_axis(normals[i], tangents[i], angle);
+ normals[i] = math::rotate_direction_around_axis(normals[i], tangents[i], angle);
}
}