視錐台を表すクラスです。
[詳解]
#include "nn/nlib/simd/SimdGeometry.h"
|
| Frustum () noexcept |
| デフォルトコンストラクタです。データメンバの初期設定は行いません。
|
|
| Frustum (const Frustum &rhs) noexcept |
| コピーコンストラクタです。
|
|
Frustum & | operator= (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.h の 118 行目に定義があります。
◆ 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]
既存のフラスタムを3D変換して変換されたフラスタムをfrustum
に格納します。
- 引数
-
[out] | frustum | 変換後のフラスタムが格納されます。 |
[in] | scale | スケーリング |
[in] | rotation | 回転 |
[in] | translation | 平行移動 |
◆ Transform() [2/2]
既存のフラスタムを3D変換して変換されたフラスタムをfrustum
に格納します。
- 引数
-
[out] | frustum | 変換後のフラスタムが格納されます。 |
[in] | m | 3D変換行列 |
- 説明
- スケールに関しては、xyz軸方向で最大の値が利用されます。
このクラス詳解は次のファイルから抽出されました: