Blender V4.3
BLI_math_euler_types.hh File Reference
#include <ostream>
#include "BLI_math_angle_types.hh"
#include "BLI_math_base.hh"
#include "BLI_math_basis_types.hh"
#include "BLI_struct_equality_utils.hh"

Go to the source code of this file.

Classes

struct  blender::math::EulerBase< T >
 
struct  blender::math::EulerXYZBase< T >
 
struct  blender::math::Euler3Base< T >
 

Namespaces

namespace  blender
 
namespace  blender::math
 

Typedefs

using blender::math::EulerXYZ = EulerXYZBase<float>
 
using blender::math::Euler3 = Euler3Base<float>
 

Enumerations

enum  blender::math::EulerOrder {
  blender::math::XYZ = 1 , blender::math::XZY , blender::math::YXZ , blender::math::YZX ,
  blender::math::ZXY , blender::math::ZYX
}
 

Functions

std::ostream & blender::math::operator<< (std::ostream &stream, EulerOrder order)
 

Detailed Description

Euler rotations are represented as a triple of angle representing a rotation around each basis vector. The order in which the three rotations are applied changes the resulting orientation.

A blender::math::EulerXYZ represent an Euler triple with fixed axis order (XYZ). A blender::math::Euler3 represents an Euler triple with arbitrary axis order.

They are prone to gimbal lock and are not suited for many applications. However they are more intuitive than other rotation types. Their main use is for converting user facing rotation values to other rotation types.

The rotation values can still be reinterpreted like this: Euler3(float3(my_euler3_zyx_rot), EulerOrder::XYZ) This will swap the X and Z rotation order and will likely not produce the same rotation matrix.

If the goal is to convert (keep the same orientation) to Euler3 then you have to do an assignment. eg: Euler3 my_euler(EulerOrder::XYZ); my_euler = my_quaternion:

Definition in file BLI_math_euler_types.hh.