Blender  V3.3
Classes
BLI_math_matrix.h File Reference
#include "BLI_compiler_attrs.h"
#include "BLI_sys_types.h"

Go to the source code of this file.

Classes

struct  SpaceTransform
 

Functions

Init
void zero_m2 (float m[2][2])
 
void zero_m3 (float m[3][3])
 
void zero_m4 (float m[4][4])
 
void unit_m2 (float m[2][2])
 
void unit_m3 (float m[3][3])
 
void unit_m4 (float m[4][4])
 
void unit_m4_db (double m[4][4])
 
void copy_m2_m2 (float m1[2][2], const float m2[2][2])
 
void copy_m3_m3 (float m1[3][3], const float m2[3][3])
 
void copy_m4_m4 (float m1[4][4], const float m2[4][4])
 
void copy_m3_m4 (float m1[3][3], const float m2[4][4])
 
void copy_m4_m3 (float m1[4][4], const float m2[3][3])
 
void copy_m3_m2 (float m1[3][3], const float m2[2][2])
 
void copy_m4_m2 (float m1[4][4], const float m2[2][2])
 
void copy_m4_m4_db (double m1[4][4], const double m2[4][4])
 
void copy_m3_m3d (float m1[3][3], const double m2[3][3])
 
void copy_m3d_m3 (double m1[3][3], const float m2[3][3])
 
void copy_m4d_m4 (double m1[4][4], const float m2[4][4])
 
void swap_m3m3 (float m1[3][3], float m2[3][3])
 
void swap_m4m4 (float m1[4][4], float m2[4][4])
 
void shuffle_m4 (float R[4][4], const int index[4])
 

Arithmetic

#define mul_m3_series(...)   VA_NARGS_CALL_OVERLOAD(_va_mul_m3_series_, __VA_ARGS__)
 
#define mul_m4_series(...)   VA_NARGS_CALL_OVERLOAD(_va_mul_m4_series_, __VA_ARGS__)
 
void add_m3_m3m3 (float R[3][3], const float A[3][3], const float B[3][3])
 
void add_m4_m4m4 (float R[4][4], const float A[4][4], const float B[4][4])
 
void madd_m3_m3m3fl (float R[3][3], const float A[3][3], const float B[3][3], float f)
 
void madd_m4_m4m4fl (float R[4][4], const float A[4][4], const float B[4][4], float f)
 
void sub_m3_m3m3 (float R[3][3], const float A[3][3], const float B[3][3])
 
void sub_m4_m4m4 (float R[4][4], const float A[4][4], const float B[4][4])
 
void mul_m3_m3m3 (float R[3][3], const float A[3][3], const float B[3][3])
 
void mul_m4_m3m4 (float R[4][4], const float A[3][3], const float B[4][4])
 
void mul_m4_m4m3 (float R[4][4], const float A[4][4], const float B[3][3])
 
void mul_m4_m4m4 (float R[4][4], const float A[4][4], const float B[4][4])
 
void mul_m3_m3m4 (float R[3][3], const float A[3][3], const float B[4][4])
 
void mul_m3_m4m3 (float R[3][3], const float A[4][4], const float B[3][3])
 
void mul_m3_m4m4 (float R[3][3], const float A[4][4], const float B[4][4])
 
void mul_m3_m3m3_uniq (float R[3][3], const float A[3][3], const float B[3][3])
 
void mul_m3_m3_pre (float R[3][3], const float A[3][3])
 
void mul_m3_m3_post (float R[3][3], const float B[3][3])
 
void mul_m4_m4m4_uniq (float R[4][4], const float A[4][4], const float B[4][4])
 
void mul_m4_m4m4_db_uniq (double R[4][4], const double A[4][4], const double B[4][4])
 
void mul_m4db_m4db_m4fl_uniq (double R[4][4], const double A[4][4], const float B[4][4])
 
void mul_m4_m4_pre (float R[4][4], const float A[4][4])
 
void mul_m4_m4_post (float R[4][4], const float B[4][4])
 
void _va_mul_m3_series_3 (float R[3][3], const float M1[3][3], const float M2[3][3]) ATTR_NONNULL()
 
void _va_mul_m3_series_4 (float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3]) ATTR_NONNULL()
 
void _va_mul_m3_series_5 (float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3]) ATTR_NONNULL()
 
void _va_mul_m3_series_6 (float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3]) ATTR_NONNULL()
 
void _va_mul_m3_series_7 (float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3], const float M6[3][3]) ATTR_NONNULL()
 
void _va_mul_m3_series_8 (float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3], const float M6[3][3], const float M7[3][3]) ATTR_NONNULL()
 
void _va_mul_m3_series_9 (float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3], const float M4[3][3], const float M5[3][3], const float M6[3][3], const float M7[3][3], const float M8[3][3]) ATTR_NONNULL()
 
void _va_mul_m4_series_3 (float R[4][4], const float M1[4][4], const float M2[4][4]) ATTR_NONNULL()
 
void _va_mul_m4_series_4 (float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4]) ATTR_NONNULL()
 
void _va_mul_m4_series_5 (float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4]) ATTR_NONNULL()
 
void _va_mul_m4_series_6 (float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4]) ATTR_NONNULL()
 
void _va_mul_m4_series_7 (float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4], const float M6[4][4]) ATTR_NONNULL()
 
void _va_mul_m4_series_8 (float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4], const float M6[4][4], const float M7[4][4]) ATTR_NONNULL()
 
void _va_mul_m4_series_9 (float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4], const float M4[4][4], const float M5[4][4], const float M6[4][4], const float M7[4][4], const float M8[4][4]) ATTR_NONNULL()
 
void mul_m4_v3 (const float M[4][4], float r[3])
 
void mul_v3_m4v3 (float r[3], const float M[4][4], const float v[3])
 
void mul_v3_m4v3_db (double r[3], const double mat[4][4], const double vec[3])
 
void mul_v4_m4v3_db (double r[4], const double mat[4][4], const double vec[3])
 
void mul_v2_m4v3 (float r[2], const float M[4][4], const float v[3])
 
void mul_v2_m2v2 (float r[2], const float M[2][2], const float v[2])
 
void mul_m2_v2 (const float M[2][2], float v[2])
 
void mul_mat3_m4_v3 (const float M[4][4], float r[3])
 
void mul_v3_mat3_m4v3 (float r[3], const float M[4][4], const float v[3])
 
void mul_v3_mat3_m4v3_db (double r[3], const double M[4][4], const double v[3])
 
void mul_m4_v4 (const float M[4][4], float r[4])
 
void mul_v4_m4v4 (float r[4], const float M[4][4], const float v[4])
 
void mul_v4_m4v3 (float r[4], const float M[4][4], const float v[3])
 
void mul_project_m4_v3 (const float M[4][4], float vec[3])
 
void mul_v3_project_m4_v3 (float r[3], const float mat[4][4], const float vec[3])
 
void mul_v2_project_m4_v3 (float r[2], const float M[4][4], const float vec[3])
 
void mul_m3_v2 (const float m[3][3], float r[2])
 
void mul_v2_m3v2 (float r[2], const float m[3][3], const float v[2])
 
void mul_m3_v3 (const float M[3][3], float r[3])
 
void mul_v3_m3v3 (float r[3], const float M[3][3], const float a[3])
 
void mul_v2_m3v3 (float r[2], const float M[3][3], const float a[3])
 
void mul_transposed_m3_v3 (const float M[3][3], float r[3])
 
void mul_transposed_mat3_m4_v3 (const float M[4][4], float r[3])
 
void mul_m3_v3_double (const float M[3][3], double r[3])
 
void mul_m4_m4m4_aligned_scale (float R[4][4], const float A[4][4], const float B[4][4])
 
void mul_m4_m4m4_split_channels (float R[4][4], const float A[4][4], const float B[4][4])
 
void mul_m3_fl (float R[3][3], float f)
 
void mul_m4_fl (float R[4][4], float f)
 
void mul_mat3_m4_fl (float R[4][4], float f)
 
void negate_m3 (float R[3][3])
 
void negate_mat3_m4 (float R[4][4])
 
void negate_m4 (float R[4][4])
 
bool invert_m3_ex (float m[3][3], float epsilon)
 
bool invert_m3_m3_ex (float m1[3][3], const float m2[3][3], float epsilon)
 
bool invert_m3 (float R[3][3])
 
bool invert_m2_m2 (float R[2][2], const float A[2][2])
 
bool invert_m3_m3 (float R[3][3], const float A[3][3])
 
bool invert_m4 (float R[4][4])
 
bool invert_m4_m4 (float R[4][4], const float A[4][4])
 
bool invert_m4_m4_fallback (float R[4][4], const float A[4][4])
 
void mul_m4_v4d (const float M[4][4], double r[4])
 
void mul_v4d_m4v4d (double r[4], const float M[4][4], const double v[4])
 
void mul_v3_m3v3_db (double r[3], const double M[3][3], const double a[3])
 
void mul_m3_v3_db (const double M[3][3], double r[3])
 

Linear Algebra

#define PSEUDOINVERSE_EPSILON   1e-8f
 
void transpose_m3 (float R[3][3])
 
void transpose_m3_m3 (float R[3][3], const float M[3][3])
 
void transpose_m3_m4 (float R[3][3], const float M[4][4])
 
void transpose_m4 (float R[4][4])
 
void transpose_m4_m4 (float R[4][4], const float M[4][4])
 
bool compare_m4m4 (const float mat1[4][4], const float mat2[4][4], float limit)
 
void normalize_m2_ex (float R[2][2], float r_scale[2]) ATTR_NONNULL()
 
void normalize_m2 (float R[2][2]) ATTR_NONNULL()
 
void normalize_m2_m2_ex (float R[2][2], const float M[2][2], float r_scale[2]) ATTR_NONNULL()
 
void normalize_m2_m2 (float R[2][2], const float M[2][2]) ATTR_NONNULL()
 
void normalize_m3_ex (float R[3][3], float r_scale[3]) ATTR_NONNULL()
 
void normalize_m3 (float R[3][3]) ATTR_NONNULL()
 
void normalize_m3_m3_ex (float R[3][3], const float M[3][3], float r_scale[3]) ATTR_NONNULL()
 
void normalize_m3_m3 (float R[3][3], const float M[3][3]) ATTR_NONNULL()
 
void normalize_m4_ex (float R[4][4], float r_scale[3]) ATTR_NONNULL()
 
void normalize_m4 (float R[4][4]) ATTR_NONNULL()
 
void normalize_m4_m4_ex (float R[4][4], const float M[4][4], float r_scale[3]) ATTR_NONNULL()
 
void normalize_m4_m4 (float R[4][4], const float M[4][4]) ATTR_NONNULL()
 
void orthogonalize_m3 (float R[3][3], int axis)
 
void orthogonalize_m4 (float R[4][4], int axis)
 
void orthogonalize_m3_stable (float R[3][3], int axis, bool normalize)
 
void orthogonalize_m4_stable (float R[4][4], int axis, bool normalize)
 
bool orthogonalize_m3_zero_axes (float R[3][3], float unit_length)
 
bool orthogonalize_m4_zero_axes (float R[4][4], float unit_length)
 
bool is_orthogonal_m3 (const float mat[3][3])
 
bool is_orthogonal_m4 (const float mat[4][4])
 
bool is_orthonormal_m3 (const float mat[3][3])
 
bool is_orthonormal_m4 (const float mat[4][4])
 
bool is_uniform_scaled_m3 (const float mat[3][3])
 
bool is_uniform_scaled_m4 (const float m[4][4])
 
void adjoint_m2_m2 (float R[2][2], const float M[2][2])
 
void adjoint_m3_m3 (float R[3][3], const float M[3][3])
 
void adjoint_m4_m4 (float R[4][4], const float M[4][4])
 
float determinant_m2 (float a, float b, float c, float d)
 
float determinant_m3 (float a1, float a2, float a3, float b1, float b2, float b3, float c1, float c2, float c3)
 
float determinant_m3_array (const float m[3][3])
 
float determinant_m4_mat3_array (const float m[4][4])
 
double determinant_m3_array_db (const double m[3][3])
 
float determinant_m4 (const float m[4][4])
 
void svd_m4 (float U[4][4], float s[4], float V[4][4], float A[4][4])
 
void pseudoinverse_m4_m4 (float Ainv[4][4], const float A[4][4], float epsilon)
 
void pseudoinverse_m3_m3 (float Ainv[3][3], const float A[3][3], float epsilon)
 
bool has_zero_axis_m4 (const float matrix[4][4])
 
void zero_axis_bias_m4 (float mat[4][4])
 
void invert_m4_m4_safe (float Ainv[4][4], const float A[4][4])
 
void invert_m3_m3_safe_ortho (float Ainv[3][3], const float A[3][3])
 
void invert_m4_m4_safe_ortho (float Ainv[4][4], const float A[4][4])
 

Transformations

#define BLI_SPACE_TRANSFORM_SETUP(data, local, target)    BLI_space_transform_from_matrices((data), (local)->obmat, (target)->obmat)
 
typedef struct SpaceTransform SpaceTransform
 
void scale_m3_fl (float R[3][3], float scale)
 
void scale_m4_fl (float R[4][4], float scale)
 
void scale_m4_v2 (float R[4][4], const float scale[2])
 
float mat3_to_volume_scale (const float M[3][3])
 
float mat4_to_volume_scale (const float M[4][4])
 
float mat3_to_scale (const float M[3][3])
 
float mat4_to_scale (const float M[4][4])
 
float mat4_to_xy_scale (const float M[4][4])
 
void size_to_mat3 (float R[3][3], const float size[3])
 
void size_to_mat4 (float R[4][4], const float size[3])
 
void mat3_to_size (float size[3], const float M[3][3])
 
void mat4_to_size (float size[3], const float M[4][4])
 
float mat3_to_size_max_axis (const float M[3][3])
 
float mat4_to_size_max_axis (const float M[4][4])
 
void mat4_to_size_fix_shear (float size[3], const float M[4][4])
 
void translate_m4 (float mat[4][4], float tx, float ty, float tz)
 
void rotate_m4 (float mat[4][4], char axis, float angle)
 
void rescale_m4 (float mat[4][4], const float scale[3])
 
void transform_pivot_set_m4 (float mat[4][4], const float pivot[3])
 
void mat4_to_rot (float rot[3][3], const float wmat[4][4])
 
void mat3_to_rot_size (float rot[3][3], float size[3], const float mat3[3][3])
 
void mat4_to_loc_rot_size (float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
 
void mat4_to_loc_quat (float loc[3], float quat[4], const float wmat[4][4])
 
void mat4_decompose (float loc[3], float quat[4], float size[3], const float wmat[4][4])
 
void mat3_polar_decompose (const float mat3[3][3], float r_U[3][3], float r_P[3][3])
 
void loc_rot_size_to_mat4 (float R[4][4], const float loc[3], const float rot[3][3], const float size[3])
 
void loc_eul_size_to_mat4 (float R[4][4], const float loc[3], const float eul[3], const float size[3])
 
void loc_eulO_size_to_mat4 (float R[4][4], const float loc[3], const float eul[3], const float size[3], short order)
 
void loc_quat_size_to_mat4 (float R[4][4], const float loc[3], const float quat[4], const float size[3])
 
void loc_axisangle_size_to_mat4 (float R[4][4], const float loc[3], const float axis[3], float angle, const float size[3])
 
void blend_m3_m3m3 (float out[3][3], const float dst[3][3], const float src[3][3], float srcweight)
 
void blend_m4_m4m4 (float out[4][4], const float dst[4][4], const float src[4][4], float srcweight)
 
void interp_m3_m3m3 (float R[3][3], const float A[3][3], const float B[3][3], float t)
 
void interp_m4_m4m4 (float R[4][4], const float A[4][4], const float B[4][4], float t)
 
bool is_negative_m3 (const float mat[3][3])
 
bool is_negative_m4 (const float mat[4][4])
 
bool is_zero_m3 (const float mat[3][3])
 
bool is_zero_m4 (const float mat[4][4])
 
bool equals_m3m3 (const float mat1[3][3], const float mat2[3][3])
 
bool equals_m4m4 (const float mat1[4][4], const float mat2[4][4])
 
void BLI_space_transform_from_matrices (struct SpaceTransform *data, const float local[4][4], const float target[4][4])
 
void BLI_space_transform_global_from_matrices (struct SpaceTransform *data, const float local[4][4], const float target[4][4])
 
void BLI_space_transform_apply (const struct SpaceTransform *data, float co[3])
 
void BLI_space_transform_invert (const struct SpaceTransform *data, float co[3])
 
void BLI_space_transform_apply_normal (const struct SpaceTransform *data, float no[3])
 
void BLI_space_transform_invert_normal (const struct SpaceTransform *data, float no[3])
 

Other

#define print_m3_id(M)   print_m3(STRINGIFY(M), M)
 
#define print_m4_id(M)   print_m4(STRINGIFY(M), M)
 
void print_m3 (const char *str, const float M[3][3])
 
void print_m4 (const char *str, const float M[4][4])
 

Macro Definition Documentation

◆ BLI_SPACE_TRANSFORM_SETUP

#define BLI_SPACE_TRANSFORM_SETUP (   data,
  local,
  target 
)     BLI_space_transform_from_matrices((data), (local)->obmat, (target)->obmat)

Definition at line 601 of file BLI_math_matrix.h.

◆ mul_m3_series

#define mul_m3_series (   ...)    VA_NARGS_CALL_OVERLOAD(_va_mul_m3_series_, __VA_ARGS__)

Definition at line 185 of file BLI_math_matrix.h.

◆ mul_m4_series

#define mul_m4_series (   ...)    VA_NARGS_CALL_OVERLOAD(_va_mul_m4_series_, __VA_ARGS__)

Definition at line 186 of file BLI_math_matrix.h.

◆ print_m3_id

#define print_m3_id (   M)    print_m3(STRINGIFY(M), M)

Definition at line 613 of file BLI_math_matrix.h.

◆ print_m4_id

#define print_m4_id (   M)    print_m4(STRINGIFY(M), M)

Definition at line 614 of file BLI_math_matrix.h.

◆ PSEUDOINVERSE_EPSILON

#define PSEUDOINVERSE_EPSILON   1e-8f

Definition at line 356 of file BLI_math_matrix.h.

Typedef Documentation

◆ SpaceTransform

SpaceTransform struct encapsulates all needed data to convert between two coordinate spaces (where conversion can be represented by a matrix multiplication).

A SpaceTransform is initialized using:

After that the following calls can be used:

  • Converts a coordinate in ob1 space to the corresponding ob2 space: #BLI_space_transform_apply(&data, co);
  • Converts a coordinate in ob2 space to the corresponding ob1 space: #BLI_space_transform_invert(&data, co);

Same concept as BLI_space_transform_apply and BLI_space_transform_invert, but no is normalized after conversion (and not translated at all!):

  • #BLI_space_transform_apply_normal(&data, no);
  • #BLI_space_transform_invert_normal(&data, no);

Function Documentation

◆ _va_mul_m3_series_3()

void _va_mul_m3_series_3 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3] 
)

Definition at line 537 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m3_series_4()

void _va_mul_m3_series_4 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3],
const float  M3[3][3] 
)

Definition at line 541 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m3_series_5()

void _va_mul_m3_series_5 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3],
const float  M3[3][3],
const float  M4[3][3] 
)

Definition at line 549 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m3_series_6()

void _va_mul_m3_series_6 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3],
const float  M3[3][3],
const float  M4[3][3],
const float  M5[3][3] 
)

Definition at line 559 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m3_series_7()

void _va_mul_m3_series_7 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3],
const float  M3[3][3],
const float  M4[3][3],
const float  M5[3][3],
const float  M6[3][3] 
)

Definition at line 571 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m3_series_8()

void _va_mul_m3_series_8 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3],
const float  M3[3][3],
const float  M4[3][3],
const float  M5[3][3],
const float  M6[3][3],
const float  M7[3][3] 
)

Definition at line 585 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m3_series_9()

void _va_mul_m3_series_9 ( float  R[3][3],
const float  M1[3][3],
const float  M2[3][3],
const float  M3[3][3],
const float  M4[3][3],
const float  M5[3][3],
const float  M6[3][3],
const float  M7[3][3],
const float  M8[3][3] 
)

Definition at line 601 of file math_matrix.c.

References mul_m3_m3m3(), and r.

◆ _va_mul_m4_series_3()

void _va_mul_m4_series_3 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4] 
)

Definition at line 626 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ _va_mul_m4_series_4()

void _va_mul_m4_series_4 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4],
const float  M3[4][4] 
)

Definition at line 630 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ _va_mul_m4_series_5()

void _va_mul_m4_series_5 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4],
const float  M3[4][4],
const float  M4[4][4] 
)

Definition at line 638 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ _va_mul_m4_series_6()

void _va_mul_m4_series_6 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4],
const float  M3[4][4],
const float  M4[4][4],
const float  M5[4][4] 
)

Definition at line 648 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ _va_mul_m4_series_7()

void _va_mul_m4_series_7 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4],
const float  M3[4][4],
const float  M4[4][4],
const float  M5[4][4],
const float  M6[4][4] 
)

Definition at line 660 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ _va_mul_m4_series_8()

void _va_mul_m4_series_8 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4],
const float  M3[4][4],
const float  M4[4][4],
const float  M5[4][4],
const float  M6[4][4],
const float  M7[4][4] 
)

Definition at line 674 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ _va_mul_m4_series_9()

void _va_mul_m4_series_9 ( float  R[4][4],
const float  M1[4][4],
const float  M2[4][4],
const float  M3[4][4],
const float  M4[4][4],
const float  M5[4][4],
const float  M6[4][4],
const float  M7[4][4],
const float  M8[4][4] 
)

Definition at line 690 of file math_matrix.c.

References mul_m4_m4m4(), and r.

◆ add_m3_m3m3()

void add_m3_m3m3 ( float  R[3][3],
const float  A[3][3],
const float  B[3][3] 
)

◆ add_m4_m4m4()

void add_m4_m4m4 ( float  R[4][4],
const float  A[4][4],
const float  B[4][4] 
)

Definition at line 1043 of file math_matrix.c.

References A, B, and R.

Referenced by add_weighted_dq_dq().

◆ adjoint_m2_m2()

void adjoint_m2_m2 ( float  R[2][2],
const float  M[2][2] 
)

Definition at line 1975 of file math_matrix.c.

References BLI_assert, M, and R.

Referenced by adjoint_matrix_n(), and invert_m2_m2().

◆ adjoint_m3_m3()

void adjoint_m3_m3 ( float  R[3][3],
const float  M[3][3] 
)

Definition at line 1984 of file math_matrix.c.

References BLI_assert, M, and R.

Referenced by adjoint_matrix_n(), invert_m3_m3(), and invert_m3_m3_ex().

◆ adjoint_m4_m4()

void adjoint_m4_m4 ( float  R[4][4],
const float  M[4][4] 
)

Definition at line 2000 of file math_matrix.c.

References determinant_m3(), M, and R.

Referenced by adjoint_matrix_n().

◆ blend_m3_m3m3()

void blend_m3_m3m3 ( float  out[3][3],
const float  dst[3][3],
const float  src[3][3],
float  srcweight 
)

◆ blend_m4_m4m4()

void blend_m4_m4m4 ( float  out[4][4],
const float  dst[4][4],
const float  src[4][4],
float  srcweight 
)

◆ BLI_space_transform_apply()

void BLI_space_transform_apply ( const struct SpaceTransform data,
float  co[3] 
)

◆ BLI_space_transform_apply_normal()

void BLI_space_transform_apply_normal ( const struct SpaceTransform data,
float  no[3] 
)

◆ BLI_space_transform_from_matrices()

void BLI_space_transform_from_matrices ( struct SpaceTransform data,
const float  local[4][4],
const float  target[4][4] 
)

Global-invariant transform.

This defines a matrix transforming a point in local space to a point in target space such that its global coordinates remain unchanged.

In other words, if we have a global point P with local coordinates (x, y, z) and global coordinates (X, Y, Z), this defines a transform matrix TM such that (x', y', z') = TM * (x, y, z) where (x', y', z') are the coordinates of P' in target space such that it keeps (X, Y, Z) coordinates in global space.

Definition at line 3212 of file math_matrix.c.

References data, invert_m4_m4(), and mul_m4_m4m4().

Referenced by shrinkwrap_get_tarmat().

◆ BLI_space_transform_global_from_matrices()

void BLI_space_transform_global_from_matrices ( struct SpaceTransform data,
const float  local[4][4],
const float  target[4][4] 
)

Local-invariant transform.

This defines a matrix transforming a point in global space such that its local coordinates (from local space to target space) remain unchanged.

In other words, if we have a local point p with local coordinates (x, y, z) and global coordinates (X, Y, Z), this defines a transform matrix TM such that (X', Y', Z') = TM * (X, Y, Z) where (X', Y', Z') are the coordinates of p' in global space such that it keeps (x, y, z) coordinates in target space.

Definition at line 3222 of file math_matrix.c.

References data, invert_m4_m4(), and mul_m4_m4m4().

Referenced by BKE_mesh_remap_find_best_match_from_mesh().

◆ BLI_space_transform_invert()

void BLI_space_transform_invert ( const struct SpaceTransform data,
float  co[3] 
)

◆ BLI_space_transform_invert_normal()

void BLI_space_transform_invert_normal ( const struct SpaceTransform data,
float  no[3] 
)

◆ compare_m4m4()

bool compare_m4m4 ( const float  mat1[4][4],
const float  mat2[4][4],
float  limit 
)

◆ copy_m2_m2()

void copy_m2_m2 ( float  m1[2][2],
const float  m2[2][2] 
)

Definition at line 66 of file math_matrix.c.

Referenced by matrix_invert_safe_internal().

◆ copy_m3_m2()

void copy_m3_m2 ( float  m1[3][3],
const float  m2[2][2] 
)

Definition at line 127 of file math_matrix.c.

◆ copy_m3_m3()

void copy_m3_m3 ( float  m1[3][3],
const float  m2[3][3] 
)

Definition at line 71 of file math_matrix.c.

Referenced by add_pose_transdata(), addMatrixSpace(), applyBoneSize(), applyResize(), applyShear(), applySkinResize(), applyTrackballValue(), applyTransformOrientation(), armature_vert_task_with_dvert(), base_surface_grids_write(), bezt_to_transdata(), BKE_crazyspace_build_sculpt(), BKE_object_rot_to_mat3(), build_emats_stack(), calc_initial_placement_point_from_view(), cancel_slide_point(), cloth_hair_update_bending_rest_targets(), cloth_hair_update_bending_targets(), connection_node_frames(), connection_node_mat(), copy_bone_transform(), createTransArmatureVerts(), createTransCurveVerts(), createTransEdge(), createTransGPencil_curves(), createTransGPencil_strokes(), createTransLatticeVerts(), createTransMBallVerts(), createTransSculpt(), deformMatrices(), deformMatricesEM(), ED_transform_calc_gizmo_stats(), EEVEE_lookdev_cache_init(), ElementResize(), end_node_frames(), execute_posetree(), gizmo_axis_draw(), gizmo_mesh_extrude_refresh(), gizmo_mesh_spin_redo_setup(), invert_m3(), invert_m3_ex(), invert_m3_m3_safe_ortho(), MaskHandleToTransData(), MaskPointToTransData(), mat3_align_axis_to_v3(), mat3_from_axis_conversion(), mat3_to_quat_is_ok(), matrix_invert_safe_internal(), Matrix_rotate(), Matrix_to_euler(), Matrix_to_quaternion(), mul_m3_m3_post(), mul_m3_m3_pre(), mul_m3_m3m4(), mul_m3_m4m3(), mul_m4_m3m4(), mul_m4_m4m3(), mul_v3m3_dq(), ObjectToTransData(), SB_estimate_transform(), set_prop_dist(), SIM_mass_spring_add_constraint_ndof1(), SIM_mass_spring_add_constraint_ndof2(), SIM_mass_spring_force_drag(), SIM_mass_spring_force_reference_frame(), SIM_mass_spring_force_spring_bending_hair(), SIM_mass_spring_set_rest_transform(), slide_point_customdata(), spring_hairbend_estimate_dfdv(), spring_hairbend_estimate_dfdx(), tranformViewUpdate(), transdata_elem_shear(), transdata_elem_skin_resize(), transform_convert_mesh_crazyspace_transdata_set(), transform_orientation_matrix_get(), transform_orientations_current_set(), v3d_cursor_snap_update(), vcloud_estimate_transform_v3(), VertsToTransData(), view3d_interactive_add_calc_snap(), view3d_interactive_add_modal(), and world_to_root_m3().

◆ copy_m3_m3d()

void copy_m3_m3d ( float  m1[3][3],
const double  m2[3][3] 
)

◆ copy_m3_m4()

void copy_m3_m4 ( float  m1[3][3],
const float  m2[4][4] 
)

Definition at line 87 of file math_matrix.c.

Referenced by add_pose_transdata(), apply_targetless_ik(), applyarmature_set_edit_position(), armature_bone_primitive_add_exec(), armature_calc_roll_exec(), armature_click_extrude_exec(), armature_finalize_restpose(), armature_transform_recurse(), armature_vert_task_with_dvert(), BKE_armature_transform(), BKE_bone_parent_transform_calc_from_matrices(), BKE_mesh_transform(), BKE_pchan_bbone_handles_compute(), BKE_scene_cursor_from_mat4(), BMD_mesh_intersection(), BMO_slot_mat3_get(), camera_frame_fit_data_init(), contarget_get_mesh_mat(), convert_tree(), createObjectSpace(), createTransArmatureVerts(), createTransCurveVerts(), createTransEdge(), createTransEditVerts(), createTransGPencil_curves(), createTransGPencil_strokes(), createTransLatticeVerts(), createTransMBallVerts(), createTransMeshSkin(), createTransMeshVertCData(), createTransSculpt(), createTransTexspace(), createViewSpace(), deformStroke(), deformVerts_do(), do_version_bone_roll_256(), ED_armature_ebone_from_mat4(), ED_armature_edit_transform(), ed_editnurb_spin(), ED_gpencil_join_objects_exec(), ED_object_new_primitive_matrix(), ED_transform_calc_gizmo_stats(), ED_transform_calc_orientation_from_type_ex(), ED_view3d_from_m4(), ED_view3d_minmax_verts(), edbm_extrude_repeat_exec(), EDBM_unified_findnearest_from_raycast(), EEVEE_lookdev_cache_init(), execute_posetree(), face_dupli(), flyApply(), getTransformOrientation_ex(), gimbal_axis_object(), gimbal_axis_pose(), gizmo_axis_draw(), gizmo_mesh_extrude_draw_prepare(), gizmo_mesh_spin_init_draw_prepare(), gizmo_mesh_spin_init_refresh(), GPU_matrix_normal_get(), hair_create_input_mesh(), init_curve_deform(), init_TransDataContainers(), initFlyInfo(), initResize(), interp_m4_m4m4(), is_uniform_scaled_m4(), locktrack_evaluate(), mat4_normalized_to_compatible_eulO(), mat4_normalized_to_eul(), mat4_normalized_to_eulO(), mat4_normalized_to_quat(), mat4_to_compatible_eulO(), mat4_to_dquat(), mat4_to_eul(), mat4_to_eulO(), mat4_to_loc_quat(), mat4_to_loc_rot_size(), mat4_to_quat(), Matrix_to_euler(), Matrix_to_quaternion(), meshdeformModifier_do(), modifyMesh(), move3d_get_translate(), mul_v3m3_dq(), nurb_bezt_direction_worldspace_get(), nurb_bpoint_direction_worldspace_get(), object_hook_recenter_exec(), object_origin_clear_exec(), object_origin_set_exec(), object_transform_axis_target_modal(), ObjectToTransData(), OVERLAY_gpencil_cache_init(), paintface_minmax(), pchan_deform_accumulate(), pivotcon_evaluate(), proj_paint_state_viewport_init(), pseudoinverse_m3_m3(), RotationBetween(), SCULPT_cursor_geometry_info_update(), sculpt_gesture_context_init_common(), sculpt_update_cache_invariants(), similar_edge_select_exec(), similar_face_select_exec(), snap_curs_to_sel_ex(), snap_sel_to_grid_exec(), snap_selected_to_location(), solve_parenting(), tranformViewUpdate(), blender::nodes::transform_curve_edit_hints(), uv_select_similar_edge_exec(), uv_select_similar_face_exec(), uv_select_similar_vert_exec(), v3d_cursor_poject_surface_normal(), v3d_cursor_snap_update(), vfont_to_curve(), viewops_data_create(), visualkey_get_values(), voxel_size_edit_invoke(), vwpaint_update_cache_invariants(), walkApply(), WIDGETGROUP_gizmo_draw_prepare(), WIDGETGROUP_xform_cage_draw_prepare(), WIDGETGROUP_xform_cage_refresh(), WIDGETGROUP_xform_shear_draw_prepare(), and WIDGETGROUP_xform_shear_refresh().

◆ copy_m3d_m3()

void copy_m3d_m3 ( double  m1[3][3],
const float  m2[3][3] 
)

Definition at line 165 of file math_matrix.c.

Referenced by blender::bke::tests::EXPECT_M3_ORTHOGONAL().

◆ copy_m4_m2()

void copy_m4_m2 ( float  m1[4][4],
const float  m2[2][2] 
)

Definition at line 142 of file math_matrix.c.

◆ copy_m4_m3()

void copy_m4_m3 ( float  m1[4][4],
const float  m2[3][3] 
)

◆ copy_m4_m4()

void copy_m4_m4 ( float  m1[4][4],
const float  m2[4][4] 
)

Definition at line 77 of file math_matrix.c.

Referenced by actcon_get_tarmat(), AnimationImporter::add_bone_animation_sampled(), TransformWriter::add_joint_transform(), add_weighted_dq_dq(), annotation_paint_initstroke(), annotation_session_initdata(), AnimationImporter::apply_matrix_curves(), apply_objects_internal(), arrayModifier_doArray(), bake(), base_callback(), bc_add_global_transform(), bc_bone_matrix_local_get(), bc_create_restpose_mat(), BKE_bone_parent_transform_calc_from_matrices(), BKE_camera_multiview_window_matrix(), BKE_constraint_mat_convertspace(), BKE_constraint_target_matrix_get(), BKE_constraints_clear_evalob(), BKE_constraints_make_evalob(), BKE_constraints_solve(), BKE_gpencil_instance_modifier_instance_tfm(), BKE_gpencil_layer_copy_settings(), BKE_gpencil_layer_transform_matrix_get(), BKE_gpencil_update_layer_transforms(), BKE_lattice_deform_data_create(), BKE_lattice_resize(), BKE_mesh_remap_find_best_match_from_mesh(), BKE_object_apply_parent_inverse(), BKE_object_eval_parent(), BKE_object_get_parent_matrix(), BKE_object_matrix_local_get(), BKE_object_sync_to_original(), BKE_object_tfm_backup(), BKE_object_tfm_restore(), BKE_pchan_bbone_spline_params_get(), BKE_pchan_minmax(), BKE_pose_copy_pchan_result(), BKE_pose_eval_bone(), BKE_pose_where_is(), BKE_scene_base_iter_next(), BKE_tracking_camera_get_reconstructed_interpolate(), BKE_tracking_get_projection_matrix(), BLI_uvproject_camera_info(), BMO_slot_mat4_get(), BMO_slot_mat_set(), box_clip_bounds_m4(), brush_add(), bundle_midpoint(), AnimationImporter::calc_joint_parent_mat_rest(), camera_model_matrix(), camera_stereo3d_model_matrix(), camera_view3d_reconstruction(), camerasolver_evaluate(), childof_evaluate(), clampto_evaluate(), cloth_brush_apply_brush_foces(), constraint_target_to_mat4(), contarget_get_lattice_mat(), contarget_get_mesh_mat(), convert_pose(), convert_tree(), copy_bone_transform(), blender::io::alembic::create_transform_matrix(), createTransSculpt(), damptrack_do_transform(), deformStroke(), deformVerts_do(), displaceModifier_do(), dist_squared_to_projected_aabb_precalc(), draw_axes(), draw_bone_degrees_of_freedom(), draw_bone_update_disp_matrix_custom(), draw_bone_update_disp_matrix_default(), draw_view_matrix_state_update(), drawPropCircle(), drawSnapping(), drw_call_matrix_init(), DRW_debug_m4_as_bbox(), DRW_debug_modelmat(), DRW_debug_sphere(), DRW_draw_depth_object(), DRW_hair_duplimat_get(), DRW_view_persmat_get(), DRW_view_update(), DRW_view_viewmat_get(), DRW_view_winmat_get(), drw_volume_object_grids_init(), drw_volume_object_mesh_init(), dvar_eval_locDiff(), dynamicPaint_brushMeshCalculateVelocity(), dynamicPaint_brushObjectCalculateVelocity(), dynamicPaint_generateBakeData(), dyntopo_detail_size_edit_invoke(), ED_gpencil_project_point_to_plane(), ED_gpencil_project_stroke_to_plane(), ED_gpencil_reset_layers_parent(), ED_mesh_deform_bind_callback(), ED_object_data_xform_container_item_ensure(), ED_object_xform_array_m4(), ED_object_xform_skip_child_container_item_ensure(), ED_transform_calc_gizmo_stats(), ED_view3d_cameracontrol_update(), ED_view3d_cursor_snap_draw_util(), ED_view3d_draw_offscreen_imbuf(), ED_view3d_draw_offscreen_imbuf_simple(), ED_view3d_mats_rv3d_backup(), ED_view3d_mats_rv3d_restore(), ED_view3d_update_viewmat(), eevee_draw_scene(), eevee_lightprobes_culling_test(), EEVEE_motion_blur_cache_populate(), EEVEE_motion_blur_curves_cache_populate(), EEVEE_motion_blur_hair_cache_populate(), EEVEE_motion_blur_swap_data(), EEVEE_render_draw(), AnimationImporter::evaluate_transform_at_frame(), execute_posetree(), followpath_evaluate(), followpath_get_tarmat(), followtrack_evaluate_using_2d_position(), followtrack_evaluate_using_3d_position_camera(), followtrack_evaluate_using_3d_position_object(), SkinInfo::get_joint_inv_bind_matrix(), TransformReader::get_node_mat(), gizmo_arrow_matrix_basis_get(), gizmo_cage2d_exit(), gizmo_cage2d_invoke(), gizmo_cage2d_modal(), gizmo_cage3d_exit(), gizmo_cage3d_invoke(), gizmo_cage3d_modal(), gizmo_modal(), gizmo_move_matrix_basis_get(), gpencil_brush_grab_apply_cached(), GPENCIL_draw_object(), gpencil_light_pool_populate(), gpencil_paint_initstroke(), gpencil_sculpt_brush_init(), gpencil_vertexpaint_brush_apply_to_layers(), gpencil_weightpaint_brush_apply_to_layers(), GPU_matrix_model_view_get(), GPU_matrix_projection_get(), GPU_matrix_projection_set(), GPU_matrix_push(), GPU_matrix_push_projection(), GPU_matrix_set(), hit_depth_create(), i_multmatrix(), ignore_parent_tx(), init_context(), init_meta(), init_TransDataContainers(), invert_m4(), invert_m4_m4_safe(), invert_m4_m4_safe_ortho(), kinematic_get_tarmat(), lineart_create_render_buffer(), lineart_main_get_view_vector(), lineart_main_try_generate_shadow(), SkinInfo::link_armature(), make_dmats(), make_duplis_font(), make_duplis_particle_system(), make_object_duplilist_real(), mat4_to_dquat(), matrix_from_obj_pchan(), matrix_invert_safe_internal(), Matrix_resize_4x4(), mesh_render_data_create(), minmax_evaluate(), modifyMesh(), mul_m3_m3m4(), mul_m3_m4m3(), mul_m4_m3m4(), mul_m4_m4_post(), mul_m4_m4_pre(), mul_m4_m4m3(), nearest_world_object_fn(), ob_parbone(), ob_parcurve(), object_apply_location(), object_warp_verts_exec(), objectsolver_evaluate(), ObjectToTransData(), OVERLAY_gpencil_cache_init(), OVERLAY_image_empty_cache_populate(), OVERLAY_light_cache_populate(), OVERLAY_lightprobe_cache_populate(), OVERLAY_relationship_lines(), pack_data_in_mat4(), pack_fl_in_mat4(), paint_cursor_drawing_setup_cursor_space(), pose_channel_flush_to_orig_if_needed(), proj_paint_state_viewport_init(), projmat_from_subregion(), raycast_obj_fn(), RE_GetCameraWindow(), RE_GetCameraWindowWithOverscan(), RE_SetCamera(), AnimationImporter::read_node_transform(), reconstruct_retrieve_libmv_tracks(), remap_hair_emitter(), rotlike_evaluate(), SCULPT_brush_test_init(), SCULPT_cloth_plane_falloff_preview_draw(), SCULPT_do_multiplane_scrape_brush(), SCULPT_filter_cache_init(), sculpt_gesture_update_effected_nodes_by_clip_planes(), sculpt_transform_radius_elastic(), select_cache_init(), BCMatrix::set_transform(), setTransformViewMatrices(), shrinkwrap_evaluate(), shrinkwrap_get_tarmat(), single_axis_convert(), SkinInfo::SkinInfo(), snap_obj_fn(), spin_exec(), svd_m4(), target_callback(), transform_snap_context_project_view3d_mixed_impl(), AnimationImporter::translate_animation_OLD(), translike_evaluate(), uv_from_view_exec(), uv_map_rotation_matrix_ex(), uvprojectModifier_do(), v3d_cursor_snap_update(), v3d_object_dimension_buts(), view3d_camera_to_view_selected_impl(), visualkey_get_values(), volume_grid_cache_get(), what_does_obaction(), where_is_ik_bone(), WIDGETGROUP_armature_spline_refresh(), WIDGETGROUP_empty_image_refresh(), WIDGETGROUP_light_area_refresh(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_draw_prepare(), WIDGETGROUP_xform_cage_refresh(), wireframe_hair_cache_populate(), WM_gizmo_calc_matrix_final_params(), wm_xr_fly_compute_turn(), wm_xr_grab_compute(), WM_xr_session_state_viewer_pose_matrix_info_get(), and workbench_antialiasing_engine_init().

◆ copy_m4_m4_db()

void copy_m4_m4_db ( double  m1[4][4],
const double  m2[4][4] 
)

Definition at line 82 of file math_matrix.c.

Referenced by lineart_main_load_geometries(), and lineart_main_try_generate_shadow().

◆ copy_m4d_m4()

void copy_m4d_m4 ( double  m1[4][4],
const float  m2[4][4] 
)

Definition at line 180 of file math_matrix.c.

Referenced by lineart_object_load_single_instance(), and projmat_dimensions_db().

◆ determinant_m2()

float determinant_m2 ( float  a,
float  b,
float  c,
float  d 
)

◆ determinant_m3()

float determinant_m3 ( float  a1,
float  a2,
float  a3,
float  b1,
float  b2,
float  b3,
float  c1,
float  c2,
float  c3 
)

◆ determinant_m3_array()

float determinant_m3_array ( const float  m[3][3])

◆ determinant_m3_array_db()

double determinant_m3_array_db ( const double  m[3][3])

Definition at line 1112 of file math_matrix.c.

Referenced by blender::bke::tests::EXPECT_M3_ORTHOGONAL().

◆ determinant_m4()

float determinant_m4 ( const float  m[4][4])

◆ determinant_m4_mat3_array()

float determinant_m4_mat3_array ( const float  m[4][4])

Definition at line 1105 of file math_matrix.c.

Referenced by mat4_to_volume_scale().

◆ equals_m3m3()

bool equals_m3m3 ( const float  mat1[3][3],
const float  mat2[3][3] 
)

◆ equals_m4m4()

bool equals_m4m4 ( const float  mat1[4][4],
const float  mat2[4][4] 
)

◆ has_zero_axis_m4()

bool has_zero_axis_m4 ( const float  matrix[4][4])

Definition at line 3119 of file math_matrix.c.

References len_squared_v3().

Referenced by init_meta().

◆ interp_m3_m3m3()

void interp_m3_m3m3 ( float  R[3][3],
const float  A[3][3],
const float  B[3][3],
float  t 
)

A polar-decomposition-based interpolation between matrix A and matrix B.

Note
This code is about five times slower as the 'naive' interpolation done by blend_m3_m3m3 (it typically remains below 2 usec on an average i74700, while blend_m3_m3m3 remains below 0.4 usec). However, it gives expected results even with non-uniformly scaled matrices, see T46418 for an example.

Based on "Matrix Animation and Polar Decomposition", by Ken Shoemake & Tom Duff

Parameters
RResulting interpolated matrix.
AInput matrix which is totally effective with t = 0.0.
BInput matrix which is totally effective with t = 1.0.
tInterpolation factor.

Definition at line 2436 of file math_matrix.c.

References A, B, determinant_m3_array(), interp_qt_qtqt(), interp_v3_v3v3(), mat3_polar_decompose(), mat3_to_quat(), mul_m3_fl(), mul_m3_m3m3(), P(), quat_to_mat3(), R, and t.

Referenced by ElementRotation_ex(), interp_m4_m4m4(), Matrix_lerp(), and TEST().

◆ interp_m4_m4m4()

void interp_m4_m4m4 ( float  R[4][4],
const float  A[4][4],
const float  B[4][4],
float  t 
)

Complete transform matrix interpolation, based on polar-decomposition-based interpolation from interp_m3_m3m3.

Parameters
RResulting interpolated matrix.
AInput matrix which is totally effective with t = 0.0.
BInput matrix which is totally effective with t = 1.0.
tInterpolation factor.

Definition at line 2481 of file math_matrix.c.

References A, B, Freestyle::B3(), copy_m3_m4(), copy_m4_m3(), copy_v3_v3(), interp_m3_m3m3(), interp_v3_v3v3(), R, and t.

Referenced by BKE_constraints_solve(), blender::io::alembic::blend_matrices(), constraint_target_to_mat4(), blender::float4x4::interpolate(), Matrix_lerp(), and TEST().

◆ invert_m2_m2()

bool invert_m2_m2 ( float  R[2][2],
const float  A[2][2] 
)

Definition at line 1119 of file math_matrix.c.

References adjoint_m2_m2(), and determinant_m2().

Referenced by GEO_uv_parametrizer_average().

◆ invert_m3()

bool invert_m3 ( float  R[3][3])

◆ invert_m3_ex()

bool invert_m3_ex ( float  m[3][3],
float  epsilon 
)

Definition at line 1135 of file math_matrix.c.

References copy_m3_m3(), blender::robust_pred::epsilon, and invert_m3_m3_ex().

◆ invert_m3_m3()

bool invert_m3_m3 ( float  R[3][3],
const float  A[3][3] 
)

◆ invert_m3_m3_ex()

bool invert_m3_m3_ex ( float  m1[3][3],
const float  m2[3][3],
float  epsilon 
)

◆ invert_m3_m3_safe_ortho()

void invert_m3_m3_safe_ortho ( float  Ainv[3][3],
const float  A[3][3] 
)

◆ invert_m4()

bool invert_m4 ( float  R[4][4])

◆ invert_m4_m4()

bool invert_m4_m4 ( float  R[4][4],
const float  A[4][4] 
)

Definition at line 1287 of file math_matrix.c.

References EIG_invert_m4_m4(), inverse(), and invert_m4_m4_fallback().

Referenced by action_flip_pchan(), AnimationImporter::add_bone_animation_sampled(), add_hook_object(), BCMatrix::add_inverted_transform(), TransformWriter::add_joint_transform(), add_primitive_cube_gizmo_exec(), BCMatrix::add_transform(), add_vertex_exec(), annotation_session_initdata(), apply_layer_settings(), AnimationImporter::apply_matrix_curves(), apply_objects_internal(), BCMatrix::apply_transform(), applyarmature_fix_boneparents(), applyarmature_process_selected_recursive(), armature_bone_primitive_add_exec(), armature_calc_roll_exec(), armature_deform_coords_impl(), armature_fill_bones_exec(), armature_finalize_restpose(), armature_transform_recurse(), armdef_accumulate_bone(), arrayModifier_doArray(), bake(), base_callback(), bc_bone_matrix_local_get(), bc_rotate_from_reference_quat(), BKE_armature_mat_pose_to_delta(), BKE_armature_mat_world_to_pose(), BKE_constraint_mat_convertspace(), BKE_constraints_clear_evalob(), BKE_gpencil_instance_modifier_instance_tfm(), BKE_gpencil_layer_addnew(), BKE_gpencil_stroke_from_view_space(), BKE_lattice_deform_data_create(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), BKE_object_apply_mat4_ex(), BKE_object_apply_parent_inverse(), BKE_object_modifier_gpencil_hook_reset(), BKE_object_modifier_hook_reset(), BKE_pchan_bbone_segments_cache_compute(), BKE_pchan_bbone_spline_compute(), BKE_pchan_bbone_spline_params_get(), BKE_pose_bone_done(), BKE_pose_eval_init(), BKE_pose_where_is(), BKE_tracking_get_projection_matrix(), BLI_space_transform_from_matrices(), BLI_space_transform_global_from_matrices(), blo_do_versions_290(), BM_mesh_calc_uvs_circle(), BM_mesh_calc_uvs_cone(), BMBVH_EdgeVisible(), BMD_mesh_intersection(), bmo_transform_exec(), brush_add(), brush_edit_apply(), brush_puff(), calc_brush_local_mat(), calc_local_clipping(), camera_view3d_reconstruction(), childof_evaluate(), clip_draw_main(), cloth_brush_solve_collision(), cloth_to_object(), convert_pose(), convert_tree(), blender::io::alembic::create_transform_matrix(), createTransParticleVerts(), cuboid_do(), curve_draw_event_add(), curve_draw_exec(), deflect_emitter_iter(), deformStroke(), deformVerts_do(), do_clay_thumb_brush_task_cb_ex(), draw_view_matrix_state_update(), drawPropCircle(), drawVertSlide(), drw_call_matrix_init(), DRW_debug_m4_as_bbox(), DRW_view_update(), ED_armature_join_objects_exec(), ED_armature_origin_set(), ED_clip_point_stable_pos(), ED_gpencil_project_stroke_to_plane(), ED_gpencil_project_stroke_to_view(), ED_gpencil_reset_layers_parent(), ED_gpencil_stroke_reproject(), ED_object_data_xform_container_update_all(), ED_object_parent_set(), ED_object_xform_skip_child_container_item_ensure(), ED_object_xform_skip_child_container_update_all(), ED_transform_calc_gizmo_stats(), ED_view3d_camera_lock_sync(), ED_view3d_cameracontrol_update(), ED_view3d_clipping_calc(), ED_view3d_draw_offscreen_imbuf_simple(), ED_view3d_update_viewmat(), edbm_dupli_extrude_cursor_invoke(), edbm_extrude_edge_exclude_mirror(), edbm_polybuild_delete_at_cursor_invoke(), edbm_polybuild_face_at_cursor_invoke(), edbm_polybuild_split_at_cursor_invoke(), edbm_polybuild_transform_at_cursor_invoke(), EEVEE_lightprobes_grid_data_from_object(), EEVEE_lightprobes_planar_data_from_object(), EEVEE_render_view_sync(), execute_posetree(), explodeMesh(), flushTransParticles(), followtrack_evaluate_using_3d_position_object(), followtrack_project_to_depth_object_if_needed(), foreach_mouse_hit_key_iter(), generate_vert_coordinates(), get_quick_mesh(), gizmo_cage2d_modal(), gizmo_move_modal(), gizmo_window_project_2d(), gizmo_window_project_3d(), gpencil_apply_parent(), gpencil_apply_parent_point(), gpencil_bake_grease_pencil_animation_exec(), gpencil_brush_grab_apply_cached(), gpencil_paint_initstroke(), gpencil_primitive_set_initdata(), GPENCIL_render_init(), gpencil_sculpt_brush_init(), ignore_parent_tx(), init_curve_deform(), init_meta(), Freestyle::BlenderFileLoader::insertShapeNode(), invert_m4(), invert_m4_m4_safe(), invert_m4_m4_safe_ortho(), blender::float4x4::inverted(), lineart_main_get_view_vector(), lineart_main_load_geometries(), lineart_main_try_generate_shadow(), lineart_object_load_single_instance(), SkinInfo::link_armature(), make_child_duplis_faces_from_editmesh(), make_child_duplis_faces_from_mesh(), make_child_duplis_verts_from_editmesh(), make_child_duplis_verts_from_mesh(), make_dmats(), make_duplis_particle_system(), mat4_to_dquat(), merge_target(), mesh_bisect_exec(), meshdeformModifier_do(), minmax_evaluate(), MOD_get_texture_coords(), MOD_lineart_gpencil_generate(), modifyMesh(), nearest_world_tree(), normalEditModifier_do_directional(), object_apply_mat4_with_protect(), object_join_exec(), object_origin_set_exec(), object_warp_transverts(), objectsolver_evaluate(), obmat_to_viewmat(), particle_system_minmax(), particle_system_update(), PE_mirror_particle(), pointdensity_cache_psys(), blender::io::gpencil::GpencilIO::prepare_camera_params(), proj_paint_state_viewport_init(), psys_apply_hair_lattice(), raycastEditMesh(), raycastMesh(), RE_bake_normal_world_to_object(), RE_bake_pixels_populate_from_objects(), reconstruct_retrieve_libmv_tracks(), remap_hair_emitter(), BCQuat::rotate_to(), save_hair(), SCULPT_clip(), SCULPT_cursor_geometry_info_update(), SCULPT_do_clay_strips_brush(), SCULPT_do_clay_thumb_brush(), SCULPT_do_multiplane_scrape_brush(), SCULPT_do_paint_brush(), SCULPT_do_pose_brush(), SCULPT_filter_cache_init(), sculpt_init_mirror_clipping(), SCULPT_multiplane_scrape_preview_draw(), SCULPT_raycast_init(), sculpt_transform_matrices_init(), sculpt_update_brush_delta(), sculpt_update_cache_invariants(), set_axis(), similar_face_select_exec(), similar_vert_select_exec(), snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), snap_sel_to_grid_exec(), snap_selected_to_location(), snap_to_pipe_profile(), snapCamera(), snapEditMesh(), snapMesh(), softbody_to_object(), sort_bmelem_flag(), sphere_do(), spin_exec(), stabilization_data_to_mat4(), surfacedeformBind(), surfacedeformModifier_do(), blender::eevee::Camera::sync(), transform_convert_clip_mirror_modifier_apply(), AnimationImporter::translate_animation_OLD(), update_location_for_2d_curve(), update_mirror_object(), updateDuplicateActionConstraintSettings(), updateDuplicateLocRotConstraintSettings(), uv_map_transform_center(), uvprojectModifier_do(), v3d_editvertex_buts(), vertex_parent_set_exec(), vfont_to_curve(), view3d_viewmatrix_set(), volume_grid_cache_get(), voxel_size_edit_invoke(), vwpaint_update_cache_invariants(), warpModifier_do(), waveModifier_do(), workbench_render_matrices_init(), and workbench_shadow_update().

◆ invert_m4_m4_fallback()

bool invert_m4_m4_fallback ( float  R[4][4],
const float  A[4][4] 
)

Computes the inverse of mat and puts it in inverse. Uses Gaussian Elimination with partial (maximal column) pivoting.

Returns
true on success (i.e. can always find a pivot) and false on failure. Mark Segal - 1992.
Note
this has worse performance than EIG_invert_m4_m4 (Eigen), but e.g. for non-invertible scale matrices, finding a partial solution can be useful to have a valid local transform center, see T57767.

Definition at line 1215 of file math_matrix.c.

References BLI_assert, double(), EIG_invert_m4_m4(), fabsf, float(), inverse(), max, SWAP, and UNLIKELY.

Referenced by init_TransDataContainers(), and invert_m4_m4().

◆ invert_m4_m4_safe()

void invert_m4_m4_safe ( float  Ainv[4][4],
const float  A[4][4] 
)

◆ invert_m4_m4_safe_ortho()

void invert_m4_m4_safe_ortho ( float  Ainv[4][4],
const float  A[4][4] 
)

A safe version of invert that uses valid axes, calculating the zero'd axis based on the non-zero ones.

This works well for transformation matrices, when a single axis is zeroed.

Definition at line 3188 of file math_matrix.c.

References A, copy_m4_m4(), invert_m4_m4(), orthogonalize_m4_zero_axes(), unit_m4(), and UNLIKELY.

Referenced by ED_armature_join_objects_exec(), ED_curve_join_objects_exec(), ED_gpencil_join_objects_exec(), and ED_mesh_join_objects_exec().

◆ is_negative_m3()

bool is_negative_m3 ( const float  mat[3][3])

◆ is_negative_m4()

bool is_negative_m4 ( const float  mat[4][4])

◆ is_orthogonal_m3()

bool is_orthogonal_m3 ( const float  mat[3][3])

Definition at line 1779 of file math_matrix.c.

References dot_v3v3(), and fabsf.

Referenced by is_orthonormal_m3(), and Matrix_is_orthogonal_axis_vectors_get().

◆ is_orthogonal_m4()

bool is_orthogonal_m4 ( const float  mat[4][4])

Definition at line 1794 of file math_matrix.c.

References dot_v4v4(), and fabsf.

Referenced by is_orthonormal_m4(), and Matrix_is_orthogonal_axis_vectors_get().

◆ is_orthonormal_m3()

bool is_orthonormal_m3 ( const float  mat[3][3])

Definition at line 1809 of file math_matrix.c.

References dot_v3v3(), fabsf, and is_orthogonal_m3().

Referenced by mat4_to_dquat(), and Matrix_is_orthogonal_get().

◆ is_orthonormal_m4()

bool is_orthonormal_m4 ( const float  mat[4][4])

Definition at line 1826 of file math_matrix.c.

References dot_v4v4(), fabsf, and is_orthogonal_m4().

Referenced by Matrix_is_orthogonal_get().

◆ is_uniform_scaled_m3()

bool is_uniform_scaled_m3 ( const float  mat[3][3])

Definition at line 1843 of file math_matrix.c.

References eps, fabsf, len_squared_v3(), t, and transpose_m3_m3().

Referenced by is_uniform_scaled_m4(), and multires_apply_smat().

◆ is_uniform_scaled_m4()

bool is_uniform_scaled_m4 ( const float  m[4][4])

Definition at line 1867 of file math_matrix.c.

References copy_m3_m4(), is_uniform_scaled_m3(), and t.

Referenced by BKE_curve_transform_ex().

◆ is_zero_m3()

bool is_zero_m3 ( const float  mat[3][3])

Definition at line 2516 of file math_matrix.c.

References is_zero_v3().

◆ is_zero_m4()

bool is_zero_m4 ( const float  mat[4][4])

◆ loc_axisangle_size_to_mat4()

void loc_axisangle_size_to_mat4 ( float  R[4][4],
const float  loc[3],
const float  axis[3],
float  angle,
const float  size[3] 
)

Definition at line 2620 of file math_matrix.c.

References angle(), axis_angle_to_quat(), loc_quat_size_to_mat4(), R, and size().

◆ loc_eul_size_to_mat4()

void loc_eul_size_to_mat4 ( float  R[4][4],
const float  loc[3],
const float  eul[3],
const float  size[3] 
)

◆ loc_eulO_size_to_mat4()

void loc_eulO_size_to_mat4 ( float  R[4][4],
const float  loc[3],
const float  eul[3],
const float  size[3],
short  order 
)

Make a 4x4 matrix out of 3 transform components. Matrices are made in the order: scale * rot * loc

Definition at line 2571 of file math_matrix.c.

References copy_m4_m3(), eulO_to_mat3(), mul_m3_m3m3(), R, size(), size_to_mat3(), and unit_m4().

Referenced by bc_create_restpose_mat(), childof_evaluate(), and rotlimit_evaluate().

◆ loc_quat_size_to_mat4()

void loc_quat_size_to_mat4 ( float  R[4][4],
const float  loc[3],
const float  quat[4],
const float  size[3] 
)

Make a 4x4 matrix out of 3 transform components. Matrices are made in the order: scale * rot * loc

Definition at line 2596 of file math_matrix.c.

References copy_m4_m3(), mul_m3_m3m3(), quat_to_mat3(), R, size(), size_to_mat3(), and unit_m4().

Referenced by blend_m4_m4m4(), get_dupliface_transform_from_coords(), get_duplivert_transform(), and loc_axisangle_size_to_mat4().

◆ loc_rot_size_to_mat4()

void loc_rot_size_to_mat4 ( float  R[4][4],
const float  loc[3],
const float  rot[3][3],
const float  size[3] 
)

Make a 4x4 matrix out of 3 transform components. Matrices are made in the order: scale * rot * loc

Definition at line 2537 of file math_matrix.c.

References copy_m4_m3(), copy_v3_v3(), R, rescale_m4(), rot, and size().

Referenced by mul_m4_m4m4_aligned_scale(), mul_m4_m4m4_split_channels(), rotlike_evaluate(), seq_image_transform_quad_get_ex(), sequencer_image_crop_transform_matrix(), sequencer_thumbnail_transform(), and transform_evaluate().

◆ madd_m3_m3m3fl()

void madd_m3_m3m3fl ( float  R[3][3],
const float  A[3][3],
const float  B[3][3],
float  f 
)

Definition at line 1054 of file math_matrix.c.

References A, B, and R.

Referenced by pchan_deform_accumulate(), and splineik_evaluate_bone().

◆ madd_m4_m4m4fl()

void madd_m4_m4m4fl ( float  R[4][4],
const float  A[4][4],
const float  B[4][4],
float  f 
)

Definition at line 1065 of file math_matrix.c.

References A, B, and R.

Referenced by armdef_accumulate_matrix().

◆ mat3_polar_decompose()

void mat3_polar_decompose ( const float  mat3[3][3],
float  r_U[3][3],
float  r_P[3][3] 
)

Right polar decomposition: M = UP

U is the 'rotation'-like component, the closest orthogonal matrix to M. P is the 'scaling'-like component, defined in U space.

See https://en.wikipedia.org/wiki/Polar_decomposition for more.

Definition at line 2270 of file math_matrix.c.

References BLI_svd_m3(), mul_m3_m3m3(), mul_m3_series, size_to_mat3(), transpose_m3_m3(), and V.

Referenced by interp_m3_m3m3().

◆ mat3_to_rot_size()

void mat3_to_rot_size ( float  rot[3][3],
float  size[3],
const float  mat3[3][3] 
)

◆ mat3_to_scale()

float mat3_to_scale ( const float  M[3][3])

This gets the average scale of a matrix, only use when your scaling data that has no idea of scale axis, examples are bone-envelope-radius and curve radius.

Definition at line 2176 of file math_matrix.c.

References copy_v3_fl(), len_v3(), M_SQRT1_3, and mul_m3_v3().

Referenced by apply_objects_internal(), Matrix_median_scale_get(), and multires_apply_smat().

◆ mat3_to_size()

void mat3_to_size ( float  size[3],
const float  M[3][3] 
)

◆ mat3_to_size_max_axis()

float mat3_to_size_max_axis ( const float  M[3][3])

Return the largest scale on any axis, the equivalent of calling:

mat3_to_size(size_v3, mat);
size = size_v3[max_axis_v3(size_v3)];
MINLINE int max_axis_v3(const float vec[3])
void mat3_to_size(float size[3], const float M[3][3])
Definition: math_matrix.c:2131
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52

.. without 2x unnecessary sqrtf calls.

Definition at line 2145 of file math_matrix.c.

References len_squared_v3(), M, max_fff(), and sqrtf.

◆ mat3_to_volume_scale()

float mat3_to_volume_scale ( const float  M[3][3])

This computes the overall volume scale factor of a transformation matrix. For an orthogonal matrix, it is the product of all three scale values. Returns a negative value if the transform is flipped by negative scale.

Definition at line 2166 of file math_matrix.c.

References determinant_m3_array().

◆ mat4_decompose()

void mat4_decompose ( float  loc[3],
float  quat[4],
float  size[3],
const float  wmat[4][4] 
)

◆ mat4_to_loc_quat()

void mat4_to_loc_quat ( float  loc[3],
float  quat[4],
const float  wmat[4][4] 
)

◆ mat4_to_loc_rot_size()

void mat4_to_loc_rot_size ( float  loc[3],
float  rot[3][3],
float  size[3],
const float  wmat[4][4] 
)

◆ mat4_to_rot()

void mat4_to_rot ( float  rot[3][3],
const float  wmat[4][4] 
)

Definition at line 2214 of file math_matrix.c.

References is_negative_m3(), negate_m3(), normalize_v3_v3(), rot, and UNLIKELY.

◆ mat4_to_scale()

float mat4_to_scale ( const float  M[4][4])

◆ mat4_to_size()

void mat4_to_size ( float  size[3],
const float  M[4][4] 
)

◆ mat4_to_size_fix_shear()

void mat4_to_size_fix_shear ( float  size[3],
const float  M[4][4] 
)

Extract scale factors from the matrix, with correction to ensure exact volume in case of a sheared matrix.

Definition at line 2155 of file math_matrix.c.

References fabsf, M, mat4_to_size(), mat4_to_volume_scale(), mul_v3_fl(), and size().

Referenced by BKE_bone_parent_transform_calc_from_matrices().

◆ mat4_to_size_max_axis()

float mat4_to_size_max_axis ( const float  M[4][4])

Only the first 3 axes are used.

Definition at line 2150 of file math_matrix.c.

References len_squared_v3(), M, max_fff(), and sqrtf.

Referenced by pchan_culling_test_bbone(), and pchan_culling_test_envelope().

◆ mat4_to_volume_scale()

float mat4_to_volume_scale ( const float  M[4][4])

◆ mat4_to_xy_scale()

float mat4_to_xy_scale ( const float  M[4][4])

Return 2D scale (in XY plane) of given mat4.

Definition at line 2194 of file math_matrix.c.

References float(), len_v3(), M, M_SQRT1_2, and mul_mat3_m4_v3().

◆ mul_m2_v2()

void mul_m2_v2 ( const float  M[2][2],
float  v[2] 
)

◆ mul_m3_fl()

void mul_m3_fl ( float  R[3][3],
float  f 
)

◆ mul_m3_m3_post()

void mul_m3_m3_post ( float  R[3][3],
const float  B[3][3] 
)

◆ mul_m3_m3_pre()

void mul_m3_m3_pre ( float  R[3][3],
const float  A[3][3] 
)

◆ mul_m3_m3m3()

void mul_m3_m3m3 ( float  R[3][3],
const float  A[3][3],
const float  B[3][3] 
)

Definition at line 388 of file math_matrix.c.

References A, B, mul_m3_m3_post(), mul_m3_m3_pre(), mul_m3_m3m3_uniq(), and R.

Referenced by _va_mul_m3_series_3(), _va_mul_m3_series_4(), _va_mul_m3_series_5(), _va_mul_m3_series_6(), _va_mul_m3_series_7(), _va_mul_m3_series_8(), _va_mul_m3_series_9(), add_pose_transdata(), apply_objects_internal(), apply_targetless_ik(), applyAlign(), applyAxisConstraintSize(), applyObjectConstraintRot(), applyObjectConstraintSize(), armature_bone_primitive_add_exec(), armature_finalize_restpose(), armature_transform_recurse(), BKE_bone_parent_transform_calc_from_matrices(), BKE_crazyspace_build_sculpt(), BKE_curve_deform_co(), BKE_object_rot_to_mat3(), BKE_object_to_mat3(), BKE_pchan_to_mat4(), blend_m3_m3m3(), cloth_parallel_transport_hair_frame(), colormanage_load_config(), blender::io::alembic::copy_m44_axis_swap(), createTransArmatureVerts(), drawObjectConstraint(), ED_armature_edit_transform(), ed_editnurb_spin(), ED_object_new_primitive_matrix(), EEVEE_lookdev_cache_init(), ElementBoneSize(), ElementMirror(), ElementResize(), ElementRotation_ex(), Euler_rotate(), execute_posetree(), blender::nodes::node_fn_rotate_euler_cc::get_multi_function(), gimbal_axis_object(), gimbal_axis_pose(), gizmo_axis_draw(), gizmo_mesh_spin_redo_update_orient_axis(), interp_m3_m3m3(), legacy_vec_roll_to_mat3_normalized(), loc_eul_size_to_mat4(), loc_eulO_size_to_mat4(), loc_quat_size_to_mat4(), locktrack_evaluate(), mat3_polar_decompose(), mat3_vec_to_roll(), Matrix_rotate(), meshcache_do(), mul_v3m3_dq(), multiresModifier_prepare_join(), object_orient_to_location(), object_transform_axis_target_modal(), ObjectToTransData(), projection_matrix_calc(), Quaternion_rotate(), root_to_world_m3(), rotate_eul(), rotate_eulO(), rotlike_evaluate(), splineik_evaluate_bone(), transdata_elem_skin_resize(), transform_convert_mesh_crazyspace_transdata_set(), transform_data_ext_rotate(), transform_evaluate(), vcloud_estimate_transform_v3(), vec_roll_to_mat3_normalized(), vfont_to_curve(), and world_to_root_m3().

◆ mul_m3_m3m3_uniq()

void mul_m3_m3m3_uniq ( float  R[3][3],
const float  A[3][3],
const float  B[3][3] 
)

Special matrix multiplies

  • uniq: R <-- AB, R is neither A nor B
  • pre: R <-- AR
  • post: R <-- RB.

Definition at line 417 of file math_matrix.c.

References A, B, BLI_assert, ELEM, and R.

Referenced by mul_m3_m3_post(), mul_m3_m3_pre(), mul_m3_m3m3(), mul_m4_m4m4_aligned_scale(), and mul_m4_m4m4_split_channels().

◆ mul_m3_m3m4()

void mul_m3_m3m4 ( float  R[3][3],
const float  A[3][3],
const float  B[4][4] 
)

R = A * B, ignore the elements on the 4th row/column of A.

Definition at line 454 of file math_matrix.c.

References A, B, copy_m3_m3(), copy_m4_m4(), and R.

◆ mul_m3_m4m3()

void mul_m3_m4m3 ( float  R[3][3],
const float  A[4][4],
const float  B[3][3] 
)

R = A * B, ignore the elements on the 4th row/column of B.

Definition at line 477 of file math_matrix.c.

References A, B, copy_m3_m3(), copy_m4_m4(), and R.

Referenced by transform_orientation_matrix_get().

◆ mul_m3_m4m4()

void mul_m3_m4m4 ( float  R[3][3],
const float  A[4][4],
const float  B[4][4] 
)

Definition at line 520 of file math_matrix.c.

References A, B, and R.

Referenced by snap_selected_to_location(), and splineik_evaluate_bone().

◆ mul_m3_v2()

void mul_m3_v2 ( const float  m[3][3],
float  r[2] 
)

Definition at line 724 of file math_matrix.c.

References mul_v2_m3v2(), and r.

Referenced by flushTransMasking(), mask_evaluate_apply_point_parent(), and setup_vertex_point().

◆ mul_m3_v3()

void mul_m3_v3 ( const float  M[3][3],
float  r[3] 
)

Definition at line 926 of file math_matrix.c.

References M, mul_v3_m3v3(), r, and UNPACK3.

Referenced by apply_objects_internal(), applyAxisConstraintVec(), applyFaceNearest(), applyFaceProject(), applyGridAbsolute(), applyObjectConstraintVec(), armature_calc_roll_exec(), armature_click_extrude_exec(), BKE_mesh_remap_calc_polys_from_mesh(), BKE_mesh_transform(), bmesh_test_dist_add(), bmo_spin_exec(), calc_bbox(), calc_distanceCurveVerts(), calc_overlap(), blender::io::obj::OBJMesh::calc_poly_normal(), cloth_filter_apply_forces_task_cb(), contarget_get_mesh_mat(), convert_tree(), cube_face_uv_to_direction(), do_kink_spiral(), do_kink_spiral_deform(), ED_gpencil_join_objects_exec(), ED_object_new_primitive_matrix(), ED_view3d_minmax_verts(), ElementMirror(), ElementResize(), ElementRotation_ex(), execute_posetree(), filter(), flyApply(), getTransformOrientation_ex(), gizmo_axis_draw(), gizmo_bisect_prop_angle_set(), gizmo_mesh_spin_redo_setup(), gizmo_spin_prop_axis_angle_set(), gpencil_brush_twist_apply(), imapaint_tri_weights(), IMB_colormanagement_srgb_to_scene_linear_v3(), initFlyInfo(), blender::geometry::interpolate_position_with_interpolation(), mat3_to_quat_is_ok(), mat3_to_scale(), mball_select_similar_type(), mball_select_similar_type_get(), mesh_filter_task_cb(), meshcache_do(), meshdeform_vert_task(), move3d_get_translate(), mul_v3m3_dq(), nurb_bezt_direction_worldspace_get(), nurb_bpoint_direction_worldspace_get(), object_hook_recenter_exec(), object_origin_clear_exec(), object_origin_set_exec(), object_transform_axis_target_modal(), pivotcon_evaluate(), proj_paint_state_viewport_init(), psys_get_dupli_path_transform(), raycast_all_cb(), raycastEditMesh(), raycastMesh(), RE_bake_normal_world_to_tangent(), ResizeBetween(), blender::math::rotate_around_axis(), blender::nodes::node_geo_curve_primitive_arc_cc::rotate_vector_around_axis(), rotateflagNurb(), RotationBetween(), SCULPT_cursor_geometry_info_update(), sculpt_flush_pbvhvert_deform(), sculpt_gesture_context_init_common(), sculpt_update_cache_invariants(), blender::nodes::node_shader_vector_rotate_cc::sh_node_vector_rotate_around_axis(), blender::nodes::node_shader_vector_rotate_cc::sh_node_vector_rotate_euler(), snap_curs_to_sel_ex(), snap_sel_to_grid_exec(), snap_selected_to_location(), blender::io::obj::OBJMesh::store_normal_coords_and_indices(), transdata_elem_bend(), transdata_elem_push_pull(), transdata_elem_shear(), transdata_elem_to_sphere(), transdata_elem_translate(), transform_snap_increment_ex(), tri_to_quat_ex(), Vector_rotate(), viewops_data_create(), voxel_size_edit_invoke(), vwpaint_update_cache_invariants(), walkApply(), blender::compositor::warp_coord(), and WIDGETGROUP_xform_cage_refresh().

◆ mul_m3_v3_db()

void mul_m3_v3_db ( const double  M[3][3],
double  r[3] 
)

Definition at line 931 of file math_matrix.c.

References M, mul_v3_m3v3_db(), r, and UNPACK3.

Referenced by BLI_quadric_optimize().

◆ mul_m3_v3_double()

void mul_m3_v3_double ( const float  M[3][3],
double  r[3] 
)

Definition at line 1022 of file math_matrix.c.

References double(), M, r, x, and y.

◆ mul_m4_fl()

void mul_m4_fl ( float  R[4][4],
float  f 
)

Definition at line 967 of file math_matrix.c.

References R.

Referenced by add_weighted_dq_dq(), armdef_evaluate(), and normalize_dq().

◆ mul_m4_m3m4()

void mul_m4_m3m4 ( float  R[4][4],
const float  A[3][3],
const float  B[4][4] 
)

◆ mul_m4_m4_post()

void mul_m4_m4_post ( float  R[4][4],
const float  B[4][4] 
)

◆ mul_m4_m4_pre()

void mul_m4_m4_pre ( float  R[4][4],
const float  A[4][4] 
)

◆ mul_m4_m4m3()

void mul_m4_m4m3 ( float  R[4][4],
const float  A[4][4],
const float  B[3][3] 
)

◆ mul_m4_m4m4()

void mul_m4_m4m4 ( float  R[4][4],
const float  A[4][4],
const float  B[4][4] 
)

Definition at line 259 of file math_matrix.c.

References A, B, mul_m4_m4_post(), mul_m4_m4_pre(), mul_m4_m4m4_uniq(), and R.

Referenced by _va_mul_m4_series_3(), _va_mul_m4_series_4(), _va_mul_m4_series_5(), _va_mul_m4_series_6(), _va_mul_m4_series_7(), _va_mul_m4_series_8(), _va_mul_m4_series_9(), ABC_get_transform(), actcon_evaluate(), action_flip_pchan(), AnimationImporter::add_bone_animation_sampled(), BCMatrix::add_inverted_transform(), TransformWriter::add_joint_transform(), add_primitive_cube_gizmo_exec(), BCMatrix::add_transform(), AnimationImporter::apply_matrix_curves(), BCMatrix::apply_transform(), applyarmature_process_selected_recursive(), applyRotationMatrix(), applyTrackballMatrix(), armature_deform_coords_impl(), armdef_accumulate_bone(), armdef_accumulate_matrix(), armdef_evaluate(), armdef_get_tarmat(), arrayModifier_doArray(), base_callback(), bc_bone_matrix_local_get(), bc_match_scale(), bc_rotate_from_reference_quat(), bc_set_parent(), BKE_armature_mat_pose_to_delta(), BKE_armature_mat_world_to_pose(), BKE_armature_where_is_bone(), BKE_bone_parent_transform_apply(), BKE_bone_parent_transform_calc_from_matrices(), BKE_bone_parent_transform_combine(), BKE_camera_object_dof_distance(), BKE_constraint_apply_for_object(), BKE_constraint_apply_for_pose(), BKE_constraint_mat_convertspace(), BKE_constraints_clear_evalob(), BKE_constraints_make_evalob(), BKE_gpencil_layer_transform_matrix_get(), BKE_gpencil_update_layer_transforms(), BKE_lattice_deform_data_create(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), BKE_object_apply_mat4_ex(), BKE_object_apply_parent_inverse(), BKE_object_eval_parent(), BKE_object_get_parent_matrix(), BKE_object_matrix_local_get(), BKE_object_modifier_gpencil_hook_reset(), BKE_object_modifier_hook_reset(), BKE_pchan_bbone_segments_cache_compute(), BKE_pchan_bbone_spline_params_get(), BKE_pose_bone_done(), BKE_pose_where_is(), BKE_texture_mapping_init(), BKE_tracking_get_projection_matrix(), BLI_space_transform_from_matrices(), BLI_space_transform_global_from_matrices(), BMD_mesh_intersection(), bundle_midpoint(), button2d_draw_intern(), calc_brush_local_mat(), AnimationImporter::calc_joint_parent_mat_rest(), camera_stereo3d_model_matrix(), camera_view3d_reconstruction(), camerasolver_evaluate(), clampto_evaluate(), constraint_target_to_mat4(), convert_pose(), convert_tree(), copy_dupli_context(), blender::io::alembic::copy_m44_axis_swap(), DocumentImporter::create_instance_node(), blender::io::alembic::create_transform_matrix(), cuboid_do(), deformStroke(), deformVerts_do(), blender::io::alembic::ABCTransformWriter::do_write(), blender::io::usd::USDTransformWriter::do_write(), dquat_to_mat4(), draw_bone_degrees_of_freedom(), draw_bone_update_disp_matrix_bbone(), draw_view_matrix_state_update(), drw_debug_draw_spheres(), DRW_debug_sphere(), DRW_hair_duplimat_get(), drw_shgroup_bone_axes(), drw_shgroup_bone_box(), drw_shgroup_bone_custom_empty(), drw_shgroup_bone_custom_mesh_wire(), drw_shgroup_bone_custom_solid_mesh(), drw_shgroup_bone_octahedral(), drw_shgroup_bone_point(), drw_shgroup_custom_bone_curve(), ebone_spline_preview(), ED_armature_join_objects_exec(), ED_curve_join_objects_exec(), ED_gpencil_reset_layers_parent(), ED_object_data_xform_container_update_all(), ED_object_xform_array_m4(), ED_object_xform_skip_child_container_update_all(), ED_transform_calc_gizmo_stats(), ED_view3d_boundbox_clip_ex(), ED_view3d_camera_lock_sync(), ED_view3d_cameracontrol_update(), ED_view3d_draw_offscreen_imbuf_simple(), ED_view3d_init_mats_rv3d(), ED_view3d_ob_project_mat_get(), ED_view3d_ob_project_mat_get_from_obmat(), ED_view3d_update_viewmat(), edbm_extrude_edge_exclude_mirror(), edit_text_cache_populate_cursor(), edit_text_cache_populate_select(), eevee_ensure_cube_views(), EEVEE_lightprobes_cube_data_from_object(), EEVEE_lightprobes_planar_data_from_object(), AnimationImporter::evaluate_transform_at_frame(), execute_posetree(), face_dupli(), followpath_evaluate(), followpath_get_tarmat(), followtrack_evaluate_using_2d_position(), followtrack_evaluate_using_3d_position_camera(), AnimationImporter::get_joint_rest_mat(), TransformReader::get_node_mat(), get_quick_mesh(), gizmo2d_xform_draw_prepare(), gizmo_cage2d_modal(), gizmo_cage3d_modal(), gizmo_placement_prop_matrix_get(), gizmo_placement_prop_matrix_set(), gpencil_depth_plane(), gpencil_object_cache_add(), gpencil_sculpt_brush_apply_standard(), gpencil_vertexpaint_brush_apply_to_layers(), gpencil_weightpaint_brush_apply_to_layers(), GPU_matrix_model_view_projection_get(), hair_create_input_mesh(), imapaint_pick_uv(), init_curve_deform(), Freestyle::BlenderFileLoader::insertShapeNode(), join_mesh_single(), lightbake_planar_ensure_view(), make_child_duplis_faces_from_editmesh(), make_child_duplis_faces_from_mesh(), make_child_duplis_verts_from_editmesh(), make_child_duplis_verts_from_mesh(), make_dmats(), make_dupli(), make_duplis_collection(), make_duplis_font(), make_duplis_geometry_set_impl(), make_duplis_particle_system(), mat4_to_dquat(), matrix_from_obj_pchan(), meshdeformModifier_do(), minmax_evaluate(), MOD_get_texture_coords(), modifyMesh(), move3d_draw_intern(), normalEditModifier_do_directional(), ob_parcurve(), object_apply_mat4_with_protect(), object_solver_inverted_matrix(), object_transform_to_mouse_exec(), object_warp_calc_view_matrix(), objectsolver_evaluate(), OVERLAY_bounds(), OVERLAY_texture_space(), OVERLAY_volume_extra(), pose_mirror_info_init(), pose_transform_mirror_update(), blender::io::gpencil::GpencilIO::prepare_camera_params(), proj_paint_state_viewport_init(), psys_mat_hair_to_global(), blender::io::alembic::AbcObjectReader::read_matrix(), blender::io::usd::USDXformReader::read_matrix(), reconstruct_retrieve_libmv_tracks(), reconstructed_camera_scale_set(), remap_hair_emitter(), render_cubemap(), BCQuat::rotate_to(), SCULPT_do_clay_strips_brush(), SCULPT_do_clay_thumb_brush(), SCULPT_do_paint_brush(), sculpt_init_mirror_clipping(), sculpt_transform_matrices_init(), set_axis(), set_plane_exec(), snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), snapArmature(), snapCurve(), snapEditMesh(), snapMesh(), solve_parenting(), sort_bmelem_flag(), sphere_do(), surfacedeformModifier_do(), blender::eevee::Camera::sync(), target_callback(), transform_convert_clip_mirror_modifier_apply(), transform_pivot_set_m4(), AnimationImporter::translate_animation_OLD(), translike_evaluate(), update_mirror_object(), USD_get_transform(), uvprojectModifier_do(), vertex_dupli(), view3d_viewmatrix_set(), vpaint_stroke_update_step_intern(), warpModifier_do(), waveModifier_do(), where_is_ik_bone(), WIDGETGROUP_armature_spline_refresh(), WIDGETGROUP_xform_cage_refresh(), wireframe_hair_cache_populate(), WM_gizmo_calc_matrix_final_params(), wm_gizmo_calculate_scale(), wm_xr_draw_matrices_create(), wm_xr_fly_compute_turn(), wm_xr_grab_compute(), wm_xr_grab_compute_bimanual(), wm_xr_navigation_fly_modal(), wm_xr_navigation_grab_apply(), wm_xr_navlocks_apply(), wm_xr_session_actions_update(), wm_xr_session_controller_pose_calc(), wm_xr_session_state_update(), workbench_shadow_object_shadow_bbox_get(), workbench_studiolight_data_update(), workbench_volume_object_cache_populate(), and wpaint_stroke_update_step().

◆ mul_m4_m4m4_aligned_scale()

void mul_m4_m4m4_aligned_scale ( float  R[4][4],
const float  A[4][4],
const float  B[4][4] 
)

Combines transformations, handling scale separately in a manner equivalent to the Aligned Inherit Scale mode, in order to avoid creating shear. If A scale is uniform, the result is equivalent to ordinary multiplication.

NOTE: this effectively takes output location from simple multiplication, and uses mul_m4_m4m4_split_channels for rotation and scale.

Definition at line 1298 of file math_matrix.c.

References A, B, loc_rot_size_to_mat4(), mat4_to_loc_rot_size(), mul_m3_m3m3_uniq(), mul_v3_m4v3(), mul_v3_v3v3(), and R.

Referenced by actcon_evaluate(), and translike_evaluate().

◆ mul_m4_m4m4_db_uniq()

void mul_m4_m4m4_db_uniq ( double  R[4][4],
const double  A[4][4],
const double  B[4][4] 
)

Definition at line 317 of file math_matrix.c.

References A, B, BLI_assert, ELEM, and R.

◆ mul_m4_m4m4_split_channels()

void mul_m4_m4m4_split_channels ( float  R[4][4],
const float  A[4][4],
const float  B[4][4] 
)

Separately combines location, rotation and scale of the input matrices.

Definition at line 1314 of file math_matrix.c.

References A, add_v3_v3v3(), B, loc_rot_size_to_mat4(), mat4_to_loc_rot_size(), mul_m3_m3m3_uniq(), mul_v3_v3v3(), and R.

Referenced by actcon_evaluate(), and translike_evaluate().

◆ mul_m4_m4m4_uniq()

void mul_m4_m4m4_uniq ( float  R[4][4],
const float  A[4][4],
const float  B[4][4] 
)

◆ mul_m4_v3()

void mul_m4_v3 ( const float  M[4][4],
float  r[3] 
)

Definition at line 729 of file math_matrix.c.

References M, r, x, and y.

Referenced by add_vertex_exec(), add_verts_to_dgroups(), apply_curve_transform(), applyarmature_process_selected_recursive(), applyFaceNearest(), applyFaceProject(), applyGridAbsolute(), applyTranslationValue(), armature_bone_primitive_add_exec(), armature_calc_roll_exec(), armature_transform_recurse(), armature_vert_task_with_dvert(), armdef_evaluate(), arrayModifier_doArray(), BKE_curve_deform_co(), BKE_curve_transform_ex(), BKE_gpencil_convert_mesh(), BKE_gpencil_stroke_from_view_space(), BKE_gpencil_stroke_to_view_space(), BKE_gpencil_transform(), BKE_gpencil_update_layer_transforms(), BKE_lattice_transform(), BKE_mball_transform(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), BKE_mesh_transform(), BM_mesh_calc_uvs_circle(), BMBVH_EdgeVisible(), BMD_mesh_intersection(), bmo_create_circle_exec(), bmo_create_cone_exec(), bmo_create_cube_exec(), bmo_create_icosphere_exec(), bmo_create_monkey_exec(), bmo_create_uvsphere_exec(), bmo_transform_exec(), bone_direction_worldspace_get(), box_minmax_bounds_m4(), bpy_bmesh_transform(), brush_add(), brush_add_count_iter(), brush_puff(), calc_local_y(), calc_ortho_extent(), calc_point_from_barycentric_cage(), calc_point_from_barycentric_extrusion(), calc_sculpt_plane(), blender::io::obj::OBJMesh::calc_vertex_coords(), calculate_autoscale_factor(), calculateCenterActive(), camera_view3d_reconstruction(), cloth_from_object(), cloth_to_object(), cloth_update_verts(), createTransParticleVerts(), createTransSculpt(), cuboid_do(), cursor_draw_point_screen_space(), cursor_draw_point_with_symmetry(), curve_deform_coords_impl(), deflect_emitter_iter(), deformStroke(), deformVerts(), densfunc(), disconnect_hair(), do_brush_action(), do_guides(), do_pose_brush_task_cb_ex(), do_step_cloth(), do_texture_effector(), draw_bone_name(), draw_frustum_bound_sphere_calc(), draw_frustum_boundbox_calc(), draw_marker_texts(), drw_call_culling_init(), DRW_debug_m4(), drw_shgroup_bone_stick(), drw_shgroup_bone_wire(), DRW_text_cache_draw(), DRW_text_edit_mesh_measure_stats(), dvar_eval_locDiff(), dynamic_paint_brush_velocity_compute_cb(), dynamicPaint_brushObjectCalculateVelocity(), dynamicPaint_generateBakeData(), dynamicPaint_paintMesh(), ED_armature_edit_transform(), ED_armature_join_objects_exec(), ED_armature_origin_set(), ED_curve_join_objects_exec(), ED_gpencil_project_stroke_to_view(), ED_gpencil_reset_layers_parent(), ED_gpencil_stroke_init_data(), ED_gpencil_stroke_reproject(), ED_mesh_deform_bind_callback(), ED_object_calc_active_center(), ED_transform_calc_gizmo_stats(), ED_view3d_clipping_calc(), ED_view3d_win_to_3d_on_plane_with_fallback(), edbm_dupli_extrude_cursor_invoke(), EDBM_mesh_knife(), edbm_polybuild_face_at_cursor_invoke(), edbm_polybuild_split_at_cursor_invoke(), EDBM_unified_findnearest_from_raycast(), edge_pos_direction_worldspace_get(), edge_slide_snap_apply(), eevee_lightprobes_culling_test(), EEVEE_lightprobes_grid_data_from_object(), EEVEE_lightprobes_planar_data_from_object(), EEVEE_shadows_caster_register(), explodeMesh(), flushTransParticles(), get_cpa_texture(), get_effector_data(), get_quick_mesh(), gizmo_arrow_test_select(), gizmo_mesh_spin_init_refresh(), gizmo_window_project_2d(), gizmo_window_project_3d(), globallen(), gpencil_add_verts_to_dgroups(), gpencil_bake_grease_pencil_animation_exec(), gpencil_brush_clone_add(), gpencil_brush_grab_apply_cached(), gpencil_generate_edgeloops(), gpencil_object_cache_add(), gpencil_point_3d_to_xy(), gpencil_point_to_xy(), gpencil_point_to_xy_fl(), gpencil_sbuffer_stroke_ensure(), gpencil_speed_guide_init(), greasepencil_copy_data(), hair_create_input_mesh(), init_meta(), Freestyle::BlenderFileLoader::insertShapeNode(), join_mesh_single(), knife_bm_tri_cagecos_get_worldspace(), make_duplis_font(), merge_target(), mesh_bisect_exec(), mesh_merge_transform(), MOD_get_texture_coords(), modifyMesh(), motionpaths_calc_bake_targets(), mul_project_m4_v3(), mul_v3m3_dq(), object_origin_set_exec(), paint_brush_stroke_add_step(), paint_cursor_update_pixel_radius(), paint_line_strokes_spacing(), paint_proj_begin_clone(), paint_space_stroke(), paint_stroke_curve_end(), paint_stroke_modal(), particles_fluid_step(), PE_lasso_select(), PE_minmax(), PE_mirror_particle(), PE_update_mirror_cache(), pointdensity_cache_object(), pointdensity_cache_psys(), precalc_guides(), precalculate_effector(), project_paint_op(), psys_apply_hair_lattice(), psys_cache_edit_paths_iter(), psys_get_birth_coords(), psys_get_particle_on_path(), psys_get_texture(), psys_thread_create_path(), raycastEditMesh(), raycastMesh(), remap_hair_emitter(), remove_doubles_exec(), save_hair(), SCULPT_brush_strength_factor(), sculpt_brush_test_clipping(), SCULPT_cache_calc_brushdata_symm(), SCULPT_calc_brush_plane(), SCULPT_clip(), sculpt_elastic_transform_task_cb(), sculpt_face_sets_change_visibility_exec(), SCULPT_raycast_init(), sculpt_topology_update(), sculpt_transform_task_cb(), seq_image_transform_quad_get_ex(), shrinkwrap_get_tarmat(), snap_curs_to_sel_ex(), snap_mesh_edge_verts_mixed(), snap_mesh_polygon(), snap_sel_to_grid_exec(), snap_selected_to_location(), snap_target_median_impl(), snapArmature(), snapCamera(), snapCurve(), snapEditMesh(), snapMesh(), softbody_reset(), softbody_to_object(), softbody_update_positions(), sort_bmelem_flag(), sphere_do(), spin_exec(), springs_from_mesh(), TargetSnapClosest(), transform_convert_clip_mirror_modifier_apply(), update_location_for_2d_curve(), update_mirror_object(), update_sculpt_normal(), update_world_cos(), updateDuplicateActionConstraintSettings(), updateDuplicateLocRotConstraintSettings(), uv_cylinder_project(), uv_sphere_project(), uv_warp_from_mat4_pair(), uvprojectModifier_do(), v3d_cursor_plane_draw_grid(), v3d_editvertex_buts(), vert_slide_snap_apply(), blender::io::obj::OBJCurve::vertex_coordinates(), view3d_orbit_calc_center(), view3d_preselect_update_preview_triangle_from_edge(), view3d_preselect_update_preview_triangle_from_vert(), view3d_viewmatrix_set(), viewselected_exec(), warpModifier_do(), and workbench_shadow_object_shadow_bbox_get().

◆ mul_m4_v4()

void mul_m4_v4 ( const float  M[4][4],
float  r[4] 
)

◆ mul_m4_v4d()

void mul_m4_v4d ( const float  M[4][4],
double  r[4] 
)

Definition at line 883 of file math_matrix.c.

References mul_v4d_m4v4d(), and r.

◆ mul_m4db_m4db_m4fl_uniq()

void mul_m4db_m4db_m4fl_uniq ( double  R[4][4],
const double  A[4][4],
const float  B[4][4] 
)

◆ mul_mat3_m4_fl()

void mul_mat3_m4_fl ( float  R[4][4],
float  f 
)

◆ mul_mat3_m4_v3()

void mul_mat3_m4_v3 ( const float  M[4][4],
float  r[3] 
)

Same as mul_m4_v3() but doesn't apply translation component.

Definition at line 790 of file math_matrix.c.

References M, r, x, and y.

Referenced by armature_finalize_restpose(), armature_transform_recurse(), arrayModifier_doArray(), BKE_lattice_deform_data_create(), BKE_volume_density_scale(), BLI_space_transform_apply_normal(), BLI_space_transform_invert_normal(), BM_mesh_calc_uvs_cone(), brush_comb(), brush_puff(), brush_smooth_do(), brush_smooth_get(), calcVertSlideMouseActiveEdges(), cast_ray_highpoly(), damptrack_do_transform(), deformStroke(), do_guides(), do_kink(), do_kink_spiral(), drawVertSlide(), DRW_text_edit_mesh_measure_stats(), dynamic_paint_generate_bake_data_cb(), dynamicPaint_paintMesh(), ED_armature_origin_set(), ED_gpencil_project_point_to_plane(), ED_gpencil_project_stroke_to_plane(), ED_text_to_object(), ED_view3d_distance_set(), ED_view3d_to_m4(), edbm_dupli_extrude_cursor_invoke(), ElementResize(), face_dupli(), get_effector_data(), getTransformOrientation_ex(), gpencil_brush_clone_add(), gpencil_brush_push_apply(), gpencil_depth_plane(), gpencil_object_cache_add(), gpencil_sculpt_compute_lock_axis(), initShear_mouseInputMode(), Freestyle::BlenderFileLoader::insertShapeNode(), mat4_to_scale(), mat4_to_xy_scale(), mesh_merge_transform(), modifyMesh(), precalc_guides(), precalculate_effector(), psys_get_birth_coords(), psys_get_particle_on_path(), psys_vec_rot_to_face(), raycastEditMesh(), raycastMesh(), RE_bake_normal_world_to_object(), SCULPT_filter_to_object_space(), SCULPT_filter_to_orientation_space(), sculpt_gesture_trim_shape_origin_normal_get(), sculpt_update_brush_delta(), shrinkwrap_get_tarmat(), uvprojectModifier_do(), vertex_dupli(), view3d_ob_drop_matrix_from_snap(), view3d_viewmatrix_set(), walk_ray_cast(), and workbench_studiolight_data_update().

◆ mul_project_m4_v3()

void mul_project_m4_v3 ( const float  M[4][4],
float  vec[3] 
)

◆ mul_transposed_m3_v3()

void mul_transposed_m3_v3 ( const float  M[3][3],
float  r[3] 
)

◆ mul_transposed_mat3_m4_v3()

void mul_transposed_mat3_m4_v3 ( const float  M[4][4],
float  r[3] 
)

◆ mul_v2_m2v2()

void mul_v2_m2v2 ( float  r[2],
const float  M[2][2],
const float  v[2] 
)

Definition at line 777 of file math_matrix.c.

References r, and x.

Referenced by mul_m2_v2(), snap_v2_angle(), and stitch_uv_rotate().

◆ mul_v2_m3v2()

void mul_v2_m3v2 ( float  r[2],
const float  m[3][3],
const float  v[2] 
)

Definition at line 711 of file math_matrix.c.

References copy_v2_v2(), mul_v3_m3v3(), r, and v.

Referenced by MaskHandleToTransData(), MaskPointToTransData(), and mul_m3_v2().

◆ mul_v2_m3v3()

void mul_v2_m3v3 ( float  r[2],
const float  M[3][3],
const float  a[3] 
)

◆ mul_v2_m4v3()

void mul_v2_m4v3 ( float  r[2],
const float  M[4][4],
const float  v[3] 
)

Definition at line 769 of file math_matrix.c.

References r, and x.

Referenced by mul_v2_project_m4_v3().

◆ mul_v2_project_m4_v3()

void mul_v2_project_m4_v3 ( float  r[2],
const float  M[4][4],
const float  vec[3] 
)

◆ mul_v3_m3v3()

void mul_v3_m3v3 ( float  r[3],
const float  M[3][3],
const float  a[3] 
)

Definition at line 897 of file math_matrix.c.

References Freestyle::a, copy_v3_v3(), M, r, and t.

Referenced by apply_tangmat_callback(), applyNormalRotation(), applyTranslation(), applyTranslationMatrix(), assign_final_coords_from_mdisps(), assign_final_elements_from_orig_mdisps(), average_read_displacement_object(), BKE_crazyspace_api_displacement_to_deformed(), BKE_crazyspace_api_displacement_to_original(), BKE_gpencil_stroke_stretch(), BLI_newton3d_solve(), BM_face_calc_area_with_mat3(), BM_face_calc_perimeter_with_mat3(), bmesh_test_dist_add(), bmo_create_uvsphere_exec(), calc_deltas(), cloth_hair_update_bending_targets(), correctivesmooth_modifier_do(), deformStroke(), deformVerts_do(), do_rotate_brush_task_cb_ex(), ED_gpencil_join_objects_exec(), edbm_extrude_repeat_exec(), eval_displacement(), evaluate_final_original_point(), evaluate_higher_grid_positions_with_details_callback(), gizmo_axis_draw(), gizmo_mesh_spin_init_refresh(), gizmo_mesh_spin_redo_update_from_op(), gpencil_hook_co_apply(), hook_co_apply(), IMB_colormanagement_aces_to_scene_linear(), IMB_colormanagement_rec709_to_scene_linear(), IMB_colormanagement_scene_linear_to_aces(), IMB_colormanagement_scene_linear_to_rec709(), IMB_colormanagement_scene_linear_to_srgb_v3(), IMB_colormanagement_scene_linear_to_xyz(), IMB_colormanagement_xyz_to_scene_linear(), initResize(), mesh_init_origspace(), modifyMesh(), mul_m3_v3(), mul_v2_m3v2(), multires_disp_run_cb(), multires_reshape_apply_base_update_mesh_coords(), nearest_world_tree(), object_grid_element_to_tangent_displacement(), object_origin_set_exec(), paintface_minmax(), reshape_subdiv_refine_orig_P(), root_to_world_v3(), set_prop_dist(), snap_selected_to_location(), track_plane_from_existing_motion(), and transform_point_by_tri_v3().

◆ mul_v3_m3v3_db()

void mul_v3_m3v3_db ( double  r[3],
const double  M[3][3],
const double  a[3] 
)

Definition at line 907 of file math_matrix.c.

References Freestyle::a, copy_v3_v3_db(), M, r, and t.

Referenced by mul_m3_v3_db().

◆ mul_v3_m4v3()

void mul_v3_m4v3 ( float  r[3],
const float  M[4][4],
const float  v[3] 
)

Definition at line 739 of file math_matrix.c.

References r, x, and y.

Referenced by add_hook_object(), add_vertex_invoke(), add_verts_to_dgroups(), annotation_stroke_convertcoords(), apply_layer_settings(), applyarmature_adjust_edit_position(), armature_fill_bones_exec(), armdef_accumulate_bone(), bc_add_global_transform(), bc_apply_global_transform(), BKE_bone_parent_transform_apply(), BKE_bone_parent_transform_calc_from_matrices(), BKE_boundbox_minmax(), BKE_curve_nurbs_vert_coords_apply_with_mat4(), BKE_gpencil_point_coords_apply_with_mat4(), BKE_gpencil_stroke_from_view_space(), BKE_gpencil_stroke_to_view_space(), BKE_keyblock_curve_data_transform(), BKE_keyblock_data_set_with_mat4(), BKE_lattice_deform_data_eval_co(), BKE_lattice_vert_coords_apply_with_mat4(), BKE_mball_minmax_ex(), BKE_mesh_vert_coords_apply_with_mat4(), BKE_mesh_wrapper_vert_coords_copy_with_mat4(), BKE_object_as_kdtree(), BKE_object_foreach_display_point(), BKE_object_get_parent_matrix(), BKE_object_minmax(), BKE_object_minmax_dupli(), BKE_pchan_bbone_spline_params_get(), BKE_pchan_minmax(), BLI_space_transform_apply(), BLI_space_transform_invert(), BLI_uvproject_from_view_ortho(), BM_mesh_calc_uvs_cone(), BM_mesh_vert_coords_apply_with_mat4(), bmo_create_grid_exec(), brush_puff(), build_sequential(), bundle_midpoint(), cage3d_draw_box_interaction(), cage3d_draw_circle_handles(), calc_local_clipping(), calc_local_y(), calc_multiplane_scrape_surface_task_cb(), calc_point_weight_by_distance(), calc_tw_center_with_matrix(), calculate_profile(), calculate_profile_segments(), calculateCenterLocal(), cast_ray_highpoly(), cloth_brush_solve_collision(), constraint_target_to_mat4(), contarget_get_lattice_mat(), contarget_get_mesh_mat(), cuboid_do(), curve_draw_stroke_from_operator_elem(), deformStroke(), do_clay_thumb_brush_task_cb_ex(), do_multiplane_scrape_brush_task_cb_ex(), do_set_scale(), blender::io::alembic::ABCPointsWriter::do_write(), drawObjectConstraint(), drawVertSlide(), drw_call_culling_init(), DRW_debug_line_v3v3(), drw_shgroup_bone_relationship_lines_ex(), drw_shgroup_bone_stick(), drw_shgroup_bone_wire(), ebone_spline_preview(), ED_clip_point_stable_pos(), ED_clip_point_stable_pos__reverse(), ED_gpencil_join_objects_exec(), ED_mesh_deform_bind_callback(), ED_transform_calc_gizmo_stats(), edbm_dupli_extrude_cursor_invoke(), edbm_extrude_edge_exclude_mirror(), edbm_polybuild_face_at_cursor_invoke(), EDBM_project_snap_verts(), edbm_screw_exec(), edbm_select_axis_exec(), EDBM_unified_findnearest_from_raycast(), edit_text_cache_populate_boxes(), extrude_points_from_selected_vertices(), face_to_plane(), followtrack_evaluate_using_2d_position(), followtrack_project_to_depth_object_if_needed(), foreach_display_point_gpencil_stroke_fn(), generate_vert_coordinates(), get_bm_knife_vert(), get_new_constraint_target(), get_vert2ob_distance(), gizmo_move_modal(), gizmo_preselect_elem_test_select(), gpencil_3d_point_to_screen_space(), gpencil_add_verts_to_dgroups(), gpencil_apply_parent(), gpencil_apply_parent_point(), gpencil_brush_grab_apply_cached(), gpencil_brush_pinch_apply(), gpencil_brush_twist_apply(), gpencil_do_curve_circle_sel(), gpencil_draw_basic_stroke(), gpencil_draw_stroke_3d(), gpencil_edit_curve_stroke_iter_cb(), gpencil_hook_co_apply(), gpencil_point_to_parent_space(), gpencil_snap_to_grid(), gpencil_stroke_eraser_is_occluded(), gpencil_stroke_points_centroid(), gpencil_strokepoint_convertcoords(), gpencil_vfx_pixelize(), gpencil_vfx_shadow(), gpencil_vfx_swirl(), gpencil_vfx_wave(), GPU_matrix_unproject_3fv(), hook_co_apply(), kinematic_get_tarmat(), lineart_gpencil_generate(), meshdeform_vert_task(), meshdeformModifier_do(), metaball_instance_data_set(), MOD_get_texture_coords(), mul_m4_m4m4_aligned_scale(), mul_v3_project_m4_v3(), nearest_world_tree(), nearestVert(), object_origin_set_exec(), object_warp_calc_view_matrix(), object_warp_transverts(), overlay_gpencil_draw_stroke_color_name(), OVERLAY_relationship_lines(), paint_calc_object_space_radius(), paint_space_stroke_spacing(), particle_system_minmax(), pchan_culling_test_bbone(), pchan_deform_accumulate(), pose_transform_mirror_update(), proj_paint_state_screen_coords_init(), raycast_all_cb(), reconstruct_retrieve_libmv_tracks(), remap_hair_emitter(), screenspace_to_worldspace(), SCULPT_brush_test_cube(), SCULPT_clip(), sculpt_gesture_line_plane_from_tri(), sculpt_gesture_trim_calculate_depth(), sculpt_gesture_trim_geometry_generate(), sculpt_gesture_trim_shape_origin_normal_get(), sculpt_update_brush_delta(), selected_tracking_boundbox(), set_axis(), set_origin_exec(), set_plane_exec(), set_prop_dist(), shape_cut(), shape_cut_test_point(), snap_mesh_edge_verts_mixed(), snap_selected_to_location(), snap_to_pipe_profile(), sort_bmelem_flag(), sphere_do(), splineik_evaluate_bone(), stroke_elem_pressure_set(), stroke_elem_project_fallback(), surfacedeformBind(), tracking_stabilize_frame_interpolation_cb(), transdata_center_global_get(), uv_map_transform_center(), view3d_preselect_update_preview_triangle_from_vert(), voxel_size_edit_invoke(), vpaint_stroke_update_step_intern(), warpModifier_do(), WIDGETGROUP_xform_cage_refresh(), workbench_shadow_object_shadow_bbox_get(), and wpaint_stroke_update_step().

◆ mul_v3_m4v3_db()

void mul_v3_m4v3_db ( double  r[3],
const double  mat[4][4],
const double  vec[3] 
)

Definition at line 749 of file math_matrix.c.

References r, x, and y.

Referenced by lineart_mvert_transform_task().

◆ mul_v3_mat3_m4v3()

void mul_v3_mat3_m4v3 ( float  r[3],
const float  M[4][4],
const float  v[3] 
)

◆ mul_v3_mat3_m4v3_db()

void mul_v3_mat3_m4v3_db ( double  r[3],
const double  M[4][4],
const double  v[3] 
)

Definition at line 810 of file math_matrix.c.

References r, x, and y.

Referenced by lineart_load_tri_task().

◆ mul_v3_project_m4_v3()

void mul_v3_project_m4_v3 ( float  r[3],
const float  mat[4][4],
const float  vec[3] 
)

◆ mul_v4_m4v3()

void mul_v4_m4v3 ( float  r[4],
const float  M[4][4],
const float  v[3] 
)

Definition at line 888 of file math_matrix.c.

References M, r, and v.

Referenced by GPU_matrix_project_2fv(), and GPU_matrix_project_3fv().

◆ mul_v4_m4v3_db()

void mul_v4_m4v3_db ( double  r[4],
const double  mat[4][4],
const double  vec[3] 
)

◆ mul_v4_m4v4()

void mul_v4_m4v4 ( float  r[4],
const float  M[4][4],
const float  v[4] 
)

◆ mul_v4d_m4v4d()

void mul_v4d_m4v4d ( double  r[4],
const float  M[4][4],
const double  v[4] 
)

Definition at line 867 of file math_matrix.c.

References double(), r, v, x, y, and z.

Referenced by mul_m4_v4d().

◆ negate_m3()

void negate_m3 ( float  R[3][3])

◆ negate_m4()

void negate_m4 ( float  R[4][4])

◆ negate_mat3_m4()

void negate_mat3_m4 ( float  R[4][4])

Definition at line 1000 of file math_matrix.c.

References R.

Referenced by gizmo_placement_prop_matrix_set().

◆ normalize_m2()

void normalize_m2 ( float  R[2][2])

Definition at line 1882 of file math_matrix.c.

References normalize_v2(), and R.

◆ normalize_m2_ex()

void normalize_m2_ex ( float  R[2][2],
float  r_scale[2] 
)

Definition at line 1874 of file math_matrix.c.

References normalize_v2(), and R.

◆ normalize_m2_m2()

void normalize_m2_m2 ( float  R[2][2],
const float  M[2][2] 
)

Definition at line 1897 of file math_matrix.c.

References M, normalize_v2_v2(), and R.

Referenced by Vector_rotate().

◆ normalize_m2_m2_ex()

void normalize_m2_m2_ex ( float  R[2][2],
const float  M[2][2],
float  r_scale[2] 
)

Definition at line 1890 of file math_matrix.c.

References M, normalize_v2_v2(), and R.

◆ normalize_m3()

void normalize_m3 ( float  R[3][3])

◆ normalize_m3_ex()

void normalize_m3_ex ( float  R[3][3],
float  r_scale[3] 
)

Definition at line 1905 of file math_matrix.c.

References normalize_v3(), and R.

◆ normalize_m3_m3()

void normalize_m3_m3 ( float  R[3][3],
const float  M[3][3] 
)

◆ normalize_m3_m3_ex()

void normalize_m3_m3_ex ( float  R[3][3],
const float  M[3][3],
float  r_scale[3] 
)

Definition at line 1920 of file math_matrix.c.

References M, normalize_v3_v3(), and R.

◆ normalize_m4()

void normalize_m4 ( float  R[4][4])

◆ normalize_m4_ex()

void normalize_m4_ex ( float  R[4][4],
float  r_scale[3] 
)

Definition at line 1935 of file math_matrix.c.

References normalize_v3(), and R.

Referenced by BKE_bone_parent_transform_calc_from_matrices(), and stretchto_evaluate().

◆ normalize_m4_m4()

void normalize_m4_m4 ( float  R[4][4],
const float  M[4][4] 
)

◆ normalize_m4_m4_ex()

void normalize_m4_m4_ex ( float  R[4][4],
const float  M[4][4],
float  r_scale[3] 
)

Definition at line 1956 of file math_matrix.c.

References copy_v4_v4(), and normalize_v3_v3().

Referenced by eevee_light_setup().

◆ orthogonalize_m3()

void orthogonalize_m3 ( float  R[3][3],
int  axis 
)

Make an orthonormal matrix around the selected axis of the given matrix.

Parameters
axisAxis to build the orthonormal basis around.

Definition at line 1439 of file math_matrix.c.

References BLI_assert_unreachable, cross_v3_v3v3(), dot_v3v3(), mat3_to_size(), mul_v3_fl(), normalize_v3(), R, and size().

Referenced by v3d_cursor_poject_surface_normal(), and v3d_cursor_snap_update().

◆ orthogonalize_m3_stable()

void orthogonalize_m3_stable ( float  R[3][3],
int  axis,
bool  normalize 
)

Make an orthonormal matrix around the selected axis of the given matrix, in a way that is symmetric and stable to variations in the input, and preserving the value of the determinant, i.e. the overall volume change.

Parameters
axisAxis to build the orthonormal basis around.
normalizeNormalize the matrix instead of preserving volume.

Definition at line 1660 of file math_matrix.c.

References BLI_assert_unreachable, blender::math::normalize(), orthogonalize_stable(), and R.

◆ orthogonalize_m3_zero_axes()

bool orthogonalize_m3_zero_axes ( float  R[3][3],
float  unit_length 
)

Definition at line 1768 of file math_matrix.c.

References orthogonalize_m3_zero_axes_impl(), and UNPACK3.

Referenced by invert_m3_m3_safe_ortho(), and ObjectToTransData().

◆ orthogonalize_m4()

void orthogonalize_m4 ( float  R[4][4],
int  axis 
)

Make an orthonormal matrix around the selected axis of the given matrix.

Parameters
axisAxis to build the orthonormal basis around.

Definition at line 1523 of file math_matrix.c.

References BLI_assert_unreachable, cross_v3_v3v3(), dot_v3v3(), mat4_to_size(), mul_v3_fl(), normalize_v3(), R, and size().

Referenced by gpencil_object_cache_add(), mat4_to_dquat(), and shadow_cascade_random_matrix_set().

◆ orthogonalize_m4_stable()

void orthogonalize_m4_stable ( float  R[4][4],
int  axis,
bool  normalize 
)

Make an orthonormal matrix around the selected axis of the given matrix, in a way that is symmetric and stable to variations in the input, and preserving the value of the determinant, i.e. the overall volume change.

Parameters
axisAxis to build the orthonormal basis around.
normalizeNormalize the matrix instead of preserving volume.

Definition at line 1678 of file math_matrix.c.

References BLI_assert_unreachable, blender::math::normalize(), orthogonalize_stable(), and R.

Referenced by armdef_accumulate_matrix(), BKE_bone_parent_transform_calc_from_matrices(), BKE_object_apply_parent_inverse(), rotlike_evaluate(), rotlimit_evaluate(), stretchto_evaluate(), and translike_evaluate().

◆ orthogonalize_m4_zero_axes()

bool orthogonalize_m4_zero_axes ( float  R[4][4],
float  unit_length 
)

Definition at line 1772 of file math_matrix.c.

References orthogonalize_m3_zero_axes_impl(), and UNPACK3.

Referenced by invert_m4_m4_safe_ortho().

◆ print_m3()

void print_m3 ( const char *  str,
const float  M[3][3] 
)

Definition at line 2630 of file math_matrix.c.

References str.

◆ print_m4()

void print_m4 ( const char *  str,
const float  M[4][4] 
)

Definition at line 2639 of file math_matrix.c.

References str.

Referenced by armature_finalize_restpose().

◆ pseudoinverse_m3_m3()

void pseudoinverse_m3_m3 ( float  Ainv[3][3],
const float  A[3][3],
float  epsilon 
)

◆ pseudoinverse_m4_m4()

void pseudoinverse_m4_m4 ( float  Ainv[4][4],
const float  A[4][4],
float  epsilon 
)

◆ rescale_m4()

void rescale_m4 ( float  mat[4][4],
const float  scale[3] 
)

◆ rotate_m4()

void rotate_m4 ( float  mat[4][4],
char  axis,
float  angle 
)

◆ scale_m3_fl()

void scale_m3_fl ( float  R[3][3],
float  scale 
)

◆ scale_m4_fl()

void scale_m4_fl ( float  R[4][4],
float  scale 
)

◆ scale_m4_v2()

void scale_m4_v2 ( float  R[4][4],
const float  scale[2] 
)

Definition at line 2307 of file math_matrix.c.

References R.

◆ shuffle_m4()

void shuffle_m4 ( float  R[4][4],
const int  index[4] 
)

Build index shuffle matrix.

Definition at line 247 of file math_matrix.c.

References R, and zero_m4().

Referenced by modifyMesh().

◆ size_to_mat3()

void size_to_mat3 ( float  R[3][3],
const float  size[3] 
)

◆ size_to_mat4()

void size_to_mat4 ( float  R[4][4],
const float  size[3] 
)

◆ sub_m3_m3m3()

void sub_m3_m3m3 ( float  R[3][3],
const float  A[3][3],
const float  B[3][3] 
)

◆ sub_m4_m4m4()

void sub_m4_m4m4 ( float  R[4][4],
const float  A[4][4],
const float  B[4][4] 
)

Definition at line 1087 of file math_matrix.c.

References A, B, and R.

◆ svd_m4()

void svd_m4 ( float  U[4][4],
float  s[4],
float  V[4][4],
float  A[4][4] 
)

Compute the Single Value Decomposition of an arbitrary matrix A That is compute the 3 matrices U,W,V with U column orthogonal (m,n) ,W a diagonal matrix and V an orthogonal square matrix s.t.A = U.W.Vt. From this decomposition it is trivial to compute the (pseudo-inverse) of A as Ainv = V.Winv.transpose(U).

Definition at line 2649 of file math_matrix.c.

References A, usdtokens::b(), Freestyle::c, copy_m4_m4(), e, eps, fabsf, usdtokens::g(), hypotf, max_ff(), max_ii(), min_ii(), powf, sqrtf, t, V, zero_m4(), and zero_v4().

Referenced by pseudoinverse_m4_m4().

◆ swap_m3m3()

void swap_m3m3 ( float  m1[3][3],
float  m2[3][3] 
)

Definition at line 219 of file math_matrix.c.

References t.

◆ swap_m4m4()

void swap_m4m4 ( float  m1[4][4],
float  m2[4][4] 
)

Definition at line 233 of file math_matrix.c.

References t.

Referenced by vpaint_stroke_update_step_intern(), and wpaint_stroke_update_step().

◆ transform_pivot_set_m4()

void transform_pivot_set_m4 ( float  mat[4][4],
const float  pivot[3] 
)

Scale or rotate around a pivot point, a convenience function to avoid having to do inline.

Since its common to make a scale/rotation matrix that pivots around an arbitrary point.

Typical use case is to make 3x3 matrix, copy to 4x4, then pass to this function.

Definition at line 2369 of file math_matrix.c.

References copy_v3_v3(), mul_m4_m4m4(), negate_v3(), and unit_m4().

Referenced by applyRotationMatrix(), applyTrackballMatrix(), bmo_rotate_exec(), ED_view3d_win_to_3d_on_plane_with_fallback(), gizmo_cage2d_modal(), gizmo_cage3d_modal(), seq_image_transform_quad_get_ex(), sequencer_image_crop_transform_matrix(), and sequencer_thumbnail_transform().

◆ translate_m4()

void translate_m4 ( float  mat[4][4],
float  tx,
float  ty,
float  tz 
)

◆ transpose_m3()

void transpose_m3 ( float  R[3][3])

◆ transpose_m3_m3()

void transpose_m3_m3 ( float  R[3][3],
const float  M[3][3] 
)

◆ transpose_m3_m4()

void transpose_m3_m4 ( float  R[3][3],
const float  M[4][4] 
)
Note
Seems obscure but in-fact a common operation.

Definition at line 1362 of file math_matrix.c.

References BLI_assert, M, and R.

Referenced by nearest_world_tree(), psys_get_dupli_path_transform(), raycastEditMesh(), and raycastMesh().

◆ transpose_m4()

void transpose_m4 ( float  R[4][4])

◆ transpose_m4_m4()

void transpose_m4_m4 ( float  R[4][4],
const float  M[4][4] 
)

◆ unit_m2()

void unit_m2 ( float  m[2][2])

Definition at line 33 of file math_matrix.c.

Referenced by matrix_identity_internal(), and matrix_invert_safe_internal().

◆ unit_m3()

void unit_m3 ( float  m[3][3])

Definition at line 40 of file math_matrix.c.

Referenced by apply_objects_internal(), applyShear(), armature_bone_primitive_add_exec(), axis_angle_to_mat3(), BKE_bone_parent_transform_calc_from_matrices(), BKE_crazyspace_build_sculpt(), BKE_crazyspace_get_first_deform_matrices_editbmesh(), BKE_curve_deform_co(), BKE_mask_point_parent_matrix_get(), bm_vert_pair_to_matrix(), bmo_scale_exec(), BMO_slot_mat3_get(), blender::compositor::PlaneDistortWarpImageOperation::calculate_corners(), cloth_filter_apply_forces_task_cb(), convert_tree(), blender::io::alembic::copy_m44_axis_swap(), crazyspace_init_verts_and_matrices(), blender::io::alembic::create_swapped_rotation_matrix(), createTransCursor_2D_impl(), createTransCursor_view3d(), createTransGPencil_strokes(), createTransNlaData(), createTransParticleVerts(), deformStroke(), deformVerts_do(), ed_editnurb_spin(), ED_getTransformOrientationMatrix(), ED_transform_calc_gizmo_stats(), ED_transform_calc_orientation_from_type_ex(), edbm_dupli_extrude_cursor_invoke(), ElementMirror(), ElementRotation_ex(), execute_posetree(), gizmo2d_xform_invoke_prepare(), gizmo_mesh_extrude_refresh(), gizmo_mesh_spin_redo_setup(), blender::float3x3::identity(), blender::io::stl::importer_main(), initTransform(), initTransInfo(), invert_m3_m3_safe_ortho(), legacy_vec_roll_to_mat3_normalized(), locktrack_evaluate(), markerToTransCurveDataInit(), markerToTransDataInit(), MaskHandleToTransData(), MaskPointToTransData(), mat3_from_axis_conversion(), mat3_from_axis_conversion_single(), matrix_identity_internal(), matrix_invert_safe_internal(), mesh_calc_eigen_matrix(), mesh_filter_task_cb(), meshcache_do(), NodeToTransData(), ObjectToTransData(), PaintCurveConvertHandle(), PaintCurvePointToTransData(), planeMarkerToTransDataInit(), projection_matrix_calc(), restoreTransObjects(), rotation_between_vecs_to_mat3(), SeqToTransData(), sequencer_thumbnail_transform(), SIM_mass_spring_clear_constraints(), SIM_mass_spring_set_rest_transform(), SIM_mass_spring_set_vertex_mass(), snap_curs_to_center_exec(), softbody_reset(), spring_hairbend_estimate_dfdv(), spring_hairbend_estimate_dfdx(), blender::io::alembic::TEST(), blender::bke::tests::TEST(), TEST(), to_scene_linear_matrix(), transdata_elem_translate(), transform_convert_mesh_islands_calc(), transform_data_ext_rotate(), blender::io::obj::transform_object(), transform_orientation_matrix_get(), transform_orientations_create_from_axis(), UVsToTransData(), v3d_cursor_snap_update(), vcloud_estimate_transform_v3(), vec_roll_to_mat3_normalized(), vectomat(), and view3d_all_exec().

◆ unit_m4()

static void unit_m4 ( float  m[4][4])

Definition at line 1090 of file rct.c.

Referenced by actcon_get_tarmat(), action_flip_pchan(), AnimationImporter::add_bone_animation_sampled(), add_hook_object(), annotation_session_initdata(), apply_layer_settings(), AnimationImporter::apply_matrix_curves(), applyarmature_process_selected_recursive(), armature_coords_and_quats_apply(), armdef_get_tarmat(), arrayModifier_doArray(), axis_angle_to_mat4(), BKE_armature_loc_pose_to_bone(), BKE_armature_loc_world_to_pose(), BKE_armature_mat_pose_to_bone_ex(), BKE_bone_parent_transform_calc_from_matrices(), BKE_bone_parent_transform_clear(), BKE_constraint_custom_object_space_init(), BKE_constraint_target_matrix_get(), BKE_constraint_targets_for_solving_get(), BKE_constraints_make_evalob(), BKE_gpencil_instance_modifier_instance_tfm(), BKE_gpencil_layer_transform_matrix_get(), BKE_gpencil_update_layer_transforms(), BKE_lattice_resize(), BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(), BKE_object_get_parent_matrix(), BKE_object_obdata_size_init(), BKE_object_workob_calc_parent(), BKE_pose_channel_ensure(), BKE_pose_where_is_bone(), BKE_texture_mapping_default(), BKE_texture_mapping_init(), BKE_tracking_camera_get_reconstructed_interpolate(), BKE_volume_grid_transform_matrix(), blo_do_versions_260(), blo_do_versions_270(), blo_do_versions_pre250(), BMO_slot_mat4_get(), bmo_translate_exec(), brush_puff(), C_Matrix_LocRotScale(), C_Matrix_Translation(), blender::draw::image_engine::ImageEngine< DrawingMode >::cache_init(), AnimationImporter::calc_joint_parent_mat_rest(), camera_stereo3d_model_matrix(), childof_clear_inverse_exec(), childof_new_data(), clampto_evaluate(), clampto_get_tarmat(), clip_draw_main(), collection_drop_exec(), constraintTransLim(), convert_pose(), blender::io::usd::convert_to_z_up(), convert_tree(), blender::io::alembic::copy_m44_axis_swap(), createTransParticleVerts(), createVertSlideVerts(), cursor_draw_point_with_symmetry(), TransformReader::dae_translate_to_mat4(), damptrack_do_transform(), default_get_tarmat(), default_get_tarmat_full_bbone(), draw_bone_degrees_of_freedom(), draw_unit_state_create(), drawPropCircle(), DRW_debug_modelmat_reset(), DRW_hair_duplimat_get(), drw_manager_init(), ED_armature_join_objects_exec(), ED_object_new_primitive_matrix(), ED_object_parent(), ED_object_parent_clear(), ED_object_parent_set(), ED_object_xform_array_m4(), ED_transform_calc_gizmo_stats(), edge_slide_projmat_get(), edit_armature_coords_and_quats_apply(), eevee_lightbake_cache_create(), EEVEE_lightprobes_cube_data_from_object(), EEVEE_lookdev_draw(), AnimationImporter::evaluate_transform_at_frame(), execute_posetree(), external_cache_image_add(), followpath_get_tarmat(), foreach_mouse_hit_key_iter(), FRS_do_stroke_rendering(), TransformReader::get_node_mat(), gizmo2d_xform_draw_prepare(), gizmo_axis_draw(), gizmo_cage2d_modal(), gizmo_cage3d_modal(), gizmo_calc_matrix_final_no_offset(), gizmo_empty_image_prop_matrix_get(), gizmo_render_border_prop_matrix_get(), gizmo_window_project_2d(), gizmo_window_project_3d(), gpencil_depth_plane(), gpencil_object_cache_add(), gpencil_point_conversion_init(), gpencil_sculpt_brush_init(), gpencil_session_initdata(), gpencil_uv_transform_get(), gpencil_vfx_shadow(), GPU_matrix_identity_projection_set(), GPU_matrix_identity_set(), GPU_matrix_reset(), GPU_matrix_translate_2f(), GPU_matrix_translate_3f(), blender::float4x4::identity(), image_camera_background_matrix_get(), blender::io::stl::importer_main(), init_context(), init_meta(), blender::draw::image_engine::SpaceNodeAccessor::init_ss_to_texture_matrix(), blender::draw::image_engine::SpaceImageAccessor::init_ss_to_texture_matrix(), invert_m4_m4_safe(), invert_m4_m4_safe_ortho(), kinematic_get_tarmat(), loc_eul_size_to_mat4(), loc_eulO_size_to_mat4(), loc_quat_size_to_mat4(), lookat_m4(), make_duplis_collection(), make_duplis_geometry_set_impl(), matrix_identity_internal(), matrix_invert_safe_internal(), Matrix_resize_4x4(), mesh_calc_eigen_matrix(), metaball_coords_and_quats_apply(), minmax_evaluate(), modifyMesh(), blender::ed::space_node::node_gizmo_calc_matrix_space(), blender::ed::space_node::node_gizmo_calc_matrix_space_with_image_dims(), ob_parbone(), ob_parcurve(), ob_parvert3(), object_convert_exec(), object_solver_inverted_matrix(), object_warp_verts_exec(), objectsolver_clear_inverse_exec(), objectsolver_new_data(), orthographic_m4(), OVERLAY_edit_uv_cache_init(), OVERLAY_grid_cache_init(), OVERLAY_relationship_lines(), OVERLAY_texture_space(), parent_noinv_set_exec(), particle_system_minmax(), PE_lasso_select(), PE_minmax(), polarview_m4(), pose_mirror_info_init(), pose_transform_mirror_update(), blender::io::gpencil::GpencilIO::prepare_camera_params(), psys_face_mat(), psys_get_dupli_path_transform(), psys_get_particle_on_path(), psys_get_particle_state(), psys_mat_hair_to_object(), pycon_get_tarmat(), blender::io::gpencil::GpencilImporterSVG::read(), blender::io::alembic::AbcObjectReader::read_matrix(), blender::io::usd::USDXformReader::read_matrix(), reconstruct_retrieve_libmv_tracks(), render_cubemap(), SCULPT_brush_test_init(), SCULPT_cache_calc_brushdata_symm(), SCULPT_cloth_simulation_limits_draw(), SCULPT_do_pose_brush(), sculpt_init_mirror_clipping(), SCULPT_layer_brush_height_preview_draw(), sculpt_transform_matrices_init(), set_axis(), set_plane_exec(), setTransformViewMatrices(), shrinkwrap_get_tarmat(), spin_exec(), splineik_evaluate_init(), splineik_get_tarmat(), stabilization_data_to_mat4(), TEST(), tool_generic_create_gizmo(), blender::io::obj::transform_object(), transform_pivot_set_m4(), AnimationImporter::translate_animation_OLD(), ui_search_menu_create_tooltip(), UI_view2d_view_to_region_m4(), UnitConverter::UnitConverter(), update_mirror_object(), updateDuplicateActionConstraintSettings(), updateDuplicateLocRotConstraintSettings(), uv_map_rotation_matrix_ex(), uv_map_transform(), uvprojectModifier_do(), v2_quad_corners_to_mat4(), vfont_to_curve(), voxel_size_edit_invoke(), warpModifier_do(), WIDGETGROUP_camera_refresh(), WIDGETGROUP_camera_view_draw_prepare(), WIDGETGROUP_light_target_draw_prepare(), WIDGETGROUP_xform_cage_refresh(), wireframe_hair_cache_populate(), WM_gizmo_calc_matrix_final_no_offset(), wm_gizmo_create(), wm_software_cursor_draw_bitmap(), wm_xr_fly_compute_move(), wm_xr_grab_compute(), wm_xr_grab_compute_bimanual(), wm_xr_navigation_fly_modal(), WM_xr_session_state_viewer_pose_matrix_info_get(), workbench_shadow_update(), and workbench_studiolight_data_update().

◆ unit_m4_db()

void unit_m4_db ( double  m[4][4])

◆ zero_axis_bias_m4()

void zero_axis_bias_m4 ( float  mat[4][4])

Fix any zero scale axis adding a small bias orthogonal to the other valid axis.

Definition at line 3125 of file math_matrix.c.

References cross_v3_v3v3(), len_squared_v3(), and mul_v3_fl().

Referenced by ED_gpencil_project_stroke_to_view(), ED_gpencil_stroke_reproject(), gpencil_apply_parent(), gpencil_apply_parent_point(), gpencil_brush_grab_apply_cached(), and gpencil_sculpt_brush_init().

◆ zero_m2()

void zero_m2 ( float  m[2][2])

Definition at line 18 of file math_matrix.c.

◆ zero_m3()

void zero_m3 ( float  m[3][3])

◆ zero_m4()

void zero_m4 ( float  m[4][4])