Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在3D(iPhone)中包装/扭曲CALayer/UIView(或OpenGL)_Iphone_Opengl Es_Core Animation_Transform_Calayer - Fatal编程技术网

在3D(iPhone)中包装/扭曲CALayer/UIView(或OpenGL)

在3D(iPhone)中包装/扭曲CALayer/UIView(或OpenGL),iphone,opengl-es,core-animation,transform,calayer,Iphone,Opengl Es,Core Animation,Transform,Calayer,我有一个UIView(也就是CALayer),我正试图在3D空间中稍微扭曲或弯曲它。也就是说,假设我的UIView是一个平面标签,我想将其部分包裹在啤酒瓶周围(不是360度,只是在一面) 我想这可能是通过对视图的层应用变换实现的,但据我所知,该变换仅限于层的旋转、缩放和平移。我可能错了,至少可以说,我的线性代数在这一点上是模糊的 如何实现这一点?核心动画的最佳方法是进行分段线性近似 例如,您可以将“圆柱体”分成八段,并按如下方式排列: _ / \ | | 你可以给他们所有相同的图像,

我有一个UIView(也就是CALayer),我正试图在3D空间中稍微扭曲或弯曲它。也就是说,假设我的UIView是一个平面标签,我想将其部分包裹在啤酒瓶周围(不是360度,只是在一面)

我想这可能是通过对视图的层应用变换实现的,但据我所知,该变换仅限于层的旋转、缩放和平移。我可能错了,至少可以说,我的线性代数在这一点上是模糊的


如何实现这一点?

核心动画的最佳方法是进行分段线性近似

例如,您可以将“圆柱体”分成八段,并按如下方式排列:

  _
 / \
|   |
你可以给他们所有相同的图像,但改变翻译,使他们在边缘线。然后给每个元素一个变换(如果你想要透视的话,可以是一个简单的水平压缩,也可以是一种“keystone”)

实际上,您可能需要使用八个以上的片段。请注意,它们将集中在视图的边缘附近


也许会给你一些灵感

看看苹果的示例代码 这是一个OpenGL项目,演示如何在曲面(在您的案例中,在圆柱体上)上显示纹理(您的标签)

Jeff LaMarche发布了一篇很好的OpenGL入门文章。

本页有几个“扭曲”的例子:

我(老实说)不知道怎么做,但我已经把这个页面标记了很长一段时间,试图用网格/网格扭曲/变形UIView

祝你好运


^.^

为此,您需要OpenGL。(我不知道怎么做。)肯尼对这个问题的回答:展示了如何对二维层进行更复杂的扭曲,但我不相信仅使用这样的变换就可以实现曲率。@Brad Larson:对,我可以做那样的扭曲,没问题。我要的是曲率。我对OpenGL一无所知,但如果有人这样做,那是可以接受的。这个答案有什么关系?这是正确的方向,但它没有提到任何关于“弯曲”一层的内容。