Пиксель Бендера от Белого до Прозрачного - PullRequest
1 голос
/ 18 марта 2009

Когда я запускаю следующий код пиксель-бендера:

input image4 src;
output float4 dst;

// How close of a match you want
parameter float threshold
<
  minValue:     0.0;
  maxValue:     1.0;
  defaultValue: 0.4;
>;

// Color you are matching against.
parameter float3 color
<
  defaultValue: float3(1.0, 1.0, 1.0);
>;

void evaluatePixel()
{
  float4 current = sampleNearest(src, outCoord());
  dst = float4((distance(current.rgb, color) < threshold) ? 0.0 : current);
}

Я получил следующее сообщение об ошибке:

ОШИБКА: (строка 21): ':': неправильный операнд вводит без операции ':' существует, который принимает левый операнд типа 'const float' и правый операнд типа '4-компонентный вектор типа float' (или нет приемлемого преобразования)

Пожалуйста, совет

Ответы [ 2 ]

1 голос
/ 18 марта 2009

Из сообщения об ошибке мне кажется, что Pixel Bender не поддерживает троичного оператора (? :). Разверните его в оператор if:

if (distance(current.rgb, color) < threshold)
    dst = float4(0.0);
else
    dst = float4(current);
0 голосов
/ 18 марта 2009

Я не знаком с Pixel Bender, но полагаю, что проблема в том, что последние два аргумента троичного оператора ?: должны быть одного типа:

A = condition ? B : C

B и C должны иметь тот же тип, который должен быть того же типа, что и A. В этом случае похоже, что вы пытаетесь сделать float4 с, поэтому вы должны сделать:

dst = (distance(current.rgb, color) < threshold) ? float4(0.0) : current;

Так что оба последних аргумента (float4(0.0) и current) имеют тип float4.

...