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

ztyzrc3y  于 2023-10-16  发布在  其他
关注(0)|答案(3)|浏览(114)

在我的光线跟踪器中,所有曲面都以原点为中心,并以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 =射线方向x + T * 射线方向x;
通过替换方程中的射线分量,我得到了我的四次函数的5个系数,这些系数可以用来用四次多项式求解算法找到方程的根(T交点)。
我想知道一个莫比乌斯带是否可以以同样的方式呈现。我的研究并没有带来太多,我发现了一些光线跟踪代码使用三次方程,但复制4个系数导致我无法理解的形式和文物。
你能帮我翻译一下吗?也建议用另一种方法来呈现它是受欢迎的。
谢谢你,谢谢

yduiuuwa

yduiuuwa1#

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

efzxgjgh

efzxgjgh2#

我把(笛卡尔)三次方程的莫比乌斯从:然后我用射线方程代替了莫比乌斯的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);

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

cgvd09ve

cgvd09ve3#

你的最后一篇文章是对的。你真的在渲染好的3D图形。
要获得莫比乌斯带,您只需选择正确的部分。
你可能想在一个3d绘图工具中添加你的卡氏方程和你可以在维基百科上找到的参数方程。
然后你会看到它在哪里;)
(It的中心是原点,半径为1.5)
enter image description here

相关问题