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

问题描述 投票:0回答:2

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

vec2 coord = gl_FragCoord.xy / iResolution.xy;

似乎gl_FragCoord不可用,我如何获得屏幕尺寸?

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

unity3d glsl shader
2个回答
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


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上的'mainImage'功能。

© www.soinside.com 2019 - 2024. All rights reserved.