OpenGLES—法线贴图
来源:互联网 发布:iphone6网络连接不上 编辑:程序博客网 时间:2024/05/16 15:01
{1:法线介绍2:实例3:推荐博客}
{1:法线介绍光的强度=光照+法线+法线贴图模型凹凸纹理效果=基础贴图 X 光的强度 模型有两种贴图基础贴图 例如一个盒子,盒子是木头纹理,或铁皮纹理法线贴图 把基础贴图中凹凸的地方生成一个张原纹理大小的贴图法线幅法线切线}
{2:实例{1:Shader2:调用}{1:Shaderconst char* vs = {"attribute vec3 inVertex;""attribute vec3 inNormal;"//法线"attribute vec2 inTexCoord;""attribute vec3 inTangent;"//切线"uniform mat4 MVPMatrix;""uniform vec3 LightPosModel;" //光照"varying vec3 LightVec;"//光的夹角"varying vec2 TexCoord;""void main(){""gl_Position = MVPMatrix * vec4(inVertex,1);"//计算光的方向,在模型空间中//在模型空间得到的光的方向 --〉 要从模型空间转换到切线空间 "highp vec3 lightDirection = normalize(LightPosModel - vec3(inVertex));"//! 将灯的方向从模型空间,转化到tangent空间"highp vec3 bitangent = cross(inNormal, inTangent);"// vec3 cross(vec3 x, vec3 y) 向量x,y之间的叉积"highp mat3 tangentSpaceXform = mat3(inTangent, bitangent, inNormal);"//算出-〉切线坐标系"LightVec = lightDirection * tangentSpaceXform;""TexCoord = inTexCoord;""}"};const char * fs = {"precision lowp float; ""uniform sampler2D sBaseTex;""uniform sampler2D sNormalMap;"//法线图"varying lowp vec3 LightVec;"//光的向量"varying mediump vec2 TexCoord;""void main(){"// 将像素值映射到 [-1, 1] 法线的范围是[-1,1],rgb范围[0.1],([0,1]*2-1=[0-1,2-1]=[-1,1])"vec3 normal = texture2D(sNormalMap, TexCoord).rgb * 2.0 - 1.0;""float lightIntensity = dot(LightVec, normal);"//光的强度(算出物体上的一点光的强度)"vec3 texColor = texture2D(sBaseTex, TexCoord).rgb;""gl_FragColor = vec4(texColor * lightIntensity, 1.0);""}"}; <span style="white-space:pre"></span>pValue=creteShaderProgram(vs,fs);inVertex =glGetAttribLocation(pValue.pID, "inVertex");inNormal =glGetAttribLocation(pValue.pID, "inNormal");inTexCoord =glGetAttribLocation(pValue.pID, "inTexCoord");inTangent =glGetAttribLocation(pValue.pID,"inTangent");MVPMatrix =glGetUniformLocation(pValue.pID,"MVPMatrix");LightPosModel =glGetUniformLocation(pValue.pID,"LightPosModel");sBaseTex =glGetUniformLocation(pValue.pID,"sBaseTex");sNormalMap =glGetUniformLocation(pValue.pID,"sNormalMap");}{2:调用bmShader.shaderBegin();{glActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_2D,textureBaseId);glActiveTexture(GL_TEXTURE1);glBindTexture(GL_TEXTURE_2D,textureNormalId);glUniform1i(bmShader.sBaseTex,0);glUniform1i(bmShader.sNormalMap,1);//printf("%d - %d = %d\n",GL_TEXTURE1,GL_TEXTURE0,GL_TEXTURE1-GL_TEXTURE0);static float angle = 0; // angle += 1.0f;CELL::matrix4 matRot(1);matRot.rotateY(angle);CELL::matrix4 matTrans;matTrans.translate(0,5,0);CELL::matrix4 matScale(1);matScale.scale(0.3f,0.3f,0.3f);CELL::matrix4 matModel = matTrans * matRot * matScale;//光源位置CELL::float4 vMsLightPos = CELL::float4(50, 20, 40, 1);vMsLightPos = vMsLightPos * matModel;//CELL::matrix4 MVP = camera._matProj * camera._matView * matModel ;MVP = matProj * matView *matModel;glUniformMatrix4fv(bmShader.MVPMatrix,1,false,MVP.data());glUniform3fv(bmShader.LightPosModel,1,&vMsLightPos.x);VertexBumpMap* vert = &model.arVertexs.front();glVertexAttribPointer(bmShader.inVertex, 3, GL_FLOAT, GL_FALSE, sizeof(VertexBumpMap), vert);glVertexAttribPointer(bmShader.inNormal, 3, GL_FLOAT, GL_FALSE, sizeof(VertexBumpMap), &vert[0].normal);glVertexAttribPointer(bmShader.inTexCoord, 2, GL_FLOAT, GL_FALSE, sizeof(VertexBumpMap), &vert[0].uv);glVertexAttribPointer(bmShader.inTangent, 3, GL_FLOAT, GL_FALSE, sizeof(VertexBumpMap), &vert[0].tangent);glDrawElements(GL_TRIANGLES,model.arFaces.size() * 3,GL_UNSIGNED_SHORT,&model.arFaces.front());}bmShader.shaderEnd();}}
效果图
生成法线贴图工具(photoshop支持Win32/64)
支持版本 Adobe Photoshop 5.0, 5.1, 6.0, 7.0, CS, CS2, CS3, CS4, CS5 and CS6
下载地址
https://developer.nvidia.com/gameworksdownload#?dn=texture-tools-for-adobe-photoshop-8-55
源码地址 http://pan.baidu.com/s/1geVargZ 法线贴图.zip
{3:推荐博客http://blog.csdn.net/zp373860147/article/details/6758828http://www.cnblogs.com/flytrace/p/3387748.html}
0 0
- OpenGLES—法线贴图
- opengles法线贴图
- opengles法线贴图加反射
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 法线贴图
- 安卓各种权限大全
- HTTP状态码大全
- mysql强制使用索引与不使用索引
- Ubantu 配置Samba实现文件共享
- Builder模式详解--设计模式(5)
- OpenGLES—法线贴图
- 线性表之顺序表
- 内部类
- Game of Life
- Cenos7 下安装redis 和操作redis
- MATLAB常用的快捷键
- js交互
- Android学习参考资料汇总
- AOP详解(1)