FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Public メソッド | すべてのメンバ一覧
クラス fk_Light

光源を管理するクラス [詳細]

+ fk_Lightに対する継承グラフ
+ fk_Lightのコラボレーション図

Public メソッド

 fk_Light (fk_LightType type=FK_PARALLEL_LIGHT)
 コンストラクタ [詳細]
 
virtual ~fk_Light ()
 デストラクタ [詳細]
 
void setLightType (fk_LightType type)
 光源タイプ設定関数 [詳細]
 
fk_LightType getLightType (void)
 光源タイプ取得関数 [詳細]
 
void setAttenuation (double k_l, double k_q, double k_c=1.0)
 減衰係数設定関数 [詳細]
 
void setSpotCutOff (double theta)
 スポットライト効果範囲角度設定関数 [詳細]
 
void setSpotExponent (double alpha)
 スポットライト減衰指数設定関数 [詳細]
 
double getAttenuation (int num)
 減衰係数参照関数 [詳細]
 
double getSpotCutOff (void)
 スポットライト効果範囲角度参照関数 [詳細]
 
double getSpotExponent (void)
 スポットライト減衰指数参照関数 [詳細]
 
- Public メソッド inherited from fk_Shape
 fk_Shape (fk_ObjectType=FK_SHAPE)
 コンストラクタ [詳細]
 
virtual ~fk_Shape ()
 デストラクタ [詳細]
 
fk_PalettegetPaletteData (void)
 パレット取得関数 [詳細]
 
void clearMaterial (void)
 パレット初期化関数 [詳細]
 
void setObjMaterialID (int ID)
 オブジェクトマテリアル ID 設定関数 [詳細]
 
void pushPalette (fk_Material &mat)
 マテリアル追加関数 [詳細]
 
void setPalette (fk_Material &mat, int ID)
 マテリアル設定関数 [詳細]
 
void setMaterialMode (fk_MaterialMode mode)
 マテリアルモード設定関数 [詳細]
 
fk_MaterialMode getMaterialMode (void)
 マテリアルモード取得関数 [詳細]
 
int getObjMaterialID (void)
 オブジェクトマテリアル ID 取得関数 [詳細]
 
int getPaletteSize (void)
 パレット中のマテリアル格納数取得関数 [詳細]
 
fk_MaterialgetMaterial (int id)
 マテリアル取得関数 [詳細]
 
std::vector< fk_Material > * getMaterialVector (void)
 マテリアル配列取得関数 [詳細]
 
- Public メソッド inherited from fk_Attribute
 fk_Attribute (void)
 コンストラクタ [詳細]
 
virtual ~fk_Attribute ()
 デストラクタ [詳細]
 
bool setAttrII (const int key, const int value)
 キーが int 型、値が int 型である属性設定関数 [詳細]
 
bool setAttrID (const int key, const double value)
 キーが int 型、値が double 型である属性設定関数 [詳細]
 
bool setAttrIS (const int key, const std::string value)
 キーが int 型、値が string 型である属性設定関数 [詳細]
 
bool setAttrSI (const std::string key, const int value)
 キーが string 型、値が int 型である属性設定関数 [詳細]
 
bool setAttrSD (const std::string key, const double value)
 キーが string 型、値が double 型である属性設定関数 [詳細]
 
bool setAttrSS (const std::string key, const std::string value)
 キーが string 型、値が string 型である属性設定関数 [詳細]
 
int getAttrII (const int key) const
 キーが int 型、値が int 型である属性参照関数 [詳細]
 
double getAttrID (const int key) const
 キーが int 型、値が double 型である属性参照関数 [詳細]
 
std::string getAttrIS (const int key) const
 キーが int 型、値が string 型である属性参照関数 [詳細]
 
int getAttrSI (const std::string key) const
 キーが string 型、値が int 型である属性参照関数 [詳細]
 
double getAttrSD (const std::string key) const
 キーが string 型、値が double 型である属性参照関数 [詳細]
 
std::string getAttrSS (const std::string key) const
 キーが string 型、値が string 型である属性参照関数 [詳細]
 
bool existAttrII (const int key) const
 キーが int 型、値が int 型である属性存在参照関数 [詳細]
 
bool existAttrID (const int key) const
 キーが int 型、値が double 型である属性存在参照関数 [詳細]
 
bool existAttrIS (const int key) const
 キーが int 型、値が string 型である属性存在参照関数 [詳細]
 
bool existAttrSI (const std::string key) const
 キーが string 型、値が int 型である属性存在参照関数 [詳細]
 
bool existAttrSD (const std::string key) const
 キーが string 型、値が double 型である属性存在参照関数 [詳細]
 
bool existAttrSS (const std::string key) const
 キーが string 型、値が string 型である属性存在参照関数 [詳細]
 
bool deleteAttrII (const int key)
 キーが int 型、値が int 型である属性消去関数 [詳細]
 
bool deleteAttrID (const int key)
 キーが int 型、値が double 型である属性消去関数 [詳細]
 
bool deleteAttrIS (const int key)
 キーが int 型、値が string 型である属性消去関数 [詳細]
 
bool deleteAttrSI (const std::string key)
 キーが string 型、値が int 型である属性消去関数 [詳細]
 
bool deleteAttrSD (const std::string key)
 キーが string 型、値が double 型である属性消去関数 [詳細]
 
bool deleteAttrSS (const std::string key)
 キーが string 型、値が string 型である属性消去関数 [詳細]
 
- Public メソッド inherited from fk_BaseObject
 fk_BaseObject (fk_ObjectType type=FK_BASEOBJECT)
 コンストラクタ [詳細]
 
fk_ObjectType getObjectType (void) const
 タイプ取得関数 [詳細]
 

説明

光源を管理するクラス

このクラスは、光源を制御する機能を提供します。 FK における光源の位置づけは、形状と同様に fk_Model に登録を行い、 位置や方向の制御は fk_Model の機能を用いるようになっています。 シーンへの登録についても、他の形状クラスと同様です。

表現できる光源は「平行光源」、「点光源」、「スポットライト」の3種類です。 一般的に、平行光源が最も処理が速く、 点光源、スポットライトの順で処理時間がかかるようになります。 また、シーン内の光源数は最高で 8 個までという制限があります。 一般的には、光源を多く設置すると各光源の光量自体は減少していくため、 シーン全体が明るくなるわけではありません。 光源の設置は最低限に留め、 マテリアル設定など別の方法で明るさを調整すべきです。

「平行光源」とは、空間中のあらゆる場所に対して同一方向から照らされる光源のことです。 最も扱いやすく、処理速度も速いため、 点光源やスポットライトを用いる積極的な理由がないのであれば平行光源を利用すべきです。

「点光源」は空間中のある1点から発光する光源のことです。 点光源は属性として減衰係数を保持しており、 距離によって光量が減衰していく効果が可能です。 詳細は setAttenuation() を参照して下さい。 なお、この光源はあくまで面の発色輝度を計算するためのものであるため、 光源位置を注視するように設定しても光り輝く発色体た表示されるわけではありません。

「スポットライト」は特殊な点光源であり、光線方向に指向性があります。 特定のベクトルに近いほど光量が強く、方向がずれるほど光量が少なくなります。 詳しくは setSpotExponent() および setSpotCutOff() を参照して下さい。

参照
fk_Shape, fk_Model

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

fk_Light::fk_Light ( fk_LightType  type = FK_PARALLEL_LIGHT)

コンストラクタ

引数で光源タイプを指定できます。 省略した場合、平行光源となります。

引数
[in]type光源タイプ
virtual fk_Light::~fk_Light ( )
virtual

デストラクタ

関数

void fk_Light::setLightType ( fk_LightType  type)

光源タイプ設定関数

光源のタイプを設定します。

引数
[in]type光源タイプ
fk_LightType fk_Light::getLightType ( void  )

光源タイプ取得関数

現在の光源タイプを取得します。

戻り値
光源タイプ
void fk_Light::setAttenuation ( double  k_l,
double  k_q,
double  k_c = 1.0 
)

減衰係数設定関数

点光源やスポットライトにおける、 距離による減衰関数の係数を設定します。 距離 $d$ による減衰関数 $ f(d) $ は以下の式で表されます。

\[ f(d) = \frac{1}{k_l d + k_q d^2 + k_c} \]

ここで、 $k_l$ は線形減衰係数、 $k_q$ は2次減衰係数、 $k_c$ は一定減衰係数と呼ばれます。 デフォルトの状態は $k_l, k_q$ が 0、 $k_c$ が 1 に設定されています。 これは、距離による減衰が一切ない状態を意味します。

現実の物理特性は、点光源光量は距離の2乗に反比例するので、 2次減衰率係数が適していることになりますが、 実際の利用においては点光源の影響が著しく少なくなってしまい、 効果として望ましくない場合もあります。

引数
[in]k_l線形減衰係数
[in]k_q2次減衰係数
[in]k_c一定減衰係数
参照
setSpotExponent()
void fk_Light::setSpotCutOff ( double  theta)

スポットライト効果範囲角度設定関数

スポットライト光源における、 光が放射される角度 $\theta$ を設定します。 単位は弧度法(ラジアン)となります。

厳密には、光源位置を $ \mathbf{P} $、 光線方向を $\mathbf{L}$、 照射対象物体位置を $\mathbf{Q}$ としたとき、 以下の数式を満たすのであればスポットライトで照射されることになります。

\[ \theta \geq \frac{(\mathbf{Q} - \mathbf{P})\cdot\mathbf{L}} {|(\mathbf{Q} - \mathbf{P})\cdot\mathbf{L}|} \]

なお、デフォルトでは $\theta$$\frac{\pi}{16}$ に設定されています。

引数
[in]thetaスポットライト効果範囲角度
参照
setSpotExponent()
void fk_Light::setSpotExponent ( double  alpha)

スポットライト減衰指数設定関数

スポットライト光源における、 光源方向からの減衰の度合いを指数 $\alpha$ として設定します。

具体的には、 光源位置を $ \mathbf{P} $、 光線方向を $\mathbf{L}$、 照射対象物体位置を $\mathbf{Q}$ としたとき、 減衰関数 $g(\alpha)$ は以下の数式によって表されます。

\[ g(\alpha) = \max\left( \frac{(\mathbf{Q} - \mathbf{P})\cdot\mathbf{L}} {|(\mathbf{Q} - \mathbf{P})\cdot\mathbf{L}|}, \; 0\right)^\alpha \]

この関数は、光源から物体への方向ベクトル $ (\mathbf{Q} - \mathbf{P}) $ が 光源の方向ベクトル $ \mathbf{L}\ $ と角度が大きいほど、 減衰関数 $ g(\alpha) $ の値は小さくなっていくことを意味します。 そして、 $ \alpha $ は減衰の度合いを指数として指定することになり、 大きいほど減衰の度合いが強くなります。 $ \alpha $ が 0 であった場合、減衰は起こりません。 デフォルトでは $ \alpha $ は 0 に設定されています。

なお、もし $ g(\alpha) $ が 0 でなかったとしても、 setSpotCutOff() 関数で設定した照射範囲から外れてしまっている場合は、 光源からの照射光量は 0 となります。つまり、本関数による影響よりも setSpotCutOff() 関数による照射範囲の方が優先されることになりますので、 設定には注意が必要です。 また、この減衰効果は setAttenuation() 関数による減衰効果 $ f(d) $ と合わせて行われます。 つまり、実際の減衰量は $ f(d)\cdot g(\alpha) $ となります。

引数
[in]alphaスポットライト減衰指数
参照
setSpotCutOff(), setAttenuation()
double fk_Light::getAttenuation ( int  num)

減衰係数参照関数

距離による減衰関数の係数を参照します。

引数
[in]numどの減衰係数を得るかを整数値で指定します。
  • 0: 線形減衰係数を返します。
  • 1: 2次減衰係数を返します。
  • 2: 一定減衰係数を返します。
  • それ以外: 常に 0 を返します。
戻り値
指定された減衰係数の値
参照
setAttenuation()
double fk_Light::getSpotCutOff ( void  )

スポットライト効果範囲角度参照関数

スポットライト光源における、 光が放射される角度 $\theta$ を取得します。 単位は弧度法(ラジアン)となります。

戻り値
効果範囲角度
参照
setSpotCutOff()
double fk_Light::getSpotExponent ( void  )

スポットライト減衰指数参照関数

スポットライト光源における、 光源方向からの減衰の度合い指数を参照します。

戻り値
減衰度合い指数
参照
setSpotExponent()