我需要将人脸2D脸部制作成3D脸部。 我使用this link加载“.obj”文件并映射纹理。此示例仅适用于立方体和金字塔。我加载了一个人脸“.obj”文件。
这会加载.obj文件并可以正确获取人脸,如下所示。
但我的问题是我需要在不更改“.obj”文件的情况下显示不同的人脸。只是通过纹理映射。
但是纹理没有正确映射,因为obj文件的模型不同。我只是尝试更改用作纹理的“.png”文件,下面是结果,其中纹理被映射但不完全符合我的预期,如下所示。
以下是我的几个问题:
1)我需要在不同图像的同一模型(使用相同的.obj文件)上加载纹理。在opengles中有可能吗?
2)如果上述问题的解决方案是“形状匹配”,我怎么能用opengles来做呢?
3)最后一个基本问题,我需要在大面积上显示图像,如何使显示区域更大?
答案 0 :(得分:9)
mtl2opengl实际上是我的项目,所以感谢您使用它!
1)只有两种纹理以完全相同的方式映射到UV顶点上,才能实现完美的纹理交换而不失真。看看下面的图片:
如您所见,纹理适合模型。因此,任何交换到不同几何目标都会导致失真。简化的人头/面具有两个组件:内部(骨骼/几何)和外部(皮肤/纹理)。内部方面明显定义了外观,因此除非您使用交换更改模型的几何图形,否则在相同.obj文件上的完美纹理交换将无法工作。
2)这可以通过一种名为displacement mapping的技术实现,该技术可以在OpenGL ES中实现,尽管预计多个头/面很难。这将要求您的目标.obj几何体以非常通用的模型(如人体模型)开始,然后使用每个纹理来移动模型顶点的位置。我认为你需要对建模,图形,着色器和数学非常熟悉才能完成这一步!
3)我将在下次更新中添加更多变换选项(scale& translate)。 Xcode项目实际上是为了展示PERL脚本,而不是作为iOS上OpenGL ES的入门。现在,找到modelViewMatrix
并摆弄这一点:
GLKMatrix4Scale(_modelViewMatrix, 0.30, 0.33, 0.30);
希望能回答你所有问题!