我的原始图元无法在 Raymarching 中显示

Posted

技术标签:

【中文标题】我的原始图元无法在 Raymarching 中显示【英文标题】:My raw primitives cannot be displayed in Raymarching 【发布时间】:2021-11-24 12:54:36 【问题描述】:

我在学习Raymarching时遇到了一个很奇怪的问题。 我的方程式不能很好地显示。 在matlab中可以很好的显示出来。但它根本无法在 Shadertoy 上显示。

我的方程式:

f(x,y,z) = (x^2+y^2+z^2)^2+2*y*(x^2+y^2+z^2)+2*(x^2+z^2);

matlab中的代码:

f =@(x,y,z) (x.^2+y.^2+z.^2)^2+2*y*(x.^2+y.^2+z.^2)+2*(x.^2+z.^2);
fimplicit3(f)

matlab displays a normal picture

shadertoy中的代码:

float sdRound(vec3 p)

   float lengthXYZ = (p.x * p.x+p.y * p.y+p.z * p.z); 
   return lengthXYZ * lengthXYZ+2.0 * p.y * lengthXYZ+2.0 * (p.x * p.x+p.z * p.z);

我学习、练习和修改了 iq 代码。 (https://www.shadertoy.com/view/Xds3zN)。

但是不能正常显示。 Shadertoy displays abnormal pictures Shadertoy displays abnormal pictures

我不知道问题出在哪里。请帮我。困扰我很久了。

请原谅我糟糕的英语。我使用谷歌翻译。

【问题讨论】:

【参考方案1】:

您的问题似乎在于对 raymarching 的理解。 您的公式在数学上描述了一个表面(这就是它在 matlab 中很好显示的原因),但这不是 raymarching 的工作原理。 为光线追踪定义一个对象意味着为您的对象定义一个距离函数(这与数学上描述其表面的函数不同)。这些函数对于返回零的值是相同的(这意味着坐标在表面上),但对于其他值它们是不同的。 要创建与您的对象类似的东西,我建议从iq's Raymarching primitives 探索sdRoundCone 方法,因为它似乎最接近您想要实现的目标。

【讨论】:

以上是关于我的原始图元无法在 Raymarching 中显示的主要内容,如果未能解决你的问题,请参考以下文章

我的自定义搜索视图无法正常工作,当搜索输入为空时不显示原始列表

完全坚持如何在 HTML 中显示我的 JSON。编辑:我知道我想如何格式化它,除了原始 JSON [重复],我无法让它输出任何东西

计算机图形学_图元的属性

为啥我在 Unity RayMarching 着色器中出现 for-loop 错误?

revit中门构件属于啥图元

计算机图形学输出图元_18_显示列表_1_创建和命名OpenGL显示表