Just My Life & My Work

[GLSL] Normal Color

Position Color之後,Normal也可以當成Color,只要將xyz座標的範圍限制在[0,1],接著指定給color即可。

vertex shader程式碼:

//varying float xpos;
//varying float ypos;
//varying float zpos;
varying vec4 color;

void main(void)
{
  //xpos = clamp(gl_Vertex.x,0.0,1.0);
  //ypos = clamp(gl_Vertex.y,0.0,1.0);
  //zpos = clamp(gl_Vertex.z,0.0,1.0);
  color.xyz = clamp(gl_Normal.xyz,0.0,1.0);

  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex.xyzw;
}

fragment shader程式碼:

//varying float xpos;
//varying float ypos;
//varying float zpos;
varying vec4 color;

void main (void)
{
   gl_FragColor = color;
   //gl_FragColor = vec4 (xpos, ypos, zpos, 1.0);
}

只修改vertex shader的一行程式:

color.xyzw = clamp(gl_Vertex.xyzw,0.0,1.0);

color.xyz = clamp(gl_Normal.xyz,0.0,1.0);

這裡要注意的是:gl_Vertex為四維,gl_Normal為三維。

想要玩些變化只要xyz排列組合即可!這是我覺得它結構很神奇的地方,而且可以重複:xxx、xxy、yzz等等。

teapot

cow

可看到teapot和cow因為選轉的角度差不多,法向量的方向也差不多,於是blue在左、red在右、green在上,原理很簡單,(r,g,b)指定給(x,y,z),對應之下就是所看到的圖。

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲