【发布时间】:2018-03-01 10:05:56
【问题描述】:
我正在将着色器玩具着色器移植到 Unity GLSL。它可以正常工作,只是我无法获得所需的屏幕空间坐标。这相当于什么:
vec2 coord = gl_FragCoord.xy / iResolution.xy;
gl_FragCoord 似乎不可用,如何获取屏幕尺寸?
请注意,我在 Unity 中使用 GLSL 作为着色器语言,而不是 CG 或 HLSL。
【问题讨论】:
我正在将着色器玩具着色器移植到 Unity GLSL。它可以正常工作,只是我无法获得所需的屏幕空间坐标。这相当于什么:
vec2 coord = gl_FragCoord.xy / iResolution.xy;
gl_FragCoord 似乎不可用,如何获取屏幕尺寸?
请注意,我在 Unity 中使用 GLSL 作为着色器语言,而不是 CG 或 HLSL。
【问题讨论】:
试试这个:
#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”功能。
【讨论】:
我想我得到了答案:
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
【讨论】: