FineKernelToolKit 3.1.0

- 総合概要
- 名前空間
- クラス
- ファイル

- クラス一覧
- クラス階層
- クラスメンバ

公開メンバ関数 | 全メンバ一覧
FK_CLI::fk_Model クラス

モデルを生成、管理するクラス [詳解]

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

## 公開メンバ関数
| fk_Model::fk_Model ()
| コンストラクタ [詳解]
| fk_Model::~fk_Model ()
| デストラクタ [詳解]
| fk_Model::!fk_Model ()
| ファイナライザ [詳解]
マテリアル属性除去メソッド
void | DeleteMaterial (void)
| 基本マテリアル削除メソッド [詳解]
void | DeletePointColor (void)
| 頂点色削除メソッド [詳解]
void | DeleteLineColor (void)
| 稜線色削除メソッド [詳解]
親子関係制御メソッド
bool | SetParent (fk_Model^ model, bool mode)
| 親モデル設定メソッド1 [詳解]
bool | SetParent (fk_Model^ model)
| 親モデル設定メソッド2 [詳解]
void | DeleteParent (bool mode)
| 親モデル解除メソッド1 [詳解]
void | DeleteParent (void)
| 親モデル解除メソッド2 [詳解]
bool | EntryChild (fk_Model^ model, bool mode)
| 子モデル設定メソッド1 [詳解]
bool | EntryChild (fk_Model^ model)
| 子モデル設定メソッド2 [詳解]
bool | DeleteChild (fk_Model^ model, bool mode)
| 子モデル解除メソッド1 [詳解]
bool | DeleteChild (fk_Model^ model)
| 子モデル解除メソッド2 [詳解]
void | DeleteChildren (bool mode)
| 全子モデル解除メソッド1 [詳解]
void | DeleteChildren (void)
| 全子モデル解除メソッド2 [詳解]
状態保存制御メソッド
void | SnapShot (void)
| 位置・姿勢保存メソッド [詳解]
bool | Restore (void)
| 位置・姿勢復元メソッド [詳解]
bool | Restore (double t)
| 位置・姿勢途中復元メソッド [詳解]
境界ボリューム自動設定メソッド
void | AdjustSphere (void)
| 境界球自動設定メソッド [詳解]
void | AdjustAABB (void)
| AABB 自動設定メソッド [詳解]
void | AdjustOBB (void)
| OBB 自動設定メソッド [詳解]
void | AdjustCapsule (fk_Vector^ S, fk_Vector^ E)
| 境界カプセル自動設定メソッド [詳解]
干渉判定・衝突判定メソッド
bool | IsInter (fk_Model^ model)
| モデル間干渉判定メソッド [詳解]
bool | IsCollision (fk_Model^ model, double% time)
| モデル間衝突判定メソッド [詳解]
void | ResetInter (void)
| 干渉継続状態初期化メソッド [詳解]
干渉自動停止制御メソッド
void | EntryInterModel (fk_Model^ model)
| 干渉自動停止モデル登録メソッド [詳解]
void | DeleteInterModel (fk_Model^ model)
| 干渉自動停止モデル解除メソッド [詳解]
void | ClearInterModel (void)
| 干渉自動停止モデル初期化メソッド [詳解]
回転制御メソッド
bool | GlRotate (fk_Vector^ origin, fk_Axis axis, double theta)
| グローバル座標系座標軸回転メソッド1 [詳解]
bool | GlRotate (double x, double y, double z, fk_Axis axis, double theta)
| グローバル座標系座標軸回転メソッド2 [詳解]
bool | GlRotate (fk_Vector^ A, fk_Vector^ B, double theta)
| グローバル座標系任意軸回転メソッド1 [詳解]
bool | GlRotate (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
| グローバル座標系任意軸回転メソッド2 [詳解]
bool | LoRotate (fk_Vector^ origin, fk_Axis axis, double theta)
| ローカル座標系座標軸回転メソッド1 [詳解]
bool | LoRotate (double x, double y, double z, fk_Axis axis, double theta)
| ローカル座標系座標軸回転メソッド2 [詳解]
bool | LoRotate (fk_Vector^ A, fk_Vector^ B, double theta)
| ローカル座標系任意軸回転メソッド1 [詳解]
bool | LoRotate (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
| ローカル座標系任意軸回転メソッド2 [詳解]
bool | GlRotateWithVec (fk_Vector^ origin, fk_Axis axis, double theta)
| グローバル座標系座標軸回転(姿勢付き)メソッド1 [詳解]
bool | GlRotateWithVec (double x, double y, double z, fk_Axis axis, double theta)
| グローバル座標系座標軸回転(姿勢付き)メソッド2 [詳解]
bool | GlRotateWithVec (fk_Vector^ A, fk_Vector^ B, double theta)
| グローバル座標系任意軸回転(姿勢付き)メソッド1 [詳解]
bool | GlRotateWithVec (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
| グローバル座標系任意軸回転(姿勢付き)メソッド2 [詳解]
bool | LoRotateWithVec (fk_Vector^ origin, fk_Axis axis, double theta)
| ローカル座標系座標軸回転(姿勢付き)メソッド1 [詳解]
bool | LoRotateWithVec (double x, double y, double z, fk_Axis axis, double theta)
| ローカル座標系座標軸回転(姿勢付き)メソッド2 [詳解]
bool | LoRotateWithVec (fk_Vector^ A, fk_Vector^ B, double theta)
| ローカル座標系任意軸回転(姿勢付き)メソッド1 [詳解]
bool | LoRotateWithVec (double Ax, double Ay, double Az, double Bx, double By, double Bz, double theta)
| ローカル座標系任意軸回転(姿勢付き)メソッド2 [詳解]
位置制御メソッド
bool | GlTranslate (fk_Vector^ v)
| グローバル座標系平行移動メソッド1 [詳解]
bool | GlTranslate (double x, double y, double z)
| グローバル座標系平行移動メソッド2 [詳解]
bool | LoTranslate (fk_Vector^ v)
| ローカル座標系平行移動メソッド1 [詳解]
bool | LoTranslate (double x, double y, double z)
| ローカル座標系平行移動メソッド2 [詳解]
bool | GlMoveTo (fk_Vector^ p)
| グローバル座標系位置指定メソッド1 [詳解]
bool | GlMoveTo (double x, double y, double z)
| グローバル座標系位置指定メソッド2 [詳解]
基底クラス FK_CLI::fk_Boundary に属する継承公開メンバ関数
void | SetCapsule (fk_Vector^ startPos, fk_Vector^ endPos, double radius)
| カプセル型設定メソッド [詳解]
double | GetCapsuleRadius (void)
| カプセル型領域規定距離取得メソッド [詳解]
double | GetCapsuleLength (void)
| カプセル型中心軸長取得メソッド [詳解]
fk_Vector^ | GetCapsuleStartPos (void)
| カプセル型中心軸始点取得メソッド [詳解]
fk_Vector^ | GetCapsuleEndPos (void)
| カプセル型中心軸終点取得メソッド [詳解]
基底クラス 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 [詳解]

## プロパティ
基本情報プロパティ
unsigned int | ID`[get]`
| ID プロパティ [詳解]
fk_Shape^ | Shape`[get, set]`
| 形状プロパティ [詳解]
bool | PickMode`[get, set]`
| ピックモードプロパティ [詳解]
fk_Model^ | Parent`[get, set]`
| 親モデルプロパティ [詳解]
色・マテリアル関連プロパティ
fk_Material^ | Material`[get, set]`
| マテリアルプロパティ [詳解]
fk_Material^ | InhMaterial`[get]`
| 継承マテリアルプロパティ [詳解]
fk_Color^ | PointColor`[get, set]`
| 頂点色プロパティ [詳解]
fk_Color^ | InhPointColor`[get]`
| 継承頂点色プロパティ [詳解]
fk_Color^ | LineColor`[get, set]`
| 稜線色プロパティ [詳解]
fk_Color^ | InhLineColor`[get]`
| 継承稜線色プロパティ [詳解]
double | PointSize`[get, set]`
| 頂点描画サイズプロパティ [詳解]
double | LineWidth`[get, set]`
| 稜線描画幅プロパティ [詳解]
描画制御関連プロパティ
fk_DrawMode | DrawMode`[get, set]`
| 描画モードプロパティ [詳解]
fk_MaterialMode | MaterialMode`[get, set]`
| マテリアルモードプロパティ [詳解]
bool | SmoothMode`[get, set]`
| スムースモードプロパティ [詳解]
bool | ReverseDrawMode`[get, set]`
| 描画順序制御プロパティ [詳解]
fk_DepthMode | DepthMode`[get, set]`
| 前後関係制御プロパティ [詳解]
fk_BlendMode | BlendMode`[get, set]`
| ブレンドモード設定プロパティ [詳解]
fk_BlendFactor | BlendSrcFactor`[get, set]`
| ブレンド時の入力ピクセル係数設定プロパティ [詳解]
fk_BlendFactor | BlendDstFactor`[get, set]`
| ブレンド時の出力ピクセル係数設定プロパティ [詳解]
位置・姿勢・行列関連プロパティ
fk_Vector^ | InhPosition`[get]`
| 継承位置ベクトルプロパティ [詳解]
fk_Vector^ | InhVec`[get]`
| 継承方向ベクトルプロパティ [詳解]
fk_Vector^ | InhUpvec`[get]`
| 継承アップベクトルプロパティ [詳解]
fk_Angle^ | InhAngle`[get]`
| 継承オイラー角参照メソッド [詳解]
double | InhScale`[get]`
| 継承全体倍率プロパティ [詳解]
fk_Matrix^ | InhMatrix`[get]`
| 継承変換行列プロパティ [詳解]
fk_Matrix^ | InhInvMatrix`[get]`
| 継承逆変換行列プロパティ [詳解]
fk_Matrix^ | InhBaseMatrix`[get]`
| 継承移動・回転要素変換行列プロパティ [詳解]
fk_Matrix^ | InhInvBaseMatrix`[get]`
| 継承移動・回転要素逆変換行列プロパティ [詳解]
干渉・衝突判定関連プロパティ
bool | InterMode`[get, set]`
| 干渉継続モード設定メソッド [詳解]
bool | InterStatus`[get]`
| 干渉継続状態プロパティ [詳解]
bool | InterStopMode`[get, set]`
| 干渉自動停止モードプロパティ [詳解]
基底クラス FK_CLI::fk_Boundary に属する継承プロパティ
fk_BoundaryMode | BMode`[get, set]`
| 境界ボリューム選択プロパティ [詳解]
double | SphereRadius`[get, set]`
| 境界球半径プロパティ [詳解]
fk_Vector^ | AABB`[get, set]`
| 軸平行境界ボックス (AABB) サイズプロパティ [詳解]
fk_Vector^ | OBB`[get, set]`
| 有向境界ボックス (OBB) サイズプロパティ [詳解]
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 における「モデル」とは、位置や方向を持ったオブジェクトのことを指します。 利用者は、 このクラスを通じてカメラを含むオブジェクトの位置や姿勢を制御していきます。 従って、このクラスは FK システムにおいて最も中心的な存在であると言えます。 位置や姿勢を制御するためのメソッドの多くは、 fk_MatrixAdmin クラスから継承しています。 (ただし、後述する「親子関係」に関連する機能は本クラス自体が持っています。) fk_MatrixAdmin クラスの説明も合わせて参照して下さい。

FK において、モデルと形状は別の存在として扱います。 形状は別のクラスで作成しておき、 モデルに対して形状をリンクするという考え方です。 このような設計になっている利点は、 まず第1に1つのモデルが複数の形状を使い分けられるということがあります。 第2に、1つの形状を複数のモデルで共有することでメモリ利用量を削減できます。 形状については fk_Shape クラスおよびその派生クラスを参照して下さい。

位置や姿勢の制御と共に、このクラスの重要な機能の1つが「親子関係」です。 あるモデルを別のモデルに「子モデル」として登録したとします。 親モデルの位置や姿勢を制御すると、 子モデルの形状は親モデル内の形状と同じように追従するようになります。 例えば、車を車体モデルとタイヤモデルで別々に作成し、 タイヤモデルを車体モデルの子モデルとして登録しておけば、 車体モデルの位置移動にあわせてタイヤモデルも位置関係を維持しながら 一緒に移動します。 マテリアルや頂点色、稜線色については、 何も設定しない場合は親モデルの設定が用いられます。 それぞれのモデルにマテリアルや色属性を設定した場合、 そのモデルについては個々の設定が利用されるようになります。

また、モデル同士の干渉判定や衝突判定を検出することができます。 干渉・衝突判定を行うには、 まず「境界ボリューム」と呼ばれるモデルを覆う領域を設定します。 その後、その境界ボリューム同士が干渉部分や衝突時間の検出を行うことで実現します。 本マニュアルにおいて、「干渉判定」と「衝突判定」は以下のような意味を持ちます。

- 干渉判定:
  ある時点において、モデル同士に干渉部分があるかどうかを判定すること。
- 衝突判定:
  2つのモデルが時刻 t0 から t1 まで等速度直線運動をしていたと仮定した場合に、 途中で衝突が起こったかどうかを判定すること。

本クラスのメソッドでは、以下のような機能を提供します。

- Shape プロパティにて形状を設定した後に自動的に境界ボリュームのサイズを設定する機能。
- 干渉判定や衝突判定を行う機能。
- 登録しておいたモデルと干渉した場合に自動的に停止する機能。

干渉判定は現在すべての種類の境界ボリュームで対応していますが、 同じ種類同士である必要があります。 衝突判定については、現在は境界球のみで対応しています。 境界ボリュームの種類に関する解説や、適用する境界ボリュームの選択については fk_Boundary クラスのリファレンスを参照して下さい。

参照
  fk_MatrixAdmin, fk_Boundary, fk_Shape, fk_Scene, fk_DisplayLink

## 構築子と解体子

FK_CLI::fk_Model::fk_Model::~fk_Model | ( |  | ) |

デストラクタ

FK_CLI::fk_Model::fk_Model::!fk_Model | ( |  | ) |

ファイナライザ

## 関数詳解

FK_CLI::fk_Model::fk_Model::fk_Model | ( |  | ) |

コンストラクタ

void FK_CLI::fk_Model::DeleteMaterial | ( | void |  | ) |

基本マテリアル削除メソッド

基本マテリアル設定を削除します。 これにより、親モデルが存在する場合は親モデルの基本マテリアルを継承します。 親モデルが存在しない場合は、システムのデフォルトマテリアルが採用されます。

参照
  Material, InhMaterial

void FK_CLI::fk_Model::DeletePointColor | ( | void |  | ) |

頂点色削除メソッド

頂点色設定を削除します。 これにより、親モデルが存在する場合は親モデルの頂点色を継承します。 親モデルが存在しない場合は、システムのデフォルト頂点色が採用されます。

参照
  PointColor, InhPointColor

void FK_CLI::fk_Model::DeleteLineColor | ( | void |  | ) |

稜線色削除メソッド

稜線色設定を削除します。 これにより、親モデルが存在する場合は親モデルの稜線色を継承します。 親モデルが存在しない場合は、システムのデフォルト稜線色が採用されます。

参照
  LineColor, InhLineColor

bool FK_CLI::fk_Model::SetParent | ( | fk_Model^ | model,
|  | bool | mode
| ) |  |

親モデル設定メソッド1

親モデルを設定します。 親モデルは 1 個しか設定できません。 前に設定されていた場合は、前のモデル設定は破棄されます。

引数

  [in] | model | 親モデルインスタンスのポインタ
  [in] | mode | true の場合、現在のグローバル座標系の位置と姿勢を、 親モデル設定後も保持します。 false の場合は、当モデルでの位置と姿勢を親モデルからの 相対的な位置、姿勢として扱います。 そのため、設定後にグローバル座標系での位置や姿勢は変化することになります。 この引数を省略した場合は false と同様の挙動となります。

戻り値
  設定に成功すれば true を、失敗すれば false を返します。

参照
  Parent, DeleteParent(), EntryChild()

bool FK_CLI::fk_Model::SetParent | ( | fk_Model^ | model | ) |

親モデル設定メソッド2

親モデルを設定します。 親モデルは 1 個しか設定できません。 前に設定されていた場合は、前のモデル設定は破棄されます。

なお本メソッドは、 SetParent(fk_Model^, bool) において、 第2引数に false を入力した場合と同義となります。 また、 Parent プロパティに model を代入することとも同義です。

引数

  [in] | model | 親モデルインスタンスのポインタ

戻り値
  設定に成功すれば true を、失敗すれば false を返します。

参照
  Parent, DeleteParent(), EntryChild()

void FK_CLI::fk_Model::DeleteParent | ( | bool | mode | ) |

親モデル解除メソッド1

親モデルの設定を解除します。

引数

  [in] | mode | true の場合、現在のグローバル座標系の位置と姿勢を、 親モデル解除後も保持します。 false の場合は、親モデルからの相対的な位置と姿勢を、 解除後のグローバル座標系に設定します。

参照
  SetParent(fk_Model^, bool), Parent, DeleteChild()

void FK_CLI::fk_Model::DeleteParent | ( | void |  | ) |

親モデル解除メソッド2

親モデルの設定を解除します。 本メソッドは、 DeleteParent(bool) において、 引数に false を入力した場合と同義となります。

参照
  SetParent(fk_Model^, bool), DeleteParent(bool), Parent, DeleteChild()

bool FK_CLI::fk_Model::EntryChild | ( | fk_Model^ | model,
|  | bool | mode
| ) |  |

子モデル設定メソッド1

子モデルを設定します。 子モデルは複数持つことが可能なので、 既に子モデルが登録されている場合でも、その設定は破棄されません。

引数

  [in] | model | 子モデルインスタンスのポインタ
  [in] | mode | true の場合、子モデルの現在のグローバル座標系の位置と姿勢を、 設定後も保持します。 false の場合は、子モデルでの位置と姿勢を当モデルからの 相対的な位置、姿勢として扱います。 そのため、設定後にグローバル座標系での位置や姿勢は変化することになります。 この引数を省略した場合は false と同様の挙動となります。

戻り値
  設定に成功すれば true を、失敗すれば false を返します。

参照
  Parent, SetParent(), DeleteChild(), DeleteChildren()

bool FK_CLI::fk_Model::EntryChild | ( | fk_Model^ | model | ) |

子モデル設定メソッド2

子モデルを設定します。 子モデルは複数持つことが可能なので、 既に子モデルが登録されている場合でも、その設定は破棄されません。

なお、本メソッドは EntryChild(fk_Model^, bool) において、 第2引数に false を入力した場合と同義となります。

引数

  [in] | model | 子モデルインスタンスのポインタ

戻り値
  設定に成功すれば true を、失敗すれば false を返します。

参照
  Parent, SetParent(), DeleteChild(), DeleteChildren()

bool FK_CLI::fk_Model::DeleteChild | ( | fk_Model^ | model,
|  | bool | mode
| ) |  |

子モデル解除メソッド1

子モデルの設定を解除します。

引数

  [in] | model | 子モデルインスタンスのポインタ。 もし model が子モデルの中に存在しない場合は、false を返します。
  [in] | mode | true の場合、子モデルのグローバル座標系の位置と姿勢を、 解除後も保持します。 false の場合は、親モデルからの相対的な位置と姿勢を、 解除後のグローバル座標系に設定します。 この引数を省略した場合は false と同様の挙動となります。

戻り値
  解除に成功すれば true を、失敗すれば false を返します。

参照
  EntryChild(), DeleteChildren()

bool FK_CLI::fk_Model::DeleteChild | ( | fk_Model^ | model | ) |

子モデル解除メソッド2

子モデルの設定を解除します。

なお、本メソッドは DeleteChild(fk_Model^, bool) において、 第2引数に false を入力した場合と同義となります。

引数

  [in] | model | 子モデルインスタンスのポインタ。 もし model が子モデルの中に存在しない場合は、false を返します。

戻り値
  解除に成功すれば true を、失敗すれば false を返します。

参照
  EntryChild(), DeleteChildren()

void FK_CLI::fk_Model::DeleteChildren | ( | bool | mode | ) |

全子モデル解除メソッド1

当モデルの全ての子モデルの設定を解除します。

引数

  [in] | mode | true の場合、子モデルのグローバル座標系の位置と姿勢を、 解除後も保持します。 false の場合は、親モデルからの相対的な位置と姿勢を、 解除後のグローバル座標系に設定します。 この引数を省略した場合は false と同様の挙動となります。

参照
  EntryChild(), DeleteChild()

void FK_CLI::fk_Model::DeleteChildren | ( | void |  | ) |

全子モデル解除メソッド2

当モデルの全ての子モデルの設定を解除します。 本メソッドは、 DeleteChildren(bool) において、 引数に false を入力した場合と同義となります。

参照
  EntryChild(), DeleteChild()

void FK_CLI::fk_Model::SnapShot | ( | void |  | ) |

位置・姿勢保存メソッド

現時点でのモデルの位置と姿勢を保存します。 Restore() メソッドを用いることで復元します。

参照
  Restore(void), Restore(double), InterStopMode

bool FK_CLI::fk_Model::Restore | ( | void |  | ) |

位置・姿勢復元メソッド

SnapShot() メソッドによって保存した位置・姿勢を復元します。

戻り値
  復元に成功すれば true を、失敗すれば false を返します。

参照
  Restore(double), SnapShot(), InterStopMode

bool FK_CLI::fk_Model::Restore | ( | double | t | ) |

位置・姿勢途中復元メソッド

SnapShot() メソッドによって保存した位置・姿勢に対し、 現在の位置・姿勢と線形補間した状態にします。

引数

  [in] | t | 線形補間パラメータ。 0 を SnapShot() メソッドによる保存時、 1 を現時点とし、 与えられた実数によって線形補間した位置と姿勢に設定します。

戻り値
  設定に成功すれば true を、失敗すれば false を返します。

参照
  SnapShot(), Restore(void), IsCollision()

void FK_CLI::fk_Model::AdjustSphere | ( | void |  | ) |

境界球自動設定メソッド

このメソッドは、 境界ボリュームである境界球の半径を自動的に設定するものです。 具体的には、モデルの中心から形状の最遠点となる点と中心との距離を半径とします。 その結果、すべての形状上の点は境界球の内側に入ることになります。 境界球に関する詳細は fk_Boundary クラスを参照して下さい。

覚え書き
  fk_Model::Shape プロパティに別形状を設定した場合や、設定した形状を fk_IndexFaceSet::MoveVPosition() などのメソッドによって変形した場合でも、 境界球半径は自動的に変化しません。 形状の全ての部分が境界球内部に入ることを保証するためには、 形状変化後に本メソッドを呼ぶ必要があります。

参照
  AdjustAABB(), AdjustOBB(), AdjustCapsule(), IsInter(), IsCollision(), fk_Boundary::BMode, fk_Boundary::SphereRadius

void FK_CLI::fk_Model::AdjustAABB | ( | void |  | ) |

AABB 自動設定メソッド

このメソッドは、 境界ボリュームである AABB (軸平行境界ボックス) の大きさを自動的に設定するものです。 すべての頂点が AABB の内部と入る条件を満たす最小の大きさが設定されます。 AABB に関する詳細は fk_Boundary クラスを参照して下さい。

覚え書き
  fk_Model::Shape プロパティに別形状を設定した場合や、設定した形状を fk_IndexFaceSet::MoveVPosition() などのメソッドによって変形した場合でも、 AABB の大きさは自動的に変化しません。 形状の全ての部分が AABB 内部に入ることを保証するためには、 形状変化後に本メソッドを呼ぶ必要があります。 また、AABB はその性質上、 モデルが回転した場合には形状が AABB の外側にはみ出る可能性がありますので、 モデルが回転した後も形状が AABB 内部にあることを保証するには、 回転した後に本メソッドを呼ぶ必要があります。

参照
  AdjustSphere(), AdjustOBB(), AdjustCapsule(), IsInter(), IsCollision(), fk_Boundary::BMode, fk_Boundary:AABB

void FK_CLI::fk_Model::AdjustOBB | ( | void |  | ) |

OBB 自動設定メソッド

このメソッドは、 境界ボリュームである OBB (有向境界ボックス) の大きさを自動的に設定するものです。 すべての頂点が OBB の内部と入る条件を満たす最小の大きさが設定されます。 OBB に関する詳細は fk_Boundary クラスを参照して下さい。

覚え書き
  fk_Model::Shape プロパティに別形状を設定した場合や、設定した形状を fk_IndexFaceSet::MoveVPosition() などのメソッドによって変形した場合でも、 OBB の大きさは自動的に変化しません。 形状の全ての部分が OBB 内部に入ることを保証するためには、 形状変化後に本メソッドを呼ぶ必要があります。

参照
  AdjustSphere(), AdjustAABB(), AdjustCapsule(), IsInter(), IsCollision(), fk_Boundary::BMode, fk_Boundary::OBB

void FK_CLI::fk_Model::AdjustCapsule | ( | fk_Vector^ | S,
|  | fk_Vector^ | E
| ) |  |

境界カプセル自動設定メソッド

このメソッドは、 境界ボリュームである境界カプセルの大きさを自動的に設定するものです。 すべての頂点が境界カプセルの内部と入る条件を満たす最小の大きさが設定されます。 境界カプセルに関する詳細は fk_Boundary クラスを参照して下さい。

覚え書き
  fk_Model::Shape プロパティに別形状を設定した場合や、設定した形状を fk_IndexFaceSet::MoveVPosition() などのメソッドによって変形した場合でも、 境界カプセルの大きさは自動的に変化しません。 形状の全ての部分が境界カプセル内部に入ることを保証するためには、 形状変化後に本メソッドを呼ぶ必要があります。

引数

  [in] | S | 中心軸始点位置ベクトル
  [in] | E | 中心軸終点位置ベクトル

参照
  AdjustSphere(), AdjustAABB(), AdjustOBB(), IsInter(), IsCollision(), fk_Boundary::BMode, fk_Boundary::SetCapsule(), fk_Boundary::GetCapsuleRadius(), fk_Boundary::GetCapsuleLength(), fk_Boundary::GetCapsuleStartPos(), fk_Boundary::GetCapsuleEndPos()

bool FK_CLI::fk_Model::IsInter | ( | fk_Model^ | model | ) |

モデル間干渉判定メソッド

このメソッドは、別モデルとの干渉判定を行います。 干渉判定に用いられる境界ボリュームの種類は、 fk_Boundary::BMode に設定されているものが用いられます。 相手モデル側で別の種類が設定されていた場合でも、 このメソッドを呼び出しているインスタンス側の設定が優先されます。 従って、相手モデル側の境界ボリュームも適切に設定しておく必要があります。

覚え書き
  「干渉判定」と「衝突判定」の違いに関しては、 本クラスの概要を参照して下さい。

引数

  [in] | model | 干渉判定を行うモデル

戻り値
  干渉している場合 true を、していない場合 false を返します。

参照
  AdjustSphere(), AdjustAABB(), AdjustOBB(), AdjustCapsule(), IsCollision(), SnapShot(), Restore(void), InterStopMode, EntryInterModel(), fk_Boundary::BMode, fk_Boundary::SetCapsule(), fk_Boundary::GetCapsuleRadius(), fk_Boundary::GetCapsuleLength(), fk_Boundary::GetCapsuleStartPos(), fk_Boundary::GetCapsuleEndPos()

bool FK_CLI::fk_Model::IsCollision | ( | fk_Model^ | model,
|  | double% | time
| ) |  |

モデル間衝突判定メソッド

このメソッドは、別モデルとの衝突判定を行います。 衝突判定を行うには、まずそれぞれのモデルにおいて SnapShot() メソッドによって衝突判定を行う初期状態を設定しておく必要があります。 その状態から現在の位置まで、両モデルが等速度直線運動していると想定し、 その間に衝突が発生したかどうかを検出します。

なお、本メソッドを利用する際には事前に境界球の半径を適切に設定しておく必要があります。 現在このメソッドは境界球による判定のみが有効となります。 fk_Boundary::BMode によって境界ボリュームが別の種類に設定されていた場合でも、 境界球の情報のみが用いられます。

なお、衝突判定は SnapShot() を呼ぶ以前や現時点以降を含めての検出となるので、 SnapShot() を呼んだ時点から現時点までの間に衝突が起こったかどうかを判定するには、 第二引数の衝突時間を考慮する必要があります。

覚え書き
  「干渉判定」と「衝突判定」の違いに関しては、 本クラスの概要を参照して下さい。

引数

  [in] | model | 衝突判定を行うモデル
  [out] | time | SnapShot() が呼ばれた時刻を 0、 現時点の時刻を 1 とした場合の、衝突時間を検出します。 本メソッドの返値が true であった場合でも、 この値が 0 から 1 の間にないときは、 衝突が起こっていないことになりますので、注意して下さい。

戻り値
  両モデルが等速度直線運動をすると想定した場合に、 いずれかの時刻で衝突が起きる場合 true を、衝突しない場合は false を返します。 ただし、第二引数の値が 0 から 1 の間にない場合は、 SnapShot() を呼んだ時点から現時点までの間においては衝突が起こっていないことになります。

参照
  AdjustSphere(), AdjustAABB(), AdjustOBB(), AdjustCapsule(), IsInter(), SnapShot(), Restore(double), fk_Boundary::BMode, fk_Boundary::SetCapsule(), fk_Boundary::GetCapsuleRadius(), fk_Boundary::GetCapsuleLength(), fk_Boundary::GetCapsuleStartPos(), fk_Boundary::GetCapsuleEndPos()

void FK_CLI::fk_Model::ResetInter | ( | void |  | ) |

干渉継続状態初期化メソッド

干渉継続モードによる干渉検出状態を初期化します。 干渉継続モードについては fk_Model::InterMode プロパティの解説を参照して下さい。 このメソッドが呼ばれた以降、再び IsInter() による干渉が検出されるまでは、 InterStatus プロパティは false のままとなります。

参照
  IsInter(), InterMode, InterStatus

void FK_CLI::fk_Model::EntryInterModel | ( | fk_Model^ | model | ) |

干渉自動停止モデル登録メソッド

干渉自動停止モードの対象となるモデルを登録します。 干渉自動停止モードについては、 fk_Model::InterStopMode の解説を参照して下さい。

覚え書き
  本メソッドで登録したモデルのインスタンスを、 DeleteInterModel() や ClearInterModel() で解除する前に消去した場合、 動作は保証されません。

引数

  [in] | model | 登録モデルインスタンス

参照
  InterStopMode, DeleteInterModel(), ClearInterModel()

void FK_CLI::fk_Model::DeleteInterModel | ( | fk_Model^ | model | ) |

干渉自動停止モデル解除メソッド

干渉自動停止モードの対象となっていたモデルの解除を行います。 干渉自動停止モードについては、 fk_Model::InterStopMode の解説を参照して下さい。 もし入力モデルが登録されていなかった場合は、なにも起こりません。

引数

  [in] | model | 解除モデルインスタンス

参照
  InterStopMode, EntryInterModel(), ClearInterModel()

void FK_CLI::fk_Model::ClearInterModel | ( | void |  | ) |

干渉自動停止モデル初期化メソッド

干渉自動停止モード用に登録されていた全てのモデルを解除します。

参照
  InterStopMode, EntryInterModel(), DeleteInterModel()

bool FK_CLI::fk_Model::GlRotate | ( | fk_Vector^ | origin,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

グローバル座標系座標軸回転メソッド1

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、origin を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は GlRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は LoRotate() を利用して下さい。

引数

  [in] | origin | グローバル座標系での回転軸上の点
  [in] | axis | 回転軸に平行な軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  GlRotateWithVec(fk_Vector^, fk_Axis, double), LoRotate(fk_Vector^, fk_Axis, double)

bool FK_CLI::fk_Model::GlRotate | ( | double | x,
|  | double | y,
|  | double | z,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

グローバル座標系座標軸回転メソッド2

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(x, y, z) を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は GlRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は LoRotate() を利用して下さい。

引数

  [in] | x | グローバル座標系での回転軸上の点のx成分
  [in] | y | グローバル座標系での回転軸上の点のy成分
  [in] | z | グローバル座標系での回転軸上の点のz成分
  [in] | axis | 回転軸に平行な軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  GlRotateWithVec(double, double, double, fk_Axis, double), LoRotate(double, double, double, fk_Axis, double)

bool FK_CLI::fk_Model::GlRotate | ( | fk_Vector^ | A,
|  | fk_Vector^ | B,
|  | double | theta
| ) |  |

グローバル座標系任意軸回転メソッド1

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は GlRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は LoRotate() を利用して下さい。

引数

  [in] | A | 回転軸上の1点。B と一致してはいけません。
  [in] | B | 回転軸上の1点。A と一致してはいけません。
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotateWithVec(fk_Vector^, fk_Vector^, double), LoRotate(fk_Vector^, fk_Vector^, double)

bool FK_CLI::fk_Model::GlRotate | ( | double | Ax,
|  | double | Ay,
|  | double | Az,
|  | double | Bx,
|  | double | By,
|  | double | Bz,
|  | double | theta
| ) |  |

グローバル座標系任意軸回転メソッド2

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は GlRotateWithVec() を利用して下さい。 ローカル座標系で回転移動を行いたい場合は LoRotate() を利用して下さい。

引数

  [in] | Ax | 回転軸上の1点 A の x 成分
  [in] | Ay | 回転軸上の1点 A の y 成分
  [in] | Az | 回転軸上の1点 A の z 成分
  [in] | Bx | 回転軸上の1点 B の x 成分
  [in] | By | 回転軸上の1点 B の y 成分
  [in] | Bz | 回転軸上の1点 B の z 成分
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotateWithVec(double, double, double, double, double, double, double), LoRotate(double, double, double, double, double, double, double)

bool FK_CLI::fk_Model::LoRotate | ( | fk_Vector^ | origin,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

ローカル座標系座標軸回転メソッド1

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) origin を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は LoRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は GlRotate() を利用して下さい。

引数

  [in] | origin | ローカル座標系での回転軸上の点
  [in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  GlRotate(fk_Vector^, fk_Axis, double), LoRotateWithVec(fk_Vector^, fk_Axis, double)

bool FK_CLI::fk_Model::LoRotate | ( | double | x,
|  | double | y,
|  | double | z,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

ローカル座標系座標軸回転メソッド2

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) (x, y, z) を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は LoRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は GlRotate() を利用して下さい。

引数

  [in] | x | ローカル座標系での回転軸上の点のx成分
  [in] | y | ローカル座標系での回転軸上の点のy成分
  [in] | z | ローカル座標系での回転軸上の点のz成分
  [in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  GlRotate(double, double, double, fk_Axis, double), LoRotateWithVec(double, double, double, fk_Axis, double)

bool FK_CLI::fk_Model::LoRotate | ( | fk_Vector^ | A,
|  | fk_Vector^ | B,
|  | double | theta
| ) |  |

ローカル座標系任意軸回転メソッド1

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は LoRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は GlRotate() を利用して下さい。

引数

  [in] | A | ローカル座標系における回転軸上の1点。B と一致してはいけません。
  [in] | B | ローカル座標系における回転軸上の1点。A と一致してはいけません。
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotateWithVec(fk_Vector^, fk_Vector^, double), LoRotate(fk_Vector^, fk_Vector^, double)

bool FK_CLI::fk_Model::LoRotate | ( | double | Ax,
|  | double | Ay,
|  | double | Az,
|  | double | Bx,
|  | double | By,
|  | double | Bz,
|  | double | theta
| ) |  |

ローカル座標系任意軸回転メソッド2

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) (Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは位置のみを回転させるもので、姿勢は回転しません。 姿勢の回転も伴いたい場合は LoRotateWithVec() を利用して下さい。 グローバル座標系で回転移動を行いたい場合は GlRotate() を利用して下さい。

引数

  [in] | Ax | ローカル座標系における回転軸上の1点 A の x 成分
  [in] | Ay | ローカル座標系における回転軸上の1点 A の y 成分
  [in] | Az | ローカル座標系における回転軸上の1点 A の z 成分
  [in] | Bx | ローカル座標系における回転軸上の1点 B の x 成分
  [in] | By | ローカル座標系における回転軸上の1点 B の y 成分
  [in] | Bz | ローカル座標系における回転軸上の1点 B の z 成分
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotateWithVec(double, double, double, double, double, double, double), LoRotate(double, double, double, double, double, double, double)

bool FK_CLI::fk_Model::GlRotateWithVec | ( | fk_Vector^ | origin,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

グローバル座標系座標軸回転(姿勢付き)メソッド1

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、origin を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は GlRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 LoRotateWithVec() を利用して下さい。

引数

  [in] | origin | グローバル座標系での回転軸上の点
  [in] | axis | 回転軸に平行な軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  GlRotate(fk_Vector^, fk_Axis, double), LoRotateWithVec(fk_Vector^, fk_Axis, double)

bool FK_CLI::fk_Model::GlRotateWithVec | ( | double | x,
|  | double | y,
|  | double | z,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

グローバル座標系座標軸回転(姿勢付き)メソッド2

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(x, y, z) を通り、 axis で指定した座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は GlRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 LoRotateWithVec() を利用して下さい。

引数

  [in] | x | グローバル座標系での回転軸上の点のx成分
  [in] | y | グローバル座標系での回転軸上の点のy成分
  [in] | z | グローバル座標系での回転軸上の点のz成分
  [in] | axis | 回転軸に平行な軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  GlRotate(double, double, double, fk_Axis, double), LoRotateWithVec(double, double, double, fk_Axis, double)

bool FK_CLI::fk_Model::GlRotateWithVec | ( | fk_Vector^ | A,
|  | fk_Vector^ | B,
|  | double | theta
| ) |  |

グローバル座標系任意軸回転(姿勢付き)メソッド1

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は GlRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 LoRotateWithVec() を利用して下さい。

引数

  [in] | A | 回転軸上の1点。B と一致してはいけません。
  [in] | B | 回転軸上の1点。A と一致してはいけません。
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotate(fk_Vector^, fk_Vector^, double), LoRotateWithVec(fk_Vector^, fk_Vector^, double)

bool FK_CLI::fk_Model::GlRotateWithVec | ( | double | Ax,
|  | double | Ay,
|  | double | Az,
|  | double | Bx,
|  | double | By,
|  | double | Bz,
|  | double | theta
| ) |  |

グローバル座標系任意軸回転(姿勢付き)メソッド2

モデルの位置を、グローバル座標系によって回転した場所に移動します。 回転軸は、(Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は GlRotate() を利用して下さい。 ローカル座標系で回転移動(姿勢付き)を行いたい場合は、 LoRotateWithVec() を利用して下さい。

引数

  [in] | Ax | 回転軸上の1点 A の x 成分
  [in] | Ay | 回転軸上の1点 A の y 成分
  [in] | Az | 回転軸上の1点 A の z 成分
  [in] | Bx | 回転軸上の1点 B の x 成分
  [in] | By | 回転軸上の1点 B の y 成分
  [in] | Bz | 回転軸上の1点 B の z 成分
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotate(double, double, double, double, double, double, double), LoRotateWithVec(double, double, double, double, double, double, double)

bool FK_CLI::fk_Model::LoRotateWithVec | ( | fk_Vector^ | origin,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

ローカル座標系座標軸回転(姿勢付き)メソッド1

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) origin を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は LoRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 GlRotateWithVec() を利用して下さい。

引数

  [in] | origin | ローカル座標系での回転軸上の点
  [in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  LoRotate(fk_Vector^, fk_Axis, double), GlRotateWithVec(fk_Vector^, fk_Axis, double)

bool FK_CLI::fk_Model::LoRotateWithVec | ( | double | x,
|  | double | y,
|  | double | z,
|  | fk_Axis | axis,
|  | double | theta
| ) |  |

ローカル座標系座標軸回転(姿勢付き)メソッド2

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は(ローカル座標系における) (x, y, z) を通り、 axis で指定した (ローカル座標系における) 座標軸に平行な直線となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は LoRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 GlRotateWithVec() を利用して下さい。

引数

  [in] | x | ローカル座標系での回転軸上の点のx成分
  [in] | y | ローカル座標系での回転軸上の点のy成分
  [in] | z | ローカル座標系での回転軸上の点のz成分
  [in] | axis | 回転軸に平行なローカル座標系上の軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。
  [in] | theta | 回転角度(ラジアン)

戻り値
  このメソッドは常に true を返します。

参照
  LoRotate(double, double, double, fk_Axis, double), GlRotateWithVec(double, double, double, fk_Axis, double)

bool FK_CLI::fk_Model::LoRotateWithVec | ( | fk_Vector^ | A,
|  | fk_Vector^ | B,
|  | double | theta
| ) |  |

ローカル座標系任意軸回転(姿勢付き)メソッド1

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) A と B を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は LoRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 GlRotateWithVec() を利用して下さい。

引数

  [in] | A | ローカル座標系における回転軸上の1点。B と一致してはいけません。
  [in] | B | ローカル座標系における回転軸上の1点。A と一致してはいけません。
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotateWithVec(fk_Vector^, fk_Vector^, double) LoRotate(fk_Vector^, fk_Vector^, double)

bool FK_CLI::fk_Model::LoRotateWithVec | ( | double | Ax,
|  | double | Ay,
|  | double | Az,
|  | double | Bx,
|  | double | By,
|  | double | Bz,
|  | double | theta
| ) |  |

ローカル座標系任意軸回転(姿勢付き)メソッド2

モデルの位置を、ローカル座標系によって回転した場所に移動します。 回転軸は、(ローカル座標系における) (Ax, Ay, Az) と (Bx, By, Bz) を通る軸となります。 回転角度は theta となります。単位は弧度法(ラジアン)です。

このメソッドは、回転の際に姿勢も回転していきます。 位置のみの回転を行いたい場合は LoRotate() を利用して下さい。 グローバル座標系で回転移動(姿勢付き)を行いたい場合は、 GlRotateWithVec() を利用して下さい。

引数

  [in] | Ax | ローカル座標系における回転軸上の1点 A の x 成分
  [in] | Ay | ローカル座標系における回転軸上の1点 A の y 成分
  [in] | Az | ローカル座標系における回転軸上の1点 A の z 成分
  [in] | Bx | ローカル座標系における回転軸上の1点 B の x 成分
  [in] | By | ローカル座標系における回転軸上の1点 B の y 成分
  [in] | Bz | ローカル座標系における回転軸上の1点 B の z 成分
  [in] | theta | 回転角度(ラジアン)

戻り値
  回転が成功した場合 true を返します。 A と B が同一位置ベクトルであった場合、 回転せずに false を返します。

参照
  GlRotateWithVec(double, double, double, double, double, double, double), LoRotate(double, double, double, double, double, double, double)

bool FK_CLI::fk_Model::GlTranslate | ( | fk_Vector^ | v | ) |

グローバル座標系平行移動メソッド1

モデルを、クローバル座標系によって平行移動した位置に移動します。 平行移動量はベクトルで指定します。

ローカル座標系による平行移動量の指定を行いたい場合は、 LoTranslate() を利用して下さい。

引数

  [in] | v | 平行移動量ベクトル

戻り値
  このメソッドは常に true を返します。

参照
  LoTranslate(fk_Vector^)

bool FK_CLI::fk_Model::GlTranslate | ( | double | x,
|  | double | y,
|  | double | z
| ) |  |

グローバル座標系平行移動メソッド2

モデルを、クローバル座標系によって平行移動した位置に移動します。 平行移動量はベクトルの成分を意味する3個の実数で指定します。

ローカル座標系による平行移動量の指定を行いたい場合は、 LoTranslate() を利用して下さい。

引数

  [in] | x | 平行移動量ベクトルのx成分
  [in] | y | 平行移動量ベクトルのy成分
  [in] | z | 平行移動量ベクトルのz成分

戻り値
  このメソッドは常に true を返します。

参照
  LoTranslate(double, double, double)

bool FK_CLI::fk_Model::LoTranslate | ( | fk_Vector^ | v | ) |

ローカル座標系平行移動メソッド1

モデルを、ローカル座標系によって平行移動した位置に移動します。 平行移動量はベクトルで指定します。

グローバル座標系による平行移動量の指定を行いたい場合は、 GlTranslate() を利用して下さい。

引数

  [in] | v | 平行移動量ベクトル

戻り値
  このメソッドは常に true を返します。

参照
  GlTranslate(fk_Vector^), GlMoveTo(fk_Vector^)

bool FK_CLI::fk_Model::LoTranslate | ( | double | x,
|  | double | y,
|  | double | z
| ) |  |

ローカル座標系平行移動メソッド2

モデルを、ローカル座標系によって平行移動した位置に移動します。 平行移動量はベクトルの成分を意味する3個の実数で指定します。

グローバル座標系による平行移動量の指定を行いたい場合は、 GlTranslate() を利用して下さい。

引数

  [in] | x | 平行移動量ベクトルのx成分
  [in] | y | 平行移動量ベクトルのy成分
  [in] | z | 平行移動量ベクトルのz成分

戻り値
  このメソッドは常に true を返します。

参照
  GlTranslate(double, double, double), GlMoveTo(double, double, double)

bool FK_CLI::fk_Model::GlMoveTo | ( | fk_Vector^ | p | ) |

グローバル座標系位置指定メソッド1

モデルの位置を、指定した位置ベクトルに移動します。 位置はベクトルで指定します。

GlMoveTo() メソッドに対応するローカル座標系メソッド 「LoMoveTo()」メソッドは存在しません。 これは、LoMoveTo() メソッドはその意味的に LoTranslate() とまったく同一の挙動となるためです。

引数

  [in] | p | 移動先位置ベクトル

戻り値
  このメソッドは常に true を返します。

参照
  GlTranslate(fk_Vector^), LoTranslate(fk_Vector^)

bool FK_CLI::fk_Model::GlMoveTo | ( | double | x,
|  | double | y,
|  | double | z
| ) |  |

グローバル座標系位置指定メソッド2

モデルの位置を、指定した位置ベクトルに移動します。 位置はベクトルの成分を意味する3個の実数で指定します。

GlMoveTo() メソッドに対応するローカル座標系メソッド 「LoMoveTo()」メソッドは存在しません。 これは、LoMoveTo() メソッドはその意味的に LoTranslate() とまったく同一の挙動となるためです。

引数

  [in] | x | 移動先位置ベクトルのx成分
  [in] | y | 移動先位置ベクトルのy成分
  [in] | z | 移動先位置ベクトルのz成分

戻り値
  このメソッドは常に true を返します。

参照
  GlTranslate(double, double, double), LoTranslate(double, double, double)

## プロパティ詳解

unsigned int FK_CLI::fk_Model::ID
| get

ID プロパティ

モデルの固有IDを参照します。 IDの最小値は 1 で、 同一プロセス中では同じ ID が別のモデルに割り振られることはありません。

fk_Shape^ FK_CLI::fk_Model::Shape
| get set

形状プロパティ

モデル形状の参照・設定を行います。 形状は、 fk_Shape クラスの派生クラスであれば設定可能です。 なお、呼ぶ前に形状が設定されていた場合、前の設定は破棄されます。 初期状態は null となっており、 このプロパティが null の場合は「形状を持たないモデル」として扱われます。

bool FK_CLI::fk_Model::PickMode
| get set

ピックモードプロパティ

モデルのピックモードの参照・設定を行います。 true の場合有効、false の場合無効となります。 ピックモードとは、 モデルをピックによる取得操作の対象とするかどうかを制御するものです。 ピックモードが有効である場合、モデルはピック取得の候補となります。 デフォルトでは無効となっています。

参照
  fk_AppWindow::IsModelPicked()

fk_Model^ FK_CLI::fk_Model::Parent
| get set

親モデルプロパティ

親モデルの参照・設定を行います。 親モデルは 1 個しか設定できません。 設定の際に既に親モデルが設定されていた場合は、前のモデル設定は破棄されます。 親モデルが設定されていない場合は null となります。

なお、このプロパティの設定は、 SetParent(fk_Model^, bool) において、 第2引数に false を入力した場合と同義となります。

参照
  SetParent(fk_Model^, bool), DeleteParent(), EntryChild()

fk_Material^ FK_CLI::fk_Model::Material
| get set

マテリアルプロパティ

モデルの基本マテリアルの参照・設定を行います。 マテリアルに関しての詳細は、 fk_Material の説明およびユーザーズマニュアルを参照して下さい。

覚え書き
  稜線の色は fk_Model::LineColor プロパティ、 頂点の色は fk_Model::PointColor プロパティを利用して設定して下さい。 個別位相要素のマテリアルとの制御については、 MaterialMode プロパティの説明を参照して下さい。 テクスチャを描画する際には、テクスチャモードによって混合の仕方が異なりますので、 fk_Texture::TextureMode の説明を参照して下さい。

参照
  fk_Material, InhMaterial, LineColor, PointColor, fk_Texture::TextureMode

fk_Material^ FK_CLI::fk_Model::InhMaterial
| get

継承マテリアルプロパティ

親子関係を踏まえた基本マテリアルを参照します。 当モデルにマテリアルが設定されている場合、そのマテリアルを参照します。 当モデルにマテリアルが設定されていない場合は、親モデルのマテリアルを参照します。

参照
  fk_Material, Material

fk_Color^ FK_CLI::fk_Model::PointColor
| get set

頂点色プロパティ

現在モデルに設定されている頂点色の参照・設定を行います。 モデルに頂点色が設定されていない場合は null となります。

参照
  fk_Color, PointColor, InhPointColor

fk_Color^ FK_CLI::fk_Model::InhPointColor
| get

継承頂点色プロパティ

親子関係を踏まえた頂点色を参照します。 当モデルに頂点色が設定されている場合、その頂点色を参照します。 当モデルに頂点色が設定されていない場合は、親モデルの頂点色を参照します。

参照
  fk_Color, PointColor

fk_Color^ FK_CLI::fk_Model::LineColor
| get set

稜線色プロパティ

現在モデルに設定されている稜線色の参照・設定を行います。 モデルに稜線色が設定されていない場合は null となります。

参照
  fk_Color, InhLineColor

fk_Color^ FK_CLI::fk_Model::InhLineColor
| get

継承稜線色プロパティ

親子関係を踏まえた稜線色を参照します。 当モデルに稜線色が設定されている場合、その稜線色を参照します。 当モデルに稜線色が設定されていない場合は、親モデルの稜線色を参照します。

参照
  fk_Color, LineColor

double FK_CLI::fk_Model::PointSize
| get set

頂点描画サイズプロパティ

頂点描画サイズの参照・設定を行います。 単位はピクセルです。整数以外も設定可能です。

参照
  LineWidth

double FK_CLI::fk_Model::LineWidth
| get set

稜線描画幅プロパティ

稜線描画幅の参照・設定を行います。 単位はピクセルです。整数以外も設定可能です。

参照
  PointSize

fk_DrawMode FK_CLI::fk_Model::DrawMode
| get set

描画モードプロパティ

モデルの描画モードを設定します。 描画モードとは、 面、稜線、頂点のそれぞれを描画するかどうかを制御するものです。 描画モードには以下のようなものがあります。

- fk_DrawMode.NONEMODE: 何も描画しません。
- fk_DrawMode.POINTMODE: 頂点を描画します。
- fk_DrawMode.LINEMODE: 稜線を描画します。
- fk_DrawMode.POLYMODE: 面の表を描画します。
- fk_DrawMode.BACK_POLYMODE: 面の裏を描画します。
- fk_DrawMode.FRONTBACK_POLYMODE: 面の表と裏を描画します。
- fk_DrawMode.TEXTUREMODE: テクスチャを描画します。

これらの描画モードは、 ビット論理和を用いて複数のものを同時に指定することが可能です。 以下のコードは、頂点、稜線、面の表をすべて描画するように設定します。

    fk_Model        model;

    model.DrawMode = fk_DrawMode.POINTMODE | fk_DrawMode.LINEMODE | fk_DrawMode.POLYMODE;

fk_MaterialMode FK_CLI::fk_Model::MaterialMode
| get set

マテリアルモードプロパティ

形状中の各要素を描画する際に、 どの要素のマテリアルを採用するかというモードの参照・設定を行います。 与えられる値は以下の3種類です。

- fk_MaterialMode.CHILD
- fk_MaterialMode.PARENT
- fk_MaterialMode.NONE

マテリアルの採用は、以下のような優先順で決定します。

1. fk_Model のマテリアルモードが fk_MaterialMode.CHILD の場合、 モデルのマテリアルが採用されます。 fk_MaterialMode.NONE の場合は描画されません。 fk_MaterialMode.PARENT の場合は以下の条件に従います。
2. fk_Shape の派生クラスにてマテリアルモードが fk_MaterialMode.CHILD になっている場合、形状のマテリアルが採用されます。 fk_MaterialMode.NONE の場合は描画されません。 fk_MaterialMode.PARENT の場合は以下の条件に従います。 (fk_Shape::MaterialMode を参照して下さい。)
3. 各位相要素でのマテリアルモードが、 fk_MaterialMode.CHILD になっている場合は個別のマテリアルが採用されます。 fk_MaterialMode.NONE の場合は描画されません。 fk_MaterialMode.PARENT の場合はモデルのマテリアルが採用されます。 (fk_TopologyMaterial::MaterialMode を参照して下さい。)

参照
  fk_Shape::MaterialMode, fk_TopologyMaterial::MaterialMode

bool FK_CLI::fk_Model::SmoothMode
| get set

スムースモードプロパティ

モデルのスムースモードの参照・設定を行います。 true の場合有効、false の場合無効となります。 スムースモードを有効にすると、 形状の隣り合う面同士の法線ベクトルが補間され、 擬似的に滑らかな曲面として表示を行うようになります。

bool FK_CLI::fk_Model::ReverseDrawMode
| get set

描画順序制御プロパティ

このプロパティでは、モデルの持つ位相要素の描画順序を制御します。 true の場合、モデル内の描画が通常と逆順になります。 false の場合、順序を通常の状態に戻します。 モデルの各位相要素が同一平面上にあり、描画順序を逆にしたい場合に用います。

fk_DepthMode FK_CLI::fk_Model::DepthMode
| get set

前後関係制御プロパティ

このプロパティでは、モデルを描画する際の前後関係に関する設定を制御します。 fk_Scene::entryOverlayModel()でも前後関係を無視した描画はできますが、 通常の描画中に前後関係を無視したり、半透明物体が後続の描画の前後関係に作用しないようにするなど、 細かな調整を行いたい場合に用います。与えられる値は以下の4種類です。

- fk_DepthMode.NO_USE: 前後関係の参照も更新も行わず、常に上書きします。
- fk_DepthMode.READ: 前後関係を参照してチェックします。
- fk_DepthMode.WRITE: 前後関係を更新して後続の描画に影響するようにします。
- fk_DepthMode.READ_AND_WRITE: 前後関係を参照しつつ更新します。初期値です。

fk_BlendMode FK_CLI::fk_Model::BlendMode
| get set

ブレンドモード設定プロパティ

形状を描画する際に、どのような計算式でブレンドを行うかを設定します。 ここでブレンドモードを設定しても、fk_Scene.BlendStatus で ブレンドを有効にしていないと実際の描画で有効になりません。 ブレンドモードの設定は、一般的な設定をプリセットの中から選択するか、 カスタムモードを選択した上で、入力ピクセルと出力ピクセルに対する係数を 個別に指定するかのどちらかによって行います。与えられる値は以下の 8 種類です。

- fk_BlendMode.ALPHA_MODE: 通常のアルファブレンドです。初期値です。
- fk_BlendMode.NEGATIVE_MODE: 反転ブレンドです。
- fk_BlendMode.ADDITION_MODE: 加算ブレンドです。
- fk_BlendMode.SCREEN_MODE: アルファ付き加算ブレンドです。
- fk_BlendMode.LIGHTEN_MODE: 入出力ピクセルのうち明るい方を採用するブレンドです。
- fk_BlendMode.MULTIPLY_MODE: 乗算ブレンドです。
- fk_BlendMode.NONE_MODE: ブレンドを行いません。 fk_Scene 側の設定によらずブレンドを無効にします。
- fk_BlendMode.CUSTOM_MODE: カスタムモードです。 fk_Model::BlendSrcFactor, fk_Model::BlendDstFactor プロパティにて指定した係数を用いた計算式でブレンドします。

fk_BlendFactor FK_CLI::fk_Model::BlendSrcFactor
| get set

ブレンド時の入力ピクセル係数設定プロパティ

ブレンド計算時の入力ピクセルに対する係数を設定します。 このプロパティに値を設定すると、 自動的に fk_Model::BlendMode プロパティに fk_BlendMode.CUSTOM_MODE が設定されます。 本プロパティの仕様は OpenGL 関数の glBlendFunc() に準拠します。 詳細は glBlendFunc() の情報を参照して下さい。 与えられる値は以下の10種類で、 それぞれの「fk_BlendFactor.」を「GL_」に置き換えた GLenum 型の値に対応します。

- fk_BlendFactor.ZERO
- fk_BlendFactor.ONE
- fk_BlendFactor.SRC_COLOR
- fk_BlendFactor.ONE_MINUS_SRC_COLOR
- fk_BlendFactor.DST_COLOR
- fk_BlendFactor.ONE_MINUS_DST_COLOR
- fk_BlendFactor.SRC_ALPHA
- fk_BlendFactor.ONE_MINUS_SRC_ALPHA
- fk_BlendFactor.DST_ALPHA
- fk_BlendFactor.ONE_MINUS_DST_ALPHA

fk_BlendFactor FK_CLI::fk_Model::BlendDstFactor
| get set

ブレンド時の出力ピクセル係数設定プロパティ

ブレンド計算時の出力ピクセルに対する係数を設定します。 このプロパティに値を設定すると、 自動的に fk_Model::BlendMode プロパティに fk_BlendMode.CUSTOM_MODE が設定されます。 本プロパティの仕様は OpenGL 関数の glBlendFunc() に準拠します。 詳細は glBlendFunc() の情報を参照して下さい。 与えられる値は以下の10種類で、 それぞれの「fk_BlendFactor.」を「GL_」に置き換えた GLenum 型の値に対応します。

- fk_BlendFactor.ZERO
- fk_BlendFactor.ONE
- fk_BlendFactor.SRC_COLOR
- fk_BlendFactor.ONE_MINUS_SRC_COLOR
- fk_BlendFactor.DST_COLOR
- fk_BlendFactor.ONE_MINUS_DST_COLOR
- fk_BlendFactor.SRC_ALPHA
- fk_BlendFactor.ONE_MINUS_SRC_ALPHA
- fk_BlendFactor.DST_ALPHA
- fk_BlendFactor.ONE_MINUS_DST_ALPHA

fk_Vector^ FK_CLI::fk_Model::InhPosition
| get

継承位置ベクトルプロパティ

モデルの位置ベクトルを参照します。 本メソッドは、親モデルの有無にかかわらず、グローバル座標系での実際の位置ベクトルを返します。

参照
  InhVec, InhUpvec, InhAngle, fk_MatrixAdmin::Position

fk_Vector^ FK_CLI::fk_Model::InhVec
| get

継承方向ベクトルプロパティ

モデルの方向ベクトルを取得します。 本メソッドは、親モデルの有無にかかわらず、グローバル座標系での実際の方向ベクトルを返します。

参照
  InhPosition, InhUpvec, InhAngle, fk_MatrixAdmin::Vec

fk_Vector^ FK_CLI::fk_Model::InhUpvec
| get

継承アップベクトルプロパティ

モデルのアップベクトルを取得します。 本メソッドは、親モデルの有無にかかわらず、グローバル座標系での実際のアップベクトルを返します。

参照
  InhPosition, InhVec, InhAngle, fk_MatrixAdmin::Upvec

fk_Angle^ FK_CLI::fk_Model::InhAngle
| get

継承オイラー角参照メソッド

モデルのオイラー角を取得します。 本メソッドは、親モデルの有無にかかわらず、グローバル座標系での実際のオイラー角を返します。 オイラー角の詳細については、 fk_Angle の説明を参照して下さい。

戻り値

参照
  InhPosition, InhVec, InhUpvec, fk_MatrixAdmin::Angle, fk_Angle

double FK_CLI::fk_Model::InhScale
| get

継承全体倍率プロパティ

モデルの全体拡大・縮小倍率を参照します。 親子関係の小モデルの場合、親モデルでの倍率も反映されます。

参照
  InhPosition, InhVec, InhUpvec, InhAngle, fk_MatrixAdmin::Scale

fk_Matrix^ FK_CLI::fk_Model::InhMatrix
| get

継承変換行列プロパティ

モデルの位置と姿勢を表す変換行列を参照します。 当モデルに親モデルがあった場合、 その親モデルの変換行列と当モデルの変換行列の積となります。 結果として、このメソッドを用いることでグローバル座標系における 当モデルの変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::Matrix と結果が同じとなります。

参照
  fk_MatrixAdmin::Matrix(), InhInvMatrix

fk_Matrix^ FK_CLI::fk_Model::InhInvMatrix
| get

継承逆変換行列プロパティ

モデルの位置と姿勢を表す変換行列の、逆行列を参照します。 これは、 fk_Model::InhMatrix プロパティで得られる行列の逆行列となります。 当モデルに親モデルがあった場合、 その親モデルの逆変換行列と当モデルの逆変換行列の積が返されます。 結果として、このメソッドを用いることでグローバル座標系における 当モデルの逆変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::InvMatrix と結果が同じとなります。

参照
  fk_MatrixAdmin::InvMatrix, InhMatrix

fk_Matrix^ FK_CLI::fk_Model::InhBaseMatrix
| get

継承移動・回転要素変換行列プロパティ

モデルの持つ変換要素のうち、 位置と姿勢のみを反映した、 すなわち拡大縮小の要素を省いた変換行列を参照します。 当モデルに親モデルがあった場合、 その親モデルの変換行列と当モデルの変換行列の積となります。 その結果として、このメソッドを用いることでグローバル座標系における 当モデルの変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::BaseMatrix と結果が同じとなります。

参照
  fk_MatrixAdmin::BaseMatrix, InhMatrix, InhInvBaseMatrix

fk_Matrix^ FK_CLI::fk_Model::InhInvBaseMatrix
| get

継承移動・回転要素逆変換行列プロパティ

モデルの持つ変換要素のうち、 位置と姿勢のみを反映した、 すなわち拡大縮小の要素を省いた変換行列の逆行列を参照します。 当モデルに親モデルがあった場合、 その親モデルの逆変換行列と当モデルの逆変換行列の積となります。 その結果として、このメソッドを用いることでグローバル座標系における 当モデルの逆変換行列を得ることができます。 親モデルが設定されていない場合は、 fk_MatrixAdmin::InvBaseMatrix と結果が同じとなります。

参照
  fk_MatrixAdmin::InvBaseMatrix, InhInvMatrix, InhBaseMatrix

bool FK_CLI::fk_Model::InterMode
| get set

干渉継続モード設定メソッド

干渉継続モードの参照・設定を行います。 true で有効、false で無効となります。 干渉継続モードを有効にしておくと、 本モデルが IsInter() メソッドで他のモデルと干渉状態が検出された場合、 ResetInter() が呼ばれるまでは true を返すようになります。

参照
  IsInter(), InterStatus, ResetInter(), InterStopMode, EntryInterModel()

bool FK_CLI::fk_Model::InterStatus
| get

干渉継続状態プロパティ

本プロパティは、干渉継続モードが有効である場合で、 前に ResetInter() が呼ばれた以降で、 IsInter() によって干渉が検出されたことがあるかを検出することができます。 干渉検出があった場合 true、なかった場合 false となっています。

参照
  IsInter(), InterMode, ResetInterStatus()

bool FK_CLI::fk_Model::InterStopMode
| get set

干渉自動停止モードプロパティ

干渉自動停止モードの参照・設定を行います。 true で有効、false で無効となります。

「干渉自動停止モード」とは、以下のような処理を行う機能のことです。

1. 干渉チェック対象となるモデルを事前に登録しておく。
2. モデル移動の前に SnapShot() をしておく。
3. モデルの移動を行った際に、 もし干渉チェック対象モデルのいずれかと干渉していた場合は、 Restore() を実行し移動前の状態に戻る。

この機能を用いることで、移動後で干渉が起きてしまう移動が無効となります。 壁などにモデルが入らないように処理するような場面で有効となります。

このモードの対象となる移動メソッドは以下のとおりです。

- GlRotate()
- LoRotate()
- GlRotateWithVec()
- LoRotateWithVec()
- GlTranslate()
- LoTranslate()
- GlMoveTo()

これらのメソッドは、モデルの位置ベクトルが変化する可能性があるからです。 その他の姿勢制御メソッドについては停止の対象とはなりません。

なお、このモードを利用する場合、 Restore() した後にも干渉状態となっている場合、 適用モデルがまったく動かなくなるという問題が生じます。 そのため本機能を用いたい場合は、 干渉チェック対象となるモデルは全て静止した状態であることを推奨します。 また、位置のかわらない姿勢制御メソッドは干渉状態であっても動作しますが、 その際に物体の回転によって非干渉状態から干渉状態となることがありえますので、 これも注意が必要です。

覚え書き
  干渉判定を行う際の境界ボリュームに関する設定は、 事前に行っておく必要があります。
  このモードを利用する場合、副作用として自前で管理していた SnapShot() の情報が破棄されてしまうという問題がありますので、 SnapShot() や Restore() を利用する場合はこのモードは用いないようにして下さい。

参照
  InterStopMode, EntryInterModel(), DeleteInterModel(), ClearInterModel(), IsInter(), SnapShot(), Restore()