Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc
| Show First 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | static void align_rotations_auto_pivot(IndexMask mask, | ||||
| const MutableSpan<float3> output_rotations) | const MutableSpan<float3> output_rotations) | ||||
| { | { | ||||
| threading::parallel_for(mask.index_range(), 512, [&](IndexRange mask_range) { | threading::parallel_for(mask.index_range(), 512, [&](IndexRange mask_range) { | ||||
| for (const int maski : mask_range) { | for (const int maski : mask_range) { | ||||
| const int64_t i = mask[maski]; | const int64_t i = mask[maski]; | ||||
| const float3 vector = vectors[i]; | const float3 vector = vectors[i]; | ||||
| if (is_zero_v3(vector)) { | if (is_zero_v3(vector)) { | ||||
| output_rotations[i] = input_rotations[i]; | output_rotations[i] = input_rotations[i]; | ||||
| continue; | |||||
| } | } | ||||
| float old_rotation[3][3]; | float old_rotation[3][3]; | ||||
| eul_to_mat3(old_rotation, input_rotations[i]); | eul_to_mat3(old_rotation, input_rotations[i]); | ||||
| float3 old_axis; | float3 old_axis; | ||||
| mul_v3_m3v3(old_axis, old_rotation, local_main_axis); | mul_v3_m3v3(old_axis, old_rotation, local_main_axis); | ||||
| const float3 new_axis = vector.normalized(); | const float3 new_axis = vector.normalized(); | ||||
| Show All 33 Lines | static void align_rotations_fixed_pivot(IndexMask mask, | ||||
| const MutableSpan<float3> output_rotations) | const MutableSpan<float3> output_rotations) | ||||
| { | { | ||||
| threading::parallel_for(mask.index_range(), 512, [&](IndexRange mask_range) { | threading::parallel_for(mask.index_range(), 512, [&](IndexRange mask_range) { | ||||
| for (const int64_t maski : mask_range) { | for (const int64_t maski : mask_range) { | ||||
| const int64_t i = mask[maski]; | const int64_t i = mask[maski]; | ||||
| if (local_main_axis == local_pivot_axis) { | if (local_main_axis == local_pivot_axis) { | ||||
| /* Can't compute any meaningful rotation angle in this case. */ | /* Can't compute any meaningful rotation angle in this case. */ | ||||
| output_rotations[i] = input_rotations[i]; | output_rotations[i] = input_rotations[i]; | ||||
| continue; | |||||
| } | } | ||||
| const float3 vector = vectors[i]; | const float3 vector = vectors[i]; | ||||
| if (is_zero_v3(vector)) { | if (is_zero_v3(vector)) { | ||||
| output_rotations[i] = input_rotations[i]; | |||||
| continue; | continue; | ||||
| } | } | ||||
| float old_rotation[3][3]; | float old_rotation[3][3]; | ||||
| eul_to_mat3(old_rotation, input_rotations[i]); | eul_to_mat3(old_rotation, input_rotations[i]); | ||||
| float3 old_axis; | float3 old_axis; | ||||
| mul_v3_m3v3(old_axis, old_rotation, local_main_axis); | mul_v3_m3v3(old_axis, old_rotation, local_main_axis); | ||||
| float3 pivot_axis; | float3 pivot_axis; | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | ||||
| local_main_axis[main_axis_mode_] = 1; | local_main_axis[main_axis_mode_] = 1; | ||||
| if (pivot_axis_mode_ == FN_NODE_ALIGN_EULER_TO_VECTOR_PIVOT_AXIS_AUTO) { | if (pivot_axis_mode_ == FN_NODE_ALIGN_EULER_TO_VECTOR_PIVOT_AXIS_AUTO) { | ||||
| align_rotations_auto_pivot( | align_rotations_auto_pivot( | ||||
| mask, input_rotations, vectors, factors, local_main_axis, output_rotations); | mask, input_rotations, vectors, factors, local_main_axis, output_rotations); | ||||
| } | } | ||||
| else { | else { | ||||
| float3 local_pivot_axis = {0.0f, 0.0f, 0.0f}; | float3 local_pivot_axis = {0.0f, 0.0f, 0.0f}; | ||||
| local_pivot_axis[main_axis_mode_] = 1; | local_pivot_axis[pivot_axis_mode_ - 1] = 1; | ||||
| align_rotations_fixed_pivot(mask, | align_rotations_fixed_pivot(mask, | ||||
| input_rotations, | input_rotations, | ||||
| vectors, | vectors, | ||||
| factors, | factors, | ||||
| local_main_axis, | local_main_axis, | ||||
| local_pivot_axis, | local_pivot_axis, | ||||
| output_rotations); | output_rotations); | ||||
| } | } | ||||
| Show All 22 Lines | |||||