易码技术论坛

 找回密码
 加入易码
搜索
查看: 6716|回复: 6

[教程] [转载] Planar Shadow中Shadow Matrix的推导

[复制链接]
发表于 2007-11-24 15:59:52 | 显示全部楼层 |阅读模式
[前言] by Lendy
很古老的shadow技术,大概Doom2的时候出现的。
这种方法的优点是实现起来非常方便,只要一个matrix+一次渲染就能实现。缺点……很明显,不说了=.=
总之先用这种方法实现shadow,暂时不想花费太多时间在这些花哨的东西上面,还是赶紧写系统要紧~

---------------------传说这是分割线,下面是原作者的正文-------------------------

[概述]
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
  1. NyVy + NzVz      -NyVx            -NzVx            -DVx
  2. -NxVy            NxVx + NzVz      -NzVy            -DVy
  3. -NxVz            -NyVz            NxVx + NyVy      -DVz
  4. 0                0                0                NxVx + NyVy + NzVz
复制代码
发表于 2007-11-24 16:32:01 | 显示全部楼层
总觉得在那里看到过~~
 楼主| 发表于 2007-11-24 16:36:58 | 显示全部楼层
这是1年半前,我放在自己Blog上面的文章...
发表于 2007-11-24 18:14:39 | 显示全部楼层
哦想起来了,是在偶们OGL的PPT上~~
噢也~
 楼主| 发表于 2007-11-24 18:29:21 | 显示全部楼层
你吹牛~
这篇文章不是教材。除非你们的教材或者教师盗版~
发表于 2007-11-25 00:16:34 | 显示全部楼层
人家说的是那个Matrix~噢也~
发表于 2009-1-18 13:09:36 | 显示全部楼层
矩阵?高数的东西吧。。。我才了解一点,学习了
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-23 19:44 , Processed in 0.009927 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表