Planar Shadow中Shadow Matrix的推导
2004-07-26 10:42
381 查看
[概述]
1 由光源方向V和顶点Q可以确定一条射线K。
2 由法线N和法线上任一已知点P0可以确定平面L。
3 Q在L上的投影实际上就是K同L的交点P。
4 最终需要求的是如何通过矩阵变换将Q变换成P。
[推导]
首先,平面方程的向量形式是:
N · (P - P0) = 0;
N:法线,P0:平面上已知任一点
若设:D = - N · P0, 则平面方程为:
N · P + D = 0; (1)
然后,射线方程是:
P = Q + tV; (2)
Q:射线上任一点,V:射线方向
将(2)式代入(1)式得:
N · Q + (N · V)t + D = 0;
t = - (N · Q + D) / (N · V); (3)
如果将平面方程写成四维形式可以是:L = <N, D>
点向量Q的四维形式:<Q, 1>
方向向量V的四维形式:<V, 0>
则由(3)式得:
t = - (<N, D> · <Q, 1>) / (<N, D> · <V, 0>);
t = - (L · Q) / (L · V);
代入:Q = <Qx, Qy, Qz, 1>, V = <Vx, Vy, Vz, 0>, L = <Nx, Ny, Nz, D>
设E = L · V = NxVx + NyVy + NzVz;
将t代入(2)式,得:
PxE = Qx(NxVx + NyVy + NzVz) - (NxQx + NyQy + NzQz + D) Vx;
PxE = Qx(NyVy + NzVz) - Qy(NyVx) - Qz(NzVx) - DVx;
同理得Py, Pz
最后得到Shadow Matrix
NyVy + NzVz -NyVx -NzVx -DVx
-NxVy NxVx + NzVz -NzVy -DVy
-NxVz -NyVz NxVx + NyVy -DVz
0 0 0 NxVx + NyVy + NzVz
效果如下:
![](http://images.cnblogs.com/cnblogs_com/pointer/planar%20shadow.jpg)
btw:这里有Planar Shadow的详细介绍,作者Hotball还提出了一个利用Stencil Buffer进行改良的方案。
http://www.csie.ntu.edu.tw/~r89004/hive/shadow/page_1.html
1 由光源方向V和顶点Q可以确定一条射线K。
2 由法线N和法线上任一已知点P0可以确定平面L。
3 Q在L上的投影实际上就是K同L的交点P。
4 最终需要求的是如何通过矩阵变换将Q变换成P。
[推导]
首先,平面方程的向量形式是:
N · (P - P0) = 0;
N:法线,P0:平面上已知任一点
若设:D = - N · P0, 则平面方程为:
N · P + D = 0; (1)
然后,射线方程是:
P = Q + tV; (2)
Q:射线上任一点,V:射线方向
将(2)式代入(1)式得:
N · Q + (N · V)t + D = 0;
t = - (N · Q + D) / (N · V); (3)
如果将平面方程写成四维形式可以是:L = <N, D>
点向量Q的四维形式:<Q, 1>
方向向量V的四维形式:<V, 0>
则由(3)式得:
t = - (<N, D> · <Q, 1>) / (<N, D> · <V, 0>);
t = - (L · Q) / (L · V);
代入:Q = <Qx, Qy, Qz, 1>, V = <Vx, Vy, Vz, 0>, L = <Nx, Ny, Nz, D>
设E = L · V = NxVx + NyVy + NzVz;
将t代入(2)式,得:
PxE = Qx(NxVx + NyVy + NzVz) - (NxQx + NyQy + NzQz + D) Vx;
PxE = Qx(NyVy + NzVz) - Qy(NyVx) - Qz(NzVx) - DVx;
同理得Py, Pz
最后得到Shadow Matrix
NyVy + NzVz -NyVx -NzVx -DVx
-NxVy NxVx + NzVz -NzVy -DVy
-NxVz -NyVz NxVx + NyVy -DVz
0 0 0 NxVx + NyVy + NzVz
效果如下:
![](http://images.cnblogs.com/cnblogs_com/pointer/planar%20shadow.jpg)
btw:这里有Planar Shadow的详细介绍,作者Hotball还提出了一个利用Stencil Buffer进行改良的方案。
http://www.csie.ntu.edu.tw/~r89004/hive/shadow/page_1.html
相关文章推荐
- Java服务器端图形编程
- 进程杀死的问题-转
- MPEG Software Simulation Group (MSSG)
- 关于网上邻居的访问问题(网上邻居的工作原理)转
- SAP ABAP/4学习---数据类型(2)
- 中国教育界十大谎言
- 闲作:这是什么狗日的生活
- 收集Eclipse插件网站
- 闲作:写在离开成都的那一刻
- EXCEL常用文本函数
- 英雄
- 新神谱
- 用asp伪装HTTP头信息对WEB服务器进行欺骗(整理中)
- FreeTextBox的一些属性总结
- (原创)长发飘飘---胡平
- 旧神谱
- asp中的验证码解决方案
- 调谐LINUX网络性能之网络配置文件详解[转载]
- C#.Net 常用函数和方法集
- 蓝色的忧郁