kGLModel
クラス KGLShadowMapping

java.lang.Object
  上位を拡張 kGLModel.KGLShadowMapping

public class KGLShadowMapping
extends java.lang.Object

影生成クラス
使用方法
・初期化
 init()
 設定するshadowMapのサイズで影の精度がきまる。
 ただし、大きすぎるとメモリ確保に失敗するのでホドホドに
 (FBOがサポートされていない場合はviewport依存になります)

・描画時の手順
 1)beforeMakeShadowMap()
 2)影付け対象を描画
 3)afterMakeShadowMap()
 これでクラス内部にshadowMapが作成される
 4)beforeDrowSiene() 描画対象の描画+影の描画 を行う為の準備
 5)影付け対象を描画 これは2)と同じ処理
 6)afterDrowSiene()

☆shadow map作成時(上記1),2))画面をクリアするのでバックグランドの描画等は shadow Map作成以降(上記3)と4)の間)に行う必要がある。
制限事項
描画領域のGL_MODELVIEW_MATRIXが拡大/縮小を含んでいるとうまくいかないと思う。。。

作成者:
kei

フィールドの概要
protected  KGLfbo fbo
          フレームバッファオブジェクト
 KGLLight light
          光源クラス
(package private)  int[] tex_shadowmap
          フレームバッファオブジェクトがサポートされていない場合に使用するテクスチャ
 
コンストラクタの概要
KGLShadowMapping(javax.media.opengl.GL in_gl, javax.media.opengl.glu.GLU in_glu)
          コンストラクタ
拡張機能の有無のチェック等をしている
 
メソッドの概要
 void afterDrowSiene()
          影付きモデル描画の後処理
シェーダプログラムの使用停止とテクスチャモデルの初期化
 void afterMakeShadowMap()
          shadow map作成後処理
描画情報を元にもどす。
 void beforeDrowSiene()
          影付きモデル描画の前処理
このメソッドでシェーダプログラムの使用を開始。
 void beforeMakeShadowMap(double lookX, double lookY, double lookZ, double fovy, double near, double upX, double upY, double upZ)
          shadow map作成準備
このメソッドを呼んだ後に影を付けたいモデルを描画することでshadow mapを作成する。
 void clear()
          使用していたOpenGLオブジェクトを削除する
 int getShadowMapImage(boolean isRGBA)
          内部で保持しているshadow map画像番号とりだし
 void init_tex_shadowmap()
          フレームバッファオブジェクトがサポートされていない場合に使用する シャドウマップ用テクスチャの設定をする。
 void init(KGLLight in_light, int[] in_textureUnit, int in_textureUnitForShadowMap, int shadowMapWidth, int shadowMapHeight, float minimam_shadow)
          使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない
 void init(KGLLight in_light, int[] in_textureUnit, int in_textureUnitForShadowMap, int shadowMapWidth, int shadowMapHeight, float minimam_shadow, boolean isDrowColorMap)
          使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない
カラーバッファに情報を書き出す設定もできる。
 void init(KGLLight in_light, int in_textureUnit, int in_textureUnitForShadowMap, int shadowMapWidth, int shadowMapHeight, float minimam_shadow)
          使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない
 void init(KGLLight in_light, int in_textureUnit, int in_textureUnitForShadowMap, int shadowMapWidth, int shadowMapHeight, float minimam_shadow, boolean isDrowColorMap)
          使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない
カラーバッファに情報を書き出す設定もできる。
(package private)  void setShaderInfoLog(KGLException gle, int shader)
          シェーダからの情報を例外情報に書き込む
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

fbo

protected KGLfbo fbo
フレームバッファオブジェクト


tex_shadowmap

int[] tex_shadowmap
フレームバッファオブジェクトがサポートされていない場合に使用するテクスチャ


light

public KGLLight light
光源クラス

コンストラクタの詳細

KGLShadowMapping

public KGLShadowMapping(javax.media.opengl.GL in_gl,
                        javax.media.opengl.glu.GLU in_glu)
                 throws KGLException
コンストラクタ
拡張機能の有無のチェック等をしている

パラメータ:
in_gl - OpenGLコマンド群をカプセル化したクラス
in_glu - OpenGLコマンド群をカプセル化したクラス
例外:
KGLException - 使用する拡張機能がドライバでサポートされていない
メソッドの詳細

getShadowMapImage

public int getShadowMapImage(boolean isRGBA)
内部で保持しているshadow map画像番号とりだし

パラメータ:
isRGBA - true:カラー画像 false:深度画像
戻り値:
OpenGLに登録しているテクスチャ番号

clear

public void clear()
使用していたOpenGLオブジェクトを削除する


init

public void init(KGLLight in_light,
                 int[] in_textureUnit,
                 int in_textureUnitForShadowMap,
                 int shadowMapWidth,
                 int shadowMapHeight,
                 float minimam_shadow)
          throws KGLException
使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない

パラメータ:
in_light - 光源オブジェクト
in_textureUnit - 描画で使用するテクスチャユニット番号(0〜31)
in_textureUnitForShadowMap - shadow mapとして使用するテクスチャユニット番号(0〜31)
shadowMapWidth - shadow mapのサイズ(幅)
shadowMapHeight - shadow mapのサイズ(高さ)
minimam_shadow - 影の最低透明度
例外:
KGLException - シェーダプログラムのコンパイル/リンク失敗
KGLException::getInfo()で詳細情報が取り出せる。

init

public void init(KGLLight in_light,
                 int in_textureUnit,
                 int in_textureUnitForShadowMap,
                 int shadowMapWidth,
                 int shadowMapHeight,
                 float minimam_shadow)
          throws KGLException
使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない

パラメータ:
in_light - 光源オブジェクト
in_textureUnit - 描画で使用するテクスチャユニット番号(0〜31)
in_textureUnitForShadowMap - shadow mapとして使用するテクスチャユニット番号(0〜31)
shadowMapWidth - shadow mapのサイズ(幅)
shadowMapHeight - shadow mapのサイズ(高さ)
minimam_shadow - 影の最低透明度
例外:
KGLException - シェーダプログラムのコンパイル/リンク失敗
KGLException::getInfo()で詳細情報が取り出せる。

init

public void init(KGLLight in_light,
                 int in_textureUnit,
                 int in_textureUnitForShadowMap,
                 int shadowMapWidth,
                 int shadowMapHeight,
                 float minimam_shadow,
                 boolean isDrowColorMap)
          throws KGLException
使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない
カラーバッファに情報を書き出す設定もできる。が、あくまでもデバッグ用

パラメータ:
in_light - 光源オブジェクト
in_textureUnit - 描画で使用するテクスチャユニット番号(0〜31)
in_textureUnitForShadowMap - shadow mapとして使用するテクスチャユニット番号(0〜31)
shadowMapWidth - shadow mapのサイズ(幅)
shadowMapHeight - shadow mapのサイズ(高さ)
minimam_shadow - 影の最低透明度
isDrowColorMap - カラーバッファにも書き出すかどうかのフラグ
カラーバッファはあくまでもデバッグ用
例外:
KGLException - シェーダプログラムのコンパイル/リンク失敗
KGLException::getInfo()で詳細情報が取り出せる。

init

public void init(KGLLight in_light,
                 int[] in_textureUnit,
                 int in_textureUnitForShadowMap,
                 int shadowMapWidth,
                 int shadowMapHeight,
                 float minimam_shadow,
                 boolean isDrowColorMap)
          throws KGLException
使用準備
shadow mapのサイズで影の精度がきまる
フレームバッファオブジェクトがサポートされていない場合はviewport依存になるので、 shadowMapWidth、shadowMapHeightは使用されない
カラーバッファに情報を書き出す設定もできる。が、あくまでもデバッグ用

パラメータ:
in_light - 光源オブジェクト
in_textureUnit - 描画で使用するテクスチャユニット番号(0〜31)
in_textureUnitForShadowMap - shadow mapとして使用するテクスチャユニット番号(0〜31)
shadowMapWidth - shadow mapのサイズ(幅)
shadowMapHeight - shadow mapのサイズ(高さ)
minimam_shadow - 影の最低透明度
isDrowColorMap - カラーバッファにも書き出すかどうかのフラグ
カラーバッファはあくまでもデバッグ用
例外:
KGLException - シェーダプログラムのコンパイル/リンク失敗
KGLException::getInfo()で詳細情報が取り出せる。

init_tex_shadowmap

public void init_tex_shadowmap()
フレームバッファオブジェクトがサポートされていない場合に使用する シャドウマップ用テクスチャの設定をする。
サイズはviewportのサイズになる。
viewportのサイズが変わる時には、このメンバを呼んだ方がいい。


beforeMakeShadowMap

public void beforeMakeShadowMap(double lookX,
                                double lookY,
                                double lookZ,
                                double fovy,
                                double near,
                                double upX,
                                double upY,
                                double upZ)
shadow map作成準備
このメソッドを呼んだ後に影を付けたいモデルを描画することでshadow mapを作成する。
fovyとnearはデバッグ用にカラーバッファを書き出して調整するといいでしょう。。。

パラメータ:
lookX - 光源から見る先(X座標)
lookY - 光源から見る先(Y座標)
lookZ - 光源から見る先(Z座標)
fovy - 光源から見る時の視体積の画角
near - 光源から見る時の視体積の手前の位置
upX - 光源から見る時の上方向のベクトル(X)
upY - 光源から見る時の上方向のベクトル(Y)
upZ - 光源から見る時の上方向のベクトル(Z)

afterMakeShadowMap

public void afterMakeShadowMap()
shadow map作成後処理
描画情報を元にもどす。


beforeDrowSiene

public void beforeDrowSiene()
影付きモデル描画の前処理
このメソッドでシェーダプログラムの使用を開始。
このメソッドを呼んだ後に影を付けたいモデルを描画すると、影付きで描画される。


afterDrowSiene

public void afterDrowSiene()
影付きモデル描画の後処理
シェーダプログラムの使用停止とテクスチャモデルの初期化


setShaderInfoLog

void setShaderInfoLog(KGLException gle,
                      int shader)
シェーダからの情報を例外情報に書き込む

パラメータ:
gle - 書き込み先例外情報
shader - 対象シェーダ番号