不同纵横比的变形纹理

warping texture in different aspect ratio

在这个问题之后 我尝试将甜甜圈形状纹理展开为矩形。但我在执行此操作时遇到了一些问题。

为了确定甜甜圈形状的入口、内半径、外半径,我截取了当前相机预览的屏幕截图并获得了实际的 bitmap/jpg 文件。然后选择每个坐标用于计算上述值,然后将其归一化为纹理。

但在 Android 中,Camera Preview 不是 1:1 比例,所以我的屏幕截图尺寸为 1920x1080 等。

如您所见,甜甜圈形状看起来只是一个圆形而不是椭圆形。但是实际变形的半径在水平和垂直方向上是不同的,所以当我变形它时,结果很奇怪。但是如果我在 1:1 中选择相机预览(我为此使用 galaxy s6 并且它支持 1:1 预览尺寸(1088、1088))并且它会正确变形。

我的问题是如何获得正确的半径?或者是否有任何不同的方法可以以非 1:1 纵横比扭曲它,或者我是否必须只使用具有 1:1 纵横比的相机预览? 提前致谢。

重复使用上一个问题中的 BDL 代码,您可以将纵横比应用于中心方向的 y 分量

//alpha: angle
alpha = t * 2 * PI //maps the [0,1] range of t to [0, 2*PI] (circle)

//r: distance from the center 
r = ir + s * (or - ir) //maps s=[0,1] to [ir, or]

//d: direction from the center c
d = [sin(alpha), cos(alpha)]

// apply aspect ratio to direction
aspect_ratio = 1920.0 / 1080.0
d.y *= aspect_ratio

//final coordinates
[s_tex, t_tex] = C + d * r