Mengubah sistem koordinat dari Z-up ke Y-up

8

Sistem koordinat Blender berbeda dari yang dulu, dalam Z menunjuk ke atas, bukan Y. Apa yang akan menjadi cara paling sederhana untuk mengubah semua data dunia (sehingga semua animasi, koordinat tekstur, dll. Tetap bekerja) sehingga Y poin ke atas?

Klarifikasi:

Posisi objek didefinisikan sebagai matriks, jadi hanya mengganti informasi terjemahan / rotasi / skala dalam matriks bukanlah tugas yang sepele. (Setidaknya itu sepertinya bukan tugas sepele bagi saya)

Jari Komppa
sumber
Apakah saya kehilangan sesuatu, atau bisakah Anda mengganti papan Z dan papan Y?
Bebek Komunis
Menambahkan klarifikasi ke pertanyaan.
Jari Komppa
Bukankah suatu matriks posisi objek hanya berupa matriks kolom 1x4? Jadi bukankah mudah untuk mengganti elemen? Saya telah membahas matriks, tetapi tidak dalam istilah spesifik gamedev. : p
Bebek Komunis
Ini adalah matriks datar 4x4 dengan terjemahan, rotasi, dan skala yang diterapkan.
Jari Komppa
1
Jika Anda menggunakan skrip python Anda sendiri, Anda dapat menggunakan bpy_extras.io_utils.axis_conversion (lihat: blender.org/documentation/blender_python_api_2_66a_release/… ). Afaik, dukungan untuk sistem koordinat 'non Z up' di blender sudah direncanakan, tetapi sampai sekarang (2.66a) belum diimplementasikan.
Exilyth

Jawaban:

2

Mengapa Anda tidak bisa membuat matriks rotasi untuk mengorientasikannya dengan benar sebagai bagian pertama dari matriks Dunia Anda?

Jika Anda ingin memperbaikinya saat memuat, buat matriks rotasi untuk mengarahkannya dengan benar (yaitu 90 derajat di sekitar sumbu X). Terapkan ini ke semua simpul, lalu ubah semua matriks yang ada ke (rotasi * yang ada).

Jason Goemaat
sumber
Ini mungkin berhasil - terapkan matriks rotasi 90 'untuk semuanya pada waktu ekspor.
Jari Komppa
Yah, saya meminta cara paling sederhana ..
Jari Komppa
7

Hilangkan saya jika saya salah, tetapi saya tidak melihat mengapa orang merekomendasikan bertukar y dan z. Itu akan membuat sistem koordinat Anda dari tangan kanan ke tangan kiri. Coba ini sendiri, tukar y dan z, dan orientasikan kembali sumbu sehingga x menunjuk ke kanan dan y menunjuk ke atas. Anda akan melihat bahwa z menunjukkan arah yang berlawanan dari aslinya (jauh dari layar). Cara yang tepat adalah memutar di sekitar sumbu x, yang bertukar y dan z, dan kemudian membalikkan tanda dari z terakhir.

Saya pikir solusi yang lebih mudah adalah membangun model Anda dengan nilai y naik.

5 tepat
sumber
1
Nah, bagaimana cara memperbaiki matriks sehingga "tanda dari z terakhir" terbalik ..
Jari Komppa
1
Anda tidak ingin memperbaiki matriks Anda, Anda ingin memperbaiki data Anda, yang adalah untuk menerapkan transformasi ketika Anda membaca data model masuk
5
1
Tetapi data animasi disimpan sebagai matriks, sehingga mereka akan bergerak ke arah yang salah. Jadi, objek menunjuk ke arah yang benar, tetapi animasi tidak akan.
Jari Komppa
5

Seperti yang disarankan Kamerad Bebek, Anda bisa menukar Y dan Z. Jika Anda membutuhkan matriks untuk melakukannya, gunakan yang ini:

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

atau dalam koordinat homogen

| 1 0 0 0 |
| 0 0 1 0 |
| 0 1 0 0 |
| 0 0 0 1 |
ggambett
sumber
1

Jika matriks Anda adalah:

x
y
z
w

Lalu mengapa tidak:

temp = y
y = z
z = temp

Atau metode swap apa pun yang Anda inginkan.

Bebek Komunis
sumber
0

Saat Anda memuat jerat Anda dengan kode loader mesh apa pun yang Anda gunakan, cukup alihkan nilai Z dan Y. Jala kemudian akan dimuat dalam gim Anda di ruang koordinat yang sesuai dan Anda dapat melakukan apa pun yang Anda suka (menerapkan rotasi, terjemahan, dll). Ini situasi yang sama saya miliki dengan 3DS Max.

Ray Dey
sumber
1
Seperti yang saya komentari, animasi menjadi kacau.
Jari Komppa