2013-03-11 83 views
4

我需要将人脸2D制作成3D人脸。 我用this link加载一个“.obj”文件并映射纹理。这个例子只适用于立方体和金字塔。我加载了一张人脸“.obj”文件。opengles在iphone中显示人脸

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

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

但是由于obj文件的模型不同,纹理没有正确映射。我只是试着改变用作纹理的“.png”文件,下面是纹理映射的结果,但不是我所期望的,如下所示。

enter image description here

下面是它我几个问题:

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

2)如果上述问题的解决方案是“形状匹配”,我怎样才能用opengles做到这一点?

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

+0

你能附加你正在使用的OBJ的原始纹理吗?这就是你的第一张图片中显示的纹理 – talkol 2013-03-11 17:14:19

+0

有人可以在这里添加更多点吗? – 2vision2 2013-03-20 04:05:29

回答

9

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

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

Texture Swapping with misaligned vertices

正如你所看到的,纹理做适合的型号。所以任何交换到不同的几何目标都会导致失真。简化的人体头部/面部有两个部分:内部(骨骼/几何)和外部(肤色/纹理)。内部方面明显定义了外观,因此,除非使用交换来更改模型的几何图形,否则在同一个.obj文件上完美的纹理交换将不起作用。

2)这是可以用一种叫做displacement mapping的技术来实现的,可以在OpenGL ES中实现,但预计会有多个头部/面部的困难。这需要你的目标.obj几何体以一个非常通用的模型(如人体模型)开始,然后使用每个纹理来移动模型顶点的位置。我认为你需要对建模,图形,着色器和数学非常满意,才能把这个关掉!

enter image description here

3)我会添加更多的变换在下次更新选项(规模&翻译)。 Xcode项目实际上是为了展示PERL脚本,而不是作为iOS上的OpenGL ES的入门。现在,找到modelViewMatrix,并用这一点点捣鼓:

GLKMatrix4Scale(_modelViewMatrix, 0.30, 0.33, 0.30); 

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

+0

感谢您的回答!值得一试! – 2vision2 2013-03-14 03:39:14

+0

谢谢!我希望你在你的项目上取得很好的进展,因为它看起来很有趣。我也会尝试扩展'mtl2opengl'并在将来包含一个doc – 2013-03-15 14:27:49

+0

是的。非常感谢。迄今为止进展顺利。我在操作系统中失败了。而我现在还没有解决这个问题http://stackoverflow.com/questions/15384079/texture-mapping-not-working-in-glkit-only-in-devices。你可以随时查看我的问题部分,我现在增加了几个问题!这里的示例http://stackoverflow.com/questions/15432468/make-a-layer-over-an-image-and-adjust-its-co-ordinates-by-touch – 2vision2 2013-03-15 14:40:12