iOS – 2d图像变成了3d

我正在查看这个叫做Morfo的很酷的应用程序。 根据他们的产品描述 –

使用Morfo快速将你朋友的脸部照片变成一个说话,跳舞,疯狂的3Dangular色! 一旦被抓住,你可以用一个愚蠢的声音让你的朋友说出任何你想要的东西,摇摆出来,化妆,运动一双巨大的绿色猫眼,突然增加300磅,等等。

所以,如果你把一个正常的二维图像的史蒂夫作业,并将其提供给这个应用程序,它将其转换成该图像的3D模型,用户可以与它交互。

在这里输入图像说明

我的问题如下 –

  1. 他们如何做到这一点?
  2. 这怎么可能在iPad?
  3. 渲染和转换2D图像到3D是不是计算密集型?

任何指针,链接到网站或库中的objectiveC这是非常赞赏。

更新: 这里这个产品演示显示了morfo如何使用模板机制来进行转换。 即在2D图像被馈送之后,需要设置人脸的边界,眼睛的位置,嘴唇的大小和长度。 然后将其转换成3D模型。 这部分是如何完成的? 他们可能使用哪些框架或库?

这是一个广泛的问题,但我可以指出你的3D渲染是如何工作的正确的方向,相信我这是一个巨大的课题,背后有几十年的工作,而且要放在这里。 不知道如何加快你在3D渲染技术,所以我会给你一个纹理的基本思想,并指出你一套很好的教程。

  1. 他们如何做到这一点?
    这个想法是,在3D渲染中,3D模型可以使用被称为纹理贴图的2D图像进行纹理化。 你使用一个二维图像,并围绕一个三维模型,是一个简单的原始像一个立方体或更高级的球体,如经典的茶壶或人头模型等纹理可以从任何地方采取,我有使用过去的相机馈送来纹理与来自相机stream的video的网格,我已经使用来自相机的照片,这是怎么做的。 所以这就是脸部如何呈现给3D模型。

  2. 这是否有效?
    在iOS和大多数移动设备上,3D渲染使用利用OpenGLES的硬件加速。 关于你的问题,这取决于你如何实现你的渲染代码真的很快。

它使用anticyclope提到的映射(在video中缩放旋转模板)的方式,可以使纹理适合模型,也可以放置那些呈现代码的一部分的眼睛。

所以,如果你想select这个,我build议阅读杰夫·拉马奇教程“从头开始”作为一个引子:

http://iphonedevelopment.blogspot.com/2009/05/opengl-es-from-ground-up-table-of.html

其次,我已经阅读了关于OpenGLES的4本书,用于一般devise和特定平台。 我推荐这本书:

http://www.amazon.co.uk/iPhone-Programming-Developing-Graphical-Applications/dp/0596804822/ref=sr_1_1?ie=UTF8&qid=1331114559&sr=8-1

在我看来,他们是这样做的。 只是我的想法,还没有看到在现实生活中的应用。

他们有一个人类头部的3D模型。 当你点击二维图像上的某些点时,他们正在调整3D模型中的相应点,因此它代表了特定人脸的特征,如眼睛之间的距离,嘴唇的宽度等等。 接下来,使用该控制点将来自二维图像的纹理应用于三维模型,因此我们具有人类头部的纹理三维模型。 鉴于事实,我们的感知能够从2D图像重build3D形状(比如说,我们在2D照片中看,还在想象一个3D人物),不需要准确地重build3D形状,纹理就可以完成工作。

在渲染3D图像时存在一个问题,称为UV贴图 ,它采用3D模型并定义一组边,并创build一个用于生成模型的不同纹理的图像。

现在,如果你注意到Morfo,你可以定义头部,眼睛,嘴和鼻子的边缘。 有了这些信息,Morfo就知道如何将纹理放置到已定义的模型上。

在模型上加载纹理的过程并不是很复杂,可以在任何支持某些技术的设备上完成,例如OpenGL

渲染和转换2D图像到3D是不是计算密集型?

苹果正在投入数十亿美元用于开发自定义芯片组,而最近的型号具有令人印象深刻的性能,考虑到电池寿命和低工作温度(无风扇)。