我正在将着色器玩具着色器移植到Unity GLSL。它正在工作,除了我无法获得我需要的屏幕空间坐标。什么相当于:
vec2 coord = gl_FragCoord.xy / iResolution.xy;
似乎gl_FragCoord不可用,我如何获得屏幕尺寸?
请注意,我在Unity而不是CG或HLSL中使用GLSL作为着色器语言。
我想我得到了答案:
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
试试这个:
#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上的'mainImage'功能。