2005年7月11日月曜日

第六回タイトル 「透明感の表現」

第五回までのところで形状の表示、および移動が出来たかと思います。

このくらいできれば簡単なゲームやシミュレーションができますが、さらにうまい表現力を作るために透明感のある表示を行います。透明感のあるものと言えば水や煙、霧、ガラスと言ったものが上げられます。

それではまず例から


 float FogColor[]={0.8f,0.8,0.8,0.8f};    //フォグの色設定
 glEnable(GL_FOG);              //フォグを有効にする
 glFogi(GL_FOG_MODE , GL_LINEAR);   //フォグをライナー設定
 glFogi(GL_FOG_START , -10);       //スタートは-10から
 glFogi(GL_FOG_END , 10);          //最後は10まで
 glFogfv(GL_FOG_COLOR , FogColor );  //フォグの色設定

この例を描画の最初に設定してください。
そうすることにより白い霧のようなものが形状にかかると思います。

これは奥になればなるほど濃くなり、手前であれば薄くなると言った霧のようなものを表現するときに使います。白以外にも色の設定は出来ますし、奥行きの範囲指定もできますので応用次第では様々なことに使えると思います。


では次はブレンドです。
ブレンドとはその名前の通り混ぜるという意味です。他の言葉で言うと透過処理となります。以前説明した色の設定でアルファの項目があったかと思いますがそれを有効にします。


では例を

 glEnable(GL_BLEND);              //ブレンドの有効
 glBlendFunc(GL_SRC_ALPHA,
          GL_ONE_MINUS_SRC_ALPHA); //ブレンドの仕方

この2行をまた描画の最初に設定してください。


この2行を追加することによりブレンドが有効になります。このままでは全ての形状に対して透過してしまうので

 glDisable(GL_BLEND);//ブレンドの無効

これで無効としてください。


透過処理を行いたい場所だけ囲えば問題ないです。



ただしここで気をつけなければならないのが最初に描画したものに対して後から上にかぶさったものだけがブレンドされるということです。描画の順番がブレンドに影響されます。
手前に表示されるものが先に描画され、後から後ろに描画されるものと言う順番になると後ろのものは描画されない設定となっているためうまくブレンドできません。
もしうまくやりたい場合はDEPTHについてもう少し勉強してください。


今回は透過処理についてやりました。
これで表現方法はだいぶ増えたはずです。


では次はより簡単に形状を作成、表示する方法です。

 glFogi 関数説明:
 第1引数:設定項目
 第2引数:第1引数に対応する引数

 glBlendFunc関数説明:
 第1引数:設定項目
 第2引数:第1引数に対応する引数