欢迎光临散文网 会员登陆 & 注册

阿昌学习《RayTraing in one week》 (四)

2022-10-31 21:04 作者:柯昌弟弟c  | 我要投稿

上一章加入了摄像机和背景,这样的就有个场景的模样,现在再往这个场景里添加一个物体,而选择添加的物体就是球体,因为球体在计算光线是否击中的时候比较好计算。

首先是我们上学的时候学过球表面的一个方程

X² + Y² + Z² = R²,这样呢就可以有两个判断

X² + Y² + Z² > R²,这就说明这个点在球外

X² + Y² + Z² < R²,这个就是在球内部

我们设球的圆心是(CX,CY,CZ)

那么我们的公式就变成(X - CX)² + (Y - CY)² +(Z - CZ)²  = R²

现在球上一个点P(X,Y,Z)到圆心C的距离 也就是半径呢 就可以表示成(P-C)

那么上边的公式就变成

(X - CX)² + (Y - CY)² +(Z - CZ)²  = (P-C) * (P-C)

(P-C) * (P-C) = R² 

上一章中的光线方程 p(t) = a + t * b,把这个公式带入

(a + t * b-C) * (a + t * b-C) = R² 

因为t是一个未知数,不难看出 这就是一个一元二次方程,那就可以整理成下边这样

t²b² + 2tb*(a-C)+(a-C)*(a-C)-R² = 0

一个光线和这个物体的相交情况只有三种

那么一元二次方程组我们就很容易解啦


来自百度百科截图,一元二次方程组的求根公式

接下来添加一个球体,并且赋予红色。

添加一个hit_sphere的方法

运行之后就得到下边这个了。

200*200


阿昌学习《RayTraing in one week》 (四)的评论 (共 条)

分享到微博请遵守国家法律