【问题标题】:Wrapping/warping a CALayer/UIView (or OpenGL) in 3D (iPhone)在 3D (iPhone) 中包装/扭曲 CALayer/UIView(或 OpenGL)
【发布时间】:2011-01-25 01:35:15
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 为此您需要 OpenGL。 (我不知道怎么做。)
  • 肯尼对这个问题的回答:stackoverflow.com/questions/2351586/… 展示了如何对二维层进行更复杂的扭曲,但我不相信只使用这样的变换就可以实现曲率。
  • @Brad Larson:是的,我可以做这样的倾斜没问题。我追求的是曲率。我对 OpenGL 一无所知,但如果有人这样做是可以接受的。

标签: iphone opengl-es core-animation transform calayer


【解决方案1】:

Core Animation 能做的最好的事情就是进行分段线性逼近。

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

  _
 / \
|   |

您可以为它们提供所有相同的图像,但更改翻译,使它们在边缘对齐。然后给每个人一个变换(一个简单的水平压缩或一种“基石”,如果你想要一个透视外观)。

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

This CSS animation 可能会给你一些启发。

【讨论】:

    【解决方案2】:

    看看苹果的示例代码PVRTextureLoader 这是一个 OpenGL 项目,演示如何在表面(在您的情况下为圆柱体)上显示纹理(您的标签)。

    Jeff LaMarche 发布了一个很好的 tutorial 以开始使用 Open GL。

    【讨论】:

    • 这个答案有什么相关性?这是正确的方向,但它没有提到“弯曲”一层。
    【解决方案3】:

    这个页面有几个“扭曲”的例子:http://www.sgi.com/products/software/opengl/examples/more_samples/

    我(老实说)不知道该怎么做,但我已经将此页面加入书签很长一段时间了,以尝试使用网格/网格扭曲/变形 UIView。

    祝你好运。

    ^.^

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      相关资源
      最近更新 更多