FineKernelToolKit: FK::fk_Scene クラス

FineKernelToolKit 4.3.0

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

シーンを制御するクラス [詳解]

`#include <FK/Scene.h>`

FK::fk_Scene の継承関係図
[凡例]
FK::fk_Scene 連携図
[凡例]

## 公開メンバ関数

| 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::fk_Fog に属する継承公開メンバ関数
| 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::fk_DisplayLink に属する継承公開メンバ関数
| 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::fk_BaseObject に属する継承公開メンバ関数
| 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_DisplayLink, fk_Fog, fk_Window

## 構築子と解体子

## ◆ fk_Scene()

FK::fk_Scene::fk_Scene | ( | void |  | ) |

コンストラクタ

## ◆ ~fk_Scene()

virtual FK::fk_Scene::~fk_Scene | ( |  | ) |

virtual

デストラクタ

## 関数詳解

## ◆ setBGColor() [1/2]

void FK::fk_Scene::setBGColor | ( | fk_Color | col | ) |

背景色設定関数1

シーンの背景色を設定します。

引数

  [in] | col | 背景色

参照
  setBGColor(float, float, float), fk_Color, getBGColor()

## ◆ setBGColor() [2/2]

void FK::fk_Scene::setBGColor | ( | float | r,
|  | float | g,
|  | float | b )

背景色設定関数2

シーンの背景色を設定します。 各色要素は 0 から 1 までの値を取ります。 それ以外の値が与えられた場合、0 以下なら 0 に、1 以上なら 1 に丸められます。

引数

  [in] | r | 背景色の赤要素
  [in] | g | 背景色の緑要素
  [in] | b | 背景色の青要素

参照
  setBGColor(fk_Color), getBGColor()

## ◆ getBGColor()

fk_Color FK::fk_Scene::getBGColor | ( | void |  | ) |

背景色参照関数

シーンの背景色を取得します。

戻り値
  背景色

参照
  fk_Color, setBGColor(fk_Color), setBGColor(float, float, float)

## ◆ setBlendStatus()

void FK::fk_Scene::setBlendStatus | ( | bool | mode | ) |

透過処理設定関数

シーンに対し、透過処理を有効とするかどうかを設定します。 有効にした場合、シーン全体で透過処理がなされますが、 無効な場合と比較して描画速度が遅くなります。 これは、実際に透過する物体があるかどうかに関わらず、 速度が遅くなるということに注意して下さい。 デフォルトでは透過処理設定は無効となっています。

覚え書き
  実行するハードウェアによっては、 シーンに登録した順番によって適切な透過処理がなされないことがあります。 カメラからみて手前側にある形状が透明(あるいは半透明)であり、 奥側にある形状が透けて見える状況を想定したとします。 このとき、手前側のモデルの方がシーンの登録順が先であった場合、 透けて見えるはずの奥側の形状が表示されないという現象が起こることがあります。 この場合、シーンの登録順を変更すれば奥側の形状が透けて見えるようになりますが、 カメラとの位置関係を常に監視し、 登録順を変動させなければならないという問題が生じます。

引数

  [in] | mode | true であれば有効、false であれば無効とします。

参照
  fk_Material::setAlpha()

## ◆ getBlendStatus()

bool FK::fk_Scene::getBlendStatus | ( | void |  | ) |

透過処理参照関数

現在の透過処理状態を取得します。

戻り値
  有効であれば true を、無効であれば false を返します。

参照
  setBlendStatus()

## ◆ setShadowMode()

void FK::fk_Scene::setShadowMode | ( | fk_ShadowMode | mode | ) |

影表示設定変更関数

影表示の設定を行います。 以下の中から選択できます。

- fk_ShadowMode::HARD
  ハードシャドウを描画します。 影表示を有効とする設定の中で描画は高速ですが、 影の内外部分の境界が明瞭なため、ディザーが目立ちます。 ディザーを改善するには、ソフトシャドウを利用するか、 シャドウマップ解像度を高く設定します。
- fk_ShadowMode::SOFT_FAST
  速度重視設定のソフトシャドウを描画します。 ソフトシャドウは、影の内外部分の境界に対しエイリアシング処理を施したものであり、 多くの場合でハードシャドウよりも印象が良くなります。 ただし、ハードシャドウよりも実行速度は低下します。
- fk_ShadowMode::SOFT_NICE
  質重視設定のソフトシャドウを描画します。 この設定は fk_ShadowMode::SOFT_FAST よりも高い質のソフトシャドウを生成しますが、 描画速度が低下する場合があります。
- fk_ShadowMode::OFF
  影表示を無効とします。デフォルトはこの設定となります。 影表示が有効な場合よりもかなり描画速度が速くなります。

引数

  [in] | mode | 影表示モード

## ◆ getShadowMode()

fk_ShadowMode FK::fk_Scene::getShadowMode | ( | void |  | ) |

影表示設定参照関数

影表示設定を参照します。

戻り値
  影表示モード

## ◆ setShadowVec() [1/2]

void FK::fk_Scene::setShadowVec | ( | const fk_Vector & | v | ) |

影光線方向設定関数1

影を生成する際の光の方向を設定します。

引数

  [in] | v | 光の方向ベクトル

## ◆ setShadowVec() [2/2]

void FK::fk_Scene::setShadowVec | ( | double | x,
|  | double | y,
|  | double | z )

影光線方向設定関数2

影を生成する際の光の方向を設定します。

引数

  [in] | x | 光の方向ベクトル x 成分
  [in] | y | 光の方向ベクトル y 成分
  [in] | z | 光の方向ベクトル z 成分

## ◆ getShadowVec()

fk_Vector FK::fk_Scene::getShadowVec | ( | void |  | ) |

影光線方向取得関数

影生成光線の方向を取得します。

戻り値
  光の方向ベクトル

## ◆ setShadowResolution()

void FK::fk_Scene::setShadowResolution | ( | int | resolution | ) |

シャドウマップ解像度設定関数

影生成に使用するシャドウマップテクスチャの解像度を指定します。 この解像度は影表示の質と実行速度に大きく影響します。 解像度が高いと影のディザーは目立たなくなりますが、描画速度が低下し、 また実行環境によっては表示に異常をきたすことがあります。 解像度が低い場合は描画速度が向上しますが、 ディザーが発生しやすくなります。

この解像度は 16 以上の 2の累乗数であることが前提となっており、 その条件を満たさない場合は 15 以下の場合は 16、 それ以外の数値の場合はその数値未満の最大の2の累乗数が設定されます。

シャドウマップのディザーを目立たなくするには、 解像度だけでなく処理範囲も重要な要素です。 処理範囲については setShadowAreaSize(), setShadowDistance() を参照して下さい。

引数

  [in] | resolution | シャドウマップ解像度

参照
  setShadowMode(), setShadowVec(), setShadowAreaSize(), setShadowDistance()

## ◆ getShadowResolution()

int FK::fk_Scene::getShadowResolution | ( | void |  | ) |

シャドウマップ解像度取得関数

シャドウマップの解像度を取得します。

戻り値
  解像度

参照
  setShadowResolution()

## ◆ setShadowAreaSize()

void FK::fk_Scene::setShadowAreaSize | ( | double | size | ) |

シャドウマップ領域設定関数

影は空間中の直方体領域の内部に生成されますが、 この直方体のうち影光線ベクトルに垂直な辺の長さを設定します。 この値が大きいほど広い領域に対し影を生成しますが、 この値が大きくなるにつれて影の粒度も荒くなります。 シーンの状況に応じて適切な値を設定する必要があります。

引数

  [in] | size | 影生成領域の大きさ

参照
  setShadowVec(), setShadowResolution(), setshadowDistance()

## ◆ getShadowAreaSize()

double FK::fk_Scene::getShadowAreaSize | ( | void |  | ) |

シャドウマップ領域取得関数

影生成直方体領域の大きさを取得します。

戻り値
  影生成領域の大きさ

参照
  setShadowAreaSize()

## ◆ setShadowDistance()

void FK::fk_Scene::setShadowDistance | ( | double | distance | ) |

シャドウマップ領域奥行き幅設定関数

影は空間中の直方体領域の内部に生成されますが、 この直方体のうち影光線ベクトルに平行な辺の長さを設定します。 この値が大きいほど広い領域に対し影を生成しますが、 一方で大きいほど計算精度が悪くなり、描画の不具合を生じやすくなります。 通常は setShadowAreaSize() の設定値と同程度にしておくことが無難です。

引数

  [in] | distance | シャドウマップ領域奥行き幅

参照
  setShadowVec(), setShadowResolution(), setShadowAreaSize()

## ◆ getShadowDistance()

double FK::fk_Scene::getShadowDistance | ( | void |  | ) |

シャドウマップ領域奥行き幅取得関数

影性生直方体領域の奥行き方向(影光線ベクトルに平行な方向)の幅を取得します。

戻り値
  領域奥行き幅

参照
  setShadowDistance()

## ◆ setShadowVisibility()

void FK::fk_Scene::setShadowVisibility | ( | double | value | ) |

影濃度設定関数

影の濃度を設定します。 この値が大きいほど影となる部分の輝度は低くなる、つまり影自体は濃くなってきます。 最小値は 0, 最大値は 1 で、0 のときは影効果は無効となります。 1 の場合、影となる領域は一切光が当たってない状況の輝度(色)となります。

引数

  [in] | value | 影濃度。0 で最小、1 で最大で、大きいほど影が濃くなります。

## ◆ getShadowVisibility()

double FK::fk_Scene::getShadowVisibility | ( | void |  | ) |

影濃度取得関数

影の濃度を取得します。

戻り値
  影濃度

## ◆ setShadowBias()

void FK::fk_Scene::setShadowBias | ( | double | bias | ) |

影バイアス値設定関数

影バイアス値を設定します。 FK での影生成処理は「シャドウマップ」という手法を用いています。 シャドウマップによる影生成では「シャドウアクネ」というモアレ模様が生じることがあります。 シャドウアクネを防ぐ方法としては、バイアス値を用いて補正を行いますが、 本関数はこのバイアス値を設定するものです。 バイアス値は正の微小値であり、デフォルトでは 0.0005 となっています。 この値が小さいとシャドウアクネが生じやすくなります。 しかし、この値が大きい場合は正常な影が生成できなくなります。 適切な値は様々な要因が関わってくるため、 シャドウアクネが生じた場合は適正な値を試行錯誤する必要があります。

引数

  [in] | bias | 影バイアス値

## ◆ getShadowBias()

double FK::fk_Scene::getShadowBias | ( | void |  | ) |

影バイアス値取得関数

影バイアス値を取得します。

戻り値
  影バイアス値