GLSL 和 Metal 之间的数学差异
Math differences between GLSL and Metal
我玩 GLSL
得到了 this effect。我试图将它转换为金属,但当 y-axis
小于 0 时,我得到了一些奇怪的结果:
horizon(<0) 以上的大多数立方体都有这些有趣的曲线剪裁。这是我的 Metal
代码:
static float mod(float x, float y)
{
return x - y * floor(x/y);
}
static float vmax(float3 v) {
return max(max(v.x, v.y), v.z);
}
float fBoxCheap(float3 p, float3 b) { //cheap box
return vmax(abs(p) - b);
}
static float map( float3 p )
{
p.x = mod(p.x + 5,10)-5;
p.y = mod(p.y + 5 ,10)-5;
p.z = mod(p.z + 5 ,10)-5;
float box = fBoxCheap(p-float3(0.0,3.0,0.0),float3(4.0,3.0,1.0));
return box;
}
与GLSL
中的代码几乎相同:
float vmax(vec3 v) {
return max(max(v.x, v.y), v.z);
}
float box(vec3 p, vec3 b) { //cheap box
return vmax(abs(p) - b);
}
float map( vec3 p )
{
p.x=mod(p.x+3.0,6.0)-3.0;
p.y=mod(p.y+3.0,6.0)-3.0;
p.z=mod(p.z+3.0,6.0)-3.0;
return box( p, vec3(1.,1.,1.) );
}
我该如何解决这个问题?
我对 GLSL
和 Metal
都很陌生,但我发现 Metal
由于这些数学问题而更加棘手。
我认为这里没有区别。您可以通过应用您在 Metal 版本中所做的所有相同修改,在 GL 版本中创建类似的工件。问题是在用 mod
折叠 space 之后偏移点违反了 SDF 是 Lipschitz 连续的要求(即梯度必须在所有地方 <= 1)。如果要翻译框,请在应用 mod
.
之前翻译 p
我玩 GLSL
得到了 this effect。我试图将它转换为金属,但当 y-axis
小于 0 时,我得到了一些奇怪的结果:
horizon(<0) 以上的大多数立方体都有这些有趣的曲线剪裁。这是我的 Metal
代码:
static float mod(float x, float y)
{
return x - y * floor(x/y);
}
static float vmax(float3 v) {
return max(max(v.x, v.y), v.z);
}
float fBoxCheap(float3 p, float3 b) { //cheap box
return vmax(abs(p) - b);
}
static float map( float3 p )
{
p.x = mod(p.x + 5,10)-5;
p.y = mod(p.y + 5 ,10)-5;
p.z = mod(p.z + 5 ,10)-5;
float box = fBoxCheap(p-float3(0.0,3.0,0.0),float3(4.0,3.0,1.0));
return box;
}
与GLSL
中的代码几乎相同:
float vmax(vec3 v) {
return max(max(v.x, v.y), v.z);
}
float box(vec3 p, vec3 b) { //cheap box
return vmax(abs(p) - b);
}
float map( vec3 p )
{
p.x=mod(p.x+3.0,6.0)-3.0;
p.y=mod(p.y+3.0,6.0)-3.0;
p.z=mod(p.z+3.0,6.0)-3.0;
return box( p, vec3(1.,1.,1.) );
}
我该如何解决这个问题?
我对 GLSL
和 Metal
都很陌生,但我发现 Metal
由于这些数学问题而更加棘手。
我认为这里没有区别。您可以通过应用您在 Metal 版本中所做的所有相同修改,在 GL 版本中创建类似的工件。问题是在用 mod
折叠 space 之后偏移点违反了 SDF 是 Lipschitz 连续的要求(即梯度必须在所有地方 <= 1)。如果要翻译框,请在应用 mod
.