看起来像你想要Rim Lighting。这不需要任何额外的通行证。
c.f. http://oneclick-code.blogspot.co.uk/2012/01/ios-opengl-es-20-lighting-models-for.html
注意:示例中有很多额外的东西,但关键点是:将每个顶点的法线与相机视图向量的方向进行比较。当它们成直角时,(点积== 0)应用“全”光。当他们是parellel(点产品==长度)时,应用零光源。
varying mediump vec3 OUT_View;
varying mediump vec3 OUT_Light;
varying mediump vec3 OUT_Normal;
varying mediump vec2 OUT_TexCoord;
uniform sampler2D EXT_TEXTURE_01;
uniform sampler2D EXT_TEXTURE_02;
uniform sampler2D EXT_TEXTURE_03;
uniform sampler2D EXT_TEXTURE_04;
void main(void)
{
highp vec4 vDiffuseColor = vec4(0.0, 0.0, 0.5, 1.0);
highp float fDiffuseFactor = 0.2 + max (dot (OUT_Normal, OUT_Light), 0.0);
highp vec4 clr;
if (fDiffuseFactor < 0.3)
vDiffuseColor = vDiffuseColor * 0.1;
else
if (fDiffuseFactor < 0.7)
vDiffuseColor = vDiffuseColor * 0.5;
else
if (fDiffuseFactor < 0.8)
vDiffuseColor = vDiffuseColor;
else
vDiffuseColor = vDiffuseColor * 1.3;
gl_FragColor = vDiffuseColor;
}
如果你有顶点的法线,你可以使用它们。正常的z值越接近零,纹理颜色就会增加一些亮度。 – harism