77.1 理论说明
如上图所示,椭球面是球面通过仿射变换T得到的。
现在我们的问题是:怎么ray trace变换后的椭球面?
(先重申一点:经过仿射变换之后,直线还是直线,光线还是光线)
我们应该这么做:
1,将光线通过仿射变换的逆变换得到“逆变换光线”;
2,用“逆变换光线”去撞击球面,得到球面上的撞击点p和法向量n;
3,通过球面上的撞击点p计算椭球面上对应撞击点p’;
4,通过球面上的法向量n计算椭球面上对应的法向量n’;
(接下来,只是简单地列出相关的结论。至于“推导过程”,参考《Ray Tracing from the Ground Up. 2007》和《Fundamentals ofComputer Graphics. 3rd. 2009》的相关章节)
77.1.1将光线通过仿射变换的逆变换得到“逆变换光线”
要对光线进行仿射变换的逆变换,则需要对光线的起点和方向向量分别进行仿射变换的逆变换。
设:原光线的起点为o,方向向量为d;“逆变换光线”的起点为o’,方向向量为d’。
分别对光线的起点和方向向量进行仿射变换的逆变换:
o’ = T-1o “式子1”
d’ = T-1d “式子2”
这里需要重点说明的是:点的仿射变换是考虑平移(Translation)的,而向量的仿射变换是不考虑平移的。具体的变换过程,参考《Ray Tracing from the Ground Up. 2007》的第二十