cocos2d里的法线贴图

cocos2d里的法线贴图,第1张

概述法线贴图: 可以看到法线贴图整体一般都是偏向蓝色调,这是因为做贴图的时候法线一般朝向z轴就是vec3(0,0,1),  大象的头顶和脊梁都朝向y轴就是vec3(0,1,0)所以偏蓝,大腿和屁股朝向x轴vec3(1,0,0)所以偏红。 下面是2d光照的shader: #ifdef GL_ESprecision mediump float;#endif//这个好像没有用啊varying ve

法线贴图:


可以看到法线贴图整体一般都是偏向蓝色调,这是因为做贴图的时候法线一般朝向z轴就是vec3(0,1), 大象的头顶和脊梁都朝向y轴就是vec3(0,1,0)所以偏蓝,大腿和屁股朝向x轴vec3(1,0)所以偏红。

下面是2d光照的shader:

#ifdef GL_ESprecision mediump float;#endif//这个好像没有用啊varying vec4 v_fragmentcolor;//纹理坐标varying vec2 v_texCoord;//法线贴图uniform sampler2D u_normalMap;//系数uniform float u_kBump;//在贴图里的本地坐标位置uniform vec4  u_lightPosInLocalSpace;//纹理大小uniform vec2  u_contentSize;//漫反色系数uniform vec3  u_diffuseL;voID main(voID){    vec4 texcolor=texture2D(CC_Texture0,v_texCoord);    //获取发现贴图的颜色	vec3 normal=texture2D(u_normalMap,v_texCoord).rgb;	//把颜色转换到[-1,-1]	normal=normal*2.0-1.0;	normal.y=-normal.y;	if(u_kBump!=1.0)	{        //if the vertex.z mult kBump,then the normal.z should div kBump and re-normalize        normal=vec3(normal.x,normal.y,normal.z/u_kBump);        normal=normalize(normal);    }	vec4 curPixelPosInLocalSpace=vec4(v_texCoord.x*u_contentSize.x,(1.0-v_texCoord.y)*u_contentSize.y,0.0,1.0);	vec4 lightDir=normalize(curPixelPosInLocalSpace-u_lightPosInLocalSpace);	vec3 posTolight=-lightDir.xyz;	//计算漫反射  夹角越大反射的强度越小	float normDotPosTolight=max(0.0,dot(normal,posTolight));	vec4 diffuse=vec4(normDotPosTolight*u_diffuseL,1.0);	//环境光   这个写的比较简单  环境光是有计算公式的 根据距离会衰减	vec4 ambIEnt=vec4(0.5,0.5,1);	gl_Fragcolor=texcolor*vec4(vec3(diffuse+ambIEnt),diffuse.a);;}

其实还有漫反色贴图,镜面反射贴图,都可以加上去。

推荐文章:http://learnopengl-cn.readthedocs.io/zh/latest/05%20Advanced%20lighting/04%20normal%20MapPing/

http://learnopengl-cn.readthedocs.io/zh/latest/02%20lighting/04%20lighting%20maps/

http://blog.sina.com.cn/s/blog_56352fef0101j0rx.HTML

http://www.cnblogs.com/freeblues/p/5742956.HTML




高斯模糊:

#ifdef GL_ESprecision mediump float;#endifvarying vec4 v_fragmentcolor;varying vec2 v_texCoord;//纹理尺寸uniform vec2 resolution;//采样的半径uniform float blurRadius;//一行采样的个数uniform float sampleNum;vec4 blur(vec2);voID main(voID){    vec4 col = blur(v_texCoord); //* v_fragmentcolor.rgb;    gl_Fragcolor = vec4(col) * v_fragmentcolor;}vec4 blur(vec2 p){    if (blurRadius > 0.0 && sampleNum > 1.0)    {        vec4 col = vec4(0);        vec2 unit = 1.0 / resolution.xy;                float r = blurRadius;		//采样的间隔距离        float sampleStep = r / sampleNum;                float count = 0.0;                for(float x = -r; x < r; x += sampleStep)        {            for(float y = -r; y < r; y += sampleStep)            {				//采样的权重  离得越近权重越大                float weight = (r - abs(x)) * (r - abs(y));                col += texture2D(CC_Texture0,p + vec2(x * unit.x,y * unit.y)) * weight;                count += weight;            }        }                return col / count;    }        return texture2D(CC_Texture0,p);}
总结

以上是内存溢出为你收集整理的cocos2d里的法线贴图全部内容,希望文章能够帮你解决cocos2d里的法线贴图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1083168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存