【发布时间】:2017-10-05 10:31:34
【问题描述】:
我正在尝试对一个简单的彩色四边形应用抖动,发现一个奇怪的问题。我有一个片段着色器,它应该计算一些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 值????。
如果我更改此片段着色器而不更改代码中的其他任何内容,就像这样,在我 return 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 纹理应用于渐变并使用纹理坐标来解决这个问题,但我真的很想知道这里发生了什么,这是我不明白的错误还是功能?
【问题讨论】:
标签: ios macos shader metal metalkit