Changer le système de coordonnées de Z-up à Y-up

8

Le système de coordonnées de Blender est différent de ce à quoi je suis habitué, dans la mesure où Z pointe vers le haut au lieu de Y. Quelle serait la manière la plus simple de convertir toutes les données du monde (pour que toutes les animations, coordonnées de texture, etc. fonctionnent toujours) pour que Y pointe vers le haut?

Clarification:

Les positions des objets sont définies comme des matrices, donc la simple commutation des informations de translation / rotation / échelle dans les matrices n'est pas une tâche triviale. (au moins cela ne me semble pas être une tâche triviale)

Jari Komppa
la source
Suis-je en train de manquer quelque chose, ou pourriez-vous simplement changer les cordons Z et les cordons Y?
The Communist Duck
Ajout d'une clarification à la question.
Jari Komppa
Une matrice positionnelle d'objet n'est-elle pas simplement une matrice de colonnes 1x4? Alors, ne serait-il pas facile de changer les éléments? J'ai couvert des matrices, mais pas en termes spécifiques à gamedev. : p
The Communist Duck
Ce sont des matrices plates 4x4 avec translation, rotation et échelle appliquées.
Jari Komppa
1
Si vous souhaitez créer votre propre script python, vous pouvez utiliser bpy_extras.io_utils.axis_conversion (voir: blender.org/documentation/blender_python_api_2_66a_release/… ). Afaik, le support des systèmes de coordonnées «non Z up» dans Blender est prévu, mais pour l'instant (2.66a) pas encore implémenté.
Exilyth

Réponses:

2

Pourquoi ne pouvez-vous pas simplement faire la matrice de rotation pour l'orienter correctement la première partie de votre matrice mondiale?

Si vous souhaitez le corriger lors du chargement, créez la matrice de rotation pour l'orienter correctement (c'est-à-dire à 90 degrés autour de l'axe X). Appliquez ceci à tous les sommets, puis changez toutes les matrices existantes en (rotation * existante).

Jason Goemaat
la source
Cela pourrait fonctionner - appliquer une matrice de rotation de 90 'à tout au moment de l'exportation.
Jari Komppa
Eh bien, j'ai demandé le moyen le plus simple ..
Jari Komppa
7

Votez contre moi si je me trompe, mais je ne vois pas pourquoi les gens recommandent d'échanger y et z. Cela rendrait votre système de coordonnées droitier à gaucher. Essayez vous-même, permutez les y et z, et réorientez l'axe de sorte que x pointe vers la droite et y pointe vers le haut. Vous verrez que z pointe dans la direction opposée à son original (loin de l'écran). La bonne façon consiste à faire pivoter autour de l'axe des x, qui est de permuter y et z, puis inverser le signe du z final.

Je pense que la solution la plus simple est de construire vos modèles avec une valeur y en hausse.

5ound
la source
1
Maintenant, comment réparer les matrices pour que "le signe du z final" soit inversé.
Jari Komppa
1
Vous ne voulez pas réparer vos matrices, vous voulez corriger vos données, c'est-à-dire appliquer la transformation lorsque vous lisez les données du modèle.
5
1
Mais les données d'animation sont stockées sous forme de matrices, donc elles se déplaceront dans de mauvaises directions. Ainsi, les objets pointent dans des directions correctes, mais pas les animations.
Jari Komppa
5

Comme le suggère le camarade Duck, vous pouvez simplement échanger Y et Z. Si vous avez besoin d'une matrice pour le faire, utilisez celle-ci:

| 1 0 0 |
| 0 0 1 |
| 0 1 0 |

ou en coordonnées homogènes

| 1 0 0 0 |
| 0 0 1 0 |
| 0 1 0 0 |
| 0 0 0 1 |
ggambett
la source
1

Si votre matrice est:

x
y
z
w

Alors pourquoi pas:

temp = y
y = z
z = temp

Ou quelle que soit la méthode de swap que vous souhaitez.

Le canard communiste
la source
0

Lorsque vous chargez vos maillages avec le code de chargeur de mailles que vous utilisez, changez simplement les valeurs Z et Y. Le maillage sera ensuite chargé dans votre jeu dans l'espace de coordonnées approprié et vous pourrez faire ce que vous voudrez (appliquer des rotations, des traductions, etc.). C'est une situation similaire que j'ai eue avec 3DS Max.

Ray Dey
la source
1
Comme je l'ai commenté, les animations sont foutues.
Jari Komppa