MeshLib C++ Docs
Loading...
Searching...
No Matches
MR::Matrix4< T > Struct Template Reference

#include <MRMatrix4.h>

Public Types

using ValueType = T
 
using VectorType = Vector4<T>
 

Public Member Functions

constexpr Matrix4 () noexcept
 
constexpr Matrix4 (const Vector4< T > &x, const Vector4< T > &y, const Vector4< T > &z, const Vector4< T > &w)
 initializes matrix from 4 row-vectors
 
constexpr Matrix4 (const Matrix3< T > &r, const Vector3< T > &t)
 construct from rotation matrix and translation vector
 
template<MR_SAME_TYPE_TEMPLATE_PARAM(T, TT) >
constexpr Matrix4 (const AffineXf3< TT > &xf) MR_REQUIRES_IF_SUPPORTED(std
 
template<typename U >
 MR_REQUIRES_IF_SUPPORTED (!std::is_same_v< T, U >) const expr explicit Matrix4(const Matrix4< U > &m)
 
constexpr const T & operator() (int row, int col) const noexcept
 element access
 
constexpr T & operator() (int row, int col) noexcept
 
constexpr const Vector4< T > & operator[] (int row) const noexcept
 row access
 
constexpr Vector4< T > & operator[] (int row) noexcept
 
constexpr Vector4< T > col (int i) const noexcept
 column access
 
constexpr T trace () const noexcept
 computes trace of the matrix
 
constexpr T normSq () const noexcept
 compute sum of squared matrix elements
 
constexpr auto norm () const noexcept
 
Matrix3< T > submatrix3 (int i, int j) const noexcept
 computes submatrix of the matrix with excluded i-th row and j-th column
 
det () const noexcept
 computes determinant of the matrix
 
constexpr Matrix4< T > inverse() const noexcept MR_REQUIRES_IF_SUPPORTED(!std constexpr Matrix4< T > transposed () const noexcept
 computes inverse matrix
 
constexpr Matrix3< T > getRotation () const noexcept
 
void setRotation (const Matrix3< T > &rot) noexcept
 
constexpr Vector3< T > getTranslation () const noexcept
 
void setTranslation (const Vector3< T > &t) noexcept
 
constexpr T * data ()
 
constexpr const T * data () const
 
template<MR_SAME_TYPE_TEMPLATE_PARAM(T, TT) >
 operator AffineXf3< TT > () const MR_REQUIRES_IF_SUPPORTED(std
 

Static Public Member Functions

static constexpr Matrix4 zero () noexcept
 
static constexpr Matrix4 identity () noexcept
 
static constexpr Matrix4 scale (T s) noexcept
 returns a matrix that scales uniformly
 

Public Attributes

Vector4< T > x { 1, 0, 0, 0 }
 rows, identity matrix by default
 
Vector4< T > y { 0, 1, 0, 0 }
 
Vector4< T > z { 0, 0, 1, 0 }
 
Vector4< T > w { 0, 0, 0, 1 }
 

Friends

Vector3< T > operator()(const Vector3< T > &b) const MR_REQUIRES_IF_SUPPORTED(!std friend constexpr bool operator== (const Matrix4< T > &a, const Matrix4< T > &b)
 
constexpr bool operator!= (const Matrix4< T > &a, const Matrix4< T > &b)
 
constexpr auto operator+ (const Matrix4< T > &a, const Matrix4< T > &b) -> Matrix4< decltype(std::declval< T >()+std::declval< T >())>
 NOTE: We use std::declval() in the operators below because libclang 18 in our binding generator is bugged and chokes on decltyping a.x and such. TODO fix this when we update libclang.
 
constexpr auto operator- (const Matrix4< T > &a, const Matrix4< T > &b) -> Matrix4< decltype(std::declval< T >() - std::declval< T >())>
 
constexpr auto operator* (T a, const Matrix4< T > &b) -> Matrix4< decltype(std::declval< T >() *std::declval< T >())>
 
constexpr auto operator* (const Matrix4< T > &b, T a) -> Matrix4< decltype(std::declval< T >() *std::declval< T >())>
 
constexpr auto operator/ (Matrix4< T > b, T a) -> Matrix4< decltype(std::declval< T >()/std::declval< T >())>
 
constexpr Matrix4< T > & operator+= (Matrix4< T > &a, const Matrix4< T > &b)
 
constexpr Matrix4< T > & operator-= (Matrix4< T > &a, const Matrix4< T > &b)
 
constexpr Matrix4< T > & operator*= (Matrix4< T > &a, T b)
 
constexpr Matrix4< T > & operator/= (Matrix4< T > &a, T b)
 
constexpr auto operator* (const Matrix4< T > &a, const Vector4< T > &b) -> Vector4< decltype(dot(std::declval< Vector4< T > >(), std::declval< Vector4< T > >()))>
 x = a * b
 
constexpr auto operator* (const Matrix4< T > &a, const Matrix4< T > &b) -> Matrix4< decltype(dot(std::declval< Vector4< T > >(), std::declval< Vector4< T > >()))>
 product of two matrices
 
std::ostream & operator<< (std::ostream &s, const Matrix4 &mat)
 
std::istream & operator>> (std::istream &s, Matrix4 &mat)
 

Related Symbols

(Note that these are not member symbols.)

template<typename T >
auto dot (const Matrix4< T > &a, const Matrix4< T > &b) -> decltype(dot(a.x, b.x))
 double-dot product: x = a : b
 
template<typename T >
Matrix4< T > outer (const Vector4< T > &a, const Vector4< T > &b)
 x = a * b^T
 

Detailed Description

template<typename T>
struct MR::Matrix4< T >

arbitrary 4x4 matrix


The documentation for this struct was generated from the following file: