opengles在iphone中显示人脸

时间:2013-03-11 17:08:37

标签: ios objective-c opengl-es 3d glkit

我需要将人脸2D脸部制作成3D脸部。 我使用this link加载“.obj”文件并映射纹理。此示例仅适用于立方体和金字塔。我加载了一个人脸“.obj”文件。

这会加载.obj文件并可以正确获取人脸,如下所示。 enter image description here

但我的问题是我需要在不更改“.obj”文件的情况下显示不同的人脸。只是通过纹理映射。

但是纹理没有正确映射,因为obj文件的模型不同。我只是尝试更改用作纹理的“.png”文件,下面是结果,其中纹理被映射但不完全符合我的预期,如下所示。

enter image description here

以下是我的几个问题:

1)我需要在不同图像的同一模型(使用相同的.obj文件)上加载纹理。在opengles中有可能吗?

2)如果上述问题的解决方案是“形状匹配”,我怎么能用opengles来做呢?

3)最后一个基本问题,我需要在大面积上显示图像,如何使显示区域更大?

1 个答案:

答案 0 :(得分:9)

mtl2opengl实际上是我的项目,所以感谢您使用它!

1)只有两种纹理以完全相同的方式映射到UV顶点上,才能实现完美的纹理交换而不失真。看看下面的图片:

Texture Swapping with misaligned vertices

如您所见,纹理适合模型。因此,任何交换到不同几何目标都会导致失真。简化的人头/面具有两个组件:内部(骨骼/几何)和外部(皮肤/纹理)。内部方面明显定义了外观,因此除非您使用交换更改模型的几何图形,否则在相同.obj文件上的完美纹理交换将无法工作。

2)这可以通过一种名为displacement mapping的技术实现,该技术可以在OpenGL ES中实现,尽管预计多个头/面很难。这将要求您的目标.obj几何体以非常通用的模型(如人体模型)开始,然后使用每个纹理来移动模型顶点的位置。我认为你需要对建模,图形,着色器和数学非常熟悉才能完成这一步!

enter image description here

3)我将在下次更新中添加更多变换选项(scale& translate)。 Xcode项目实际上是为了展示PERL脚本,而不是作为iOS上OpenGL ES的入门。现在,找到modelViewMatrix并摆弄这一点:

GLKMatrix4Scale(_modelViewMatrix, 0.30, 0.33, 0.30);

希望能回答你所有问题!