Toon Shading, step 1
![](/images/cnblogs_com/pointer/stylistic_rendering.jpg)
学以致用。:)
不过略有不同的是我没有采用根据光线强度设置纹理坐标的方式,而是根据光线强度直接确定的当前象素的颜色值。
SHADER代码如下:
VertexShader
//-----------------------------------------------------------------------------
// vertex shader
//-----------------------------------------------------------------------------
![](/Images/OutliningIndicators/None.gif)
uniform vec3 LightPosition;
varying float diffuse;
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
void main(void)
{
vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex);
vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);
vec3 lightVec = normalize(LightPosition - ecPosition);
diffuse = max(dot(lightVec, tnorm), 0.0);
![](/Images/OutliningIndicators/InBlock.gif)
gl_Position = ftransform();
}
FragmentShader
//-----------------------------------------------------------------------------
// fragment shader
//-----------------------------------------------------------------------------
![](/Images/OutliningIndicators/None.gif)
varying float diffuse;
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
void main(void)
{
vec4 color;
![](/Images/OutliningIndicators/InBlock.gif)
if (diffuse > 0.66)
color = vec4(0.75, 0.75, 0.75, 1);
else if (diffuse > 0.33)
color = vec4(0.63, 0.63, 0.63, 1);
else
color = vec4(0.50, 0.50, 0.50, 1);
![](/Images/OutliningIndicators/InBlock.gif)
gl_FragColor = color;
}
下一步是勾边。
原文地址:https://www.cnblogs.com/Pointer/p/34996.html