Modifica del sistema di coordinate da Z-up a Y-up


8

Il sistema di coordinate di Blender è diverso da quello a cui sono abituato, in quanto Z punta verso l'alto invece di Y. Quale sarebbe il modo più semplice per convertire tutti i dati del mondo (in modo che tutte le animazioni, coordinate di trama, ecc. Funzionino ancora) in modo che Y punti verso l'alto?

Una precisazione:

Le posizioni degli oggetti sono definite come matrici, quindi semplicemente cambiare le informazioni di traduzione / rotazione / scala nelle matrici non è un compito banale. (almeno non mi sembra un compito banale)


Mi sto perdendo qualcosa o potresti semplicemente cambiare le coordinate Z e Y?
Il comunista Duck il

Aggiunto chiarimento alla domanda.
Jari Komppa,

Una matrice posizionale dell'oggetto non è solo una matrice di colonne 1x4? Quindi non sarebbe facile cambiare gli elementi? Ho coperto le matrici, ma non in termini specifici di gioco. : p
Il comunista Duck il

Queste sono matrici 4x4 piatte con traslazione, rotazione e scala applicate.
Jari Komppa,

1
Se stai scrivendo il tuo script Python, puoi usare bpy_extras.io_utils.axis_conversion (vedi: blender.org/documentation/blender_python_api_2_66a_release/… ). Dopo tutto, è previsto il supporto per i sistemi di coordinate "non Z up" in Blender, ma per ora (2.66a) non ancora implementato.
Exilyth,

Risposte:


2

Perché non puoi semplicemente creare la matrice di rotazione per orientarla correttamente nella prima parte della tua matrice mondiale?

Se si desidera correggerlo durante il caricamento, creare la matrice di rotazione per orientarla correttamente (cioè 90 gradi attorno all'asse X). Applicalo a tutti i vertici, quindi modifica tutte le matrici esistenti in (rotazione * esistente).


Questo potrebbe funzionare: applica una matrice di rotazione di 90 'a tutto al momento dell'esportazione.
Jari Komppa,

Bene, ho chiesto il modo più semplice ..
Jari Komppa,

7

Sottovalutami se sbaglio, ma non vedo perché le persone stiano raccomandando di scambiare y e z. Ciò renderebbe il tuo sistema di coordinate dalla mano destra alla mano sinistra. Prova tu stesso, scambia ye z e riorienta l'asse in modo che x punti a destra e y punti in alto. Vedrai che la z punta nella direzione opposta rispetto al suo originale (lontano dallo schermo). Il modo corretto è ruotare attorno all'asse x, che è scambiare ye z, quindi invertire il segno dell'ultima z.

Penso che la soluzione più semplice sia costruire i tuoi modelli con valore y in aumento.


1
Ora, poi, come riparare le matrici in modo che "il segno dell'ultima z" sia invertito ..
Jari Komppa

1
Non vuoi riparare le tue matrici, vuoi correggere i tuoi dati, vale a dire applicare la trasformazione quando leggi i dati del modello.
5

1
Ma i dati di animazione sono memorizzati come matrici, quindi si sposteranno in direzioni sbagliate. Quindi, gli oggetti puntano nelle direzioni corrette, ma le animazioni no.
Jari Komppa,

5

Come suggerisce il compagno Duck, puoi semplicemente scambiare Y e Z. Se hai bisogno di una matrice per farlo, usa questa:

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

o in coordinate omogenee

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

1

Se la tua matrice è:

x
y
z
w

Allora perché no:

temp = y
y = z
z = temp

O qualunque sia il metodo di scambio che desideri.


0

Quando carichi le tue maglie con qualsiasi codice caricatore di maglie stai usando, cambia semplicemente i valori Z e Y. La mesh verrà quindi caricata nel gioco nello spazio di coordinate appropriato e potrai fare ciò che ti piace (applicare rotazioni, traduzioni, ecc.). È una situazione simile che ho avuto con 3DS Max.


1
Come ho commentato, le animazioni vengono rovinate.
Jari Komppa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.