スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GLSLによるMatcapの実装

Zbrush等で実装されているMatcapですが、GLSL等でも簡単に作れるわりに
色々な表現が出来て便利です。


ということで、GLSLのソースコード。


頂点シェーダ
varying vec3 v_normal;


void main(void)
{
  v_normal = normalize(gl_NormalMatrix * gl_Normal);

  gl_Position = ftransform();

  gl_FrontColor = gl_Color;

  gl_ClipVertex = gl_ModelViewMatrix * gl_Vertex;
}



フラグメントシェーダ
varying vec3 v_normal;

uniform sampler2D tex_matcap;


float NormToUV(float n)
{
  float t = 0.5 + n * 0.5;
  if (!gl_FrontFacing)
    t = 1.0 - t;

  return t;
}

vec4 GetMatcapColor()
{
  vec3 n = normalize(v_normal);
  float tx = NormToUV(n.x);
  float ty = NormToUV(-n.y);

  vec4 env_texcoord = vec4(tx, ty, 0.01.0);
  return texture2DProj(tex_matcap, env_texcoord);
}

void main (void)
{
  gl_FragColor = GetMatcapColor();
}



このようにシェーダを作成し、あとは下記のような半球に対するレンダリング結果画像をテクスチャとして割り当てます。

snapshot_257_140119_060803.png



レンダリング結果
qgv_snap_20140119_055314_582.png qgv_snap_20140119_055447_714.png qgv_snap_20140119_055338_938.png qgv_snap_20140119_055329_952.png

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。