DirectX中阴影矩阵的推导过程
来源:互联网 发布:互盾数据恢复软件破解 编辑:程序博客网 时间:2024/05/19 20:42
DirectX龙书中给出了点光源和平行光源的投影矩阵,也就是从某个光源上的物体------>光源与平面的交点的变换矩阵。
书上给出了从物体上的点P投影到平面上的点S的变换公式以及变换矩阵,
但是没有给出这个矩阵的推导过程,并且说明了可以在网上找到这个过程,
出于好奇心和试试看的想法,本人就试着推导了一下这个公式(以平行光源为例)。
先说明一下平行光源:1.书中的平行光的图片
2.书中关于s的推导的过程
平行光的方向为L
经过点p的平行光L投影到n*p + d = 0 平面的点s上
设t为一个实数,光线r= p + tL //此处p为物体上的点p,平面公式上的点p在这里对应着点s,tL就是有长度的光线
所以点s为平面与光线r的交点,将r带入平面公式,得到n*(p+tL) + d = 0 <==> t = (-d - np ) / (-nL)
所以s= p+ ((-d-np) / (-nL) )* L
疑惑之处:我一开始在学习中,有一点疑惑是,光线公式为:r = p + tL 而最后计算点s时的公式同样也是 s = p + tL, 这是为什么呢?
我们知道,向量是有长度有方向的量,在空间中,两个点p1,p2,p2-p1是一个向量,将这个向量规范为·单位向量,可以用来表示方向,
同理,光源的方向L也是这样表示的,为了表示光线,我们用这个单位向量L乘上一个数t,在加上p,用来表示光线与平面的交点,并且,
在空间中,向量和点的表示方法是一样一样的,所以向量r与s的计算公式是相同的。
3.好了,解释了半天我开始没弄懂得问题,现在正式开始推导公式
废话不多说,先上图,书中给出的先决条件:
先设p点的坐标(x,y,z,0) //为了对应4D向量,把坐标设为4维的,并置最后一维为0
根据先前推导的公式s= p+ ((-d-np) / (-nL) )* L 将 n=(nx,ny,nz,d),L= (Lx,Ly,Lz,Lw),nL = k 带入
抵消负号,n 向量与p相乘得到一个数值 nx*x+ny*y+nz*z,再讲结果与L向量相乘得到一个向量(nx*Lx*x +ny*Lx*y+nz*Lx*y,.....,......) //只举例x位置的结果
==> s 的 x列的值 = x + (-d-(nx*x+ny*y+nz*z))*Lx / -k = ( k*x + nx*Lx*x +ny*Lx*y+nz*Lx*y+d*Lx) / k
根据矩阵乘法的规则,变换矩阵S的第一列 的第一行 为nx*Lx+k 第二行 ny*Lx 第三行 nz*Lx 第四行 dLx //矩阵同时乘以k ,结果不变
剩下几列规则一样 可得出整个变换矩阵
- DirectX中阴影矩阵的推导过程
- OpenGL: 平面阴影投射矩阵的推导
- OpenGL投影矩阵的推导过程
- PCA旋转变换矩阵的推导过程
- 关于仿射矩阵的推导过程
- 投影矩阵推导过程
- OpenGL中投影矩阵的推导
- 图形学中几个变换矩阵的推导
- 关于三维空间中旋转矩阵的推导
- openGL中投影矩阵的推导
- DirectX投影变换矩阵的原理与推导,齐次裁剪空间的应用举例
- 坐标系旋转矩阵推导过程
- 四元数和旋转矩阵的相互推导过程
- Billboard矩阵的推导
- 投影矩阵的推导
- project 矩阵的推导
- 反射矩阵的推导
- DirectX视口变换矩阵详解(推导ViewportMatrix)
- 1.UVA 10179 -- Irreducable Basic Fractions 2. UVA 10299 -- Relatives
- ADB server didn't ACK问题
- 链栈的实现
- 关于listview 遮盖问题。
- 语音聊天室可以用.net制作吗?
- DirectX中阴影矩阵的推导过程
- Android中程序与Service交互的方式——总结
- hive的安装+msyql远程元数据库+hive的进阶优化
- 关于java数组的小错误分析
- 工业液晶串口屏人机界面组态软件开发指南
- 删除不必要的描述文件mobileProvision
- C#索引器
- Android用户首次打开APP的使用教学蒙板效果实现
- 哈夫曼树注意点