1

I have developed a custom CIWarpKernel which is the transposition of my Numbers model design as follows:

The Numbers model I used to design the kernel

The cell for positive y is: SIN($A2×PI()÷2)×(−COS(B$1×PI())×($A2+1)÷$W$3+SIN($A2 ×PI()÷2)) where $A2 is y, B$1 is x and $W$3 is the center stretching factor.

The code is as follows:

kernel vec2 panoramaDistortion (vec2 center) {
    float pi = 3.141592653589793;
    vec2 t = destCoord();
    float x = t.x / center.x - 1.0;         // x ∈ -1...1
    float y = t.y / center.y - 1.0;         // y ∈ -1...1

    float rx = x;
    float delta = 50.0;
    float siny = sin(y * pi / 2.0);

    // See my model in Numbers: Aladdin PanoramPinch CIKernel file where $a2 = x and b$1 = y

    // sin($a2×pi()÷2)×(−cos(b$1×pi())×($a2+1)÷$w$3+sin($a2 ×pi()÷$w$5))
    // sin(y×pi()÷2)×(−cos(x×pi())×(y+1)÷$w$3+sin(y×pi()÷2))

    // sin($a22×pi()÷2)×(−cos(b$1×pi())×abs(1−$a22)÷$w$3−sin($a22 ×pi()÷$w$5))

    float ry =
      y >= 0.0 ?
        siny * (-cos(x * pi) * (y + 1.0) / delta + siny)
      : siny * (-cos(x * pi) * (1.0 - y) / delta - siny)
    ;

    return vec2(center.x * (rx + 1.0), center.y * (ry + 1.0));
}

The issue I have is that, though the transposition is 100% exact, I don't get the same result I have in my model. See the resulting warping of tiled-image:

The warped-tiled image

How it comes I have the dilatation at the center y=0 and at the upper- and bottom- sides?

For information, my tiled-image is as follows:

The tiled image

Stéphane de Luca
  • 12,745
  • 9
  • 57
  • 95

0 Answers0