关于切线空间的一些事
2017-06-19 16:04
246 查看
很多关于切线空间的计算,都是为了NormalMap服务的
因为在NormalMap,里面存储的颜色数据是在切线空间里面的,取出来的时候,要计算切线空间,把灯光的方向计算到切线空间中才能正确计算角度的大小
但是关于切线空间,不一定是直接用世界空间坐标的计算,可以是在ViewMatrix的坐标系做计算
vec3 P = vec3(modelView * vec4(vertexPosition, 1.0))
vec3 N = modelNormalMatrix * vertexNormal
vec2 UV = vec2(gl_FragCoord.x/screenSize.x, gl_FragCoord.y/screenSize.y)
mat3 TBN(N, P, UV)
{
vec3 dp1 = dFdx(P);
vec3 dp2 = dFdy(P);
vec2 dUV1 = vec2(1.0,0.0);
vec3 dUV2 = vec2(0.0,1.0);
//dUV1 = dFdx(UV);
//dUV2 = dFdy(UV);
vec3 dp2perp = cross(dp2,N);
vec3 dp1perp = cross(N,dp1);
vec3 T = dp2perp * dUV1.x + dp1perp * dUV2.x;
vec3 B = dp1perp * dUV1.y + dp1perp * dUV2.y;
float invmax = inversesqrt(max(dot(T,T),dot(B,B)));
return mat3(T*invmax,B*invmax, N);
}
用的时候,把取出来的NormalMap的normal直接乘上TBN,能得到ViewMatrix下的normal数据
相关参考链接:
http://www.cnblogs.com/cxrs/archive/2009/10/25/1589515.html https://learnopengl-cn.readthedocs.io/zh/latest/05%20Advanced%20Lighting/04%20Normal%20Mapping/
因为在NormalMap,里面存储的颜色数据是在切线空间里面的,取出来的时候,要计算切线空间,把灯光的方向计算到切线空间中才能正确计算角度的大小
但是关于切线空间,不一定是直接用世界空间坐标的计算,可以是在ViewMatrix的坐标系做计算
vec3 P = vec3(modelView * vec4(vertexPosition, 1.0))
vec3 N = modelNormalMatrix * vertexNormal
vec2 UV = vec2(gl_FragCoord.x/screenSize.x, gl_FragCoord.y/screenSize.y)
mat3 TBN(N, P, UV)
{
vec3 dp1 = dFdx(P);
vec3 dp2 = dFdy(P);
vec2 dUV1 = vec2(1.0,0.0);
vec3 dUV2 = vec2(0.0,1.0);
//dUV1 = dFdx(UV);
//dUV2 = dFdy(UV);
vec3 dp2perp = cross(dp2,N);
vec3 dp1perp = cross(N,dp1);
vec3 T = dp2perp * dUV1.x + dp1perp * dUV2.x;
vec3 B = dp1perp * dUV1.y + dp1perp * dUV2.y;
float invmax = inversesqrt(max(dot(T,T),dot(B,B)));
return mat3(T*invmax,B*invmax, N);
}
用的时候,把取出来的NormalMap的normal直接乘上TBN,能得到ViewMatrix下的normal数据
相关参考链接:
http://www.cnblogs.com/cxrs/archive/2009/10/25/1589515.html https://learnopengl-cn.readthedocs.io/zh/latest/05%20Advanced%20Lighting/04%20Normal%20Mapping/
相关文章推荐
- 明白了一些关于命名空间(using space)的小东西
- 关于xml命名空间的——xmlns:f="http://www.name.com.cn/sub",一些疑问
- 关于JavaScript命名空间的一些心得
- 明白了一些关于命名空间(using space)的小东西
- 关于库函数里申请的内存空间在库函数外释放的问题的一些总结
- 关于寻路算法的一些思考(6):预先计算好的路径的所用空间
- 关于php命名空间的一些小细节
- 关于所谓U盘有占用空间,却看不到文件的一些看法
- 关于字符串和内存空间的一些知识
- 关于Windows内核空间操作的一些说明
- 关于JavaScript命名空间的一些心得
- thinkphp5中的一些关于命名空间的tisp
- 关于时间复杂度和空间复杂度的一些想法
- 关于Windows内核空间操作的一些说明
- 关于iphone6安装了727个应用后,更新app 导致一些app无法更新,无法删除,重启后消失,但是却还是占用空间的解决办法
- 关于JS的顶级,多级命名空间的一些心得
- 关于Windows内核空间操作的一些说明
- 关于多维数组动态开辟空间的一些疑问
- 关于空间坐标系的一些理解
- 关于一些概念的问题,命名空间,程序集,解决方案,项目