问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(2)——单页双曲面、双页双曲面、椭圆锥面、椭圆柱面

35.2.1 数学推导

单页双曲面、双页双曲面、椭圆锥面、椭圆柱面。

这四个二次曲面方程共同形式:





但是,注意到,这些曲面都是开放曲面。在画图时,需要限制曲面的范围(以免曲面覆盖整个画面)。

我们在这里是限制曲面在y轴方向距离中心点的长度为height_y(引入该参数)。

所以,我们可以在根据实根t求得交点坐标后,对交点坐标作如下判断:

((rec.p.y()-center.y()) >-height_half_y) && ((rec.p.y()-center.y()) < height_half_y)

 

这里,要特别注意

之前,球面的处理方式是:


所以,其一:我们需要对两个实根进行排序(先处理小的)

 

另外,由于,是开放曲面,也就是,光线有可能撞击到曲面的正反两面,所以,对于撞击点处的标准化之后的法向量,我们需要做如下判断:

                        if (dot(rec.normal,r.direction()) > 0) {

                            rec.normal =-rec.normal;

                        }//(法向量决定着反射光线和折射光线࿰

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值