35.3 椭球抛物面
35.3.1 数学推导
椭球抛物面的方程如下:
所以,其一:我们需要对两个实根进行排序(先处理小的)
另外,由于,是开放曲面,也就是,光线有可能撞击到曲面的正反两面,所以,对于撞击点处的标准化之后的法向量,我们需要做如下判断:
if (dot(rec.normal,r.direction()) > 0) {
rec.normal =-rec.normal;
}//(法向量决定着反射光线和折射光线)
还有,由于我们引入了height_y参数来限制曲面的高度,但是,我们要注意到:小实根对应的交点超出高度范围时(之前的一贯做法:小根不在t_min、t_max范围,就直接return false),大