1

我开发了一个自定义CIWarpKernel,它是我的 Numbers 模型设计的转置,如下所示:

我用来设计内核的 Numbers 模型

阳性的单元格y是: SIN($A2×PI()÷2)×(−COS(B$1×PI())×($A2+1)÷$W$3+SIN($A2 ×PI()÷2))其中$A2yB$1x并且$W$3是中心拉伸因子。

代码如下:

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

我遇到的问题是,尽管转置是 100% 准确的,但我在模型中没有得到相同的结果。查看生成的平铺图像变形:

扭曲平铺的图像

为什么我在中心 y=0 和上下两侧有膨胀?

有关信息,我的平铺图像如下:

平铺图像

4

0 回答 0