Archive for June 17th, 2009

17
Jun
09

Random Gradients Variation

///////////////////////
// CIFilter Kernel Code
///////////////////////

kernel vec4 combineChannels(sampler ImageR, sampler ImageG, sampler ImageB)  
{  
    float R = sample(ImageR, samplerCoord(ImageR)).r;  
    float G = sample(ImageG, samplerCoord(ImageG)).r;  
    float B = sample(ImageB, samplerCoord(ImageB)).r;  
  
    return vec4(R, G, B, 1.0);  
}

kernel vec4 multiplyChannels(sampler ImageR, sampler ImageG, sampler ImageB)  
{  
    float R = sample(ImageR, samplerCoord(ImageR)).r;  
    float G = sample(ImageG, samplerCoord(ImageG)).r;  
    float B = sample(ImageB, samplerCoord(ImageB)).r;
    float shade = R * G * B; 
  
    return vec4(vec3(shade), 1.0);  
}

///////////////////
// JavaScript
///////////////////

function __image main(__boolean Trigger, __index Type) {  
  
    var dims = new Vec(256,256);  
    var gradDims = new Vec(0,0,dims.x,dims.y);  
  
    var black = new Vec(0,0,0,1);  
    var white = new Vec(1,1,1,1);  
  
    var p0 = new Vec(Math.random() * dims.x, Math.random() * dims.y);  
    var p1 = new Vec(Math.random() * dims.x, Math.random() * dims.y);  
  
    var gradR = Filter.CILinearGradient(p0, p1, black, white);  
    gradR = Filter.CICrop(gradR, gradDims);  
  
    p0 = new Vec(Math.random() * dims.x, Math.random() * dims.y);  
    p1 = new Vec(Math.random() * dims.x, Math.random() * dims.y);  
  
    var gradG = Filter.CILinearGradient(p0, p1, black, white);  
    gradG = Filter.CICrop(gradG, gradDims);  
  
    p0 = new Vec(Math.random() * dims.x, Math.random() * dims.y);  
    p1 = new Vec(Math.random() * dims.x, Math.random() * dims.y);  
  
    var gradB = Filter.CILinearGradient(p0, p1, black, white);  
    gradB = Filter.CICrop(gradB, gradDims);  
  
    switch (Type) {
    case 0:
    		// Call kernel function and return result  
    		return combineChannels.apply(gradR.definition, null, gradR, gradG, gradB);
    		break;
    	case 1:
    		return multiplyChannels.apply(gradR.definition, null, gradR, gradG, gradB);
    		break;
	} 
}

Makes greyscale triangles and squares.

EDIT:
Just uploaded a QTZ with three variations on the basic random gradients theme, all in one CIFilter patch.
Download it if you think you’ll find it useful…
‘tb_randomGradients_1.0.qtz’ in the box.net widget on right.

And here’s a clip of it in action, courtesy of Lee Grosbauer:

Cheers, Lee!




June 2009
M T W T F S S
« May   Jul »
1234567
891011121314
15161718192021
22232425262728
2930  

Links

Blog Stats

  • 472,675 hits