タグ

ブックマーク / www.arakin.dyndns.org (3)

  • GLSLシェーダのQualifier変数タイプ

    GLSLのQualifier変数タイプ GLSLは日語の教科書がまだ少ないので、分かったことを書いておこうと思っていました。今回は、GLSLで初めてプログラムする場合、分かりにくい点の一つに変数のQuailifierプリフィックスがあるので、簡単に説明します。GLSLで使用される変数タイプにおいて、C言語等にはない種類としてQualifier(日語でなんと訳せばよいのかよく分かりません)があります。C言語にないのは当たり前で、シェーダ間、及びシェーダ-OpenGL間で渡す変数のタイプ宣言だからです。GLSLの仕様書や分厚い英語のリファレンスを見ると、次に示す4種類のQualifier変数があります。 OpenGLプログラムから渡す変数です。 頂点ごとに変化する値を渡すことができます。ビルトインのattribute変数としては、gl_Vertex, gl_Normalなどがあります。ユー

  • GLSLシェーダによるカートゥーンレンダリング

    今日は、GLSLによるカートゥーンを紹介しようと思います。割と簡単にでき、それなりに見栄えがするからです。その応用として、輪郭線も描画します。 カートゥーンの原理 カートゥーンはセルアニメ調のレンダリングです。左下の図に示すように、頂点vにおいて、法線と光源ベクトル(頂点から光源へのベクトル)との内積(照度)を、右下の図のようなテクスチャのs座標に当てはめることで簡単に実現できます。 更に、次の図の左のように、視線ベクトルと法線の内積を考えると、輪郭となる部分はほぼ0になります。そのため、その内積をt座標に割り当てることで、輪郭線を実現できます。 s座標もt座標も単位ベクトル同士の内積で計算できますが、その範囲は-1~1になるため、テクスチャマッピング(glTexParameterによる指定)をクランプに設定する必要があります。 バーテックスシェーダ(頂点シェーダ) 今回は、頂点シェーダで

  • GLSLシェーダによる簡単な描画プログラム

    やっとホームページのタイトル通り、GLSLを使用したサンプルプログラムをアップすることができました。最初、何を紹介しようかと迷ったのですが、GLSLそのものよりも、GLSLを読み込みんでコンパイルする方法にしました。現在、OpenGL2.1以降でオフラインコンパイラも検討されていますが、通常、実行時にシェーダをコンパイルするからです。 GLSLのロードとコンパイル シェーダプログラムにはバーテックスシェーダ(頂点シェーダともいいます)とフラグメントシェーダ(ピクセルシェーダともいいます)の2種類があり、二つセットで使用します。簡単な流れとしては、二つのシェーダプログラム(ソース)をそれぞれ読み込み、コンパイルし、それらをリンクして、プログラムオブジェクトを作成します。言葉で説明するよりも、プログラムを見た方が早いと思います。太字の部分がgl関数です。 int FUTL_LoadShader

    mae0510
    mae0510 2008/09/06
  • 1