|
Blender V4.3
|
#include <BLI_math_quaternion_types.hh>
Public Member Functions | |
| QuaternionBase ()=default | |
| QuaternionBase (const T &new_w, const T &new_x, const T &new_y, const T &new_z) | |
| QuaternionBase (const VecBase< T, 4 > &vec) | |
| QuaternionBase (const T &real, const VecBase< T, 3 > &imaginary) | |
| operator VecBase< T, 4 > () const | |
| const VecBase< T, 3 > & | imaginary_part () const |
| VecBase< T, 3 > & | imaginary_part () |
| QuaternionBase & | operator*= (const QuaternionBase &b) |
| uint64_t | hash () const |
Quaternion | |
| AngleRadianBase< T > | twist_angle (const Axis axis) const |
| QuaternionBase | twist (const Axis axis) const |
| QuaternionBase | swing (const Axis axis) const |
| QuaternionBase | wrapped_around (const QuaternionBase &reference) const |
Static Public Member Functions | |
| static QuaternionBase | identity () |
| static QuaternionBase | zero () |
Public Attributes | |
| T | w |
| T | x |
| T | y |
| T | z |
Friends | |
| QuaternionBase | operator* (const QuaternionBase &a, const QuaternionBase &b) |
| QuaternionBase | operator* (const QuaternionBase &a, const T &b) |
| QuaternionBase | operator- (const QuaternionBase &a) |
| std::ostream & | operator<< (std::ostream &stream, const QuaternionBase &rot) |
Conversion from/to Expmap | |
| VecBase< T, 3 > | expmap () const |
| static QuaternionBase | expmap (const VecBase< T, 3 > &expmap) |
A blender::math::QuaternionBase<T> represents either an orientation or a rotation.
Mainly used for rigging and armature deformations as they have nice mathematical properties (eg: smooth shortest path interpolation). A blender::math::QuaternionBase<T> is cheaper to combine than MatBase<T, 3, 3>. However, transforming points is slower. Consider converting to a rotation matrix if you are rotating many points.
See this for more information: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Performance_comparisons
Definition at line 37 of file BLI_math_quaternion_types.hh.
|
default |
|
inline |
Definition at line 42 of file BLI_math_quaternion_types.hh.
|
inlineexplicit |
Creates a quaternion from an vector without reordering the components.
Definition at line 49 of file BLI_math_quaternion_types.hh.
|
inline |
Creates a quaternion from real (w) and imaginary parts (x, y, z).
Definition at line 54 of file BLI_math_quaternion_types.hh.
| VecBase< T, 3 > blender::math::QuaternionBase< T >::expmap | ( | ) | const |
Create an exponential map representation of this quaternion. An exponential map is basically the rotation axis multiplied by the rotation angle.
Definition at line 692 of file BLI_math_quaternion.hh.
References BLI_assert, blender::math::is_unit_scale(), and blender::math::to_axis_angle().
Referenced by blender::bke::attribute_math::DefaultMixerStruct< math::Quaternion >::expmap_to_quat(), blender::bke::attribute_math::float4x4Mixer::finalize(), blender::bke::attribute_math::mix3(), blender::bke::attribute_math::mix4(), and blender::tests::TEST().
|
static |
Create a quaternion from an exponential map representation. An exponential map is basically the rotation axis multiplied by the rotation angle.
Definition at line 680 of file BLI_math_quaternion.hh.
References angle(), LIKELY, blender::math::normalize_and_get_length(), T, and blender::math::to_quaternion().
Referenced by blender::bke::attribute_math::mix3(), and blender::bke::attribute_math::mix4().
|
inline |
Definition at line 163 of file BLI_math_quaternion_types.hh.
|
inlinestatic |
Static functions.
Definition at line 59 of file BLI_math_quaternion_types.hh.
Referenced by blender::nodes::node_fn_axes_to_rotation_cc::AxesToRotationFunction::call(), blender::math::from_vector(), blender::math::invert(), make_socket_type_rotation(), blender::nodes::node_fn_axis_angle_to_rotation_cc::node_build_multi_function(), blender::nodes::node_fn_rotation_to_axis_angle_cc::node_eval_inverse(), blender::nodes::node_geo_bounding_box_cc::node_geo_exec(), blender::math::normalize_and_get_length(), blender::math::detail::normalized_to_quat_with_checks(), blender::draw::overlay::LightProbes::object_sync(), blender::io::usd::USDPointInstancerReader::read_object_data(), blender::imbuf::tests::TEST(), blender::math::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::draw::test_eevee_shadow_tag_update(), and blender::math::to_quaternion().
|
inline |
Definition at line 115 of file BLI_math_quaternion_types.hh.
References blender::math::QuaternionBase< T >::x.
|
inline |
Returns the imaginary part of this quaternion (x, y, z).
Definition at line 111 of file BLI_math_quaternion_types.hh.
References blender::math::QuaternionBase< T >::x.
Referenced by blender::math::pow().
|
inlineexplicit |
Conversions.
Definition at line 78 of file BLI_math_quaternion_types.hh.
References blender::math::QuaternionBase< T >::w, blender::math::QuaternionBase< T >::x, and blender::math::QuaternionBase< T >::y.
|
inline |
Definition at line 143 of file BLI_math_quaternion_types.hh.
References b.
| QuaternionBase< T > blender::math::QuaternionBase< T >::swing | ( | const Axis | axis | ) | const |
Returns the swing part of this quaternion for the basis axis direction. The swing is the original quaternion minus the twist around axis. So we have the following identity : q = q.swing(axis) * q.twist(axis)
Definition at line 149 of file BLI_math_quaternion.hh.
References blender::math::abs(), BLI_assert, blender::math::canonicalize(), and blender::math::invert_normalized().
Referenced by blender::tests::TEST().
| QuaternionBase< T > blender::math::QuaternionBase< T >::twist | ( | const Axis | axis | ) | const |
Returns the twist part of this quaternion for the axis direction. The twist is the isolated rotation in the plane whose axis is normal to.
Definition at line 161 of file BLI_math_quaternion.hh.
References blender::math::canonicalize(), blender::math::AngleCartesianBase< T >::cos(), blender::math::AngleCartesianBase< T >::from_point(), blender::math::AngleCartesianBase< T >::sin(), T, and blender::VecBase< T, Size >::yzw().
Referenced by blender::tests::TEST().
| AngleRadianBase< T > blender::math::QuaternionBase< T >::twist_angle | ( | const Axis | axis | ) | const |
Returns the full twist angle for a given axis direction. The twist is the isolated rotation in the plane whose axis is normal to.
Definition at line 141 of file BLI_math_quaternion.hh.
References blender::math::canonicalize(), T, and blender::VecBase< T, Size >::yzw().
Referenced by blender::tests::TEST().
| QuaternionBase< T > blender::math::QuaternionBase< T >::wrapped_around | ( | const QuaternionBase< T > & | reference | ) | const |
Methods. Return this quaternions orientation but wrapped around reference.
This means the interpolation between the returned value and reference will always take the shortest path. The angle between them will not be more than pi.
Definition at line 177 of file BLI_math_quaternion.hh.
References BLI_assert, blender::math::distance_squared(), blender::math::invert_normalized(), blender::math::is_unit_scale(), len, blender::math::normalize_and_get_length(), and result.
|
inlinestatic |
This is just for convenience. Does not represent a rotation as it is degenerate.
Definition at line 65 of file BLI_math_quaternion_types.hh.
Referenced by blender::tests::TEST(), and blender::tests::TEST().
|
friend |
Operators.
Definition at line 135 of file BLI_math_quaternion_types.hh.
|
friend |
Definition at line 150 of file BLI_math_quaternion_types.hh.
|
friend |
Definition at line 156 of file BLI_math_quaternion_types.hh.
|
friend |
Definition at line 168 of file BLI_math_quaternion_types.hh.
| T blender::math::QuaternionBase< T >::w |
Definition at line 38 of file BLI_math_quaternion_types.hh.
Referenced by blender::math::angle_of(), blender::math::angle_of_signed(), blender::nodes::node_fn_rotation_to_quaternion_cc::SeparateQuaternionFunction::call(), blender::math::canonicalize(), blender::math::conjugate(), DRW_draw_cursor(), ED_view3d_cursor3d_update(), blender::math::detail::from_rotation(), blender::math::is_unit_scale(), blender::math::is_zero(), blender::math::detail::normalized_to_quat_fast(), blender::math::QuaternionBase< T >::operator VecBase< T, 4 >(), blender::math::pow(), blender::ed::geometry::store_input_node_values_rna_props(), blender::math::tests::TEST(), blender::tests::TEST(), blender::tests::TEST(), blender::math::to_axis_angle(), blender::math::to_dual_quaternion(), blender::math::to_quaternion(), blender::math::to_quaternion(), and blender::math::transform_point().
| T blender::math::QuaternionBase< T >::x |
Definition at line 38 of file BLI_math_quaternion_types.hh.
Referenced by blender::nodes::node_fn_rotation_to_quaternion_cc::SeparateQuaternionFunction::call(), blender::math::detail::from_rotation(), blender::math::QuaternionBase< T >::imaginary_part(), blender::math::QuaternionBase< T >::imaginary_part(), blender::math::is_unit_scale(), blender::math::is_zero(), blender::math::detail::normalized_to_quat_fast(), blender::math::QuaternionBase< T >::operator VecBase< T, 4 >(), blender::tests::TEST(), blender::tests::TEST(), blender::math::to_axis_angle(), blender::math::to_dual_quaternion(), blender::math::to_quaternion(), blender::math::to_quaternion(), and blender::math::transform_point().
| T blender::math::QuaternionBase< T >::y |
Definition at line 38 of file BLI_math_quaternion_types.hh.
Referenced by blender::nodes::node_fn_rotation_to_quaternion_cc::SeparateQuaternionFunction::call(), blender::math::detail::from_rotation(), blender::math::is_unit_scale(), blender::math::is_zero(), blender::math::detail::normalized_to_quat_fast(), blender::math::QuaternionBase< T >::operator VecBase< T, 4 >(), blender::tests::TEST(), blender::tests::TEST(), blender::math::to_axis_angle(), blender::math::to_dual_quaternion(), blender::math::to_quaternion(), blender::math::to_quaternion(), and blender::math::transform_point().
| T blender::math::QuaternionBase< T >::z |
Definition at line 38 of file BLI_math_quaternion_types.hh.
Referenced by blender::nodes::node_fn_rotation_to_quaternion_cc::SeparateQuaternionFunction::call(), blender::math::detail::from_rotation(), blender::math::is_unit_scale(), blender::math::is_zero(), blender::math::detail::normalized_to_quat_fast(), blender::tests::TEST(), blender::tests::TEST(), blender::math::to_axis_angle(), blender::math::to_dual_quaternion(), blender::math::to_quaternion(), blender::math::to_quaternion(), and blender::math::transform_point().