【发布时间】:2018-04-17 06:11:01
【问题描述】:
我正在研究这个扫描线着色器,但它不起作用。
我尝试做的是,如果 y 位置是 2 的倍数,则将每个像素设置为黑色。但它不起作用。屏幕上没有任何变化。
颜色反转测试(通过将return col 更改为return 1 - col 完全正常,因此着色器实际上会影响图像。
有谁知道有什么问题?
谢谢。
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float4 position : TEXCOORD1;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.uv;
o.position = ComputeScreenPos(o.vertex);
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
if (i.uv.y % 2 == 0)
col -= col;
return col;
}
ENDCG
}
编辑:我使用的是 Unity 5.5.1f1,我的构建设置是独立的 Windows/MacOSX/Linux。
【问题讨论】:
-
如果你想在
i.uv.y % 2时把每个像素都改成黑色,那么col -= col;不应该是col = fixed4(0.0,0.0,0.0,1.0);吗? -
不会改变任何东西,但这在将来的某个时候可能会有所帮助,所以还是谢谢
-
我可以将所有内容调整为颜色,当位置进入播放时会出现问题。 if 语句也可以正常工作。
-
如果我的第一条评论没有任何变化,这意味着
if (i.uv.y % 2 == 0)永远不会是真的。尝试在它们的末尾添加0,看看会发生什么。if (i.uv.y % 2.0 == 0.0)。也可以试试fmod函数 -
仍然没有,但 % 运算符似乎工作正常。我根本无法使用该职位