✅ The verified answer to this question is available below. Our community-reviewed solutions help you understand the material better.
Az alábbi osztály egy origó középpontú és axes.x, axes.y, axes.z fél főtengelyhosszú ellipszoidot valósít meg, amelyre a sugár metszéspontszámítást implementáltuk. A vec3-ra az osztást GLSL stílusban, azaz koordinátánként függetlenül valósítottuk meg. Kérjük a hibás sorok sorszámát!
class : public Intersectable {
vec3 axes;
public:
Hit intersect(const Ray& ray) {
Hit hit;
1) float a = dot(ray.dir/axes, ray.dir/axes);
2) float b = dot(ray.start/axes, ray.dir/axes) * 2;
3) float c = dot(ray.start/axes, ray.start/axes) ;
4) float discr = b * b - 4 * a * c;
5) if (discr < 0) return hit; else discr = sqrtf(discr);
6) float t1 = (-b + discr)/2/a, t2 = (-b - discr)/2/a;
7) if (t1 <= 0) return hit; // t1 >= t2 for sure
8) hit.t = (t2 > 0) ? t2 : t1;
9) hit.position = ray.start + ray.dir * hit.t;
10) hit.normal = (hit.position - center)/radius;
hit.material = material;
return hit;
}
};