site_archiver@lists.apple.com Delivered-To: pro-apps-dev@lists.apple.com vec4 aSample = sample (someSampler, someCoordinates); vec2 coords = samplerCoord (someSampler); kernel vec4 multiplyEffect(sampler someSampler) { // Get the current sampler coordinates vec2 coords = samplerCoord (someSampler); // Subtract 1 from the x coordinate vec2 leftCoord = coords - vec2 (1.0, 0.0); Let me know if that answers your question. Thanks, Darrin On Apr 29, 2009, at 1:15 AM, Brian Gardner wrote: Hi Darrin. Thank you for your examples. Very helpful. Is there any example source code for the Displacement Distortion CI filter which you mention below? Which samples 3 pixels from one image, and 1 pixel from another image? That would be very helpful for me to see. There are very few examples which use multiple (or reference) images, and take multiple samples per image. Is there any such sample code available? (Like of the Displacement Distortion filter you describe, below.) -- Brian On Apr 28, 2009, at 9:01 AM, Darrin Cardani wrote: 0.75 0.89 0.23 0.52 It takes (0.75 - 0.89) = -0.14 as the x offset It takes (0.75 - 0.23) = .52 as the y offset Does that make sense? Darrin On Apr 27, 2009, at 5:53 PM, Patrick Sheffield wrote: Thank you Darrin - this helps a lot. Thanks, -- Darrin Cardani dcardani@apple.com _______________________________________________ Do not post admin requests to the list. They will be ignored. Pro-apps-dev mailing list (Pro-apps-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/pro-apps-dev/brianrg%40earthlink.net -- Darrin Cardani dcardani@apple.com _______________________________________________ Do not post admin requests to the list. They will be ignored. Pro-apps-dev mailing list (Pro-apps-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/pro-apps-dev/site_archiver%40lists.ap... Brian, I don't know of any examples of what you want, but it's not too difficult. I'll try to address it here. In a Core Image kernel, you pass in a sampler that samples the input image, and samplers that will sample any other images that your filter uses. So in the example I sent to the list yesterday, there were 2 samplers, one for the input image, and one for the map image: kernel vec4 Displacement (sampler image, sampler mapImage, float scale) { vec4 offset = sample (mapImage, samplerCoord (mapImage)); // <- Reads from the map image offset *= scale; return sample(image, samplerCoord(image) + offset.xy); // <- Reads from the main input image } To read a sample from a sampler, you simply call the "sample ()" function: The coordinates are a vector, and can pretty much be any real numbers. You can get the coordinate of the current pixel in any image by asking the sampler for its current coordinates using the samplerCoord () function: You can then manipulate those coordinates in any way you want. You can add to them, multiply them, use them in dot products, etc. Once you've manipulated your coordinates, then you can sample from one of the samplers. You can read more than one if you want. So a simple convolution might look like this: // Add 1 to the x coordinate vec2 rightCoord = coords + vec2 (1.0, 0.0); // Sample from the new coordinates, weight them, and add the results together, creating a very mild blur return sample (someSampler, leftCoord) * 0.25 + sample (someSampler, coords) * 0.5 + sample (someSampler, rightCoord) * 0.25; } Glad it helps! It looks to me like Displacement Distortion is using the magnitude and direction of edges in the map image to offset pixels in the source image. I believe it first converts the map image to grayscale, then finds the difference of each pixel with its neighbors in the x and y directions. It multiplies the x and y differences by the scale parameter and uses the resulting vector as an offset from the current pixel in the source image. So let's say the grayscale version of your map image looked like this: It then multiplies those values by the scale parameter. Let's say it's set to 25, so it comes up with an offset of (-3.5, 13). It adds that to the current (x,y) coordinate and samples the input image at (x - 3.5, y + 13). I wonder if you could shed some light on a specific CoreImage filter - specifically DisplacementDistortion... In Shake and in FxScript, the X-Displacement is governed by one channel in the displace image and the Y-Displacement by another. I can't find any documentation on the CI filter as to how it handles this. Patrick This email sent to brianrg@earthlink.net This email sent to site_archiver@lists.apple.com