2013-03-11 5 views
4

J'ai besoin de faire un visage humain 2D au visage 3D. J'ai utilisé this link pour charger un fichier ".obj" et mapper les textures. Cet exemple est uniquement pour le cube et la pyramide. J'ai chargé un fichier ".obj" de visage humain.opengles afficher le visage humain dans l'iphone

Cela charge le fichier .obj et peut obtenir le visage humain correctement comme ci-dessous. enter image description here

Mais mon problème ici est que j'ai besoin d'afficher différents visages humains sans changer le fichier ".obj". juste par la cartographie de la texture.

Mais la texture n'est pas correctement mappée, car le fichier obj est de modèle différent. J'ai juste essayé de changer le fichier ".png" qui est utilisé comme texture et le dessous est le résultat, où la texture est mappée mais pas exactement ce à quoi je m'attendais, comme montré ci-dessous.

enter image description here

Le ci-dessous sont mes quelques questions à ce sujet:

1) J'ai besoin de charger la texture sur un même modèle (avec la même fichier .obj) avec des images différentes. Est-ce possible dans les opengles?

2) Si la solution pour le problème ci-dessus est la "mise en forme", comment puis-je le faire avec opengles? 3) Et enfin une question de base, j'ai besoin d'afficher l'image dans une grande zone, comment agrandir la zone d'affichage?

+0

pouvez-vous joindre la texture d'origine de l'OBJ que vous utilisez? c'est la texture qui est affichée dans votre première image – talkol

+0

Quelqu'un peut-il ajouter plus de points ici? – 2vision2

Répondre

9

mtl2opengl est en fait mon projet, alors merci de l'utiliser!

1) La seule façon d'obtenir une permutation de texture parfaite sans distorsion est que les deux textures soient mappées sur les sommets UV exactement de la même manière. Jetez un oeil sur les images ci-dessous:

Texture Swapping with misaligned vertices

Comme vous pouvez le voir, les textures sont faites pour adapter le modèle. Ainsi, toute permutation vers une cible géométrique différente entraînera une distorsion. Les têtes/visages humains simplifiés ont deux composants: intérieur (os/géométrie) et extérieur (peau/texture). L'aspect intérieur définit évidemment l'extérieur, donc l'échange de texture parfait sur le même fichier .obj ne fonctionnera que si vous changez la géométrie du modèle avec le swap.

2) Ceci est possible avec une technique appelée displacement mapping qui peut être implémentée dans OpenGL ES, bien qu'avec une difficulté anticipée pour plusieurs têtes/faces. Cela nécessiterait que votre géométrie .obj cible commence par un modèle assez générique, comme un mannequin, puis utilise chaque texture pour décaler la position des sommets du modèle. Je pense que vous devez être très à l'aise avec la modélisation, les graphismes, les shaders et les maths pour en retirer une!

enter image description here

3) Je vais ajouter plus de transformer les options (échelle &) dans la traduire prochaine mise à jour. Le projet Xcode a été fait pour montrer le script PERL, pas comme un amorce pour OpenGL ES sur iOS. Pour l'instant, trouver le modelViewMatrix et le violon avec ce peu:

GLKMatrix4Scale(_modelViewMatrix, 0.30, 0.33, 0.30); 

espoir qui répond à toutes vos questions!

+0

merci pour votre réponse! Ça vaut le coup !! – 2vision2

+0

Merci! J'espère que vous faites de bons progrès sur votre projet car il semble très intéressant. Je vais également essayer de développer 'mtl2opengl' et d'inclure un doc dans le futur –

+0

Ouais. Merci beaucoup. Ça va bien jusqu'à présent. Je suis fauché dans les opengles. Et je n'ai pas résolu ce problème http://stackoverflow.com/questions/15384079/texture-mapping-not-working-in-glkit-only-in-devices encore maintenant. Et vous pouvez toujours voir ma section de questions, j'ai ajouté quelques questions maintenant !!! Un échantillon ici http://stackoverflow.com/questions/15432468/make-a-layer-over-an-image-and-adjust-its-co-ordinates-by-touch – 2vision2