我的原始图元无法在 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 [重复],我无法让它输出任何东西