Ray-Sphere Intersection Derivation
我正在尝试编写一个函数,如果射线与球相交并且我引用的代码是这样,则该函数返回true:
1 2 3 4 5 6 7 8 9 10 11 | // given Sphere and Ray as arguments invert the Sphere matrix make new Ray object origin of this object = old Ray origin * inverted Sphere matrix direction = old Ray direction * inverted Sphere matrix a = |new direction| ^ 2 b = dot product of new origin and new direction c = |new origin| ^ 2 - 1 det = b*b - a*c if det > 0 there is an intersection |
我一直在理解为什么我们需要首先反转球体矩阵,然后将其乘以射线的原点和方向。 我也很困惑如何导出二次方程变量a,b和c以及结尾。 我知道我必须结合射线(p + td)和圆(x点x-1 = 0)的参数方程式,但是我不知道该怎么做。
您需要反转球体矩阵以使光线进入球体的坐标系中,如果未缩放球体,则与简单地设置new_origin = origin-sphere_center(并使用原始方向)相同。
该公式由以下公式形成:
1 | |new_dir*t + new_origin|^2 = r^2 (presumably r is 1) |
如果对其进行扩展,则会得到:
1 | |new_dir|^2*t^2 + 2*(new_origin·new_dir)*t + |new_origin|^2-r^2 = 0 |