4

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

这将加载 .obj 文件并可以正确获取人脸,如下所示。 在此处输入图像描述

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

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

在此处输入图像描述

以下是我的几个问题:

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

2)如果上述问题的解决方案是“形状匹配”,我该如何使用opengles呢?

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

4

1 回答 1

9

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

1) 实现完美纹理交换而不失真的唯一方法是,如果两个纹理都以完全相同的方式映射到 UV 顶点上。看看下面的图片:

使用未对齐的顶点进行纹理交换

如您所见,制作纹理以适合模型。因此,任何与不同几何目标的交换都会导致失真。简化后的人头/面部有两个组成部分:内部(骨骼/几何)和外部(皮肤/纹理)。内部方面显然定义了外部,因此在同一个 .obj 文件上进行完美的纹理交换将不起作用,除非您通过交换更改模型的几何形状。

2) 这可以通过一种称为置换映射的技术来实现,该技术可以在 OpenGL ES 中实现,尽管对于多个头/面来说有预期的困难。这将要求您的目标 .obj 几何体从一个非常通用的模型开始,例如人体模型,然后使用每个纹理来移动模型顶点的位置。我认为您需要对建模、图形、着色器和数学非常熟悉才能实现这一目标!

在此处输入图像描述

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

GLKMatrix4Scale(_modelViewMatrix, 0.30, 0.33, 0.30);

希望能回答你所有的问题!

于 2013-03-13T19:13:12.330 回答