Unity 计算屏幕视口UV坐标的几种方法
时间:2022-12-31 10:00:00
获取屏幕坐标有三种方式,可用于采样图片。
1.使用unity在顶点着色器中自动切割空间posCS,转换到片段着色器时获得的屏幕空间。
struct v2f { float4 pos:SV_POSITION; } v2f vert (adddata v) { o.pos = UnityObjectToClipPos(v.vertex); } fixed frag (v2f i):SV_Target { ///传入这里i.pos必须是SV_POSITION float2 screenUV = i.pos.xy/_ScreenParams.xy; }
2.使用从顶点着色器直接传过来的屏幕坐标,然后手动进行透视除法,注意没有进行平台差异的处理。
struct v2f { float4 screenUV:TEXCOORD1; } v2f vert (adddata v) { o.pos = UnityObjectToClipPos(v.vertex); o.screenUV = o.pos; } fixed frag (v2f i):SV_Target { //注意未处理平台差异 float2 uv = i.screenUV.xy/i.screenUV.w * 0.5 0.5; }
3. 使用内置函数处理
struct v2f { float4 screenUV:TEXCOORD1; } v2f vert (adddata v) { o.pos = UnityObjectToClipPos(v.vertex); o.screenUV = ComputeScreenPos(o.pos); } fixed frag (v2f i):SV_Target { float2 uv = i.screenUV.xy/i.screenUV.w; }