Что именно означает этот расчет? - PullRequest
0 голосов
/ 07 апреля 2019

Я новичок в GLSL и учусь здесь.(Он использует ShaderToy)

https://gamedevelopment.tutsplus.com/tutorials/a-beginners-guide-to-coding-graphics-shaders--cms-23313

Мой вопрос заключается в том, почему вы можете установить координаты х в 0-1, разделив координаты x фрагмента fragCoord на iResolution (screenizes).

Это может быть просто математический вопрос, но я запутался, что именно указывает «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;
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Остальные ответы верны.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 являются пользовательскими переменными.В этом случае я предполагаю, что вы получаете этот GLSL от Shadertoy.Эти переменные не являются частью WebGL или GLSL, они определены Shadertoy, поэтому их значения и значение определены shadertoy.

Обратите внимание, что если вы новичок в GLSL и WebGL, вы можете рассмотреть некоторые уроки по webgl .Также см. этот ответ о шадертой

2 голосов
/ 07 апреля 2019

iResolution.x - ширина экрана в пикселях.Разделив местоположение пикселя x на общую ширину, вы преобразуете местоположение в часть ширины экрана.Так, если ваш экран имеет ширину 1000 пикселей, а ваша текущая позиция x = 500, xy.x = xy.x / iResolution.x; преобразует xy.x в 0,500.

...