2010-09-20 7 views
0

Je suis novice en graphisme. J'expérimente avec OpenGL/JOGL.Graphiques 3D: Comment penser à la position d'un modèle

J'ai un fichier .obj que je suis en train de rendre. J'ai du mal à le placer exactement là où je le veux dans le monde. J'ai un plan sur lequel je veux qu'il repose, en tenant compte de la taille de l'ensemble d'exécution du modèle. Faire une transformation n'est pas suffisant, car je dois prendre en compte les dimensions du modèle.

Même alors, je ne suis pas sûr comment traduire 0 dans le cadre de référence .obj au système de coordonnées du monde.

Quel est le schéma idiomatique pour traiter cela?

Répondre

0

Vous devez définir l'origine de votre modèle à ses pieds et env. sous son centre de gravité. De cette façon, lorsque vous l'échellez, sa position (par rapport au sol) ne changera pas. Ensuite, traduisez-le simplement à l'endroit où vous voulez qu'il soit, puis faites-le pivoter, puis redimensionnez-le (dans cet ordre) - vous avez terminé.

1

Pour une simple traduction (par étapes):

Prenez la position de l'origine de l'objet dans les coordonnées monde et créer une matrice de traduction de ce en multipliant d'abord l'origine par -1:

1 0 0 -xo 
0 1 0 -yo 
0 0 1 -zo 
0 0 0 1 

Cela va déplacer l'objet de sorte que son origine coïncide avec l'origine mondiale. Alors, prenez la valeur y du plan que vous souhaitez que l'objet se reposer sur (en supposant que y est « up ») et ajouter que le vecteur calculé ci-dessus afin que votre matrice devient:

1 0 0 -xo 
0 1 0 (-yo + yp) 
0 0 1 -zo 
0 0 0 1 

Cela signifie que le plan intersecte l'objet (en supposant que l'origine est quelque part à l'intérieur de l'objet). Maintenant, trouver la zone de délimitation de l'objet et de prendre la valeur minimale y de l'origine de l'objet:

+------+ ymax 
|  | 
|  | 
| o | 
|  | 
+------+ ymin 

où « o » est à l'origine.

inclure dans la matrice:

1 0 0 -xo 
0 1 0 (-yo + yp + (yo - min)) 
0 0 1 -zo 
0 0 0 1 

Je pense que cela devrait mettre votre objet posé sur le plan. Cela fait longtemps que je n'ai pas fait ce genre de choses, donc j'ai peut-être des signes à l'envers - alors vérifiez les chiffres et préparez-vous à expérimenter.

Questions connexes