最近在学习光线追踪,其中光线反射,折射是重点。
由于这本书是英文的,对于阅读能力是一个大挑战吖。学习过程中发现了一位大佬的学习总结:
https://blog.youkuaiyun.com/libing_zeng/article/details/72598060
写得很清楚,比较厉害啦。 但是折射这部分的证明没有写清楚,所以我自己理清了一下,记录一下,嘻嘻(#^.^#)
- 折射光线的方向向量:
源代码:
bool refract(const vec3& v, const vec3& n,float nt,vec3& refracted){
vec3 uv = unit_vector(v);
float dt = uv.dot(uv,n);
float d = 1.0 - nt*nt*(1-dt*dt);
if(d > 0){
refracted = nt*(uv-n*dt) - n*sqrt(d);
return true;
}else{
return false;
}
}
计算过程如下:
- 漫反射光线的方向向量
源代码