VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
visutwin::canvas::Matrix4 Struct Reference

4x4 column-major transformation matrix with SIMD acceleration. More...

#include <core/math/matrix4.h>

Public Member Functions

Vector4 getColumn (int col) const
float getElement (const int col, int row) const
Vector3 getPosition () const
Quaternion getRotation () const
Vector3 getScale () const
Vector3 getTranslation () const
Matrix4 inverse () const
 Matrix4 ()
 Matrix4 (const Vector4 &col0, const Vector4 &col1, const Vector4 &col2, const Vector4 &col3)
Matrix4 mulAffine (const Matrix4 &rhs) const
Matrix4 operator* (const Matrix4 &rhs) const
Vector3 operator* (const Vector3 &v) const
Vector4 operator* (const Vector4 &v) const
Matrix4operator= (const Matrix4 &other)
void print () const
void setColumn (int col, const Vector4 &v)
void setElement (const int col, int row, const float value)
Vector3 transformPoint (const Vector3 &v) const
Matrix4 transpose () const

Static Public Member Functions

static Matrix4 frustum (float left, float right, float bottom, float top, float zNear, float zFar)
static Matrix4 identity ()
static Matrix4 lookToLH (const Vector3 &eye, const Vector3 &dir, const Vector3 &up)
static Matrix4 ortho (float left, float right, float bottom, float top, float near, float far)
static Matrix4 orthographicLHReverseZ (const float viewWidth, const float viewHeight, const float nearZ, const float farZ)
static Matrix4 perspective (float fov, float aspect, float zNear, float zFar, bool fovIsHorizontal=false)
static Matrix4 perspectiveFovLHReverseZ (const float fovY, const float aspect, const float zNear, const float zFar)
static Matrix4 reflection (float nx, float ny, float nz, float distance)
static Matrix4 translation (float x, float y, float z)
static Matrix4 trs (const Vector3 &t, const Quaternion &r, const Vector3 &s)

Public Attributes

union { 
   float   m [4][4] 
}; 

Detailed Description

4x4 column-major transformation matrix with SIMD acceleration.

Matrix4 stores 16 floats in column-major order for direct GPU upload. Supports model, view, projection, and MVP composition. SIMD backends accelerate multiply and inverse operations.

Definition at line 30 of file matrix4.h.

Constructor & Destructor Documentation

◆ Matrix4() [1/2]

visutwin::canvas::Matrix4::Matrix4 ( )
inline

◆ Matrix4() [2/2]

visutwin::canvas::Matrix4::Matrix4 ( const Vector4 & col0,
const Vector4 & col1,
const Vector4 & col2,
const Vector4 & col3 )
explicit

References m.

Member Function Documentation

◆ frustum()

Matrix4 visutwin::canvas::Matrix4::frustum ( float left,
float right,
float bottom,
float top,
float zNear,
float zFar )
static

References Matrix4().

◆ getColumn()

Vector4 visutwin::canvas::Matrix4::getColumn ( int col) const
nodiscard

◆ getElement()

float visutwin::canvas::Matrix4::getElement ( const int col,
int row ) const
inlinenodiscard

◆ getPosition()

Vector3 visutwin::canvas::Matrix4::getPosition ( ) const
nodiscard

◆ getRotation()

Quaternion visutwin::canvas::Matrix4::getRotation ( ) const
nodiscard

◆ getScale()

Vector3 visutwin::canvas::Matrix4::getScale ( ) const

Extracts the scale component from the specified 4x4 matrix

◆ getTranslation()

Vector3 visutwin::canvas::Matrix4::getTranslation ( ) const
nodiscard

◆ identity()

◆ inverse()

◆ lookToLH()

Matrix4 visutwin::canvas::Matrix4::lookToLH ( const Vector3 & eye,
const Vector3 & dir,
const Vector3 & up )
static

References Matrix4().

◆ mulAffine()

Matrix4 visutwin::canvas::Matrix4::mulAffine ( const Matrix4 & rhs) const

Multiplies the specified 4x4 matrices together and stores the result in the current instance. This function assumes the matrices are affine transformation matrices, where the upper left 3x3 elements are a rotation matrix, and the bottom left 3 elements are translation. The rightmost column is assumed to be [0, 0, 0, 1]. The parameters are not verified to be in the expected format.

References Matrix4().

◆ operator*() [1/3]

Matrix4 visutwin::canvas::Matrix4::operator* ( const Matrix4 & rhs) const

References Matrix4().

◆ operator*() [2/3]

Vector3 visutwin::canvas::Matrix4::operator* ( const Vector3 & v) const

◆ operator*() [3/3]

Vector4 visutwin::canvas::Matrix4::operator* ( const Vector4 & v) const

◆ operator=()

Matrix4 & visutwin::canvas::Matrix4::operator= ( const Matrix4 & other)
inline

Definition at line 82 of file matrix4.h.

References m, and Matrix4().

◆ ortho()

Matrix4 visutwin::canvas::Matrix4::ortho ( float left,
float right,
float bottom,
float top,
float near,
float far )
static

References Matrix4().

◆ orthographicLHReverseZ()

Matrix4 visutwin::canvas::Matrix4::orthographicLHReverseZ ( const float viewWidth,
const float viewHeight,
const float nearZ,
const float farZ )
inlinestatic

Definition at line 218 of file matrix4.h.

References m, and Matrix4().

◆ perspective()

Matrix4 visutwin::canvas::Matrix4::perspective ( float fov,
float aspect,
float zNear,
float zFar,
bool fovIsHorizontal = false )
static

References Matrix4().

◆ perspectiveFovLHReverseZ()

Matrix4 visutwin::canvas::Matrix4::perspectiveFovLHReverseZ ( const float fovY,
const float aspect,
const float zNear,
const float zFar )
inlinestatic

Definition at line 261 of file matrix4.h.

References m, and Matrix4().

◆ print()

void visutwin::canvas::Matrix4::print ( ) const
inline

Definition at line 119 of file matrix4.h.

References m.

◆ reflection()

Matrix4 visutwin::canvas::Matrix4::reflection ( float nx,
float ny,
float nz,
float distance )
inlinestatic

Creates a reflection matrix for mirroring across a plane defined by a normal and distance. Mat4.setReflection(normal, distance). Uses the Householder reflection formula: R = I - 2nn^T, T = -2d*n.

Parameters
normal- The unit normal of the reflection plane.
distance- The signed distance from the origin to the plane (d = -dot(normal, pointOnPlane)).

Definition at line 438 of file matrix4.h.

References Matrix4(), and setElement().

◆ setColumn()

void visutwin::canvas::Matrix4::setColumn ( int col,
const Vector4 & v )

◆ setElement()

void visutwin::canvas::Matrix4::setElement ( const int col,
int row,
const float value )
inline

◆ transformPoint()

Vector3 visutwin::canvas::Matrix4::transformPoint ( const Vector3 & v) const

◆ translation()

Matrix4 visutwin::canvas::Matrix4::translation ( float x,
float y,
float z )
inlinestatic

Definition at line 304 of file matrix4.h.

References m, and Matrix4().

◆ transpose()

Matrix4 visutwin::canvas::Matrix4::transpose ( ) const
inlinenodiscard

Definition at line 170 of file matrix4.h.

References m, and Matrix4().

Referenced by visutwin::canvas::Frustum::create().

◆ trs()

Matrix4 visutwin::canvas::Matrix4::trs ( const Vector3 & t,
const Quaternion & r,
const Vector3 & s )
static

Sets the specified matrix to the concatenation of a translation, a quaternion rotation and a scale

Parameters
t
r
s

References Matrix4().

Referenced by visutwin::canvas::ShadowRendererDirectional::cull().

Member Data Documentation

◆ [union]

◆ m

float visutwin::canvas::Matrix4::m[4][4]

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