2009-03-18 6 views
1

Quand je lance le code bender pixel suivant:Pixel cintreuse Blanc Transparent

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); 
} 

Je reçu le message d'erreur suivant:

ERREUR: (ligne 21): ':': mauvais types d'opérandes pas opération « : » existe qui prend un opØrande gauche de type « float const » et un opérande droit de type « vecteur 4 composantes du flottant » (ou il n'y a pas de conversion acceptable)

S'il vous plaît conseiller

Répondre

1

Du message d'erreur, il me semble que Pixel Bender ne supporte pas l'opérateur ternary (? :). Développez dehors dans une instruction if:

if (distance(current.rgb, color) < threshold) 
    dst = float4(0.0); 
else 
    dst = float4(current); 
0

Je ne suis pas familier avec Pixel Bender, mais je devine que le problème est que les deux derniers arguments de l'opérateur ternaire ?: doit être du même type:

A = condition ? B : C 

B et C doivent avoir le même type, qui doit être du même type que A. Dans ce cas, il semble que vous essayez de faire float4 s, donc vous devez faire:

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

Alors que les deux derniers arguments (float4(0.0) et current) ont le type float4.