几年前,我在学校完成了一项任务,在那里我必须并行化Raytracer.
这是一个简单的任务,我真的很喜欢它的工作.
今天,我觉得要分析光线跟踪器,看看我是否可以让它更快地运行(没有完全改造代码).在分析期间,我发现了一些有趣的东西:
// Sphere.Intersect
public bool Intersect(Ray ray, Intersection hit)
{
double a = ray.Dir.x * ray.Dir.x +
ray.Dir.y * ray.Dir.y +
ray.Dir.z * ray.Dir.z;
double b = 2 * (ray.Dir.x * (ray.Pos.x - Center.x) +
ray.Dir.y * (ray.Pos.y - Center.y) +
ray.Dir.z * (ray.Pos.z - Center.z));
double c = (ray.Pos.x - Center.x) * (ray.Pos.x - Center.x) +
(ray.Pos.y - Center.y) * (ray.Pos.y - Center.y) +
(ray.Pos.z - Center.z) * (ray.Pos.z - Center.z) - Radius * Radius;
// more …Run Code Online (Sandbox Code Playgroud)