Unity Shader切空间旋转矩阵的笔记
来源:互联网 发布:强人工智能 编辑:程序博客网 时间:2024/05/16 05:26
在学习 Unity的Shader时,发现 unity Shader内置了一个宏定义
// Declares 3x3 matrix 'rotation', filled with tangent space basis#define TANGENT_SPACE_ROTATION \float3 binormal = cross( v.normal, v.tangent.xyz ) * v.tangent.w; \float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal )
这个矩阵的作用是从模型空间转换到切空间。突如其来的定义让我有点没反应过来,仔细理了一下。理解这个需要先复习坐标系的定义:
假设线性子空间的基B={v1,v2,...,vk}, 向量 a = v1c1+v2c2+...+vkck,那么(c1,c2,...,ck)即为a基于B的坐标。换句话说,坐标是向量在某组基下的表示。此时,我们称B定义了一个坐标系。假设向量a在基{v1,v2,vk}下的坐标已知为b,矩阵C={v1,v2...vk},那么有 a = Cb,C就是这个坐标变换的变换矩阵。
现在我们来看切空间的三个轴,它其实就是一组正交的基 {v1,v2,v3} , 任何一个切空间的坐标b (xb,yb,zb)与之相乘,都可以转化为模型空间的坐标a (xa,ya,za),即a = Cb。
展开写就是
|xa| |v.tangent.x, binormal.x, v.normal.x| |xb|
|ya| = |v.tangent.y, binormal.y, v.normal.y| * |yb|
|za| |v.tangent.z, binormal.z, v.normal.z| |zb|
因此,上面的变换矩阵就是一个从切空间到模型空间的变换矩阵,那么从模型空间到切空间的变换矩阵就是上面矩阵的逆矩阵。又因为这个矩阵是一个正交矩阵,因此它的逆矩阵可以写成它的转置矩阵。
一旦转置,就出现了最开始的那段代码。
float3x3( v.tangent.xyz, binormal, v.normal )
它表示从切空间到模型空间的一个变换
0 0
- Unity Shader切空间旋转矩阵的笔记
- Unity Shader入门精要笔记(四):矩阵与空间变换
- Unity Shader学习笔记:坐标空间
- Unity Shader学习笔记:简单的shader
- Unity Shader内置矩阵
- Unity-Shader切线空间
- Unity中矩阵的平移、旋转、缩放
- Unity Shader之uv旋转
- Unity Shader学习笔记(一) shader的基础结构
- Unity Shader学习笔记(四) 水气泡 Shader的实现
- Shader学习笔记(一)认识Unity Shader,Unity Shader的基本结构
- unity屏幕空间坐标shader
- Unity笔记 Surface Shader
- Unity Shader数学笔记
- Unity Shader笔记
- 固定管线shader以及unity旋转四元数
- unity shader-UV平移,旋转,缩放
- <Unity笔记>Unity2D游戏的平滑旋转
- 理解离散傅立叶变换(一) ------傅立叶变换的由来
- Android中padding与layout_margin的区别与用法
- view属性的多重设定以及imageview的图片属性设置
- mysql ip存储的问题
- poj 2409 Let it Bead 项链旋转+对称群的polya计数
- Unity Shader切空间旋转矩阵的笔记
- View类的XML属性及相关方法
- 第三章:ObjectC循环
- UIWebView使用总结
- 在 Ubuntu 14.04 中配置 PXE 服务器
- String StringBuffer StringBuilter
- 关于SVN报错,svn : RA layer request failed,不能正常使用SVN
- 互联网如此脆弱,网络安全如何作为
- hdu 2035