Q94:怎么用ray tracing画部分圆环(Part Tori)

来源:互联网 发布:猴王开心水果源码php 编辑:程序博客网 时间:2024/05/16 18:51

这一章节的内容和“问题四十二”有点类似,或者说有点重复。

“问题四十二”的链接:http://blog.csdn.net/libing_zeng/article/details/54563752


但是,“问题四十二”中只能画圆环的片段,类似于如下图形:



我们现在要画的部分圆环图形类似于:



这种“部分圆环”,加上坐标轴,大概是这个样子:



为了画这种部分圆环,我们引入四个参数:phi1、phi2、theta1、theta2

phi1、phi2用来将圆环“切断”(和“问题四十二”是一样的);

theta1、theta2是用来将圆环“切开”。


理论分析


将圆环“切断”


具体做法:

1,将撞击点p投影到xoz平面,投影点为p';

2,op'和+x轴的夹角即为phi;

3,判断phi是否在[phi1,phi2]区间内。




将圆环“切开”


具体做法:



C++代码实现


核心代码截图如下:


测试图形


大半径2,小半径0.5,phi1=0度,phi2=270度,theta1=90度,theta2=360度


大半径2,小半径0.5,phi1=0度,phi2=360度,theta1=270度,theta2=360度


将如上图形中的法向量取反(对应的就是concave版本的圆环了)


其他说明


完整代码:(下载链接在下方评论中)


Referrance

[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.


4 0