# クラス fk_QtWidget

Qt 用ウィジェット生成クラス. [詳細]

すべてのメンバ一覧

## Public メソッド
| fk_QtWidget (int w, int h, QWidget *parent=(QWidget *) NULL)
| コンストラクタ
| ~fk_QtWidget ()
| デストラクタ
シーン制御関数
void | setScene (fk_Scene *scene)
| シーン設定関数
投影座標・空間座標変換関数
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)
| 空間座標から投影座標への射影点算出関数
グラフィックス処理制御関数
void | setOGLPointerMode (bool mode)
| OpenGL 頂点配列処理制御関数.
bool | getOGLPointerMode (void)
| OpenGL 頂点配列処理参照関数.
void | clearTextureMemory (void)
| テクスチャメモリ解放関数
virtual void | preInit (void)
| 初期化前処理関数
virtual void | postInit (void)
| 初期化後処理関数
virtual void | preDraw (void)
| 描画前処理関数
virtual void | postDraw (void)
| 描画後処理関数
フレームレート制御関数
void | setInterval (int ms)
| フレーム間時間設定関数
int | getInterval (void)
| フレーム間時間参照関数
描画更新制御関数
void | start (void)
| 更新開始関数
void | stop (void)
| 更新停止関数
## Protected メソッド
virtual void | beforeLoop (void)
| ループ前処理記述関数
virtual bool | loop (void)
| 毎ループ処理記述関数
virtual void | afterLoop (void)
| ループ後処理記述関数

## 説明

Qt 用ウィジェット生成クラス.

このクラスは、FK によるシーンを Qt 用ウィジェットとして作成、制御するための機能を提供します。

fk_QtWidget クラスは、Qt の QGLWidget の派生クラスとなっています。 通常の QGLWidget インスタンスに対し、 FK のシーン描画機能が追加されているものと言えます。

本クラスの使用方法の概略は以下のようになります。

1. fk_QtWidget の派生クラスを作成し、 メンバとして FK の各種インスタンスを用意する。
2. fk_Scene インスタンスを setScene() で登録する。
3. beforeLoop() 関数に、描画ループの前処理を記述する。
4. loop() 関数に、描画ループ内の処理を記述する。
5. (必要であれば) afterLoop() 関数に、描画ループの後処理を記述する。

あとは、通常の Qt ウィジェットとしてウィンドウに登録しておくことで、 自動的に画面が更新されていきます。 (更新は QTimer によるタイマーイベントによって行っています。)

注意:
  対応する Qt のバージョンは 4.5 以降となります。

参照:
  fk_Window

## コンストラクタとデストラクタ

fk_QtWidget::fk_QtWidget | ( | int | w,
|  | int | h,
|  | QWidget * | parent = `(QWidget *) NULL` |
| ) |  |  |

コンストラクタ

引数:

  `[in]` | w | ウィジェットの横幅。ピクセル値で指定します。
  `[in]` | h | ウィジェットの縦幅。ピクセル値で指定します。
  `[in]` | parent | 本ウィジェットの親ウィジェットインスタンスを指定します。 親ウィジェットを指定しない場合は NULL を代入します。

fk_QtWidget::~fk_QtWidget | ( |  | ) |

デストラクタ

## 関数

virtual void fk_QtWidget::beforeLoop | ( | void |  | ) | `[inline, protected, virtual]`

ループ前処理記述関数

この関数は、ウィジェットの生成時にシステム内部から自動的に呼び出される関数です。 fk_QtWidget クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 描画ループの前処理を記述することが可能です。

参照:
  loop(), afterLoop()

virtual bool fk_QtWidget::loop | ( | void |  | ) | `[inline, protected, virtual]`

毎ループ処理記述関数

この関数は、画面更新の度にシステム内部から自動的に呼び出される関数です。 fk_QtWidget クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 描画ループの内部処理を記述することが可能です。

参照:
  beforeLoop(), afterLoop()

virtual void fk_QtWidget::afterLoop | ( | void |  | ) | `[inline, protected, virtual]`

ループ後処理記述関数

この関数は、ウィジェット消去時にシステム内部から自動的に呼び出される関数です。 fk_QtWidget クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 描画ループの後処理を記述することが可能です。

参照:
  beforeLoop(), loop()

void fk_QtWidget::setScene | ( | fk_Scene * | scene | ) |

シーン設定関数

シーンをウィジェットに設定します。

引数:

  `[in]` | scene | シーンのインスタンス

bool fk_QtWidget::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_QtWidget::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_QtWidget::getWindowPosition | ( | fk_Vector | pos_3D,
|  | fk_Vector * | pos_2D |
| ) |  |  |

空間座標から投影座標への射影点算出関数

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

なお、射影点の 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

void fk_QtWidget::setOGLPointerMode | ( | bool | mode | ) |

OpenGL 頂点配列処理制御関数.

この関数は、OpenGL 環境における頂点配列の使用を制御します。 OpenGL には「頂点配列」と呼ばれる仕組みがあり、 一般的にはこの機能を用いると描画処理が高速になります。 しかし、実行する環境によってはかえって低速になったり、 描画に不具合が生じることもあります。 そのような場合、この関数を用いて頂点配列を利用しないように、 内部処理を切り替えることが可能です。 デフォルトでは「有効」となっています。

覚え書き:
  この関数による設定は、OpenGL 環境においてのみ有効です。 Direct3D 版においては設定は意味をなしません。

引数:

  `[in]` | mode | true の場合、頂点配列処理を有効とします。 false の場合は無効とします。

bool fk_QtWidget::getOGLPointerMode | ( | void |  | ) |

OpenGL 頂点配列処理参照関数.

現在の OpenGL 頂点配列処理が有効であるかどうかを参照します。 頂点配列についての詳細は setOGLPointerMode() の解説を参照して下さい。

戻り値:
  頂点配列処理が有効である場合 true を、 無効である場合 false を返します。

参照:
  setOGLPointerMode()

void fk_QtWidget::clearTextureMemory | ( | void |  | ) |

テクスチャメモリ解放関数

この関数は、現在確保されているテクスチャメモリの解放を行います。

アプリケーションの中でテクスチャマッピングを行う際、 各テクスチャ画像のキャッシングを行っています。 これは、一般的にテクスチャマッピングにおいては同じ画像を再利用する割合が高いため、 キャッシングの効率が良いためです。 しかし、それは同時にテクスチャの格納によるメモリ使用量増大を意味します。 本関数は、確保したメモリを全て解放します。 これによりメモリ使用量は減少しますが、 テクスチャ画像入力のための処理時間が増加する可能性があります。

virtual void fk_QtWidget::preInit | ( | void |  | ) | `[inline, virtual]`

初期化前処理関数

この関数は、グラフィックスシステムの初期化処理において、 処理前に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム初期化時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの初期化処理などがあります。

参照:
  postInit(), preDraw(), postDraw()

virtual void fk_QtWidget::postInit | ( | void |  | ) | `[inline, virtual]`

初期化後処理関数

この関数は、グラフィックスシステムの初期化処理において、 処理後に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム初期化時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの初期化処理などがあります。

参照:
  preInit(), preDraw(), postDraw()

virtual void fk_QtWidget::preDraw | ( | void |  | ) | `[inline, virtual]`

描画前処理関数

この関数は、グラフィックスシステムの描画処理において、 描画前に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム毎描画時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの情報取得などがあります。

virtual void fk_QtWidget::postDraw | ( | void |  | ) | `[inline, virtual]`

描画後処理関数

この関数は、グラフィックスシステムの描画処理において、 描画後に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム毎描画時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの情報取得などがあります。

void fk_QtWidget::setInterval | ( | int | ms | ) |

フレーム間時間設定関数

この関数は、フレーム間時間を設定します。 「フレーム間時間」とは、 あるフレームが表示されてから次のフレームが表示されるまでの時間のことです。 例えば秒間60フレームとしたい場合は、 フレーム間時間は となります。 なお、本関数では指定はミリ秒(1000分の1秒)単位で行い、 型は int 型となります。従って、前述した秒間60フレームの場合は 「16」または「17」を指定することになります。

引数:

  `[in]` | ms | フレーム間時間。単位はミリ秒です。

参照:
  getInterval()

int fk_QtWidget::getInterval | ( | void |  | ) |

フレーム間時間参照関数

現在設定されているフレーム間時間を参照します。

戻り値:
  フレーム間時間を返します。単位はミリ秒です。

参照:
  setInterval()

void fk_QtWidget::start | ( | void |  | ) |

更新開始関数

この関数は、描画ループを開始します。 具体的には、 setInterval() によって設定した時間ごとに、 loop() を呼び出し続けます。 更新を停止するには stop() を用います。

参照:
  setInterval(), stop()

void fk_QtWidget::stop | ( | void |  | ) |

更新停止関数

この関数は、描画ループを停止します。 例えば、実行中にダイアログなどを開いているときに、 QtWidget による更新を止めたい場合などに利用します。 再び更新を開始するには start() を用います。

参照:
  start()