Math 这个计算到底意味着什么?

Math 这个计算到底意味着什么?,math,glsl,webgl,shader,Math,Glsl,Webgl,Shader,我是GLSL的新手,从这里的教程中学习。 它用的是ShaderToy 我的问题是,为什么可以通过将fragCoord的x坐标除以iResolutionscreensize将x坐标设置为0-1 这可能只是一个数学问题,但我不知道iResolution.x到底表示什么,或者这里进行了什么样的计算。是矢量除法吗 void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 xy = fragCoord.xy; //We obtai

我是GLSL的新手,从这里的教程中学习。 它用的是ShaderToy

我的问题是,为什么可以通过将fragCoord的x坐标除以iResolutionscreensize将x坐标设置为0-1

这可能只是一个数学问题,但我不知道iResolution.x到底表示什么,或者这里进行了什么样的计算。是矢量除法吗

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 xy = fragCoord.xy; //We obtain our coordinates for the current pixel
    xy.x = xy.x / iResolution.x; //We divide the coordinates by the screen size
    xy.y = xy.y / iResolution.y;
    // Now x is 0 for the leftmost pixel, and 1 for the rightmost pixel
    vec4 solidRed = vec4(0,0.0,0.0,1.0); //This is actually black right now
    if(xy.x > 0.5){
        solidRed.r = 1.0; //Set its red component to 1.0
    }
    fragColor = solidRed;
}

iResolution.x是以像素为单位的屏幕宽度。将像素x位置除以总宽度将位置转换为屏幕宽度的一小部分。因此,如果屏幕宽度为1000像素,当前位置为x=500,xy.x=xy.x/iResolution.x;将xy.x转换为0.500。

iResolution.x是屏幕的宽度(以像素为单位)。将像素x位置除以总宽度将位置转换为屏幕宽度的一小部分。因此,如果屏幕宽度为1000像素,当前位置为x=500,xy.x=xy.x/iResolution.x;将xy.x转换为0.500。

其他答案正确。fragCoord是当前正在绘制的像素,iResolution是屏幕的大小

xy.x = xy.x / iResolution.x; //We divide the coordinates by the screen size
xy.y = xy.y / iResolution.y
给出标准化值,其中xy.x从0到1,xy.y从0到1在屏幕上,这似乎正是注释所说的

需要注意的是,iResolution和fragCoord是用户变量。在这种情况下,我猜你是从Shadertoy那里得到这个GLSL的。这些变量不是WebGL或GLSL的一部分,它们由Shadertoy定义,因此它们的值和含义由Shadertoy定义


请注意,如果您是GLSL和WebGL的新手,您可能需要考虑一些。另请参见

其他答案是正确的。fragCoord是当前正在绘制的像素,iResolution是屏幕的大小

xy.x = xy.x / iResolution.x; //We divide the coordinates by the screen size
xy.y = xy.y / iResolution.y
给出标准化值,其中xy.x从0到1,xy.y从0到1在屏幕上,这似乎正是注释所说的

需要注意的是,iResolution和fragCoord是用户变量。在这种情况下,我猜你是从Shadertoy那里得到这个GLSL的。这些变量不是WebGL或GLSL的一部分,它们由Shadertoy定义,因此它们的值和含义由Shadertoy定义


请注意,如果您是GLSL和WebGL的新手,您可能需要考虑一些。另请参见

fragCoord.xy可能是片段的二维坐标(以像素为单位)。iResolution.xy是视口的大小(以像素为单位)。fragCoord.xy/iResolution.xy分别计算x和y在[0.0,1.0]范围内的碎片坐标。接下来,坐标xy.x>0.5的所有片段都位于视口的右半部分。注意,这可以简化为vec2 xy=fragCoord.xy/iResolution.xy;fragColor=vec4xy.x>0.5?1.0 : 0.0, 0.0, 0.0, 1.0;@ 拉比76:你的评论不是更像一个答案吗?可能fragCoord.xy是以像素为单位的片段的二维坐标。iResolution.xy是视口的大小(以像素为单位)。fragCoord.xy/iResolution.xy分别计算x和y在[0.0,1.0]范围内的碎片坐标。接下来,坐标xy.x>0.5的所有片段都位于视口的右半部分。注意,这可以简化为vec2 xy=fragCoord.xy/iResolution.xy;fragColor=vec4xy.x>0.5?1.0 : 0.0, 0.0, 0.0, 1.0;@ 拉比76:你的评论不是更像是一个答案吗?非常感谢你,格曼,谢谢你的回答。现在我完全明白了。是的,我一定会检查这些链接!非常感谢你的回答,gman。现在我完全明白了。是的,我一定会检查这些链接!比尔蜥蜴,我正在关注你在billthelizard.com上的sicp博客,网站似乎已经关闭。你知道为什么吗?嗨,乔达斯特。这看起来像是Blogger和我的域名托管公司之间的DNS错误。我看看今晚能不能解决它。谢谢你让我知道@Jodast在我解决这些问题之前,你可以在“谢谢”上找到我的博客,但我的学区阻止了blogspot。SICP是我为semesterBill the蜥蜴的compsci学校项目,我正在关注你在billthelizard.com上的SICP博客,网站似乎已关闭。你知道为什么吗?嗨,乔达斯特。这看起来像是Blogger和我的域名托管公司之间的DNS错误。我看看今晚能不能解决它。谢谢你让我知道@Jodast在我解决这些问题之前,你可以在“谢谢”上找到我的博客,但我的学区阻止了blogspot。SICP是我这学期的康普商学院项目