我正在尝试将抖动应用于一个简单的彩色四边形,并发现了一个奇怪的问题。我有一个片段着色器,它应该计算一些抖动uv
并返回一个抖动的颜色。这在带纹理的四边形上效果很好,但奇怪的是,当我从我inVertex
的 访问颜色数据时,uv
坐标变为一些奇怪的值,并且y
值似乎映射到x
轴。我将尝试说明当我更改片段着色器代码周围的内容时会发生什么。
fragment float4 fragment_colored_dithered(ColoredVertex inVertex [[stage_in]],
float2 uv[[point_coord]]) {
float4 color = inVertex.color;
uv = (uv/2) + 0.5;
if (uv.y < 0.67) {
return float4(uv.y, 0, 0, 1);
}
else {
return color;
}
}
在图像左侧显示我的渐变四边形的地方,请注意if (uv.y < 0.67)
映射到图像中的 x 值。
如果我更改此片段着色器而不更改代码中的其他任何内容,就像这样,在 Ireturn float4(0, 0, 1, 0)
而不是 的地方inVertex.color
,uv
坐标被正确映射。
fragment float4 fragment_colored_dithered(ColoredVertex inVertex [[stage_in]],
float2 uv[[point_coord]]) {
float4 color = inVertex.color;
uv = (uv/2) + 0.5;
if (uv.y < 0.67) {
return float4(uv.y, 0, 0, 1);
}
else {
return float4(0, 0, 1, 0); //return color;
}
}
我想我可以通过将 1x1 纹理应用于渐变并使用纹理坐标来解决这个问题,但我真的很想知道这里发生了什么,这是我不理解的错误还是功能?