X, Y, Z mengoordinasikan standar?

12

Saya cukup baru dalam pengembangan 3D dalam bentuk apa pun, namun game. Ketika saya membaca tutorial dan contoh, saya menemukan bahwa koordinat X / Y / Z tampaknya sedikit mundur dari tebakan pertama saya.

Saya membayangkan bahwa jika seseorang berjalan di sekitar lapangan, posisi X / Y mereka akan berubah dan jika mereka melompat atau berjalan naik atau turun bukit, maka posisi Z mereka akan berubah. Asumsi saya tampaknya salah karena berjalan di sekitar lapangan tampaknya mengubah X / Z dan melompat atau naik / turun bukit mengubah Y.

1) Apakah pengamatan saya benar? 3D baru bagi saya dan saya mungkin tidak memikirkan hal-hal dengan benar.

2) Apa logika di balik gerakan horisontal menjadi X / Z dan gerakan vertikal menjadi Y?

3) Apakah salah jika saya menggunakan X / Y sebagai gerakan horizontal dan Z sebagai gerakan vertikal dalam Kerangka XNA?

Corey Ogburn
sumber
Sistem Koordinat Kiri / Kanan. DirectX adalah tangan kiri, default di OpenGL adalah tangan kanan.
Jonathan Connell

Jawaban:

19

Asumsi Anda tidak salah: setiap mesin memperlakukan koordinat ini secara berbeda. Secara umum X hampir selalu merupakan sumbu Timur-Barat tetapi apakah Y atau Z adalah sumbu Ketinggian cenderung bervariasi. Seperti yang saya pahami, Quake 3, Source Engine, dan Torque engine semuanya memiliki Z sebagai up. Begitu juga alat pemodelan 3DS Max. Ini tidak biasa.

Masuk akal untuk memiliki sistem koordinat yang dipesan secara kasar dengan urutan kepentingan yang menurun, sehingga meratakan representasi menjadi dimensi yang lebih sedikit lebih mudah dipahami. Misalnya, jika gim Anda diatur pada peta ketinggian 2D, masuk akal jika Z naik, karena koordinat X dan Y Anda di peta dunia 3D langsung ke koordinat X dan Y di peta ketinggian. Di sisi lain, jika Anda berpikir terutama dalam hal rendering (dan banyak pengembang mesin game melakukannya), Anda terbiasa X dan Y sebagai koordinat layar, jadi menambahkan sumbu ke-3 masuk atau keluar layar secara alami.

Gunakan apa yang paling mudah bagi Anda, tetapi ketahuilah bahwa pilihan apa pun adalah arbitrer dan bahwa Anda mungkin perlu mengonversi di antara mereka dan menggunakan beberapa sistem koordinat dalam satu program.

Kylotan
sumber
Saya sebenarnya menyukai dua jawaban lainnya lebih baik, tetapi karena ini adalah jawaban yang diterima, sebuah catatan untuk menunjukkan bahwa Y menjadi vertikal dan Z berada di layar adalah cara sebagian besar API perangkat keras 3D diatur agar berfungsi (DirectX dan OpenGL) . Jika Anda menginginkan sistem Anda sendiri, ketahuilah ini karena beberapa terjemahan mungkin diperlukan. (Sesuatu yang digunakan secara tidak tepat tetapi secara konsisten sering dapat berfungsi seperti yang diinginkan, maka 'mungkin' :))
James
1
Secara teknis OpenGL memiliki Z yang keluar dari layar secara default, saat Anda memasukkan arahan, jadi meskipun keduanya dan DirectX memiliki Z yang sejajar dengan arah tampilan, mereka masih tidak kompatibel! Saat bekerja dengan 3D, Anda harus kompeten untuk berpindah dari satu sistem koordinat ke sistem lainnya melalui rotasi, terjemahan, dan penskalaan - memang, inilah bagaimana model berakhir di dunia - sehingga tidak ada gunanya terlalu terikat pada gagasan tentang suatu standar.
Kylotan
Hanya menunjukkan ketika berhadapan dengan jutaan segitiga, mungkin semakin sedikit yang harus Anda lakukan untuk melawan sistem koordinasi perangkat keras mungkin lebih baik;) Akhir hari, membuat permainan itu menyenangkan meskipun tingkat stres .. Lakukan apa yang Anda inginkan: )
James
Gagasan "Z" sebagai masuk / keluar dari layar atau menjadi ketinggian agak menyesatkan. Mungkin lebih mudah untuk membuat konsep transformasi. Kami mengirimkan koordinat vertex 3D / 4D yang akhirnya diubah menjadi ruang jendela 2D tetapi dengan nilai kedalaman. Gagasan bahwa suatu API secara inheren memetakan koordinat 3D dari X, Y, atau Z ke "depth" tidak benar-benar benar - Anda dapat menghasilkan transformasi apa pun yang bertukar arti dari koordinat tersebut. Di akhir transformasi itu, Anda masih akan mendapatkan koordinat ruang jendela 2D dan nilai kedalaman.
PatrickB
1
Saya tidak sepenuhnya yakin di mana kami tidak setuju dengan yang lain: tentu saja Anda dapat menggunakan ruang koordinat yang Anda inginkan selama Anda dapat memproyeksikan ke x, y, kedalaman pada akhirnya, tetapi pertanyaan ini terutama tentang mengapa ada konvensi tertentu untuk mengoordinasikan sistem, dan konvensi-konvensi tersebut tidak dapat dihindari terkait dengan konsep-konsep dunia nyata.
Kylotan
6

Bayangkan ketika melihat selembar kertas yang diletakkan di depan Anda dengan bagan di atasnya, sumbu biasanya diberi label X di bagian bawah dan Y di atas vertikal; ini membuat Z menjadi sumbu luar di sepanjang tanah.

Ini hanya sebuah konvensi, tetapi banyak digunakan dalam grafik di mana kami menganggap Z sebagai kedalaman adegan.

Di bidang lain seperti CAD versi Anda akan lebih umum.

Patrick Hughes
sumber
4

Idenya adalah bahwa sumbu x dan y tetap sama - y 'naik' di layar, dan x di seberang.

z - dimensi ketiga, memproyeksikan kembali ke layar (mengabaikan masalah wenangan di sini). Dalam 3 dimensi ini jadi sedikit aneh, tetapi untuk memposisikan sesuatu di ruang layar lebih masuk akal.

3) Anda dapat jika Anda mau, tetapi itu akan menyakitkan dan kikuk. Saya akan menyarankan untuk membiasakan diri dengan proyek-Z-ke-luar-monitor.

Bebek Komunis
sumber
1

1) Ya pengamatan Anda benar.

2) Sistem koordinat XYZ global standar masuk akal ketika Anda berpikir dalam hal penembak orang pertama, ketika Anda melihat melalui mata karakter dalam adegan dengan matriks transformasi (identitas) kosong. Seperti halnya ketika Anda menggambar sistem koordinat pada selembar kertas, X menunjuk ke kanan dan Y menunjuk ke atas. Menurut aturan tangan kanan (x-> ibu jari, y-> jari telunjuk, z-> jari tengah), Z menunjuk ke arah Anda.

3) Itu tidak akan salah, tetapi itu akan menjadi pengalihan dari standar. Ada tiga masalah yang dapat saya pikirkan saat ini: (a) Katakanlah suatu hari Anda ingin menggunakan perpustakaan fisika yang menggunakan kerangka koordinat standar. Jika Anda tidak mengikuti standar, sekarang Anda harus berpikir tentang transformasi yang membawa Anda dari dunia Anda ke dunia fisika. Dapat menjengkelkan saat Anda ingin memperbaiki bug. (B) Ketika Anda ingin berbagi kode dengan seseorang, atau membawa seseorang untuk membantu pengembangan, mereka harus terbiasa dengan konvensi Anda. (C) Ketika menggunakan model 3D standar, Anda harus selalu memiliki transformasi di atas mereka untuk mencegah mereka melihat ke samping.

Sekarang untuk menambahkan pertanyaan 2, sangat berguna untuk menganggap X, Y, dan Z bukan hanya tiga huruf, tetapi juga sebagai benar, naik dan mundur. Setiap karakter dalam adegan memiliki sistem koordinat lokal yang melekat padanya, dan dalam frame koordinat lokal mereka X selalu benar, Y naik dan Z mundur. Setelah Anda memiliki ini, sekarang Anda dapat memahami vektor yang Anda cetak, atau menulis algoritma Anda dengan cara yang masuk akal. Katakanlah Anda memiliki dua karakter A dan B, dan Anda ingin melakukan sesuatu jika salah satu dari mereka berhadapan dengan yang lain. Anda cukup menemukan lokasi B dalam bingkai koordinat A (Ta ^ -1 * p_b), lihat vektor yang Anda dapatkan dan lihat apakah Z (mundur) negatif dan X (kanan) dan Y (atas) kecil, karena vektor itu memberi tahu Anda berapa banyak mundur, kanan dan atas B sehubungan dengan A.

Gazihan Alankus
sumber