nlib
nn::nlib::simd::Frustum クラス

視錐台を表すクラスです。 [詳解]

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

公開メンバ関数

 Frustum () noexcept
 デフォルトコンストラクタです。データメンバの初期設定は行いません。
 
 Frustum (const Frustum &rhs) noexcept
 コピーコンストラクタです。
 
Frustumoperator= (const Frustum &rhs) noexcept
 代入演算子です。
 
 Frustum (SimdVectorArg center, SimdQuaternionArg rotation, float top, float bottom, float left, float right, float n, float f) noexcept
 パラメータを指定してフラスタム(視錐台)を構築します。 [詳解]
 
void Set (SimdVectorArg center, SimdQuaternionArg rotation, float top, float bottom, float left, float right, float n, float f) noexcept
 コンストラクタと同様の動作を行います。コンストラクタの説明を参照してください。
 
void Transform (Frustum *frustum, float scale, SimdQuaternionArg rotation, SimdVectorArg translation) const noexcept
 既存のフラスタムを3D変換して変換されたフラスタムをfrustum に格納します。 [詳解]
 
void Transform (Frustum *frustum, SimdMatrixArg m) const noexcept
 既存のフラスタムを3D変換して変換されたフラスタムをfrustum に格納します。 [詳解]
 
void GetCorners (Float3 *corners) const noexcept
 ワールド座標系におけるフラスタムの頂点を取得します。 [詳解]
 

詳解

視錐台を表すクラスです。

説明
内部に視錐台を構成する6つの(正規化された)ローカル座標上の平面と、位置を表すベクトルと、回転を表すクォータニオンをデータとして保持しています。

SimdGeometry.h118 行目に定義があります。

構築子と解体子

◆ Frustum()

nn::nlib::simd::Frustum::Frustum ( SimdVectorArg  center,
SimdQuaternionArg  rotation,
float  top,
float  bottom,
float  left,
float  right,
float  n,
float  f 
)
noexcept

パラメータを指定してフラスタム(視錐台)を構築します。

引数
[in]centerフラスタムの位置を示す3次元ベクトル
[in]rotationフラスタムの姿勢を示すクォータニオン
[in]topニア平面上の上端のY座標
[in]bottomニア平面上の下端のY座標
[in]leftニア平面上の左端のX座標
[in]rightニア平面上の右端のX座標
[in]nニア平面への距離
[in]fファー平面への距離
説明
フラスタムの(ローカル座標系の)頂点は以下のようになります。
  • ニア平面: (left, top, -n), (right, top, -n), (right, bottom, -n), (left, bottom, -n)
  • ファー平面: (left * f/n, top * f/n, -f), (right * f/n, top * f/n, -f), (right * f/n, bottom * f/n, -f), (left * f/n, bottom * f/n, -f)
クラス内部では以下の平面が正規化された形で保持されます。 いずれも法線はフラスタムの外側に向いていて、包含関係等の判定が効率よくできるように考慮されています。
  • ニア平面: z + n = 0
  • ファー平面: -z - f = 0
  • 上平面: y + (top/n)z = 0
  • 下平面: -y - (bottom/n)z = 0
  • 左平面: -x - (left/n)z = 0
  • 右平面: x + (right/n)z = 0
これらが、rotation による回転と、center による平行移動を経てワールド座標系に配置されます。

関数詳解

◆ GetCorners()

nn::nlib::simd::Frustum::GetCorners ( Float3 corners) const
noexcept

ワールド座標系におけるフラスタムの頂点を取得します。

引数
[out]corners頂点が格納される領域。8頂点分の領域が確保されている必要があります。
説明
頂点が格納される順番は、ニア平面の左上から時計回りに右上,右下,左下、その後にファー平面も同様に左上から時計回りに右上,右下,左下となります。

◆ Transform() [1/2]

nn::nlib::simd::Frustum::Transform ( Frustum frustum,
float  scale,
SimdQuaternionArg  rotation,
SimdVectorArg  translation 
) const
noexcept

既存のフラスタムを3D変換して変換されたフラスタムをfrustum に格納します。

引数
[out]frustum変換後のフラスタムが格納されます。
[in]scaleスケーリング
[in]rotation回転
[in]translation平行移動

◆ Transform() [2/2]

nn::nlib::simd::Frustum::Transform ( Frustum frustum,
SimdMatrixArg  m 
) const
noexcept

既存のフラスタムを3D変換して変換されたフラスタムをfrustum に格納します。

引数
[out]frustum変換後のフラスタムが格納されます。
[in]m3D変換行列
説明
スケールに関しては、xyz軸方向で最大の値が利用されます。

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