FineKernelToolKit: FK_CLI::fk_Boundary クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | プロパティ | 全メンバ一覧
FK_CLI::fk_Boundary クラス

境界ボリュームを管理するクラス [詳解]

`#include <CLI/FK_CLI/include/Boundary_CLI.h>`

FK_CLI::fk_Boundary の継承関係図
[凡例]
FK_CLI::fk_Boundary 連携図
[凡例]

## 公開メンバ関数

void | SetAABBMaxMin (fk_Vector^ max, fk_Vector^ min)
| 軸平行境界ボックス (AABB) 最大最小設定メソッド
void | SetOBBMaxMin (fk_Vector^ max, fk_Vector^ min)
| 有向境界ボックス (OBB) 最大最小設定メソッド
カプセル型制御メソッド
void | SetCapsule (fk_Vector^ startPos, fk_Vector^ endPos, double radius)
| カプセル型設定メソッド
基底クラス FK_CLI::fk_MatrixAdmin に属する継承公開メンバ関数
bool | SetScale (double scale, fk_Axis axis)
| 軸方向絶対倍率設定メソッド
bool | SetScale (double x, double y, double z)
| 軸方向個別絶対倍率設定メソッド
bool | PrdScale (double scale)
| 全体相対倍率設定メソッド
bool | PrdScale (double scale, fk_Axis axis)
| 軸方向相対倍率設定メソッド
bool | PrdScale (double x, double y, double z)
| 軸方向個別相対倍率設定メソッド
double | GetScale (fk_Axis axis)
| 軸方向倍率取得メソッド
bool | GlFocus (fk_Vector^ p)
| グローバル座標系注視点設定メソッド1
bool | GlFocus (double x, double y, double z)
| グローバル座標系注視点設定メソッド2
bool | LoFocus (fk_Vector^ p)
| ローカル座標系注視点設定メソッド1
bool | LoFocus (double x, double y, double z)
| ローカル座標系注視点設定メソッド2
bool | GlVec (fk_Vector^ v)
| グローバル座標系方向ベクトル設定メソッド1
bool | GlVec (double x, double y, double z)
| グローバル座標系方向ベクトル設定メソッド2
bool | GlUpvec (fk_Vector^ v)
| グローバル座標系アップベクトル設定メソッド1
bool | GlUpvec (double x, double y, double z)
| グローバル座標系アップベクトル設定メソッド2
bool | LoUpvec (fk_Vector^ v)
| ローカル座標系アップベクトル設定メソッド1
bool | LoUpvec (double x, double y, double z)
| ローカル座標系アップベクトル設定メソッド2
bool | GlAngle (fk_Angle^ angle)
| グローバル座標系オイラー角設定メソッド1
bool | GlAngle (double h, double p, double b)
| グローバル座標系オイラー角設定メソッド2
bool | LoAngle (fk_Angle^ angle)
| ローカル座標系オイラー角設定メソッド1
bool | LoAngle (double h, double p, double b)
| ローカル座標系オイラー角設定メソッド2

## プロパティ

fk_BoundaryMode | BMode`[get, set]`
| 境界ボリューム選択プロパティ
double | SphereRadius`[get, set]`
| 境界球半径プロパティ
fk_Vector^ | SpherePos`[get, set]`
fk_Vector^ | AABB`[get, set]`
| 軸平行境界ボックス (AABB) サイズプロパティ
fk_Vector^ | AABBMax`[get, set]`
| 軸平行境界ボックス (AABB) 最大値側プロパティ
fk_Vector^ | AABBMin`[get, set]`
| 軸平行境界ボックス (AABB) 最小値側プロパティ
fk_Vector^ | OBB`[get, set]`
| 有向境界ボックス (OBB) サイズプロパティ
fk_Vector^ | OBBMax`[get, set]`
| 有向境界ボックス (OBB) 最大値側プロパティ
fk_Vector^ | OBBMin`[get, set]`
| 有向境界ボックス (OBB) 最小値側プロパティ
double | CapsuleRadius`[get, set]`
| カプセル型領域規定距離プロパティ
double | CapsuleLength`[get]`
| カプセル型中心軸長プロパティ
fk_Vector^ | CapsuleStart`[get, set]`
| カプセル型中心軸始点プロパティ
fk_Vector^ | CapsuleEnd`[get, set]`
| カプセル型中心軸終点プロパティ
bool | BDraw`[get, set]`
| 境界ボリューム描画有無プロパティ
fk_Color^ | BLineColor`[get, set]`
| 境界ボリューム非干渉描画色プロパティ
fk_Color^ | BIntLineColor`[get, set]`
| 境界ボリューム干渉状態描画色プロパティ
double | BLineWidth`[get, set]`
| 境界ボリューム描画線幅プロパティ
基底クラス FK_CLI::fk_MatrixAdmin に属する継承プロパティ
fk_Vector^ | Position`[get]`
| 位置ベクトルプロパティ
fk_Vector^ | Vec`[get]`
| 方向ベクトルプロパティ
fk_Vector^ | Upvec`[get]`
| アップベクトルプロパティ
fk_Angle^ | Angle`[get]`
| オイラー角取得メソッド
fk_Matrix^ | Matrix`[get]`
| 変換行列プロパティ
fk_Matrix^ | InvMatrix`[get]`
| 逆変換行列プロパティ
fk_Matrix^ | BaseMatrix`[get]`
| 移動・回転要素変換行列プロパティ
fk_Matrix^ | InvBaseMatrix`[get]`
| 移動・回転要素逆変換行列プロパティ
bool | ScaleMode`[get]`
| 拡大縮小状態判定プロパティ
double | Scale`[get, set]`
| 全体倍率プロパティ

## 詳解

境界ボリュームを管理するクラス

このクラスは、モデルの干渉判定や衝突判定を行うための 「境界ボリューム」を制御する機能を提供します。

「境界ボリューム」とは、モデルが干渉判定や衝突判定を行う際に、 処理を高速に行うための簡易的な形状を指します。 モデル同士の干渉・衝突判定は、 実際にはこの境界ボリューム同士の干渉状態や衝突を検出することになります。 干渉判定と衝突判定に関する詳細は fk_Model の概要を参照して下さい。

境界ボリュームには、現在は以下の4種類が提供されています。

- 境界球
  球形状による境界ボリュームです。 処理は最も高速ですが、本来の形状との誤差が大きくなることがあります。 現状では、衝突判定を行いたい場合はこの境界球を用いる必要があります。
- 軸平行境界ボックス (Axis Aligned Bounding Box, AABB)
  直方体による境界ボリュームですが、 常に各面が座標軸と垂直であるという特性を持ちます。 境界球と比較すると元形状にフィッティングしやすく、 判定処理も OBB やカプセル型と比較して高速であるという特性を持ちます。 その反面、モデルが回転した場合に新たに大きさを再設定する必要があることや、 回転によって大きさが変化することなどから、 モデルが回転する場合には扱いづらい面があります。 モデルが方向ベクトルを変化させずに移動するような場合に適しています。
- 有向境界ボックス (Oriented Bounding Box, OBB)
  AABB と同じく直方体による境界ボリュームですが、 こちらはモデルの回転に伴ってボックスの向きも追従します。 境界ボリュームの挙動が想定しやすく扱いやすい特性を持ちますが、 判定処理は全ての境界ボリューム中もっとも重く、 多くのモデルがある状態で多用するとかなり全体の処理が重くなる可能性があります。
- カプセル型
  境界が円柱側面と半球によって構成されている境界ボリュームです。 数学的には、線分から一定距離以内にある点の集合となります。 この線分を本マニュアルでは「中心軸」と呼称します。 中心軸両端点を設定することがやや面倒ですが、 長細いモデルにもフィットしやすく、判定処理も OBB より高速なので、 使い勝手のよい境界ボリュームです。

参照
  fk_Model

## 関数詳解

## ◆ SetAABBMaxMin()

void FK_CLI::fk_Boundary::SetAABBMaxMin | ( | fk_Vector^ | max,
|  | fk_Vector^ | min )

軸平行境界ボックス (AABB) 最大最小設定メソッド

軸平行境界ボックス (AABB) の各成分の最大値と最小値を設定します。 各成分はグローバル座標系に対応します。 自動的に AABB のサイズを設定したい場合は fk_Model::AdjustAABB() を用いて下さい。

引数

  [in] | max | AABBの最大値側のベクトル
  [in] | min | AABBの最小値側のベクトル

参照
  AABB, AABBMax, AABBMin, BMode, fk_Model::AdjustAABB()

## ◆ SetOBBMaxMin()

void FK_CLI::fk_Boundary::SetOBBMaxMin | ( | fk_Vector^ | max,
|  | fk_Vector^ | min )

有向境界ボックス (OBB) 最大最小設定メソッド

有向境界ボックス (OBB) の各成分の最大値と最小値を設定します。 各成分はローカル座標系に対応します。 自動的に OBB のサイズを設定したい場合は fk_Model::AdjustOBB() を用いて下さい。

引数

  [in] | max | OBBの最大値側のベクトル
  [in] | min | OBBの最小値側のベクトル

参照
  OBB, OBBMax, OBBMin, BMode, fk_Model::AdjustOBB()

## ◆ SetCapsule()

void FK_CLI::fk_Boundary::SetCapsule | ( | fk_Vector^ | startPos,
|  | fk_Vector^ | endPos,
|  | double | radius )

カプセル型設定メソッド

カプセル型は、数学的には線分(中心軸)からある一定距離以内にある領域となります。 このメソッドは、中心軸の両端点と距離を設定することでカプセル型を規定するものです。 中心軸端点の位置ベクトルは、モデルのローカル座標系に対応します。 自動的にカプセル型のサイズを設定したい場合は fk_Model::AdjustCapsule() を用いて下さい。

引数

  [in] | startPos | 中心軸端点(始点側)の位置ベクトル
  [in] | endPos | 中心軸端点(終点側)の位置ベクトル
  [in] | radius | 中心軸からの領域規定距離

参照
  GetCapsuleRadius(), GetCapsuleLength(), GetCapsuleStartPos(), GetCapsuleEndPos(), BMode, fk_Model::AdjustCapsule()

## プロパティ詳解

## ◆ BMode

fk_BoundaryMode FK_CLI::fk_Boundary::BMode

getset

境界ボリューム選択プロパティ

このプロパティは、 干渉判定にどの境界ボリュームを利用するかを指定、参照するものです。 本プロパティの設定は各境界ボリュームの設定とは独立しており、 プロパティ設定によってモードを変更しても、 各境界ボリュームの大きさ等の設定は初期化されません。

覚え書き
  本プロパティで選択が有効となるのは、現バージョンでは干渉判定のみです。 衝突判定については、本プロパティでの設定に関わらず境界球の設定が用いられます。

参照
  fk_Model::IsInter()

## ◆ SphereRadius

double FK_CLI::fk_Boundary::SphereRadius

getset

境界球半径プロパティ

境界球半径の設定・参照を行います。 現在モデルに設定されている形状から、 自動的に境界球半径を設定したい場合は fk_Model::AdjustSphere() を用いて下さい。

参照
  SpherePos, BMode, fk_Model::AdjustSphere()

## ◆ SpherePos

fk_Vector^ FK_CLI::fk_Boundary::SpherePos

getset

境界球の中心座標をローカル座標系で設定・参照を行います。 現在モデルに設定されている形状から、 自動的に境界球中心を設定したい場合は fk_Model::AdjustSphere() を用いて下さい。

参照
  SphereRadius, BMode, fk_Model::AdjustSphere()

## ◆ AABB

fk_Vector^ FK_CLI::fk_Boundary::AABB

getset

軸平行境界ボックス (AABB) サイズプロパティ

軸平行境界ボックス (AABB) のサイズを設定・参照します。 サイズの各成分はグローバル座標系に対応します。 自動的に AABB のサイズを設定したい場合は fk_Model::AdjustAABB() を用いて下さい。

参照
  AABBMax, AABBMin, SetAABBMaxMin(), BMode, fk_Model::AdjustAABB(), fk_Vector

## ◆ AABBMax

fk_Vector^ FK_CLI::fk_Boundary::AABBMax

getset

軸平行境界ボックス (AABB) 最大値側プロパティ

軸平行境界ボックス (AABB) の最大値側を設定・参照します。 各成分はグローバル座標系に対応します。 自動的に AABB のサイズを設定したい場合は fk_Model::AdjustAABB() を用いて下さい。

参照
  AABB, AABBMin, SetAABBMaxMin(), BMode, fk_Model::AdjustAABB(), fk_Vector

## ◆ AABBMin

fk_Vector^ FK_CLI::fk_Boundary::AABBMin

getset

軸平行境界ボックス (AABB) 最小値側プロパティ

軸平行境界ボックス (AABB) の最小値側を設定・参照します。 各成分はグローバル座標系に対応します。 自動的に AABB のサイズを設定したい場合は fk_Model::AdjustAABB() を用いて下さい。

参照
  AABB, AABBMax, SetAABBMaxMin(), BMode, fk_Model::AdjustAABB(), fk_Vector

## ◆ OBB

fk_Vector^ FK_CLI::fk_Boundary::OBB

getset

有向境界ボックス (OBB) サイズプロパティ

有向境界ボックス (OBB) のサイズを設定・参照します。 サイズの各成分はモデルのローカル座標系に対応します。 自動的に OBB のサイズを設定したい場合は fk_Model::AdjustOBB() を用いて下さい。

参照
  BMode, fk_Model::AdjustOBB(), fk_Vector

## ◆ OBBMax

fk_Vector^ FK_CLI::fk_Boundary::OBBMax

getset

有向境界ボックス (OBB) 最大値側プロパティ

有向境界ボックス (OBB) の最大値側を設定・参照します。 各成分はモデルのローカル座標系に対応します。 自動的に OBB のサイズを設定したい場合は fk_Model::AdjustOBB() を用いて下さい。

参照
  OBB, OBBMin, SetOBBMaxMin, BMode, fk_Model::AdjustOBB(), fk_Vector

## ◆ OBBMin

fk_Vector^ FK_CLI::fk_Boundary::OBBMin

getset

有向境界ボックス (OBB) 最小値側プロパティ

有向境界ボックス (OBB) の最小値側を設定・参照します。 各成分はモデルのローカル座標系に対応します。 自動的に OBB のサイズを設定したい場合は fk_Model::AdjustOBB() を用いて下さい。

参照
  OBB, OBBMax, SetOBBMaxMin, BMode, fk_Model::AdjustOBB(), fk_Vector

## ◆ CapsuleRadius

double FK_CLI::fk_Boundary::CapsuleRadius

getset

カプセル型領域規定距離プロパティ

カプセル型の領域規定距離を設定・参照します。

参照
  CapsuleLength, CapsuleStart, CapsuleEnd, SetCapsule, fk_Model::AdjustCapsule()

## ◆ CapsuleLength

double FK_CLI::fk_Boundary::CapsuleLength

get

カプセル型中心軸長プロパティ

カプセル型中心軸長を参照します。

参照
  CapsuleRadius, CapsuleStart, CapsuleEnd, SetCapsule, fk_Model::AdjustCapsule()

## ◆ CapsuleStart

fk_Vector^ FK_CLI::fk_Boundary::CapsuleStart

getset

カプセル型中心軸始点プロパティ

カプセル型中心軸の始点を設定・参照します。

参照
  CapsuleRadius, CapsuleLength, CapsuleEnd, SetCapsule, fk_Model::AdjustCapsule()

## ◆ CapsuleEnd

fk_Vector^ FK_CLI::fk_Boundary::CapsuleEnd

getset

カプセル型中心軸終点プロパティ

カプセル型中心軸の終点を設定・参照します。

参照
  CapsuleRadius, CapsuleLength, CapsuleStart, SetCapsule, fk_Model::AdjustCapsule()

## ◆ BDraw

bool FK_CLI::fk_Boundary::BDraw

getset

境界ボリューム描画有無プロパティ

境界ボリュームに対し、描画の有無を設定・参照します。

参照
  BLineColor, BIntLineColor, BLineWidth

## ◆ BLineColor

fk_Color^ FK_CLI::fk_Boundary::BLineColor

getset

境界ボリューム非干渉描画色プロパティ

境界ボリューム描画の際に、 非干渉状態である場合での線色の設定・参照を行います。

参照
  BIntLineColor, BDraw, fk_Model::IsInter(), fk_Model::InterMode, fk_Color

## ◆ BIntLineColor

fk_Color^ FK_CLI::fk_Boundary::BIntLineColor

getset

境界ボリューム干渉状態描画色プロパティ

境界ボリューム描画の際に、 干渉状態である場合での線色の設定・参照を行います。

覚え書き
  この線色で描画される条件は、 fk_Model::InterMode による設定によって異なります。

参照
  BLineColor, BDraw, fk_Model::IsInter(), fk_Model::InterMode, fk_Color

## ◆ BLineWidth

double FK_CLI::fk_Boundary::BLineWidth

getset

境界ボリューム描画線幅プロパティ

境界ボリューム描画の際での、線幅の設定・参照を行います。

参照
  BDraw, BLineColor, BIntLineColor