【问题标题】:Unity GLSL shader - getting screen coordinatesUnity GLSL着色器 - 获取屏幕坐标
【发布时间】:2018-03-01 10:05:56
【问题描述】:

我正在将着色器玩具着色器移植到 Unity GLSL。它可以正常工作,只是我无法获得所需的屏幕空间坐标。这相当于什么:

vec2 coord = gl_FragCoord.xy / iResolution.xy;

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

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

【问题讨论】:

    标签: unity3d glsl shader


    【解决方案1】:

    试试这个:

    #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”功能。

    【讨论】:

    • 如果你使用的是HLSL/CG,你可以使用上面的代码,抱歉没有看清楚问题。
    • 您的定义在将完全相同的行为从 Shadertoy 复制到 Unity 时对我来说非常有用,您的答案更通用,值得更多支持!
    【解决方案2】:

    我想我得到了答案:

     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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-17
      • 2012-03-05
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      相关资源
      最近更新 更多