Resolution
当尝试把上一个例子中的widthStrip
改为500,之后再全屏显示,就能看到白色与红色的显示范围发生了变化。由于我们设置了一个绝对的像素阈值,而不是一个相对比例,那么在改变显示分辨率的情况下就会导致效果不同(这种问题经常出现在app移植到不同平台(各个平台分辨率不同)而出现不尽人意的效果)。
在这篇文章提到过,shader中有一个iResolution
的输入值,这个值存储了当前显示分辨率下的像素长度与宽度,比如拿我的电脑来说,当全屏显示时,iResolution.x
代表了长度1920,iResolution.y
代表了宽度1080。
当显示分辨率不改变的情况下,iResolution.xy
是一个固定值。
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec3 color = vec3(0);
float redAmount = 236.;
float greenAmount = 8.;
float blueAmount = 45.;
//像素坐标大于分辨率长度一半时的情况
if(fragCoord.x>iResolution.x/2.) color = HexTo01Color(redAmount,greenAmount,blueAmount);
//小于等于的情况
else color = vec3(1.);
float alpha = 1.;
fragColor = vec4(color,alpha);
}
坐标变换
使用屏幕空间坐标系在许多时候都不是很方便,这里引入一种常用的坐标系:uv坐标系。此坐标系将屏幕的长宽都映射到了[0,1],这样方便我们用数字直接操作。
void mainImage( out vec4 fragColor,