nlib
nn::nlib::simd::Matrix クラス

4x4行列を扱う関数が集められたクラスです。 [詳解]

#include "nn/nlib/simd/SimdMatrix.h"

静的公開メンバ関数

static SimdVector Determinant (SimdMatrixArg m) noexcept
 行列式を計算します。 [詳解]
 
static SimdMatrix Identity () noexcept
 単位行列を返します。
 
static SimdMatrix Inverse (SimdVector *det, SimdMatrixArg m) noexcept
 逆行列を計算します。 [詳解]
 
static bool IsIdentity (SimdMatrixArg m) noexcept
 単位行列かどうかを検証します。 [詳解]
 
static bool IsInfinite (SimdMatrixArg m) noexcept
 行列m に無限大の要素が存在するかどうかを検証します。 [詳解]
 
static bool IsNaN (SimdMatrixArg m) noexcept
 行列m に非数の要素が存在するかどうかを検証します。 [詳解]
 
static SimdMatrix Mult (SimdMatrixArg a, SimdMatrixArg b) noexcept
 行列を乗算します。 [詳解]
 
static SimdMatrix Transpose (SimdMatrixArg m) noexcept
 行列を転置します。 [詳解]
 
static SimdMatrix MultTranspose (SimdMatrixArg a, SimdMatrixArg b) noexcept
 行列の積の転置行列を計算します。 [詳解]
 
static SimdMatrix FromScaling (float scale_x, float scale_y, float scale_z) noexcept
 スケーリング行列を作成します。 [詳解]
 
static SimdMatrix FromScaling (SimdVectorArg scale) noexcept
 スケーリング行列を作成します。 [詳解]
 
static SimdMatrix FromTranslation (float ofs_x, float ofs_y, float ofs_z) noexcept
 平行移動行列を作成します。 [詳解]
 
static SimdMatrix FromTranslation (SimdVectorArg ofs) noexcept
 平行移動行列を作成します。 [詳解]
 
static SimdMatrix FromRotationX (float sin_value, float cos_value) noexcept
 x軸で回転した行列を作成します。 [詳解]
 
static SimdMatrix FromRotationY (float sin_value, float cos_value) noexcept
 y軸で回転した行列を作成します。 [詳解]
 
static SimdMatrix FromRotationZ (float sin_value, float cos_value) noexcept
 z軸で回転した行列を作成します。 [詳解]
 
static SimdMatrix FromRotationAxisAndSinCos (SimdVectorArg axis_normalized, float sin_value, float cos_value) noexcept
 軸と回転角(のsin/cos)から回転行列を計算します。 [詳解]
 
static SimdMatrix FromRotationQuaternion (SimdQuaternionArg quat) noexcept
 クォータニオンから回転行列を計算します。 [詳解]
 
static SimdMatrix FromRotationZXY (SimdVectorArg sin_xyz, SimdVectorArg cos_xyz) noexcept
 ZXY軸それぞれの回転角(のsin/cos)から回転行列を計算します。 [詳解]
 
static SimdMatrix LookToLh (SimdVectorArg eye_pos, SimdVectorArg eye_dir_normalized, SimdVectorArg up_dir_normalized) noexcept
 カメラの位置, カメラの向き, 上方向から左手座標系のカメラ行列を作成します。 [詳解]
 
static SimdMatrix LookAtLh (SimdVectorArg eye_pos, SimdVectorArg at_pos, SimdVectorArg up_dir_normalized) noexcept
 カメラの位置, 焦点, 上方向から左手座標系のカメラ行列を作成します。 [詳解]
 
static SimdMatrix LookToRh (SimdVectorArg eye_pos, SimdVectorArg eye_dir_normalized, SimdVectorArg up_dir_normalized) noexcept
 カメラの位置, カメラの向き, 上方向から右手座標系のカメラ行列を作成します。 [詳解]
 
static SimdMatrix LookAtRh (SimdVectorArg eye_pos, SimdVectorArg at_pos, SimdVectorArg up_dir_normalized) noexcept
 カメラの位置, 焦点, 上方向から右手座標系のカメラ行列を作成します。 [詳解]
 
static SimdMatrix PerspectiveLh (float width, float height, float near_z, float far_z) noexcept
 左手座標系のパースペクティブ射影行列を作成します。 [詳解]
 
static SimdMatrix PerspectiveRh (float width, float height, float near_z, float far_z) noexcept
 右手座標系のパースペクティブ射影行列を作成します。 [詳解]
 
static SimdMatrix PerspectiveFovLh (float half_fovy_sin, float half_fovy_cos, float aspect, float near_z, float far_z) noexcept
 左手座標系のパースペクティブ射影行列を作成します。 [詳解]
 
static SimdMatrix PerspectiveFovRh (float half_fovy_sin, float half_fovy_cos, float aspect, float near_z, float far_z) noexcept
 右手座標系のパースペクティブ射影行列を作成します。 [詳解]
 
static SimdMatrix PerspectiveOffCenterLh (float left, float right, float bottom, float top, float near_z, float far_z) noexcept
 左手座標系のパースペクティブ射影行列を作成します。 [詳解]
 
static SimdMatrix PerspectiveOffCenterRh (float left, float right, float bottom, float top, float near_z, float far_z) noexcept
 右手座標系のパースペクティブ射影行列を作成します。 [詳解]
 
static SimdMatrix OrthographicLh (float width, float height, float near_z, float far_z) noexcept
 左手座標系の正射影行列を作成します。 [詳解]
 
static SimdMatrix OrthographicRh (float width, float height, float near_z, float far_z) noexcept
 右手座標系の正射影行列を作成します。 [詳解]
 
static SimdMatrix OrthographicOffCenterLh (float left, float right, float bottom, float top, float near_z, float far_z) noexcept
 左手座標系の正射影行列を作成します。 [詳解]
 
static SimdMatrix OrthographicOffCenterRh (float left, float right, float bottom, float top, float near_z, float far_z) noexcept
 右手座標系の正射影行列を作成します。 [詳解]
 
static SimdMatrix Shadow (SimdPlaneArg shadow_plane, SimdVector light_pos) noexcept
 light_pos から shadow_plane に投影する行列を作成します。 [詳解]
 
static SimdMatrix Reflect (SimdPlaneArg reflection_plane) noexcept
 ベクトルを平面reflection_plane で反射する行列を作成します。 [詳解]
 
static void Decompose (SimdVector *scale, SimdMatrix *rot, SimdVector *trans, SimdMatrixArg m) noexcept
 行列をスケール, 回転, 平行移動に分解します。 [詳解]
 
メモリからのロード
static SimdMatrix LoadFloat4x4 (const Float4x4 *p) noexcept
 メモリから4x4行列を読み込みます。
 
static SimdMatrix LoadFloat3x4 (const Float3x4 *p) noexcept
 メモリから3x4行列を読み込んで転置します。
 
static SimdMatrix LoadFloat4x3 (const Float4x3 *p) noexcept
 メモリから4x3行列を読み込みます。
 
static SimdMatrix LoadFloat3x3 (const Float3x3 *p) noexcept
 メモリから3x3行列を読み込みます。
 
メモリへのストア
static void StoreFloat4x4 (Float4x4 *p, SimdMatrixArg m) noexcept
 メモリに4x4行列を書き込みます。
 
static void StoreFloat3x4 (Float3x4 *p, SimdMatrixArg m) noexcept
 行列を転置して上の3行をメモリに書き込みます。
 
static void StoreFloat4x3 (Float4x3 *p, SimdMatrixArg m) noexcept
 メモリに4x3行列を書き込みます。
 
static void StoreFloat3x3 (Float3x3 *p, SimdMatrixArg m) noexcept
 メモリに3x3行列を書き込みます。
 

詳解

4x4行列を扱う関数が集められたクラスです。

説明
このクラスのメンバは全て静的関数で、クラスをインスタンス化することはできません。

SimdMatrix.h28 行目に定義があります。

関数詳解

◆ Decompose()

nn::nlib::simd::Matrix::Decompose ( SimdVector scale,
SimdMatrix rot,
SimdVector trans,
SimdMatrixArg  m 
)
staticnoexcept

行列をスケール, 回転, 平行移動に分解します。

引数
[out]scaleスケールが格納されるポインタ
[out]rot回転行列が格納されるポインタ
[out]trans平行移動が格納されるポインタ
[in]m分解される4x4行列
各スケールには0以上の値が格納されることに注意してください。

◆ Determinant()

nn::nlib::simd::Matrix::Determinant ( SimdMatrixArg  m)
staticnoexcept

行列式を計算します。

引数
[in]m4x4行列
戻り値
各レーンに行列式が格納されます。

◆ FromRotationAxisAndSinCos()

nn::nlib::simd::Matrix::FromRotationAxisAndSinCos ( SimdVectorArg  axis_normalized,
float  sin_value,
float  cos_value 
)
staticnoexcept

軸と回転角(のsin/cos)から回転行列を計算します。

引数
[in]axis_normalized正規化された回転軸3Dベクトル
[in]sin_value回転角をradとした場合、sin(rad)を渡します。
[in]cos_value回転角をradとした場合、cos(rad)を渡します。
戻り値
回転行列

◆ FromRotationQuaternion()

nn::nlib::simd::Matrix::FromRotationQuaternion ( SimdQuaternionArg  quat)
staticnoexcept

クォータニオンから回転行列を計算します。

引数
[in]quatクォータニオン (x, y, z, w)
戻り値
回転行列

◆ FromRotationX()

nn::nlib::simd::Matrix::FromRotationX ( float  sin_value,
float  cos_value 
)
staticnoexcept

x軸で回転した行列を作成します。

引数
[in]sin_valueradを回転角とした場合のsin(rad)
[in]cos_valueradを回転角とした場合のcos(rad)
戻り値
回転行列

◆ FromRotationY()

nn::nlib::simd::Matrix::FromRotationY ( float  sin_value,
float  cos_value 
)
staticnoexcept

y軸で回転した行列を作成します。

引数
[in]sin_valueradを回転角とした場合のsin(rad)
[in]cos_valueradを回転角とした場合のcos(rad)
戻り値
回転行列

◆ FromRotationZ()

nn::nlib::simd::Matrix::FromRotationZ ( float  sin_value,
float  cos_value 
)
staticnoexcept

z軸で回転した行列を作成します。

引数
[in]sin_valueradを回転角とした場合のsin(rad)
[in]cos_valueradを回転角とした場合のcos(rad)
戻り値
回転行列

◆ FromRotationZXY()

nn::nlib::simd::Matrix::FromRotationZXY ( SimdVectorArg  sin_xyz,
SimdVectorArg  cos_xyz 
)
staticnoexcept

ZXY軸それぞれの回転角(のsin/cos)から回転行列を計算します。

引数
[in]sin_xyz3次元ベクトル(sin(rad_x), sin(rad_y), sin(rad_z))
[in]cos_xyz3次元ベクトル(cos(rad_x), cos(rad_y), cos(rad_z))
戻り値
回転行列

◆ FromScaling() [1/2]

nn::nlib::simd::Matrix::FromScaling ( float  scale_x,
float  scale_y,
float  scale_z 
)
staticnoexcept

スケーリング行列を作成します。

引数
[in]scale_xx軸方向のスケーリング
[in]scale_yy軸方向のスケーリング
[in]scale_zz軸方向のスケーリング
戻り値
スケーリング行列

◆ FromScaling() [2/2]

nn::nlib::simd::Matrix::FromScaling ( SimdVectorArg  scale)
staticnoexcept

スケーリング行列を作成します。

引数
[in]scalex, y, z軸方向のスケーリングが格納された3次元ベクトル
戻り値
スケーリング行列

◆ FromTranslation() [1/2]

nn::nlib::simd::Matrix::FromTranslation ( float  ofs_x,
float  ofs_y,
float  ofs_z 
)
staticnoexcept

平行移動行列を作成します。

引数
[in]ofs_xx軸方向の平行移動
[in]ofs_yy軸方向の平行移動
[in]ofs_zz軸方向の平行移動
戻り値
平行移動行列

◆ FromTranslation() [2/2]

nn::nlib::simd::Matrix::FromTranslation ( SimdVectorArg  ofs)
staticnoexcept

平行移動行列を作成します。

引数
[in]ofsx, y, z軸方向の平行異動が格納された3次元ベクトル
戻り値
平行移動行列

◆ Inverse()

nn::nlib::simd::Matrix::Inverse ( SimdVector det,
SimdMatrixArg  m 
)
staticnoexcept

逆行列を計算します。

引数
[in]detNULLでない場合は行列式が格納されます
[in]m4x4行列
戻り値
逆行列を返します。

◆ IsIdentity()

nn::nlib::simd::Matrix::IsIdentity ( SimdMatrixArg  m)
staticnoexcept

単位行列かどうかを検証します。

引数
[in]m4x4行列
戻り値
m が単位行列であればtrue, そうでなければfalse

◆ IsInfinite()

nn::nlib::simd::Matrix::IsInfinite ( SimdMatrixArg  m)
staticnoexcept

行列m に無限大の要素が存在するかどうかを検証します。

引数
[in]m4x4行列
戻り値
m に無限大の要素が存在すればtrue, そうでなければfalse

◆ IsNaN()

nn::nlib::simd::Matrix::IsNaN ( SimdMatrixArg  m)
staticnoexcept

行列m に非数の要素が存在するかどうかを検証します。

引数
[in]m4x4行列
戻り値
m に非数の要素が存在すればtrue, そうでなければfalse

◆ LookAtLh()

nn::nlib::simd::Matrix::LookAtLh ( SimdVectorArg  eye_pos,
SimdVectorArg  at_pos,
SimdVectorArg  up_dir_normalized 
)
staticnoexcept

カメラの位置, 焦点, 上方向から左手座標系のカメラ行列を作成します。

引数
[in]eye_posカメラの位置
[in]at_pos焦点
[in]up_dir_normalized正規化された上方向
戻り値
ワールド座標系からカメラ座標系に変換する行列

◆ LookAtRh()

nn::nlib::simd::Matrix::LookAtRh ( SimdVectorArg  eye_pos,
SimdVectorArg  at_pos,
SimdVectorArg  up_dir_normalized 
)
staticnoexcept

カメラの位置, 焦点, 上方向から右手座標系のカメラ行列を作成します。

引数
[in]eye_posカメラの位置
[in]at_pos焦点
[in]up_dir_normalized正規化された上方向
戻り値
ワールド座標系からカメラ座標系に変換する行列

◆ LookToLh()

nn::nlib::simd::Matrix::LookToLh ( SimdVectorArg  eye_pos,
SimdVectorArg  eye_dir_normalized,
SimdVectorArg  up_dir_normalized 
)
staticnoexcept

カメラの位置, カメラの向き, 上方向から左手座標系のカメラ行列を作成します。

引数
[in]eye_posカメラの位置
[in]eye_dir_normalized正規化されたカメラの向き
[in]up_dir_normalized正規化された上方向
戻り値
ワールド座標系からカメラ座標系に変換する行列

◆ LookToRh()

nn::nlib::simd::Matrix::LookToRh ( SimdVectorArg  eye_pos,
SimdVectorArg  eye_dir_normalized,
SimdVectorArg  up_dir_normalized 
)
staticnoexcept

カメラの位置, カメラの向き, 上方向から右手座標系のカメラ行列を作成します。

引数
[in]eye_posカメラの位置
[in]eye_dir_normalized正規化されたカメラの向き
[in]up_dir_normalized正規化された上方向
戻り値
ワールド座標系からカメラ座標系に変換する行列

◆ Mult()

nn::nlib::simd::Matrix::Mult ( SimdMatrixArg  a,
SimdMatrixArg  b 
)
staticnoexcept

行列を乗算します。

引数
[in]a4x4行列
[in]b4x4行列
戻り値
ab の積

◆ MultTranspose()

nn::nlib::simd::Matrix::MultTranspose ( SimdMatrixArg  a,
SimdMatrixArg  b 
)
staticnoexcept

行列の積の転置行列を計算します。

引数
[in]a4x4行列
[in]b4x4行列
戻り値
ab の積の転置行列

◆ OrthographicLh()

nn::nlib::simd::Matrix::OrthographicLh ( float  width,
float  height,
float  near_z,
float  far_z 
)
staticnoexcept

左手座標系の正射影行列を作成します。

引数
[in]widthビューフラスタムの幅
[in]heightビューフラスタムの高さ
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
正射影行列

◆ OrthographicOffCenterLh()

nn::nlib::simd::Matrix::OrthographicOffCenterLh ( float  left,
float  right,
float  bottom,
float  top,
float  near_z,
float  far_z 
)
staticnoexcept

左手座標系の正射影行列を作成します。

引数
[in]leftビューフラスタムの左側のx座標
[in]rightビューフラスタムの右側のx座標
[in]bottomビューフラスタムの下側のy座標
[in]topビューフラスタムの上側のy座標
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
正射影行列

◆ OrthographicOffCenterRh()

nn::nlib::simd::Matrix::OrthographicOffCenterRh ( float  left,
float  right,
float  bottom,
float  top,
float  near_z,
float  far_z 
)
staticnoexcept

右手座標系の正射影行列を作成します。

引数
[in]leftビューフラスタムの左側のx座標
[in]rightビューフラスタムの右側のx座標
[in]bottomビューフラスタムの下側のy座標
[in]topビューフラスタムの上側のy座標
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
正射影行列

◆ OrthographicRh()

nn::nlib::simd::Matrix::OrthographicRh ( float  width,
float  height,
float  near_z,
float  far_z 
)
staticnoexcept

右手座標系の正射影行列を作成します。

引数
[in]widthビューフラスタムの幅
[in]heightビューフラスタムの高さ
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
正射影行列

◆ PerspectiveFovLh()

nn::nlib::simd::Matrix::PerspectiveFovLh ( float  half_fovy_sin,
float  half_fovy_cos,
float  aspect,
float  near_z,
float  far_z 
)
staticnoexcept

左手座標系のパースペクティブ射影行列を作成します。

引数
[in]half_fovy_sin画角をradとしたとき、sin(rad/2)
[in]half_fovy_cos画角をradとしたとき、cos(rad/2)
[in]aspect表示領域の縦横比
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
パースペクティブ射影行列

◆ PerspectiveFovRh()

nn::nlib::simd::Matrix::PerspectiveFovRh ( float  half_fovy_sin,
float  half_fovy_cos,
float  aspect,
float  near_z,
float  far_z 
)
staticnoexcept

右手座標系のパースペクティブ射影行列を作成します。

引数
[in]half_fovy_sin画角をradとしたとき、sin(rad/2)
[in]half_fovy_cos画角をradとしたとき、cos(rad/2)
[in]aspect表示領域の縦横比
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
パースペクティブ射影行列

◆ PerspectiveLh()

nn::nlib::simd::Matrix::PerspectiveLh ( float  width,
float  height,
float  near_z,
float  far_z 
)
staticnoexcept

左手座標系のパースペクティブ射影行列を作成します。

引数
[in]widthビューフラスタムの幅
[in]heightビューフラスタムの高さ
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
パースペクティブ射影行列

◆ PerspectiveOffCenterLh()

nn::nlib::simd::Matrix::PerspectiveOffCenterLh ( float  left,
float  right,
float  bottom,
float  top,
float  near_z,
float  far_z 
)
staticnoexcept

左手座標系のパースペクティブ射影行列を作成します。

引数
[in]leftビューフラスタムの左側のx座標
[in]rightビューフラスタムの右側のx座標
[in]bottomビューフラスタムの下側のy座標
[in]topビューフラスタムの上側のy座標
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
パースペクティブ射影行列

◆ PerspectiveOffCenterRh()

nn::nlib::simd::Matrix::PerspectiveOffCenterRh ( float  left,
float  right,
float  bottom,
float  top,
float  near_z,
float  far_z 
)
staticnoexcept

右手座標系のパースペクティブ射影行列を作成します。

引数
[in]leftビューフラスタムの左側のx座標
[in]rightビューフラスタムの右側のx座標
[in]bottomビューフラスタムの下側のy座標
[in]topビューフラスタムの上側のy座標
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
パースペクティブ射影行列

◆ PerspectiveRh()

nn::nlib::simd::Matrix::PerspectiveRh ( float  width,
float  height,
float  near_z,
float  far_z 
)
staticnoexcept

右手座標系のパースペクティブ射影行列を作成します。

引数
[in]widthビューフラスタムの幅
[in]heightビューフラスタムの高さ
[in]near_znear平面の奥行き
[in]far_zfar平面の奥行き
戻り値
パースペクティブ射影行列

◆ Reflect()

nn::nlib::simd::Matrix::Reflect ( SimdPlaneArg  reflection_plane)
staticnoexcept

ベクトルを平面reflection_plane で反射する行列を作成します。

引数
[in]reflection_planeベクトルを反射する平面
戻り値
ベクトルを反射する変換行列

◆ Shadow()

nn::nlib::simd::Matrix::Shadow ( SimdPlaneArg  shadow_plane,
SimdVector  light_pos 
)
staticnoexcept

light_pos から shadow_plane に投影する行列を作成します。

引数
[in]shadow_plane投影面
[in]light_posレーン3(w要素)が0の場合光源が無限遠の平行ライトです。1の場合はポイントライトです。
戻り値
点を投影面にマップする変換行列

◆ Transpose()

nn::nlib::simd::Matrix::Transpose ( SimdMatrixArg  m)
staticnoexcept

行列を転置します。

引数
[in]m4x4行列
戻り値
m の転置行列

このクラス詳解は次のファイルから抽出されました: