Слишком много аргументов для конструктора TouchDesigner - PullRequest
1 голос
/ 11 февраля 2020

Я использую TouchSesigner GLSL. Я хочу попытаться сделать цвет прозрачным, как альфа, но он покажет слишком много аргументов для конструктора XXX

void main()
{ 
    vec2 r                             = vUV.st;

    vec3 backgroundColor             = vec3(1.0,0,0,0);
    vec3 axesColor                     = vec3(0.0, 0.0, 1.0);
    vec3 gridColor                     = vec3(0.5);

    // start by setting the background color. If pixel's value
    // is not overwritten later, this color will be displayed.
    vec3 pixel                         = backgroundColor;

    // Draw the grid lines
    // we used "const" because loop variables can only be manipulated
    // by constant expressions.
    const float tickWidth             = 0.1;
    for(float i=0.0; i<1.0; i+=tickWidth) {
        // "i" is the line coordinate.
        if(abs(r.x - i)<0.002) pixel = gridColor;
        if(abs(r.y - i)<0.002) pixel = gridColor;
    }
    // Draw the axes
    if( abs(r.x)<0.005 ) pixel         = axesColor;
    if( abs(r.y)<0.006 ) pixel         = axesColor;


    fragColor                         = TDOutputSwizzle(vec4(pixel, 1.0)); 
}

1 Ответ

0 голосов
/ 11 февраля 2020

Проблема в строке

vec3 backgroundColor             = vec3(1.0,0,0,0);

Вы передали 4 аргумента конструктору vec3. A Конструктор вектора принимает число значений, хранящихся в векторе.
Передача 3 отдельных значений с плавающей запятой для решения проблемы:

vec3 backgroundColor = vec3(1.0, 0.0, 0.0);

Альфа-канал является 4-й компонент. Если вы хотите добавить альфа-канал, вы должны использовать vec4 вместо vec3:

void main()
{ 
    vec2 r               = vUV.st;

    vec4 backgroundColor = vec4(1.0, 0.0, 0.0, 0.0); // red: 1, green: 0, blue: 0, alpha: 0
    vec4 axesColor       = vec3(0.0, 0.0, 1.0, 1.0); // red: 0, green: 0, blue: 1, alpha: 1
    vec4 gridColor       = vec3(0.5, 0.0, 0.0, 1.0); // red: 0.5, green: 0, blue: 0, alpha: 1

    // start by setting the background color. If pixel's value
    // is not overwritten later, this color will be displayed.
    vec4 pixel           = backgroundColor;

    // Draw the grid lines
    // we used "const" because loop variables can only be manipulated
    // by constant expressions.
    const float tickWidth = 0.1;
    for(float i=0.0; i<1.0; i+=tickWidth) {
        // "i" is the line coordinate.
        if (abs(r.x - i) < 0.002 || abs(r.y - i) < 0.002)
            pixel = gridColor;
    }
    // Draw the axes
    if (abs(r.x) < 0.005 || abs(r.y) < 0.006)
        pixel = axesColor;

    fragColor = TDOutputSwizzle(pixel); 
}
...