我下面这个教程:https://www.youtube.com/watch?v=CzORVWFvZ28一些代码ShaderToy转换成统一。这是我试图转换的着色器:https://www.shadertoy.com/view/Ws23WD。
我经历的教程和我注意到的变化,使一个是采取“fragCoord.xy / iResolution.xy”和使用“i.uv”代替。但是,如果我有 'fragCoord.x / iResolution.x' 和 'fragCoord.y / iResolutiony'?难道“i.uv”取代这两个声明的?
下面是它如何出现在我的代码:
float2 uv = float2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y);
uv -= 0.5;
uv /= float2(iResolution.y / iResolution.x, 1);
iResolution.x和iResolution.y指渲染窗口的像素尺寸。在团结,你有_ScreenParams.x和_ScreenParams.y的屏幕像素尺寸,但你只需要担心这个,如果你渲染屏幕空间效果。如果你想使这个作为一个平面上的效果,您使用i.uv.x和i.uv.y而是为了同样的目的。 FragCoord / iResolution有让您的屏幕,这实际上相当于一个UV坐标上的片段在0-1的范围内的位置的目的。 0.5减去为您提供了范围-0.5到0.5之间。
最后一行,UV / = FLOAT2(iResolution.y / iResolution.x,1),是用于校正宽高比。如果您使用的是UV映射,方形平面,你不需要这个费心。
总之,这些行等同于:
float2 uv = i.uv - (float2)0.5;