FineKernelToolKit 4.2.13
|
シーンを制御するクラス [詳解]
#include <FK/Scene.h>
公開メンバ関数 | |
fk_Scene (void) | |
コンストラクタ | |
virtual | ~fk_Scene () |
デストラクタ | |
背景色制御関数 | |
void | setBGColor (fk_Color col) |
背景色設定関数1 | |
void | setBGColor (float r, float g, float b) |
背景色設定関数2 | |
fk_Color | getBGColor (void) |
背景色参照関数 | |
透過処理制御関数 | |
void | setBlendStatus (bool mode) |
透過処理設定関数 | |
bool | getBlendStatus (void) |
透過処理参照関数 | |
影制御関数 | |
void | setShadowMode (fk_ShadowMode mode) |
影表示設定変更関数 | |
fk_ShadowMode | getShadowMode (void) |
影表示設定参照関数 | |
void | setShadowVec (const fk_Vector &v) |
影光線方向設定関数1 | |
void | setShadowVec (double x, double y, double z) |
影光線方向設定関数2 | |
fk_Vector | getShadowVec (void) |
影光線方向取得関数 | |
void | setShadowResolution (int resolution) |
シャドウマップ解像度設定関数 | |
int | getShadowResolution (void) |
シャドウマップ解像度取得関数 | |
void | setShadowAreaSize (double size) |
シャドウマップ領域設定関数 | |
double | getShadowAreaSize (void) |
シャドウマップ領域取得関数 | |
void | setShadowDistance (double distance) |
シャドウマップ領域奥行き幅設定関数 | |
double | getShadowDistance (void) |
シャドウマップ領域奥行き幅取得関数 | |
void | setShadowVisibility (double value) |
影濃度設定関数 | |
double | getShadowVisibility (void) |
影濃度取得関数 | |
void | setShadowBias (double bias) |
影バイアス値設定関数 | |
double | getShadowBias (void) |
影バイアス値取得関数 | |
![]() | |
fk_Fog (void) | |
コンストラクタ | |
virtual | ~fk_Fog () |
デストラクタ | |
void | setFogMode (const fk_FogMode mode) |
減衰関数設定関数 | |
void | setFogDensity (const double d) |
指数式係数設定関数 | |
void | setFogLinearMap (const double S, const double E) |
線形式係数設定関数 | |
void | setFogColor (const fk_Color &col) |
霧色設定関数1 | |
void | setFogColor (float r, float g, float b, float a) |
霧色設定関数2 | |
void | setFogColor (double r, double g, double b, double a) |
霧色設定関数3 | |
fk_FogMode | getFogMode (void) const |
減衰関数取得関数 | |
double | getFogDensity (void) const |
指数式係数取得関数 | |
double | getFogLinearStart (void) const |
線形式係数取得関数1 | |
double | getFogLinearEnd (void) const |
線形式係数取得関数1 | |
fk_Color | getFogColor (void) const |
霧色取得関数 | |
![]() | |
fk_DisplayLink (void) | |
コンストラクタ | |
virtual | ~fk_DisplayLink () |
デストラクタ | |
void | clearDisplay (void) |
初期化関数 | |
void | entryModel (fk_Model *model) |
通常モデル登録関数 | |
void | removeModel (fk_Model *model) |
通常モデル解除関数 | |
void | clearModel (void) |
通常モデル全解除関数 | |
void | entryOverlayModel (fk_Model *model) |
オーバーレイモデル登録関数 | |
void | removeOverlayModel (fk_Model *model) |
オーバーレイモデル解除関数 | |
void | clearOverlayModel (void) |
オーバーレイモデル全解除関数 | |
void | entryCamera (fk_Model *model) |
カメラモデル登録関数 | |
fk_Model * | getCamera (void) const |
カメラモデル取得関数 | |
void | setProjection (fk_ProjectBase *proj) |
投影設定関数 | |
fk_ProjectBase * | getProjection (void) const |
投影設定取得関数 | |
void | entryStereoCamera (fk_StereoChannel channel, fk_Model *model) |
立体視用カメラモデル登録関数 | |
void | setStereoProjection (fk_StereoChannel channel, fk_ProjectBase *proj) |
立体視用射影設定関数 | |
const fk_Model * | getStereoCamera (fk_StereoChannel channel) |
立体視用カメラモデル取得関数 | |
const fk_ProjectBase * | getStereoProjection (fk_StereoChannel channel) |
立体視用射影設定取得関数 | |
void | clearStereo (void) |
立体視用設定情報初期化関数 | |
void | setStereoOverlayMode (bool mode) |
立体視モード時のオーバーレイ描画モード設定関数 | |
bool | getStereoOverlayMode (void) |
立体視モード時のオーバーレイ描画モード取得関数 | |
![]() | |
fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT) | |
コンストラクタ | |
fk_Type | getObjectType (void) const |
タイプ取得関数 | |
シーンを制御するクラス
このクラスは、シーンを制御するための機能を提供します。
シーンは、複数のモデルとカメラからなる「場面」を意味します。 利用者は、シーンに描画を想定した複数のモデルとカメラを示すモデルを登録します。 このシーンを fk_Window クラスによるウィンドウに設定することによって、 そのシーンに登録されたモデル群が実際に描画される仕組みになっています。
シーンは、別々のインスタンスとして複数存在することが可能です。 異なるシーンを同時に生成しておき、 実際にウィンドウに描画するシーンを動的に切り替えることができます。 任意のモデルは、複数のシーンに同時に登録することができます。
シーンにモデルを登録するための機能は、 実質的には fk_DisplayLink クラスに集約されています。 fk_Scene クラスは fk_DisplayLink クラスの派生クラスとなっており、 fk_DisplayLink クラスのメンバ関数を利用することが可能です。 モデル登録についての機能は、 fk_DisplayLink クラスの説明を参照して下さい。
シーンは、通常のモデルとは別に霧に関する設定も可能です。 霧に関する機能は、 fk_Fog クラスに集約されており、 fk_Scene クラスは fk_Fog クラスの派生クラスとなっています。 霧についての機能は、 fk_Fog クラスの説明を参照して下さい。
本クラス固有のメンバ関数は、背景色設定に関する機能と、 透過処理に関するものとなっています
FK::fk_Scene::fk_Scene | ( | void | ) |
コンストラクタ
|
virtual |
デストラクタ
void FK::fk_Scene::setBGColor | ( | fk_Color | col | ) |
void FK::fk_Scene::setBGColor | ( | float | r, |
float | g, | ||
float | b | ||
) |
背景色設定関数2
シーンの背景色を設定します。 各色要素は 0 から 1 までの値を取ります。 それ以外の値が与えられた場合、0 以下なら 0 に、1 以上なら 1 に丸められます。
[in] | r | 背景色の赤要素 |
[in] | g | 背景色の緑要素 |
[in] | b | 背景色の青要素 |
fk_Color FK::fk_Scene::getBGColor | ( | void | ) |
void FK::fk_Scene::setBlendStatus | ( | bool | mode | ) |
透過処理設定関数
シーンに対し、透過処理を有効とするかどうかを設定します。 有効にした場合、シーン全体で透過処理がなされますが、 無効な場合と比較して描画速度が遅くなります。 これは、実際に透過する物体があるかどうかに関わらず、 速度が遅くなるということに注意して下さい。 デフォルトでは透過処理設定は無効となっています。
[in] | mode | true であれば有効、false であれば無効とします。 |
bool FK::fk_Scene::getBlendStatus | ( | void | ) |
void FK::fk_Scene::setShadowMode | ( | fk_ShadowMode | mode | ) |
影表示設定変更関数
影表示の設定を行います。 以下の中から選択できます。
[in] | mode | 影表示モード |
fk_ShadowMode FK::fk_Scene::getShadowMode | ( | void | ) |
影表示設定参照関数
影表示設定を参照します。
void FK::fk_Scene::setShadowVec | ( | const fk_Vector & | v | ) |
影光線方向設定関数1
影を生成する際の光の方向を設定します。
[in] | v | 光の方向ベクトル |
void FK::fk_Scene::setShadowVec | ( | double | x, |
double | y, | ||
double | z | ||
) |
影光線方向設定関数2
影を生成する際の光の方向を設定します。
[in] | x | 光の方向ベクトル x 成分 |
[in] | y | 光の方向ベクトル y 成分 |
[in] | z | 光の方向ベクトル z 成分 |
fk_Vector FK::fk_Scene::getShadowVec | ( | void | ) |
影光線方向取得関数
影生成光線の方向を取得します。
void FK::fk_Scene::setShadowResolution | ( | int | resolution | ) |
シャドウマップ解像度設定関数
影生成に使用するシャドウマップテクスチャの解像度を指定します。 この解像度は影表示の質と実行速度に大きく影響します。 解像度が高いと影のディザーは目立たなくなりますが、描画速度が低下し、 また実行環境によっては表示に異常をきたすことがあります。 解像度が低い場合は描画速度が向上しますが、 ディザーが発生しやすくなります。
この解像度は 16 以上の 2の累乗数であることが前提となっており、 その条件を満たさない場合は 15 以下の場合は 16、 それ以外の数値の場合はその数値未満の最大の2の累乗数が設定されます。
シャドウマップのディザーを目立たなくするには、 解像度だけでなく処理範囲も重要な要素です。 処理範囲については setShadowAreaSize(), setShadowDistance() を参照して下さい。
[in] | resolution | シャドウマップ解像度 |
int FK::fk_Scene::getShadowResolution | ( | void | ) |
void FK::fk_Scene::setShadowAreaSize | ( | double | size | ) |
シャドウマップ領域設定関数
影は空間中の直方体領域の内部に生成されますが、 この直方体のうち影光線ベクトルに垂直な辺の長さを設定します。 この値が大きいほど広い領域に対し影を生成しますが、 この値が大きくなるにつれて影の粒度も荒くなります。 シーンの状況に応じて適切な値を設定する必要があります。
[in] | size | 影生成領域の大きさ |
double FK::fk_Scene::getShadowAreaSize | ( | void | ) |
void FK::fk_Scene::setShadowDistance | ( | double | distance | ) |
シャドウマップ領域奥行き幅設定関数
影は空間中の直方体領域の内部に生成されますが、 この直方体のうち影光線ベクトルに平行な辺の長さを設定します。 この値が大きいほど広い領域に対し影を生成しますが、 一方で大きいほど計算精度が悪くなり、描画の不具合を生じやすくなります。 通常は setShadowAreaSize() の設定値と同程度にしておくことが無難です。
[in] | distance | シャドウマップ領域奥行き幅 |
double FK::fk_Scene::getShadowDistance | ( | void | ) |
void FK::fk_Scene::setShadowVisibility | ( | double | value | ) |
影濃度設定関数
影の濃度を設定します。 この値が大きいほど影となる部分の輝度は低くなる、つまり影自体は濃くなってきます。 最小値は 0, 最大値は 1 で、0 のときは影効果は無効となります。 1 の場合、影となる領域は一切光が当たってない状況の輝度(色)となります。
[in] | value | 影濃度。0 で最小、1 で最大で、大きいほど影が濃くなります。 |
double FK::fk_Scene::getShadowVisibility | ( | void | ) |
影濃度取得関数
影の濃度を取得します。
void FK::fk_Scene::setShadowBias | ( | double | bias | ) |
影バイアス値設定関数
影バイアス値を設定します。 FK での影生成処理は「シャドウマップ」という手法を用いています。 シャドウマップによる影生成では「シャドウアクネ」というモアレ模様が生じることがあります。 シャドウアクネを防ぐ方法としては、バイアス値を用いて補正を行いますが、 本関数はこのバイアス値を設定するものです。 バイアス値は正の微小値であり、デフォルトでは 0.0005 となっています。 この値が小さいとシャドウアクネが生じやすくなります。 しかし、この値が大きい場合は正常な影が生成できなくなります。 適切な値は様々な要因が関わってくるため、 シャドウアクネが生じた場合は適正な値を試行錯誤する必要があります。
[in] | bias | 影バイアス値 |
double FK::fk_Scene::getShadowBias | ( | void | ) |
影バイアス値取得関数
影バイアス値を取得します。