我正在用 C 语言编写光线跟踪器,并使用笛卡尔方程绘制球体:
x^2 + y^2 + z^2 = R^2.
我有我的眼睛位置 (x_eye, y_eye, z_eye) 和我的眼睛矢量 (Vx, Vy, Vz)。我的线的参数方程是:
x = x_eye + k * Vx
y = y_eye + k * Vy
z = z_eye + k * Vz
我把我的线的参数方程放在球体的笛卡尔方程中以解决它
(x_eye + k * Vx)^2 + (y_eye + k * Vy)^2 + (z_eye + k * Vz)^2 = R^2
(Vx^2 + Vy^2 + Vz^2) * k^2 + 2 * (x_eye*Vx + y_eye*Vy + z_eye*Vz) * k + (x_eye^2 + y_eye^2 + z_eye^2 - R^2) = 0
我现在得到了一个像 ax^2 + bx + c = 0 这样的方程,并定义 a, b, c :
a = (Vx^2 + Vy^2 + Vz^2) * k^2
b = 2 * (x_eye * Vx + y_eye * Vy + z_eye * Vz) * k
c = (x_eye^2 + y_eye^2 + z_eye^2 - R^2)
然后如果存在交叉点(b^2 - 4.ac >= 0),我可以为每个像素找到 k。
但是有没有其他方法可以使用这些线和球
线的参数方程来找到 k:
x = x_eye + k * Vx
y = y_eye + k * Vy
z = z_eye + k * Vz
对于球体:
x = R.cos(u).cos(v)
y = R.sin(u).cos(v)
z = R.sin(v)
我怎么能用这两个参数方程找到k?
我应该怎么做
x_eye + k * Vx = R.cos(u).cos(v)
y_eye + k * Vy = R.sin(u).cos(v)
z_eye + k * Vz = R.sin(v)