0

在我的光线追踪器中,所有表面都以原点为中心并以 Y 轴为中心。位移、旋转和调整大小是通过应用于光线的变换矩阵获得的。

我最近使用笛卡尔方程在光线追踪中渲染了一个圆环:

(x^2 + y^2 + z^2)^2 - 2 * (r1^2 + r2^2) * (x^2 + y^2 + z^2) + 4 * r1^2 * y^ 2 + (r1^2 - r2^2)^2

我用射线方程替换了每个点:

例如:X = Ray.ori.x + T * Ray.dir.x;

在方程中替换射线分量后,我得到了四次函数的 5 个系数,可用于通过 4 次多项式求解器算法找到方程根(T 交点)。

我想知道是否可以以相同的方式渲染莫比乌斯带。我的研究并没有带来太多,我发现了一些使用三次方程的光线跟踪代码,但是复制 4 个系数导致我产生了难以理解的形式和伪影。

你能帮我渲染一下吗?也欢迎建议用另一种方法渲染它。

谢谢!

4

2 回答 2

1

是的,可以使用光线追踪器渲染莫比乌斯带。

莫比乌斯

于 2020-02-14T01:55:25.513 回答
0

我从:mathworld中获取了莫比乌斯的(笛卡尔)三次方程, 然后我用射线方程替换了莫比乌斯的 x、y 和 z。

然而结果是这样的: 在此处输入图像描述

这是计算莫比乌斯系数的代码。

double x = ray.ori.x;
double y = ray.ori.y;
double z = ray.ori.z;
double i = ray.dir.x;
double j = ray.dir.y;
double k = ray.dir.z;
double c[4];
double R = 1.;
int solutions;

c[3] = (i * i) * j - 2. * (i * i) * k + (j * j * j) - 2. * (j * j) * k + j * (k * k);
c[2] = (i * i) * y - 2. * (i * i) * z + 2 * i * j * x - 2. * i * k * R - 4. * i * k * x + 3. * (j * j) * y - 2. * (j * j) * z - 4. * j * k * y + 2. * j * k * z + (k * k) * y;
c[1] = - 2. * i * R * z + 2 * i * x * y - 4. * i * x * z - j * (R * R) + j * (x * x) + 3. * j * (y * y) - 4. * j * y * z + j * (z * z) - 2. * k * R * x - 2 * k * (x * x) - 2. * k * (y * y) + 2. * k * y * z;
c[0] = - (R * R) * y - 2. * R * x * z + (x * x) * y - 2. * (x * x) * z + (y * y * y) - 2. * (y * y) * z + y * (z * z);

也许我正在渲染延伸到无穷大的整个表面?在这种情况下如何获得莫比乌斯带?

于 2020-01-19T19:37:59.063 回答