FineKernelToolKit  3.1.0
公開メンバ関数 | プロパティ | 全メンバ一覧
FK_CLI::fk_AppWindow クラス

アプリケーションウィンドウクラス [詳解]

+ FK_CLI::fk_AppWindow の継承関係図
+ FK_CLI::fk_AppWindow 連携図

公開メンバ関数

 fk_AppWindow ()
 コンストラクタ [詳解]
 
 ~fk_AppWindow ()
 デストラクタ [詳解]
 
 !fk_AppWindow ()
 ファイナライザ [詳解]
 
カメラ制御メソッド
void SetCameraDefault (void)
 カメラ初期化メソッド [詳解]
 
シーン制御メソッド
void SetScene (fk_Scene^ scene, bool defCameraAndLight)
 シーン設定メソッド [詳解]
 
void SetSceneDefault (void)
 シーン設定初期化メソッド [詳解]
 
void Entry (fk_Model^ model)
 通常モデル表示登録メソッド [詳解]
 
void Entry (fk_Model^ model, fk_GuideObject^ guide)
 座標軸付きモデル表示登録メソッド [詳解]
 
void Entry (fk_SpriteModel^ model)
 スプライトモデル登録メソッド [詳解]
 
void Entry (fk_Performer^ chara)
 fk_Performer モデル登録メソッド [詳解]
 
void Remove (fk_Model^ model)
 通常モデル表示解除メソッド [詳解]
 
void Remove (fk_Model^ model, fk_GuideObject^ guide)
 座標軸付きモデル表示解除メソッド [詳解]
 
void Remove (fk_SpriteModel^ model)
 スプライトモデル表示解除メソッド [詳解]
 
void Remove (fk_Performer^ chara)
 fk_Performer モデル表示解除メソッド [詳解]
 
void ClearModel (bool defCameraAndLight)
 全モデル登録解除メソッド1 [詳解]
 
void ClearModel (void)
 全モデル登録解除メソッド2 [詳解]
 
描画制御メソッド
void Open (void)
 ウィンドウ生成メソッド [詳解]
 
void Close (void)
 ウィンドウ破棄メソッド [詳解]
 
bool Update (bool forceFlg)
 シーン描画メソッド1 [詳解]
 
bool Update (void)
 シーン描画メソッド2 [詳解]
 
グリッド・座標軸表示設定メソッド
void ShowGuide (fk_GuideMode mode)
 グリッド・軸設定メソッド1 [詳解]
 
void ShowGuide (void)
 グリッド・軸設定メソッド2 [詳解]
 
void HideGuide (void)
 グリッド・軸消去メソッド [詳解]
 
キーボード状態取得メソッド
bool GetKeyStatus (wchar_t key, fk_SwitchStatus status, bool insideFlag)
 通常キー状態取得メソッド1 [詳解]
 
bool GetKeyStatus (wchar_t key, fk_SwitchStatus status)
 通常キー状態取得メソッド2 [詳解]
 
bool GetSpecialKeyStatus (fk_SpecialKey keyCode, fk_SwitchStatus status, bool insideFlag)
 特殊キー状態取得メソッド1 [詳解]
 
bool GetSpecialKeyStatus (fk_SpecialKey keyCode, fk_SwitchStatus status)
 特殊キー状態取得メソッド2 [詳解]
 
マウス状態取得メソッド
bool GetMouseStatus (fk_MouseButton buttonCode, fk_SwitchStatus status, bool insideFlag)
 マウスボタン状態取得メソッド [詳解]
 
void SetCursorState (bool visible, bool center)
 マウスカーソル表示制御メソッド [詳解]
 
bool IsModelPicked (fk_Model^ model, int pixel, int mouseX, int mouseY)
 モデルクリック判定メソッド1 [詳解]
 
bool IsModelPicked (fk_Model^ model, int pixel)
 モデルクリック判定メソッド2 [詳解]
 
bool IsModelPicked (fk_Model^ model)
 モデルクリック判定メソッド3 [詳解]
 
void ProcMouseView (fk_Model^ camera, double x, double y, bool lockSW)
 FPS視点的カメラ制御メソッド [詳解]
 
投影座標・空間座標変換メソッド
bool GetProjectPosition (double x, double y, fk_Plane^ plane, fk_Vector^ pos)
 投影平面から任意平面への射影点算出メソッド [詳解]
 
bool GetProjectPosition (double x, double y, double dist, fk_Vector^ pos)
 投影平面から任意距離での射影点算出メソッド [詳解]
 
bool GetWindowPosition (fk_Vector^ pos_3D, fk_Vector^ pos_2D)
 空間座標から投影座標への射影点算出メソッド [詳解]
 

プロパティ

String^  WindowName [set]
 ウィンドウタイトルプロパティ [詳解]
 
fk_Dimension^  Size [set]
 ウィンドウサイズプロパティ [詳解]
 
fk_Rect^  InnerSize [set]
 描画領域サイズ設定プロパティ [詳解]
 
fk_Color^  BGColor [set]
 背景色設定プロパティ [詳解]
 
int FPS [set]
 FPS設定プロパティ [詳解]
 
double AxisWidth [set]
 軸線幅設定プロパティ [詳解]
 
double GridWidth [set]
 グリッド線幅設定プロパティ [詳解]
 
double GuideScale [set]
 グリッド幅設定プロパティ [詳解]
 
int GuideNum [set]
 グリッド数設定プロパティ [詳解]
 
fk_Vector^  CameraPos [get, set]
 カメラ位置設定・取得プロパティ [詳解]
 
fk_Vector^  CameraFocus [set]
 カメラ注視点設定プロパティ [詳解]
 
fk_Model^  CameraModel [get, set]
 カメラモデル設定プロパティ [詳解]
 
fk_Scene^  Scene [get, set]
 シーン設定プロパティ [詳解]
 
fk_Vector^  MousePosition [get]
 マウスポインタ位置取得プロパティ [詳解]
 
bool TrackBallMode [set]
 トラックボールモード制御プロパティ [詳解]
 

詳解

アプリケーションウィンドウクラス

このクラスは、 3D シーンを表示するウィンドウを簡易に作成する機能を提供します。 シーン・カメラ・ライトを内包しているので、 とりあえず形状を表示させるだけなら、 非常に短いコード量で済みます。 もちろんゲームアプリを完成させることも可能です。 入力に関するユーティリティ機能も含みます。 Fl_Window、 fk_Window 、 fk_Scene を複合したクラスですので、 既存の FK ユーザが利用する場合はその旨を念頭に置いてください。

構築子と解体子

FK_CLI::fk_AppWindow::fk_AppWindow ( )

コンストラクタ

FK_CLI::fk_AppWindow::~fk_AppWindow ( )

デストラクタ

FK_CLI::fk_AppWindow::!fk_AppWindow ( )

ファイナライザ

関数詳解

void FK_CLI::fk_AppWindow::SetCameraDefault ( void  )

カメラ初期化メソッド

ウィンドウが制御するカメラを、 デフォルトで内部に保持している fk_Model のインスタンスに戻します。

参照
CameraModel
void FK_CLI::fk_AppWindow::SetScene ( fk_Scene scene,
bool  defCameraAndLight 
)

シーン設定メソッド

ウィンドウに対して、別の fk_Scene のオブジェクトをセットします。 アプリの画面ごとにモデルを登録した fk_Scene オブジェクトを、 このメソッドでセットして切り替えることで、 モデルを個別に登録や解除を行う手間が省けます。 ある程度以上の規模を持つアプリを開発する場合は便利です。 Scene プロパティによる設定との違いは、第 2 引数にあります。 第 2 引数に true を設定すると、新たにセットするシーンに対して、 fk_AppWindow 内部のカメラとライトオブジェクトを 引き継いでセットすることができますが、 構造がややこしくなるのでできるだけ自前で用意することを推奨します。 省略した場合と false を設定した場合はシーンの切り替えのみを行います。

引数
[in]sceneシーンインスタンス
[in]defCameraAndLighttrue である場合、 カメラ・光源設定についてシーン設定前のものを用います。 false である場合は第一引数の scene に設定されている情報に切り替えます。
参照
Scene, SetSceneDefault(), fk_Scene
void FK_CLI::fk_AppWindow::SetSceneDefault ( void  )

シーン設定初期化メソッド

ウィンドウが制御するシーンを、 デフォルトで内部に保持している fk_Scene のインスタンスに戻します。

参照
Scene, SetScene(fk_Scene^, bool), fk_Scene
void FK_CLI::fk_AppWindow::Entry ( fk_Model model)

通常モデル表示登録メソッド

ウィンドウに対してモデルを登録し、表示するようにします。 既に登録済みのモデルに対して行った場合、登録順が最後尾となります。

覚え書き
FKでは、半透明な物体AとBがあり、 配置関係で「Aが前、Bが後」となっていた場合、 登録順が B, A の順番であれば適切に描画されますが、 A, B の登録順となっていた場合には A が半透明であっても B が透けて見えなくなります。 このような場合、「前に配置される物体ほど後に登録する」 ように登録することで半透明描画が適切となります。
引数
[in]model登録モデル
参照
Remove(fk_Model^), ClearModel()
void FK_CLI::fk_AppWindow::Entry ( fk_Model model,
fk_GuideObject guide 
)

座標軸付きモデル表示登録メソッド

ウィンドウに対してモデルを登録し、表示するようにします。 既に登録済みのモデルに対して行った場合、登録順が最後尾となります。 半透明物体の描画については、 Entry(fk_Model^) の説明を参照して下さい。 登録の際、モデルのローカル座標系に基づく座標軸を同時に登録します。

引数
[in]model登録モデル
[in]guide座標軸
参照
Remove(fk_Model^, fk_GuideObject^), ClearModel(), fk_GuideObject
void FK_CLI::fk_AppWindow::Entry ( fk_SpriteModel model)

スプライトモデル登録メソッド

ウィンドウに対してスプライトモデルを登録し、表示するようにします。

引数
[in]model登録モデル
参照
Remove(fk_SpriteModel^), ClearModel(), fk_SpriteModel
void FK_CLI::fk_AppWindow::Entry ( fk_Performer chara)

fk_Performer モデル登録メソッド

ウィンドウに対して fk_Performer 型のモデルを登録し、 表示するようにします。

引数
[in]chara登録モデル
参照
Remove(fk_Performer^), ClearModel(), fk_Performer
void FK_CLI::fk_AppWindow::Remove ( fk_Model model)

通常モデル表示解除メソッド

ウィンドウからモデルの登録を解除し、表示されないようにします。 登録していないモデルを指定した場合は何も起きません。

引数
[in]model登録解除モデル
参照
Entry(fk_Model^), ClearModel(), fk_Model
void FK_CLI::fk_AppWindow::Remove ( fk_Model model,
fk_GuideObject guide 
)

座標軸付きモデル表示解除メソッド

ウィンドウから、座標軸付きモデルの登録を解除し、 表示されないようにします。 登録していないモデルを指定した場合は何も起きません。

引数
[in]model登録解除モデル
[in]guide登録解除座標軸
参照
Entry(fk_Model^, fk_GuideObject^), ClearModel()
void FK_CLI::fk_AppWindow::Remove ( fk_SpriteModel model)

スプライトモデル表示解除メソッド

ウィンドウから、スプライトモデルの登録を解除し、 表示されないようにします。 登録していないモデルを指定した場合は何も起きません。

引数
[in]model登録解除モデル
参照
Entry(fk_SpriteModel^), ClearModel()
void FK_CLI::fk_AppWindow::Remove ( fk_Performer chara)

fk_Performer モデル表示解除メソッド

ウィンドウから、fk_Performer 型モデルの登録を解除し、 表示されないようにします。 登録していないモデルを指定した場合は何も起きません。

引数
[in]chara登録解除モデル
参照
Entry(fk_Performer^), ClearModel()
void FK_CLI::fk_AppWindow::ClearModel ( bool  defCameraAndLight)

全モデル登録解除メソッド1

現在のシーンから全てのモデルの表示登録を解除します。

引数
[in]defCameraAndLightウィンドウ内部で保持しているライトとカメラのモデルを残したい場合は、 true を指定します。 false を渡した場合は、完全なクリアとなります。
void FK_CLI::fk_AppWindow::ClearModel ( void  )

全モデル登録解除メソッド2

現在のシーンから全てのモデルの表示登録を解除します。 ウィンドウ内部で保持しているライトとカメラのモデルは全てクリアとなります。

参照
ClearModel(bool)
void FK_CLI::fk_AppWindow::Open ( void  )

ウィンドウ生成メソッド

ウィンドウを開いて表示します。

参照
Close(), Update()
void FK_CLI::fk_AppWindow::Close ( void  )

ウィンドウ破棄メソッド

ウィンドウを閉じます。 ウィンドウが表示されている状態でプログラムが終了した場合は 自動的に閉じられるので、 本メソッドを明示的に呼ぶ必要はありません。 プログラム自体は動作し続けるが、ウィンドウを閉じたい場合や、 改めてウィンドウを再生成したい場合に本メソッドを利用して下さい。

参照
Open(), Update()
bool FK_CLI::fk_AppWindow::Update ( bool  forceFlg)

シーン描画メソッド1

シーン画面を描画し、さらに各種入力デバイスの状態を更新します。 基本的にメインループ内でコールすることになります。 その際、 FPS プロパティの数値基づいて時間調整が入ります。 FPS 制御を無視して強制的に描画処理を呼び出したい場合は引数に true を渡します。

引数
[in]forceFlgtrue の場合、FPS制御を無視して強制的に再描画を行います。 false の場合は FPS制御により描画タイミングを制御し、 描画が行われるまではメソッドは終了しなくなります。 デフォルトは false です。
参照
Open(), Close(), FPS
bool FK_CLI::fk_AppWindow::Update ( void  )

シーン描画メソッド2

シーン画面を描画し、さらに各種入力デバイスの状態を更新します。 基本的にメインループ内でコールすることになります。 その際、 FPS プロパティの数値基づいて時間調整が入ります。 本メソッドは、 Update(bool) において引数に false を与えた場合と同様の挙動となります。

参照
Open(), Close(), FPS
void FK_CLI::fk_AppWindow::ShowGuide ( fk_GuideMode  mode)

グリッド・軸設定メソッド1

画面内の座標系を表すグリッドと軸を指定します。 引数は、 AXIS_X, AXIS_Y, AXIS_Z がそれぞれの軸を、 GRID_XZ, GRID_XY, GRID_YZ がそれぞれの平面を表すグリッドに対応します。 複数の要素を指定したい場合は | (ビットOR演算子)で区切って指定できます。 NO_GUIDE で全て非表示に、 ALL_GUIDE で全ての軸・グリッドを表示します。 引数を省略した場合は、xyz の各軸と xz 平面のグリッドを表示します。 デフォルトでは全て非表示(NO_GUIDE)です。

引数
[in]mode表示するグリッド・軸の指定。複数を表示する場合は、 ビットOR演算を利用して並べて指定できます。
参照
HideGuide(), AxisWidth, GridWidth, GuideScale, GuideNum, fk_GuideMode
void FK_CLI::fk_AppWindow::ShowGuide ( void  )

グリッド・軸設定メソッド2

画面内の座標系を表すグリッドと軸を指定します。 本メソッドでは、3次元座標軸と xz 平面のグリッドを表示します。 表示する座標軸およびグリッド面を細かく指定したい場合は、 ShowGuide(bool) を利用してください。

参照
HideGuide(), AxisWidth, GridWidth, GuideScale, GuideNum, fk_GuideMode
void FK_CLI::fk_AppWindow::HideGuide ( void  )

グリッド・軸消去メソッド

ShowGuide() で表示した軸とグリッドを消去します。 ShowGuide( fk_GuideMode.NO_GUIDE ) と等価です。

参照
ShowGuide()
bool FK_CLI::fk_AppWindow::GetKeyStatus ( wchar_t  key,
fk_SwitchStatus  status,
bool  insideFlag 
)

通常キー状態取得メソッド1

通常キーの入力状態を検出します。 引数として、 検出したい文字をシングルクォーテーションで囲って指定します。 'A' や 'X' などとします。 入力できない特殊キーには getSpecialKeyStatus() を使います。

以下のコードは、「A」キーが押されているかどうかを検出します。

if(Window.GetKeyStatus('a', fk_SwitchStatus.PRESS, false) == true) {
    // 押されている場合の処理
}
引数
[in]key状態を取得したいキー文字。大文字や数字、各種記号キーを設定します。 スペースキーの状態を取得したい場合は「' '」と入力します。
[in]status取得したい状態を指定します。 種類については FK_CLI::fk_SwitchStatus を参照してください。
[in]insideFlagtrue だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。
戻り値
キーが status で指定した状態を満たしていれば true を、 そうでなければ false を返します。
参照
GetSpecialKeyStatus(), Update()
bool FK_CLI::fk_AppWindow::GetKeyStatus ( wchar_t  key,
fk_SwitchStatus  status 
)

通常キー状態取得メソッド2

通常キーの入力状態を検出します。 引数として、 検出したい文字をシングルクォーテーションで囲って指定します。 'A' や 'X' などとします。 入力できない特殊キーには getSpecialKeyStatus() を使います。 なお、本メソッドは GetKeyStatus(wchar_t, fk_SwitchStatus, bool) にて 第三引数に false を入力した場合と挙動は同一です。

以下のコードは、「A」キーが押されているかどうかを検出します。

if(Window.GetKeyStatus('a', fk_SwitchStatus.PRESS) == true) {
    // 押されている場合の処理
}
引数
[in]key状態を取得したいキー文字。大文字や数字、各種記号キーを設定します。 スペースキーの状態を取得したい場合は「' '」と入力します。
[in]status取得したい状態を指定します。 種類については FK_CLI::fk_SwitchStatus を参照してください。
戻り値
キーが status で指定した状態を満たしていれば true を、 そうでなければ false を返します。
参照
GetSpecialKeyStatus(), Update()
bool FK_CLI::fk_AppWindow::GetSpecialKeyStatus ( fk_SpecialKey  keyCode,
fk_SwitchStatus  status,
bool  insideFlag 
)

特殊キー状態取得メソッド1

特殊キーの入力状態を検出します。 引数として、検出したいキーに対応した FK_CLI::fk_SpecialKey 型の値を入力します。 例えば、上矢印キーの状態を取得したい場合には「fk_SpecialKey.UP」を入力します。 通常キーの状態取得は GetKeyStatus() を使います。

以下のコードは、「F1」キーが押されているかどうかを検出します。

if(Window.GetSpecialKeyStatus(fk_SpecialKey.F1, fk_SwitchStatus.PRESS, false) == true) {
    // 押されている場合の処理
}
引数
[in]keyCode状態を取得したいキーに対応した値。
[in]status取得したい状態を指定します。 種類については FK_CLI::fk_SwitchStatus を参照してください。
[in]insideFlagtrue だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。
戻り値
キーが status で指定した状態を満たしていれば true を、 そうでなければ false を返します。
覚え書き
スペースキーの状態取得は、本メソッドではなく GetKeyStatus() を用います。
参照
GetKeyStatus(), Update()
bool FK_CLI::fk_AppWindow::GetSpecialKeyStatus ( fk_SpecialKey  keyCode,
fk_SwitchStatus  status 
)

特殊キー状態取得メソッド2

特殊キーの入力状態を検出します。 引数として、検出したいキーに対応した FK_CLI::fk_SpecialKey 型の値を入力します。 例えば、上矢印キーの状態を取得したい場合には「fk_SpecialKey.UP」を入力します。 通常キーの状態取得は GetKeyStatus() を使います。 なお、本メソッドは GetSpecialKeyStatus(fk_SpecialKey, fk_SwitchStatus, bool) にて 第三引数に false を入力した場合と挙動は同一です。

以下のコードは、「F1」キーが押されているかどうかを検出します。

if(Window.GetSpecialKeyStatus(fk_SpecialKey.F1, fk_SwitchStatus.PRESS) == true) {
    // 押されている場合の処理
}
引数
[in]keyCode状態を取得したいキーに対応した値。
[in]status取得したい状態を指定します。 種類については FK_CLI::fk_SwitchStatus を参照してください。
戻り値
キーが status で指定した状態を満たしていれば true を、 そうでなければ false を返します。
覚え書き
スペースキーの状態取得は、本メソッドではなく GetKeyStatus() を用います。
参照
GetKeyStatus(), Update()
bool FK_CLI::fk_AppWindow::GetMouseStatus ( fk_MouseButton  buttonCode,
fk_SwitchStatus  status,
bool  insideFlag 
)

マウスボタン状態取得メソッド

マウスボタンのクリック状態を検出します。 マウスボタンの種類については、 FK_CLI::fk_MouseButton の項目を参照して下さい。

以下のコードは、マウス左ボタンが押されているかどうかを検出します。

if(Window.GetMouseStatus(fk_MouseButton.MOUSE1, fk_SwitchStatus.PRESS, false) == true) {
    // 押されている場合の処理
}
引数
[in]buttonCodeマウスボタンの種類
[in]status取得したい状態を指定します。 種類については FK_CLI::fk_SwitchStatus を参照してください。
[in]insideFlagtrue だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。
戻り値
ボタンが status で指定した状態を満たしていれば true を、 そうでなければ false を返します。
void FK_CLI::fk_AppWindow::SetCursorState ( bool  visible,
bool  center 
)

マウスカーソル表示制御メソッド

マウスカーソルの表示・非表示と、 カーソルを画面の中心に移動するか否かを指定します。 初期状態では、マウスカーソルは表示し、中心移動は無効としています。

引数
[in]visibletrue の場合、マウスカーソルを表示します。false の場合は消去します。
[in]centertrue の場合、マウスカーソルを画面中心に移動します。 false の場合は何も行いません。
bool FK_CLI::fk_AppWindow::IsModelPicked ( fk_Model model,
int  pixel,
int  mouseX,
int  mouseY 
)

モデルクリック判定メソッド1

マウスでモデルをクリックしているかどうかを判定します。 引数には判定対象としたいモデルを渡します。1 つずつしか判定できません。 (モデル, 誤差を許容するピクセル数, X 座標, Y 座標) の形式で引数を渡します。 カーソルがモデルに重なっている場合は true、 いない場合は false を返します。

引数
[in]model判定対象モデル。
[in]pixel誤差許容ピクセル数。
[in]mouseX判定対象クリック位置のx座標。 -1 を指定した場合は、 現在のマウスポインタ位置の x 座標が対象となります。
[in]mouseY判定対象クリック位置のy座標。 -1 を指定した場合や省略した場合は、 現在のマウスポインタ位置の y 座標が対象となります。
戻り値
カーソルがモデルに重なっている場合は true、 いない場合は false を返します。
bool FK_CLI::fk_AppWindow::IsModelPicked ( fk_Model model,
int  pixel 
)

モデルクリック判定メソッド2

マウスでモデルをクリックしているかどうかを判定します。 引数には判定対象としたいモデルを渡します。1 つずつしか判定できません。 現在のカーソル位置を基準に判定します。 カーソルがモデルに重なっている場合は true、 いない場合は false を返します。

引数
[in]model判定対象モデル。
[in]pixel誤差許容ピクセル数。
戻り値
カーソルがモデルに重なっている場合は true、 いない場合は false を返します。
bool FK_CLI::fk_AppWindow::IsModelPicked ( fk_Model model)

モデルクリック判定メソッド3

マウスでモデルをクリックしているかどうかを判定します。 引数には判定対象としたいモデルを渡します。1 つずつしか判定できません。 現在のカーソル位置を基準に判定します。 カーソルがモデルに重なっている場合は true、 いない場合は false を返します。 本メソッドは、 IsModelPicked(fk_Model^, int) において 第二引数に 1 を指定した場合と同一の挙動となります。

引数
[in]model判定対象モデル。
戻り値
カーソルがモデルに重なっている場合は true、 いない場合は false を返します。
void FK_CLI::fk_AppWindow::ProcMouseView ( fk_Model camera,
double  x,
double  y,
bool  lockSW 
)

FPS視点的カメラ制御メソッド

FPS 視点のゲーム特有の、マウス移動による視点操作処理を行います。

引数
[in]cameraカメラモデル。
[in]x横方向の移動に対する回転角度。
[in]y縦方向の移動に対する回転角度。
[in]lockSWtrue の場合、カーソルの中心を固定します。 false の場合は固定しません。
bool FK_CLI::fk_AppWindow::GetProjectPosition ( double  x,
double  y,
fk_Plane plane,
fk_Vector pos 
)

投影平面から任意平面への射影点算出メソッド

このメソッドは、描画領域上の投影座標から、 任意の平面への射影変換を行い、射影点を求めます。 これは、投影面上の投影座標とカメラを結ぶ直線と、 引数として入力された平面の交点を求めるということと同義です。

引数
[in]x投影座標の x 成分
[in]y投影座標の y 成分
[in]plane射影先の平面。平面情報の設定については fk_Plane の解説を参照して下さい。
[out]pos算出した点の位置ベクトル
戻り値
算出に成功すれば true を、失敗すれば false を返します。
参照
GetProjectPosition(double, double, double, fk_Vector^), GetWindowPosition(), fk_Plane
bool FK_CLI::fk_AppWindow::GetProjectPosition ( double  x,
double  y,
double  dist,
fk_Vector pos 
)

投影平面から任意距離での射影点算出メソッド

このメソッドは、描画領域上の投影座標に対し、 カメラから指定した距離となっている3D空間中の点を算出します。 これは、投影面上の投影座標とカメラを結ぶ直線と、 カメラを中心とし指定距離を半径とする球面の交点を求めることと同義です。

引数
[in]x投影座標の x 成分
[in]y投影座標の y 成分
[in]distカメラからの空間中の距離
[out]pos算出した点の位置ベクトル
戻り値
算出に成功すれば true を、失敗すれば false を返します。
bool FK_CLI::fk_AppWindow::GetWindowPosition ( fk_Vector pos_3D,
fk_Vector pos_2D 
)

空間座標から投影座標への射影点算出メソッド

このメソッドは、空間座標から投影座標への射影点を算出します。 これは、ある空間中の位置が画面上でどこに表示されるかを知ることと同義です。 投影座標の詳細は fk_Window の概要を参照して下さい。

なお、射影点の z 成分は投影における Near 面上の場合 0、 Far 面上の場合 1 となり、その間は線形補間した値となります。 つまり、カメラに近いほど値が小さくなるということです。

引数
[in]pos_3D空間座標位置ベクトル
[out]pos_2D射影点となる投影座標の位置ベクトル
参照
GetProjectPosition(double, double, fk_Plane^, fk_Vector^), GetProjectPosition(double, double, double, fk_Vector^), fk_Perspective, fk_Ortho, fk_Frustum

プロパティ詳解

String^ FK_CLI::fk_AppWindow::WindowName
set

ウィンドウタイトルプロパティ

ウィンドウタイトルに出力する文字列を設定します。

Window.WindowName = "FK Window";
fk_Dimension^ FK_CLI::fk_AppWindow::Size
set

ウィンドウサイズプロパティ

ウィンドウサイズを変更します。単位はピクセルです。 3DCG描画領域も同じサイズに変更します。 デフォルトは512x512です。

Window.Size.w = 800;
Window.Size.h = 600;
fk_Rect^ FK_CLI::fk_AppWindow::InnerSize
set

描画領域サイズ設定プロパティ

ウィンドウの内部に持つ3DCGの描画領域の位置とサイズを変更します。 マルチウィンドウを実現する際に使用します。

Window.InnerSize.x = 10;    // 描画領域左上位置 x 座標
Window.InnerSize.y = 10;    // 描画領域左上位置 y 座標
Window.InnerSize.w = 100;   // 描画領域横幅
Window.InnerSize.h = 100;   // 描画領域縦幅
fk_Color^ FK_CLI::fk_AppWindow::BGColor
set

背景色設定プロパティ

3DCG描画領域の背景色を設定します。

// RGB要素を一つずつ設定
Window.BGColor.r = 0.2;
Window.BGColor.g = 0.3;
Window.BGColor.b = 0.4;

// fk_Colorで一括設定
Window.BGColor = new fk_Color(0.2, 0.3, 0.4);
int FK_CLI::fk_AppWindow::FPS
set

FPS設定プロパティ

Update()をコールした際に調整するFPSを指定します。 FPS(Frame Per Second)とは、1秒間中で画面更新が行われる回数の単位です。 この値を 0 に設定した場合は、FPS制御を行いません。 デフォルトは60です。

Window.FPS = 0;
double FK_CLI::fk_AppWindow::AxisWidth
set

軸線幅設定プロパティ

ShowGuide() で表示する軸の太さを指定します。 デフォルトは4.0です。

Window.AxisWidth = 1.0;
参照
ShowGuide(), GridWidth, GuideNum
double FK_CLI::fk_AppWindow::GridWidth
set

グリッド線幅設定プロパティ

ShowGuide() で表示するグリッドの太さを指定します。 デフォルトは1.0です。

Window.GridWidth = 0.5;
参照
ShowGuide(), AxisWidth, GuideNum
double FK_CLI::fk_AppWindow::GuideScale
set

グリッド幅設定プロパティ

ShowGuide()で表示するグリッドや軸の1辺の長さを指定します。 デフォルトは5.0です。

Window.GuideScale = 10.0;
参照
ShowGuide(), GridWidth, GuideNum
int FK_CLI::fk_AppWindow::GuideNum
set

グリッド数設定プロパティ

ShowGuide()で表示するグリッドの軸方向あたりの個数を指定します。 デフォルトは20です。

Window.GuideNum = 50;
参照
ShowGuide(), GridWidth, GuideScale
fk_Vector^ FK_CLI::fk_AppWindow::CameraPos
getset

カメラ位置設定・取得プロパティ

現在ウィンドウが制御しているカメラの位置を設定できます。 また、このプロパティでは位置の取得も可能です。

Window.CameraPos = new fk_Vector(0.0, 0.0, 0.0);
fk_Vector pos = Window.CameraPos;
参照
CameraFocus, CameraModel
fk_Vector^ FK_CLI::fk_AppWindow::CameraFocus
set

カメラ注視点設定プロパティ

現在ウィンドウが制御しているカメラの向きを、 指定した座標に向くよう姿勢変更します。

Window.CameraFocus = new fk_Vector(0.0, 0.0, 0.0);
参照
CameraPos, CameraModel
fk_Model^ FK_CLI::fk_AppWindow::CameraModel
getset

カメラモデル設定プロパティ

ウィンドウに対して、 別の fk_Model (及びその派生クラス)のオブジェクトをカメラとして セットします。 このメソッドでセットしたモデルを操作すれば、 fk_AppWindow のメソッドを介さずカメラ制御が可能です。

fk_Model model = new fk_Model;
Window.CameraModel = model;
参照
CameraPos, CameraFocus, fk_Model
fk_Scene^ FK_CLI::fk_AppWindow::Scene
getset

シーン設定プロパティ

ウィンドウに対して、別の fk_Scene のオブジェクトをセットします。 アプリの画面ごとにモデルを登録した fk_Scene オブジェクトを、 このメソッドでセットして切り替えることで、 モデルを個別に登録や解除を行う手間が省けます。 ある程度以上の規模を持つアプリを開発する場合は便利です。 また、現時点のシーンを取得することも可能です。

fk_Scene scene = new fk_Scene(); Window.Scene = scene;

fk_Scene s = Window.Scene;

参照
SetScene(), fk_Scene
fk_Vector^ FK_CLI::fk_AppWindow::MousePosition
get

マウスポインタ位置取得プロパティ

マウスのカーソル位置を検出します。 本プロパティは fk_Vector 型であり、 x 成分と y 成分にそれぞれウィンドウ投影座標系の値が入ります。 ウィンドウの外にはみ出したかどうかは、 値がウィンドウサイズを超過しているか否かで判断できます。

fk_Vector mousePos = Window.MousePosition;
参照
GetMouseStatus()
bool FK_CLI::fk_AppWindow::TrackBallMode
set

トラックボールモード制御プロパティ

マウスの右ドラッグとホイール操作で、 カメラを自由に操作できるモードをON(true)/OFF(false)します。 デフォルトはOFF(false)です。

Window.TrackBallMode = true;