Unity GLSL着色器 - 获取屏幕坐标

时间:2018-03-01 10:05:57

标签: unity3d glsl shader

我正在将着色器玩具着色器移植到Unity GLSL。它正在工作,除了我无法获得我需要的屏幕空间坐标。相当于这个:

vec2 coord = gl_FragCoord.xy / iResolution.xy;

似乎gl_FragCoord不可用,如何获得屏幕大小?

请注意,我在Unity而不是CG或HLSL中使用GLSL作为着色器语言。

2 个答案:

答案 0 :(得分:1)

我想我得到了答案:

 GLSLPROGRAM // here begins the part in Unity's GLSL

 #include "UnityCG.glslinc"

 vec4 iResolution = _ScreenParams;

然后在片段着色器的main()中:

vec2 coord = gl_FragCoord.xy / iResolution.xy;

我一定犯了一个错误,让我相信我无法访问gl_FragCoord

答案 1 :(得分:0)

试试这个:

#define iResolution _ScreenParams
#define gl_FragCoord ((_iParam.scrPos.xy/_iParam.scrPos.w) * _ScreenParams.xy)

struct v2f {    
    float4 pos : SV_POSITION;    
    float4 scrPos : TEXCOORD0;   
};              

v2f vert(appdata_base v) {  
    v2f o;
    o.pos = UnityObjectToClipPos (v.vertex);
    o.scrPos = ComputeScreenPos(o.pos);
    return o;
} 

fixed4 frag(v2f _iParam) : COLOR0 { 
    return main(gl_FragCoord);
} 

主要功能是你的主要图像' ShaderToy上的功能。