可以使用光线追踪器渲染莫比乌斯带吗?

问题描述 投票:0回答:1

在我的光线跟踪器中,所有表面都以原点为中心并以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交点)。

我想知道mobius strip是否可以以相同的方式呈现。我的研究并没有带来太多,我发现了一些使用三次方程式的光线追踪代码,但是复制这四个系数使我陷入了难以理解的形式和伪影中。

您能帮我渲染吗?也欢迎使用其他方法进行渲染的建议。

谢谢!

c raytracing geometry-surface cartesian-coordinates mobius
1个回答
0
投票

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

但是结果是这样的:enter image description here

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

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);

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

© www.soinside.com 2019 - 2024. All rights reserved.