iOS - 2D图像变成了3d

时间:2012-01-21 07:46:08

标签: objective-c ios animation 3d 2d

我正在查看这个名为Morfo的酷应用。根据他们的产品描述 -

  

使用Morfo快速将朋友脸部的照片变成a   说话,跳舞,疯狂的3D角色!一旦被捕获,你可以制作你的   朋友用愚蠢的声音说出你想要的任何东西,摇滚,化妆,   运动一双巨大的绿色猫眼,突然增加300磅,甚至更多。

因此,如果您拍摄史蒂夫作业的普通2D图像&将它提供给这个应用程序,它将其转换为该图像的3D模型&用户可以与之交互。

enter image description here

我的问题如下 -

  1. 他们是怎么做到的?
  2. 这在iPad中怎么可能?
  3. 渲染2D图像并将其转换为3D不是计算密集型吗?
  4. 非常感谢ObjectiveC中的任何指针,指向网站或图书馆的链接。

    更新: this product here的这个演示展示了morfo如何使用模板机制进行转换。即,在馈送2D图像之后,需要设置眼睛所在的面部边界,尺寸和尺寸。嘴唇的长度。然后它将其转换为3D模型。这部分是如何完成的?他们可能使用哪些框架或库?

4 个答案:

答案 0 :(得分:14)

这是一个广泛的问题,但我可以指出你正确的3D渲染工作方向,相信我这是一个巨大的主题,背后有数十年的工作,并且要放在这里。不知道如何快速了解3D渲染技术,因此我将为您提供纹理的基本概念,并为您指出一套优秀的教程。

  1. 他们是怎么做到的?
    我们的想法是,在3D渲染中,3D模型可以使用称为纹理贴图的2D图像进行纹理化。您可以使用2D图像将其包裹在3d模型周围,就像一个简单的原始图形,如立方体的球体或更高级的图像,例如经典的茶壶或人体头部的模型e.t.c.可以从任何地方拍摄纹理,我过去使用相机输入来使用来自相机流的视频对网格进行纹理处理,我使用了相机中的照片,这些照片是如何进行的。这就是面部渲染到3D模型的方式。

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

  3. 它使用anticyclope提到的映射(视频中的缩放旋转模板)的方式允许您使纹理适合模型,并将眼睛放置在渲染代码的一部分。

    所以,如果你想选择这个,我建议你从头开始阅读Jeff Lamarche Tutorial作为入门读物:

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

    其次,我已经阅读了大约4本关于OpenGLES的书籍,用于一般设计和平台细节。我推荐这本书:

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

答案 1 :(得分:9)

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

他们拥有人体头部的3D模型。当您点击2D图像上的某些点时,它们会调整3D模型中的对应点,因此它表示特定面部的特征,如眼睛之间的距离,嘴唇宽度等。接下来,使用该控制点将来自2D图像的纹理应用于3D模型,因此我们具有人类头部的纹理3D模型。鉴于这一事实,我们的感知能够从2D图像重建3D形状(比如,我们看2D照片并仍然想象一个3D人物),没有必要准确地重建3D形状,纹理将完成工作。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:1)

  

将2D图像渲染并转换为3D是不是计算密集?

Apple正在开发定制芯片组数十亿美元,考虑到电池寿命和低工作温度(没有风扇),最近的型号具有令人印象深刻的性能。