Kamui2 Library - グローバル設定関数

kmGenerateFogTable

フォグテーブルの自動生成

書式

KMSTATUS kmGenerateFogTable( pFogTable, fFrontBorder, fBackBorder, fFogDensity, fHWFogDensity, dwFogType )
PKMFLOAT pFogTable
KMFLOAT fFrontBorder
KMFLOAT fBackBorder
KMFLOAT fFogDensity
KMFLOAT *fHWFogDensity
KMDWORD dwFogType

引数

pFogTable   (出力)生成したフォグテーブルを格納する配列へのポインタ
fFrontBorder   (入力)フォグが有効となる区間の前縁奥行き値
fBackBorder   (入力)フォグが有効となる区間の後縁奥行き値
fFogDensity   (入力)フォグの濃度
fHWFogDensity   (出力)フォグ係数
dwFogType   (入力)フォグテーブルのタイプ

戻り値

KMSTATUS_SUCCESS   成功
KMSTATUS_OUT_OF_RANGE   fBackBorderが0.0f以下、または fBackBorder > fFrontBorder、または fFogDensityが0.0fより小さい

解説

フォグテーブルを自動生成します。

引数 pFogTableは、生成したフォグテーブルを格納するための 128エントリの KMFLOAT形式の一次元配列へのポインタです。 各要素の内容は、0.0fから1.0fの範囲にクリッピングされます。 この関数がエラーを返した場合もそれなりのフォグテーブルが生成されますが、ユーザーの意図したものとは異なる効果となるでしょう。 pFogTableにNULLを指定した場合には、生成したフォグテーブルとfHWFogDensityを直ちにハードウェアに設定します。

引数 fFrontBorderは、フォグが有効となる区間の前縁奥行き値を指定します。この値は0.0fより大きく、またfBackBorder以上でなければなりません。

引数 fBackBorderは、フォグが有効となる区間の後縁奥行き値を指定します。この値は0.0fより大きくかつ fFrontBorder以下でなければなりません。

引数 fFogDensityは、フォグの濃度を指定します。 0.0f以上の浮動小数で指定します。

この値は、引数 dwFogTypeで指定するフォグのタイプにより、下記のように意味が変化します。

 定義   意味 
 KM_FOGTYPE_NONE   この値は意味を持ちません。 
 KM_FOGTYPE_LINEAR   生成されたフォグテーブルの各要素に、この値が乗算されます。フォグの濃度を制御することができます。 0.0fから1.0fまでの値を指定することができます。 
 KM_FOGTYPE_EXPONENTIAL   フォグテーブルの濃度傾斜を変化させることができます。値が大きいほど、傾斜は急峻になります。 0.0f以上の浮動小数で指定します。 
 KM_FOGTYPE_EXPONENTIAL2   フォグテーブルの濃度傾斜を変化させることができます。値が大きいほど、傾斜は急峻になります。 0.0f以上の浮動小数で指定します。 

引数fHWFogDensityの指し示すポインタには、 kmSetFogDensity()関数でPowerVRハードウェアに設定するフォグ係数を浮動小数で返します。 この値は kmConvertFogDensity()関数によってWORD値に変換した上で、kmSetFogDensity()関数を使用してハードウェアに設定してください。

引数 dwFogTypeには、フォグテーブルのタイプを指定します。 指定するタイプによって、生成されるフォグテーブルの濃度傾斜が異なります。

以下の中のいずれかを指定することができます。

 定義   意味 
 KM_FOGTYPE_NONE   フォグなし/フォグテーブルの全エントリはゼロ 
 KM_FOGTYPE_LINEAR   リニアフォグ/奥行き値fFrontBorderからfBackBorderまで線形に変化するフォグテーブル 
 KM_FOGTYPE_EXPONENTIAL   指数フォグ/ Direct3Dのexponentialフォグモードに相当 
 KM_FOGTYPE_EXPONENTIAL2   指数フォグ/ Direct3Dのexponential squaredフォグモードに相当 

フォグが有効となる区間の前縁および後縁の奥行き値を与えると、その区間になだらかなフォグがかかるようなフォグテーブルとフォグ係数を生成します。 フォグテーブルは、その最初のエントリが区間の後縁値(fBackBorder)のフォグ濃度を表すように生成されます(下図参照)。

同時に生成されるフォグ係数(*fHWFogDensity)を、 kmConvertFogDensity()関数と kmSetFogDensity()関数を使用してハードウェアに設定することにより、生成されたフォグテーブルの先頭エントリが区間の後縁値(fBackBorder)から参照されるようにできます。 この場合、フォグテーブルの最後尾(前縁)の内容は、奥行き値 = 248 × fBackBorder の位置のフォグ濃度を示すことになります。 すなわち、この関数で生成されるフォグテーブルの有効範囲は、奥行き値 = fBackBorder(後縁)から 248 × fBackBorder(前縁)までの範囲となります(ハードウェア仕様)。 fBackBorderの値の指定によっては、必ずしも指定したfFrontBorderまでの区間を完全にカバーできないことにご注意ください。


生成するフォグテーブルのタイプとして、濃度傾斜が異なる下記4種の中からいずれかを選択することができます。

■KM_FOGTYPE_NONE

フォグなしを指定します。フォグテーブルの全エントリにはゼロがセットされます。

■KM_FOGTYPE_LINEAR

リニアフォグを設定します。奥行き値fFrontBorderからfBackBorderまで、線形に変化するフォグテーブルを生成します。 fFogDensityが1.0の場合、フォグ濃度はfBackBorderの位置で1.0(最大濃度)、 fFrontBorderの位置で0.0(フォグなし)となります(下図赤色曲線)。 fFogDensityを1.0fから0.0fまでの範囲で変化させることにより、フォグ濃度の傾斜を変化させることができます。


■KM_FOGTYPE_EXPONENTIAL

指数フォグを設定します。 ある奥行き値Zに於けるフォグ濃度は、下記の式で決定されます。

フォグ濃度 = e ^ −( fFogDensity × Z )(eは自然対数の底、^はべき乗)

Direct3Dのexponentialフォグモードに相当します。 fFogDensityが1.0の場合は、Z値が1.0のときにフォグ濃度が0.367879...となるような指数グラフになります(下図赤色曲線)。 また、Z値がfBackBorderより小さい(奥の)区間については、fBackBorderの位置に於ける 値が維持されます。逆にZ値がfFrontBorderより大きい(手前の)区間については、フォグ濃度はゼロとなります。 fFogDensityはゼロ以上であればどのような値でも指定できます。 fFogDensityがゼロの場合は、フォグ濃度の傾斜はフラット(常に最大濃度)となり、 fFogDensityが大きいほど、フォグ濃度の傾斜は急峻になります。


■KM_FOGTYPE_EXPONENTIAL2

指数フォグを設定します。 フォグ濃度の傾斜はKM_FOGTYPE_EXPONENTIALの場合より急峻になります。 ある奥行き値Zに於けるフォグ濃度は、下記の式で決定されます。

フォグ濃度 = ( e ^ −( fFogDensity × Z )) ^ 2 (eは自然対数の底、^はべき乗計算を示します。)

Direct3Dのexponential squaredフォグモードに相当します。 fFogDensityが1.0の場合は、Z値が1.0のときにフォグ濃度が0.135335...となるような指数グラフになります。(下図赤色曲線)。 また、Z値がfBackBorderより小さい(奥の)区間については、fBackBorderの位置に於ける値が維持されます。 逆にZ値がfFrontBorderより大きい(手前の)区間については、フォグ濃度はゼロとなります。 fFogDensityはゼロ以上であればどのような値でも指定できます。 fFogDensityがゼロの場合は、フォグ濃度の傾斜はフラット(常に最大濃度)となり、 fFogDensityが大きいほど、フォグ濃度の傾斜は急峻になります。


フォグテーブルを自動生成させるには、下記の関数を使用します。

 関数   内容 
 kmGenerateFogTable()   フォグテーブルの生成 
 kmConvertFogDensity()    フォグ係数の変換 
 kmSetFogDensity()    フォグ係数の設定 
 kmSetFogTableColor()    フォグの色の設定 
 kmSetFogTable()    フォグテーブルの設定 


参照

kmConvertFogDensity()
 フォグ係数の変換
kmSetFogDensity()
 テーブルフォグの係数指定
kmSetFogTableColor()
 テーブルフォグカラーの指定
kmSetFogTable()
 フォグテーブルの設定

kmGenerateFogTable
COPYRIGHT © NEC Corporation / © SEGA ENTERPRISES, LTD., 1998-2000