フラグメントシェーダ

最終更新日10 Feb 2017 12:03

ピクセル1個につき1つ存在するシェーダ。

gl_ではじまる入力変数と出力変数

OpenGL OpenGL ES type 意味
gl_FragCoord vec4 ウィンドウ座標での位置。
gl_FrontFacing
gl_PointCoord
gl_Color glColor()
gl_SecondaryColor
gl_TexCoord
gl_FogFragCoord
gl_PointCoord1 vec2 点の中での相対位置
gl_FrontColor プロファイルによりけり

gl_TexCorrdは頂点シェーダの時とちがって、補間されたなめらかな値が来ます
アトリビュート変数以外の組み込み変数

フラグメントシェーダだけでなんでも描ける!?

ShaderToyというシェーダコードのSNSサイトがあります。
ここで様々なテクニックを見ることができます。
このサイトでは外部データの入力は受け付けてません、にもかかわらずそれはもう多種多様な絵が出てきます。
フラグメントシェーダだけで色々な形を描く様々なテクニックがあります。
私がソースコード読んだ中でわかったことをまとめていきたいと思います。

フラグメントシェーダだけで形を描くには?

  1. アルファ値を使う….この方程式0>のとこだけアルファ値1とかにする
  2. if文で分岐する
  3. 描きたい物体の頂点と現在のピクセルとの距離を計算して、ある一定の閾値以内だったら色を塗る。

などの手法でやられているようです。
だったら数式で表現されます。
立方体のように少ない頂点だったらシェーダコード内に数値が直貼りされています。

  • 三角形で描画して、フラグメントシェーダで来る点と三角形の衝突判定を重心座標を使ってやり、内側なら描画する[1]
Bibliography
1. Rastelizer…from Shadertoy

opengl2


files

サポートサイト Wikidot.com opengl2