Mengapa DirectX menggunakan sistem koordinat kidal?

52

Saya mempertimbangkan untuk memposting di Stack Overflow, tetapi pertanyaan itu menurut saya terlalu subyektif karena saya tidak bisa memikirkan penjelasan teknis yang masuk akal untuk pilihan Microsoft dalam hal ini. Tetapi pertanyaan ini telah menyadap saya begitu lama dan masalah terus muncul di salah satu proyek saya, dan saya belum pernah benar-benar melihat upaya untuk menjelaskan hal ini:

OpenGL menggunakan sistem koordinat tangan kanan, di mana + Z bagian dari sistem koordinat dunia meluas ke arah penonton.

DirectX menggunakan sistem kidal di mana + Z bagian dari koordinat dunia meluas ke layar, jauh dari penonton.

Saya tidak pernah menggunakan Glide API , jadi saya tidak tahu cara kerjanya, tetapi dari apa yang bisa saya kumpulkan, ia menggunakan sistem kidal juga.

Apakah ada alasan teknis untuk ini? Dan jika tidak, apakah ada beberapa keuntungan konseptual dari kemampuan sistem koordinat tertentu? Mengapa satu memilih satu dari yang lainnya?

greyfade
sumber
5
Ini seperti menanyakan mengapa bahasa Arab dan Ibrani ditulis dari kanan ke kiri, sedangkan setiap bahasa lainnya dari kiri ke kanan.
Gabe
17
Saya hanya mencoba memahami mengapa ada ketidakkonsistenan yang mencolok di antara API grafik, yang memiliki dasar yang kuat dalam matematika. Arah huruf Semit jelas tidak didasarkan pada aturan yang tidak berubah.
greyfade
3
Pertanyaan ini direferensikan di Mengapa kami tidak mempekerjakan programmer .NET (2011-03-25).
Peter Mortensen
2
OpenGL maupun Direct3D tidak murni atau kidal. Perubahan sebelumnya ke ruang klip kidal sedangkan ruang layar nanti adalah tangan kanan yaitu di ruang layar D3D, rotasi dari X ke Y bila dilihat dari sisi Z adalah rotasi berlawanan arah jarum jam. DAN kedua sistem memungkinkan pengembang untuk menggunakan ruang-ruang dari kiralitas mana pun.
legends2k
1
@PeterMortensen Cukup lucu bagaimana semua pembenci. NET bahkan tidak tahu apa itu. Apa yang mereka maksudkan adalah ASP.NET Webforms, framework. .NET dapat digambarkan sebagai pustaka kelas dasar dan CLR.
The Muffin Man

Jawaban:

64

Saya tahu ini adalah posting lama, tetapi saya melihat posting ini dirujuk dan tidak menyukai nada jawaban yang dipilih.

Jadi saya melakukan sedikit penyelidikan!

  1. DirectX sudah tua . Ini pertama kali dirilis pada 1995, ketika dunia memiliki lebih dari Nvidia dan ATI , DirectX vs OpenGL. Itu lebih dari 15 tahun, kawan.
  2. 3dfx Interactive's Glide (salah satu pesaing DirectX saat itu. OpenGL tidak dimaksudkan untuk bermain game saat itu) menggunakan sistem koordinat kidal.
  3. POV-Ray dan RenderMan (perangkat lunak render Pixar), juga menggunakan sistem koordinat kidal.
  4. DirectX 9+ dapat bekerja dengan kedua sistem koordinat.
  5. Baik WPF dan XNA (yang bekerja dengan DirectX di bawah layar) menggunakan sistem koordinat tangan kanan.

Dari sini, saya dapat berspekulasi tentang beberapa hal:

  • Standar industri tidak standar seperti yang orang suka.
  • Direct3D dibangun dalam waktu semua orang melakukan hal-hal dengan caranya sendiri, dan para pengembang mungkin tidak tahu yang lebih baik.
  • Kidal adalah opsional, tetapi biasa di dunia DirectX.
  • Karena konvensi menjadi sulit, semua orang berpikir DirectX hanya dapat bekerja dengan kidal.
  • Microsoft akhirnya belajar, dan mengikuti standar dalam setiap API baru yang mereka buat.

Oleh karena itu, kesimpulan saya adalah:

Ketika mereka harus memilih, mereka tidak tahu standarnya, memilih sistem 'lain', dan semua orang hanya ikut dalam perjalanan. Bukan bisnis yang teduh, hanya keputusan disayangkan yang dilakukan karena kompatibilitas adalah nama permainan Microsoft.

Kyte
sumber
11
DirectX adalah bayi yang mengenakan pakaian lampin dibandingkan dengan grafik komputer 3D, dan itu relatif muda dibandingkan dengan program komputer yang harus mengelola beberapa sistem koordinat 3D, dan mentransformasikannya. Itu pertengahan 1970-an ketika saya mengambil kelas grafis pertama kalinya, dan BAHKAN instruktur (Frank Crow) sangat mendorong kami untuk menggunakan sistem koordinat tangan kanan secara eksklusif. Pada tahun 1983, saya mengerjakan pekerjaan yang tidak memiliki grafik, tetapi melakukan transformasi koordinat yang sedang berlangsung, dan aturan tangan kanan wajib adalah memo proyek pertama yang dikeluarkan. (Dan saya tidak mengeluarkannya!)
John R. Strohm
7
Saya tidak yakin bahwa usia ada hubungannya dengan itu. Bukankah sebagian besar ilmu fisika menggunakan sistem koordinat tangan kanan, dan sudah bertahun-tahun lebih lama daripada komputer? Saya akan mengatakan bahwa itu adalah konvensi yang jauh lebih tua daripada yang diikuti oleh Glide dan kemudian DX.
Thomas Owens
3
Hanya karena standar yang digunakan dalam bidang akademik tidak berarti itu akan sama dalam aplikasi industri / lainnya. Bagaimanapun, orang mengikuti apa pun yang digunakan di bidang mereka sendiri. Kalau tidak, sistem grafis akan memiliki asal di sudut kiri bawah layar daripada kiri atas. Selain itu, poin tentang usia adalah bahwa DX lahir ketika seluruh "rendering 3D untuk desktop" masih baru, dan "standar" & "praktik terbaik" belum sepenuhnya dituntaskan.
Kyte
1
a) Jadi, Anda menyebut jawaban saya, yang merupakan daftar sederhana dari fakta-fakta yang dapat dibuktikan dan apa yang saya sebut spekulasi pribadi saya sendiri, "takhayul" dan "tidak ada fakta", ketika tawaran Anda sendiri merupakan tuduhan kelakuan buruk perusahaan tanpa kutipan atau mendukung apa pun? b) Jika Anda tidak menyukai jawaban saya, Anda selalu dapat memberikan jawaban Anda sendiri. Ketika saya memberikan jawaban ini, jawaban yang diterima sudah berumur satu tahun. Anda bebas menambahkan lebih banyak pengetahuan, jika Anda merasa memiliki sesuatu untuk disumbangkan. c) Sulit untuk menciptakan monopoli ketika pijakan Anda di pasar goyah. Ini bukan MS multinasional modern.
Kyte
2
@Kyte 3Dfx memiliki API khusus untuk alasan tertentu, untuk mengunci Anda di perangkat kerasnya. Mereka memaksa pengguna akhir untuk membeli perangkat keras mereka karena pengembang "disuap" untuk menulis game yang hanya bekerja dengan 3Dfx. Microsoft ingin mengunci Anda di API mereka sehingga pengembang hanya akan menulis game untuk Windows, ini akhirnya membunuh 3Dfx. Keputusan bisnis yang sederhana dan sederhana, bukan perilaku buruk. Ini masih berlangsung hari ini. Nvida ingin Anda mengunci Anda di kartu mereka dengan CUDA, AMD ingin menggunakan OpenCL, 2012 alasan yang sama di balik perilaku tersebut. Ini sejarah, saya berada di industri saat itu.
37

Saya terkejut tidak ada yang menyebutkan sesuatu: OpenGL bekerja di sistem koordinat kidal juga. Paling tidak, itu terjadi ketika Anda bekerja dengan shader dan menggunakan rentang kedalaman default.

Setelah Anda membuang pipa fungsi tetap, Anda berurusan langsung dengan "ruang klip". Spesifikasi OpenGL mendefinisikan ruang klip sebagai sistem koordinat homogen 4D. Ketika Anda mengikuti transformasi melalui koordinat perangkat yang dinormalisasi, dan turun ke ruang jendela, Anda menemukan ini.

Ruang jendela berada dalam ruang piksel jendela. Asalnya di sudut kiri bawah, dengan + Y naik dan + X ke kanan. Kedengarannya sangat mirip sistem koordinat tangan kanan. Tapi bagaimana dengan Z?

Kisaran kedalaman default (glDepthRange) menetapkan nilai Z dekat ke 0 dan nilai Z jauh ke satu . Jadi + Z akan menjauh dari pemirsa.

Itu sistem koordinat kidal. Ya, Anda dapat mengubah tes kedalaman dari GL_LESS ke GL_GREATER dan mengubah glDepthRange dari [0, 1] menjadi [1, 0]. Tetapi keadaan default OpenGL adalah bekerja dalam sistem koordinat kidal . Dan tidak ada transformasi yang diperlukan untuk mendapatkan ruang jendela dari ruang klip meniadakan Z. Jadi ruang klip, output dari vertex (atau geometri) shader adalah ruang kidal (agak. Ini adalah ruang homogen 4D, jadi sulit untuk dijabarkan kidal).

Dalam pipa fungsi-tetap, matriks proyeksi standar (diproduksi oleh glOrtho, glFrustum, dan sejenisnya) semuanya berubah dari ruang tangan kanan menjadi ruang tangan kiri . Mereka membalikkan makna Z; cukup periksa matriks yang mereka hasilkan. Di ruang mata, + Z bergerak menuju pemirsa; di ruang pasca-proyeksi, ia bergerak menjauh.

Saya menduga Microsoft (dan GLide) tidak peduli untuk melakukan negasi dalam matriks proyeksi mereka.

Nicol Bolas
sumber
4
Menarik memang. Saya akui saya tidak pernah melihat sedekat itu. Sementara pertanyaan saya menyangkut ruang dunia secara khusus, jawaban Anda memberi saya makanan untuk dipikirkan.
greyfade
Saya menemukan bahwa mengubah baik rentang kedalaman atau tes kedalaman membuatnya menjadi tangan kanan tetapi menggunakan keduanya dibatalkan satu sama lain memberi saya sistem kidal.
hultqvist
1
Menarik. Lihatlah transformasi kedalaman viewport: z_wiewport = z_clip * (jauh-dekat) / 2 + (dekat + jauh) / 2. Itu membuat ruang klip -1 dipetakan ke dekat dan +1 ke jauh. Karenanya ruang klip itu sendiri dapat dianggap sebagai tangan KIRI , meskipun Anda masih bisa membalikkan bagaimana itu dipetakan ke viewport nanti.
Kos
1
@NicolBolas: Apakah Anda memperhatikan bahwa Direct3D tidak sepenuhnya kidal karena ruang layarnya kidal? X dari kiri ke kanan, Y atas ke bawah dan Z menjauh dari penampil yaitu X ke Y adalah rotasi berlawanan arah jarum jam bila dilihat dari berlawanan dengan sumbu Z.
legends2k
1
@ bobobobo "Saya mencatat view matrix yang dihasilkan oleh gluLookAt juga dapat mengubah tingkat kidal" - Tidak, tidak. Begitulah cara vektor maju dikomputasi, tetapi matriks ini tetap merupakan trasnformasi tubuh kaku biasa di ruang tangan kanan (dan sebenarnya + z memang "terbelakang" di ruang tangan kanan). Meniadakan vektor maju tidak ada hubungannya dengan mengubah wenangan ruang koordinat.
Chris mengatakan Reinstate Monica
11

Itu murni sejarah. Pada zaman dahulu para programmer gua-grafik awal menganggap permukaan monitor (teletype? Stonetype?) Sebagai kertas grafik dua dimensi. Dalam matematika dan rekayasa, konvensi umum untuk memplot poin data pada kertas grafik adalah: x = benar, y = naik. Lalu suatu hari, sekitar satu minggu setelah penemuan roda silikon, seseorang memikirkan grafik 3D. Ketika bola lampu ide ini berkedip di atas kepala mereka, untuk alasan apa pun, mereka memilih untuk menambahkan Z = jauh dari pemirsa. (Aduh, tangan kananku sakit hanya membayangkan itu.)

Mereka tidak tahu bahwa suatu hari nanti keturunan jauh mereka akan menjadi insinyur, ilmuwan, seniman baik, seniman komersial, animator, desainer produk dll dan menemukan grafik 3D bermanfaat. Semua orang modern yang baik ini menggunakan sistem koordinat tangan kanan agar konsisten satu sama lain dan teks matematika dan konvensi fisika yang lebih mapan.

Sungguh bodoh mendasarkan sistem koordinat 3D pada permukaan tampilan. Ini adalah model yang diperhitungkan - segitiga dan poligon dan pesawat yang menggambarkan sebuah rumah, kursi, raksasa hijau raksasa atau galaksi. Saat ini kita semua merancang dan memodelkan hal-hal dalam sistem XYZ tangan kanan, dan melakukannya dalam hal dunia model, bahkan sebelum berpikir bagaimana itu akan diberikan. Kamera ditambahkan pada beberapa titik, mungkin dibuat untuk terbang dengan cara yang gila, dan itu adalah infrastruktur yang tidak terlihat yang mengubah model menjadi piksel yang dalam perutnya harus berputar-putar dengan transformasi sistem terkoordinasi.

Hanya untuk menambah kebingungan, beberapa perpustakaan grafis mengenali bahwa CRT memindai gambar dari atas ke bawah, dan begitu juga Y = turun. Ini digunakan bahkan hari ini di semua sistem windowing dan manajer windows - X11, fvwm, gtk +, Win31 API, dll. Bagaimana sistem GUI 3D baru-suka seperti Clutter, Beryl dll berurusan dengan Z, adalah masalah terpisah dari pemodelan grafis 3D. Ini perlu perhatian hanya pemrogram aplikasi dan desainer GUI.

DarW
sumber
1
Semua sangat menarik, dan itu menjelaskan alasan di balik SGI's GL. ... Tapi bagaimana ini menjelaskan DirectX menjadi kidal?
greyfade
Beberapa sistem 2D dan 3D semuanya berasal konvensi mereka dari sejarah yang sama.
DarenW
10

Keduanya pada dasarnya setara, karena yang satu dapat dengan mudah diubah menjadi yang lain. Satu-satunya keuntungan yang dapat saya temukan untuk sistem kidal adalah: karena objek lebih jauh dari pengamat, ke segala arah (x, y, atau z), jarak adalah nilai yang lebih tinggi. Tetapi saya tidak tahu apakah ini sebabnya Microsoft memilih satu dari yang lain.

POV-Ray juga menggunakan sistem koridor tangan kiri.

tcrosley
sumber
5
Ya, saya pikir banyak grafik yang ditemukan pemula meningkat z dengan kedalaman ke layar lebih alami. Tetapi mereka juga ingin x meningkatkan gaya "sumbu grafik" ke atas dan ke atas. Ini membuat mereka sistem koordinat tangan kiri. Baru kemudian ketika mereka mencoba untuk melakukan hal-hal yang lebih kompleks, mereka menyadari bahwa mereka tidak sesuai dengan dunia sains / matematika / teknik yang tepat.
timday
6
@Timday, Anda harus mengajari pemula rahasia grafik 3-D non-jabat tangan. Angkat tangan kanan Anda, dengan ibu jari, jari telunjuk, dan jari tengah terentang, semuanya saling berhadapan. Thumb adalah X, jari telunjuk adalah Y, jari tengah adalah Z. Sekarang gerakkan tangan Anda di sekitar, untuk menyelaraskan dengan koordinat apa pun yang Anda inginkan, dan Anda segera tahu bagaimana gerakan akan mempengaruhi transformasi.
John R. Strohm
3
@ John: Hei, coba tebak, fisikawan memiliki jabat tangan rahasia yang sama juga!
timday
1
@ John Walaupun saya sepenuhnya setuju dengan keunggulan sistem tangan kanan, Anda tahu bahwa aturan jabat tangan Anda (yang seharusnya dipelajari semua orang di sekolah) juga dapat digunakan dengan tangan kiri untuk sistem kidal.
Chris berkata Reinstate Monica
@ChristianRau, tangan mana yang Anda gunakan tergantung pada sistem koordinat seperti apa yang Anda coba gambarkan, tangan kanan atau tangan kiri.
John R. Strohm
10

Pengembang utama DirectX (dan Direct3D) Alex St. John baru-baru ini mengomentari itu. Dalam sebuah artikel tentang sejarah Direct3D ia menulis:

Saya [...] diminta untuk memilih wewenang untuk Direct3D API. Saya memilih sistem koordinat tangan kiri, sebagian karena preferensi pribadi . [...] itu pilihan sewenang - wenang .

Sumber: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/

Daniel Rikowski
sumber
Ini adalah pilihan sewenang-wenang hanya jika Anda tidak memiliki petunjuk tentang apa yang dilakukan seluruh dunia, bahwa seluruh dunia secara de facto telah distandarisasi pada sistem koordinat tangan kanan untuk grafik.
John R. Strohm
1
@ JohnR.Strohm - apakah Anda bahkan membaca artikel yang ditautkan?
Maximus Minimus
Busuk tautan telah memakan halaman itu. Berikut snapshot kerja terbaru: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough
5

Yang perlu dipahami adalah bahwa sejumlah besar waktu programmer telah terbuang untuk mengkonversi antara sistem koordinat kidal dan tangan kanan, dan bahkan lebih banyak waktu programmer telah terbuang untuk mengingat sistem mana yang dibutuhkan pada saat tertentu.

Semua itu hilang ketika sistem koordinat tangan kanan menjadi standar industri.

Sudah cukup banyak sistem koordinat yang digunakan secara umum, tanpa menggandakan jumlahnya dengan mengajukan pertanyaan kidal. Lihat Minkler & Minkler, "Sistem dan Transformasi Koordinat Dirgantara" . Jika Anda berada dalam bisnis koordinat aerospace, melakukan misalnya simulasi penerbangan, Anda MEMBUTUHKAN buku itu.

Dugaan saya adalah bahwa Microsoft tidak memiliki SIAPA PUN di proyek DirectX yang tahu apa-apa tentang standar industri, tidak menyadari bahwa ada standar industri, dan menganggap itu tidak masalah.

Kemungkinan lain, bahwa mereka tahu sistem tangan kanan adalah standar industri, dan mereka sengaja membuat DirectX kidal, sehingga menjadikannya SULIT bagi orang-orang untuk mengonversi kode yang menggunakan DirectX sebagai gantinya menggunakan OpenGL, tidak memihak. Jika saya mengetahui bahwa memang itulah masalahnya, saya akan merasa perlu untuk memulai karier baru yang mungkin berumur pendek sebagai pembunuh kapak di Redmond.

John R. Strohm
sumber
Saya tidak ingin dianggap sebagai bashing Microsoft dalam pertanyaan saya, jadi saya tidak ingin menyebutkan kemungkinan bahwa itu tidak sesuai dengan OpenGL yang ada dalam pikiran mereka.
greyfade
3
@ Greyfade: Oke, kalau begitu biarkan saya begini. Tidak ada alasan teknis apa pun untuk memilih koordinat tangan kiri daripada koordinat tangan kanan, atau sebaliknya. Namun, ada alasan yang sangat, sangat bagus saat ini untuk memilih koordinat tangan kanan, dan untuk tar, bulu, dan naik ke luar kota dengan kereta api siapa pun yang bahkan membisikkan petunjuk menerapkan apa pun sama sekali menggunakan koordinat tangan kiri. Apakah itu membuatnya lebih sederhana?
John R. Strohm
Saya tidak tahu bahwa saya bisa mengumpulkan kemarahan orang benar dalam jumlah itu. Saya bekerja dengan PostScript secara teratur sebagai bagian dari pekerjaan saya (di mana koordinat dimulai dengan [0, 0] sebagai sudut kiri bawah dan maks di kanan atas), jadi konversi koordinat hanyalah semacam fakta kehidupan di sekitar sini.
Inaimathi
2
Eh, jadi ini 100% spekulasi? Mengapa itu ditandai sebagai jawabannya?
Factor Mystic
3
Mengalahkan saya, itu hanya kata-kata kasar yang tidak berguna dan, ironisnya, seperti sistem koordinat kidal, banyak orang yang setuju dengan itu untuk beberapa alasan.
Cepat Joe Smith
5

Bagi semua orang yang berpikir tidak ada keuntungan dari tangan kanan atau kidal, Anda sama sekali salah. Keterbatasan sistem koordinasi kartesius berasal dari definisi produk lintas vektor. Untuk XYZ dasar vektor u, vdan w, w = u X v.

Definisi ini sangat mendasar untuk matematika vektor, vektor kalkulus dan banyak fisika. Misalkan Anda mencoba mensimulasikan interaksi elektromagnetik. Anda memiliki vektor medan magnet,, Mdan partikel bermuatan bergerak di bidang itu dengan kecepatan v. Dengan cara mana biaya dipercepat? Mudah - ke arah M X v. Kecuali beberapa orang idiot berpikir itu akan menyenangkan untuk membuat sistem tampilan Anda kidal, sehingga mempercepat ke arah -M X v.

Pada dasarnya setiap interaksi fisik antara dua besaran vektor didefinisikan sebagai tangan kanan, dan setiap kali Anda perlu mensimulasikan interaksi itu, Anda sebaiknya berharap sistem grafis Anda menggunakan tangan kanan atau Anda harus ingat untuk membawa tanda-tanda negatif di semua matematika kamu.

Tom
sumber
Elektromagnetik bukan satu-satunya tempat produk lintas muncul. Ini juga muncul dalam aerodinamika dan mekanika orbital. Simulasi penerbangan harus menghadapinya, dan di sinilah sistem koordinat fisika dan sistem koordinat grafis bertabrakan. Lihat Minkler & Minkler, dikutip dalam jawaban saya di atas.
John R. Strohm
@ Tom: Saya tidak yakin apakah ini benar; ambil 3 vektor katakan (1, 0, 0), (0, 1, 0) dan (0, 0, 1), melakukan ixj memberi k karena rumus untuk produk silang didefinisikan dengan baik dan angka tidak punya chirality / kidal; hanya manusia yang menginterpretasikan tiga vektor dalam beberapa kidal, bahkan kemudian kita dapat memilih untuk menafsirkannya dalam kedua kidal dan itu akan tetap konsisten yaitu dalam ixj = k kidal akan jauh sedangkan di ixj = kanan kidal k akan menuju. Pikiran Anda, saya seorang pria yang kidal juga, tapi tetap ini faktanya.
legends2k
@ legends2k: Ya, saya kira itu benar, asalkan Anda tidak ingin nomor Anda berarti apa-apa. Segera setelah Anda ingin nomor Anda mewakili interaksi fisik, atau berkoordinasi dalam sistem tampilan, atau sebenarnya apa pun, maka itu sangat berarti.
Tom
@ Tom Anda benar bahwa kami harus memberi arti pada angka. Itu sangat penting. Tapi itu masih bukan alasan untuk mengatakan bahwa tangan kiri lebih dari tangan kanan. Saya bisa memberi makna 0,0,1sebagai maju dan itu kidal jadi 1,0,0 X 0,1,0make 0,0,1adalah tangan kiri
Thaina
@ Tom Sebenarnya ketika melakukan Fisika dalam sistem koordinat kidal rumusnya masih M X vtetapi medan magnet Mdianggap menunjuk ke arah yang berlawanan karena merupakan pseudovektor. Anda dapat menggunakan persamaan yang sama di kedua sistem: satu-satunya hal yang berubah adalah interpretasi Anda tentang "titik" pseudovektor. Vektor yang tepat seperti akselerasi akan selalu bekerja sama di kedua sistem koordinat. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin
5

Jawaban nyata untuk kidal Direct3D awal adalah jauh lebih jahat daripada beberapa dari Anda berspekulasi. DirectX memulai ketika Microsoft membeli RenderMorphics pada 1995.

Pada saat itu teks grafik standar yang digunakan di kantor RenderMorphics adalah "Prinsip-prinsip Grafik Komputer Interaktif" oleh Newmann dan Sproul yang melakukan semuanya menggunakan koordinat tangan kiri. Itu buku yang sama yang saya gunakan di perguruan tinggi. Melihat kode D3D Anda bahkan bisa melihatnya menggunakan nama variabel yang cocok dengan persamaan dalam buku.

Ini bukan konspirasi Microsoft. Keputusan dibuat sebelum Microsoft bahkan datang ke dalam gambar.

Stephen Coy
sumber
Saya setuju dengan komentar di sini bahwa ini kedengarannya seperti legenda urban, tetapi menyenangkan untuk mendapatkan perspektif pribadi Anda.
Josiah Yoder
3

Tidak ada yang pada akhirnya lebih baik daripada yang lain - Anda memetakan koordinat 3D ke permukaan 2D, sehingga dimensi ketiga (yang benar-benar membuat benda-benda 3D) dapat dipilih secara sewenang-wenang, menunjuk pada penonton atau ke layar. Anda akan memasukkan semuanya melalui matriks 4x4, jadi tidak ada alasan teknis untuk memilih satu dari yang lain. Secara fungsional, seseorang dapat berdebat:

  • Ada konsensus yang cukup luas dalam bidang komputasi dan bidang lainnya untuk menjalankan sumbu X dari kiri ke kanan (aviasi tampaknya merupakan pengecualian yang menonjol).
  • Dalam matematika, sumbu Y mengarah ke atas. (Juga, Naik Adalah Tempat Gelembung Pergi).
  • Pada layar komputer, sumbu Y menunjuk ke bawah (karena itulah cara layar CRT bekerja, dan juga karena itulah urutan sebagian besar skrip manusia mengatur baris).
  • Ketika Anda melihat sisi "terlihat" dari permukaan pada bidang X / Y, yang normal harus mengarah ke penampil (seperti ketika Anda melihat rekaman satelit; "ketinggian di atas permukaan laut" menunjuk ke satelit, bukan di pusat Bumi). Karena normal untuk bidang X / Y adalah vektor sumbu Z, maka poros Z juga harus mengarah ke penampil.
  • Saat Anda melihat gambar 3D di layar komputer, titik yang jauh dari pemirsa harus memiliki komponen Z yang lebih besar. Oleh karena itu, sumbu Z harus mengarah ke layar.

Kesimpulan : Ada beberapa konsensus untuk sumbu X, tetapi untuk dua lainnya, kedua arah dapat diperdebatkan, menghasilkan dua konfigurasi tangan kanan dan dua tangan kiri, dan semuanya masuk akal.

tammmer
sumber
3

Fakta yang menarik.

Direct3D (bukan DirectX - DirectX juga mencakup input, suara, dll) sebenarnya tidak memiliki sistem koordinat kidal.

Ini sangat mampu mendukung sistem RH dan LH. Jika Anda melihat dalam dokumentasi SDK Anda akan melihat fungsi-fungsi seperti D3DXMatrixPerspectiveFovLH dan D3DXMatrixPerspectiveFovRH. Keduanya berfungsi, dan keduanya menghasilkan matriks proyeksi yang dapat digunakan dengan sukses dengan sistem pilihan koordinasi Anda. Sial, Anda bahkan dapat menggunakan kolom-jurusan di Direct3D jika Anda mau; itu hanya perpustakaan matriks perangkat lunak dan Anda tidak diharuskan untuk menggunakannya. Di sisi lain, jika Anda ingin menggunakannya dengan OpenGL Anda akan menemukan bahwa itu juga bekerja dengan sangat baik dengan OpenGL juga (yang mungkin merupakan bukti pasti dari independensi perpustakaan matriks dari Direct3D itu sendiri).

Jadi jika Anda ingin menggunakan sistem Kesehatan Reproduksi dalam program Anda, cukup gunakan versi -RH dari fungsi tersebut. Jika Anda ingin menggunakan sistem LH, gunakan versi -LH. Direct3D tidak peduli. Demikian juga, jika Anda ingin menggunakan sistem LH di OpenGL - cukup glLoadMatrix sebuah matriks proyeksi LH. Tidak satu pun dari hal-hal ini yang penting dan itu tidak mendekati masalah besar yang kadang-kadang Anda lihat dibuat.

Maximus Minimus
sumber
0

Tidak ada keuntungan teknis untuk kedua tangan, itu sepenuhnya sewenang-wenang. Keduanya bekerja dengan baik selama Anda konsisten.

Karena keuntungan dari konsistensi, idealnya seseorang harus "menggunakan apa yang orang lain gunakan" —tapi itu cukup sulit dalam banyak kasus, karena tidak ada konvensi yang sangat "disukai" dalam praktiknya: kedua kidal digunakan secara luas. Paling-paling, ada beberapa konsistensi dalam komunitas tertentu (misalnya OpenGL).

Jadi saya pikir jawaban dasar untuk pertanyaan ini adalah: Mereka memilih apa yang mereka pilih karena rasanya benar (tidak diragukan mereka memiliki pengalaman sebelumnya dengan kesewenang-wenangan itu) dan ada sedikit alasan untuk tidak melakukannya.

Pada akhirnya tidak ada bedanya — siapa pun yang serius ingin bertukar aset / kode dengan sistem / komunitas lain harus siap untuk berurusan dengan konversi wenangan, karena itu adalah fakta kehidupan dalam grafik 3D.

snogglethorpe
sumber
0

Memberikan ini sebagai bahan pelengkap untuk jawaban saya sebelumnya di sini. Dari spesifikasi OpenGL lama dari tahun 1990-an:

OpenGL tidak memaksa kidal atau kidal pada salah satu sistem koordinatnya.

(sumber: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf ).

Jadi, karena baik D3D maupun OpenGL tidak memaksakan kesewenang-wenangan, pertanyaan sebenarnya adalah: mengapa orang melihat ini sebagai masalah besar?

Maximus Minimus
sumber
1
mengapa Anda mempostingnya dalam jawaban terpisah? Maksud saya Anda dapat mengedit jawaban Anda sebelumnya untuk menambahkan ini bukan?
Agak
-1

Aku benci mengatakannya padamu, tetapi 'tangan' dari set koordinat sebenarnya subyektif - itu tergantung pada cara Anda membayangkan Anda melihat sesuatu. Contoh, dari spec peta kubus OpenGL: jika Anda membayangkan berada di dalam kubus melihat keluar, sistem koordinat adalah kidal, jika Anda berpikir untuk melihat dari luar itu adalah tangan kanan. Fakta sederhana ini menyebabkan kesedihan yang tak berkesudahan, karena untuk mendapatkan jawaban yang benar secara numerik, semua asumsi Anda harus konsisten, meskipun secara lokal tidak masalah asumsi mana yang Anda buat.

Spesifikasi OpenGL secara resmi "kidal netral" dan berusaha keras untuk menghindari masalah ini - yaitu, menundanya ke programmer. Namun ada "perubahan tangan" antara koordinat mata dan koordinat klip: dalam model dan ruang mata yang kita cari, dalam ruang klip dan perangkat yang kita cari. Saya selalu berjuang dengan konsekuensi dari komplikasi yang tidak disengaja ini.

Produk silang adalah teman kami, karena memungkinkan Anda menghasilkan sistem koordinat 3D tangan kanan atau kiri dari sepasang vektor. Tapi tangan mana itu tergantung pada vektor mana yang Anda sebut "X".

Thomas Sharpless
sumber
3
Produk silang anticommutative. A x B == - B x A. Dengan demikian, produk silang didefinisikan untuk mengambil vektor pertama nonkolinier dan vektor kedua, ditulis dalam urutan itu, dan menghasilkan vektor ketiga, normal ke bidang yang berisi vektor pertama dan kedua , dan arah yang sesuai untuk membuat sistem koordinat tangan kanan ketika vektor disebutkan dalam urutan (pertama, kedua, hasil). Jika Anda memilih untuk memutarbalikkan ini, jangan ragu, TETAPI DIPERINGATKAN: Jika Anda melakukannya di sekitar saya, Anda sebaiknya menikmati tar, bulu, dan serpihan di pantat Anda dari perjalanan kereta api Anda ke luar kota.
John R. Strohm
Benar sekali, John; tetapi Anda masih harus menghadapi kenyataan bahwa penyimpangan semacam itu mungkin terjadi, artinya tidak ada yang namanya "tangan kanan absolut", yang berarti bahwa Anda dan saya sendiri yang harus memperbaiki tanda-tandanya.
Thomas Sharpless
-3

Saya dapat mengatakan bahwa standar industri salah sejak awal

Standar industri koordinat sebenarnya berasal dari koordinat meja, ketika orang menggambar semuanya di atas meja, yaitu bidang horizontal. X adalah kiri / kanan dan Y adalah depan / belakang, jadi itu membuat Z menjadi ke atas dan lahirlah Sistem Koordinat Tangan Kanan

Tapi Anda tahu, Kami sekarang menggunakan layar monitor. Ini adalah bidang vertikal. X masih kiri / kanan tetapi Y adalah atas dan bawah sebagai gantinya

Jadi apa yang akan menyebabkan Sistem Koordinasi Tangan Kanan? Itu membuat + Z mundur dan -Z maju. Apa-apaan ini? Atas adalah + dan Bawah adalah - Kanan adalah + dan Kiri adalah - TAPI Maju adalah - dan Mundur adalah + ??? Sangat bodoh jika kita membuat game yang karakternya berjalan di dunia 3D tetapi kita perlu minus z untuk maju. Karena itulah programmer game paling menghargai DirectX

Untuk mengambil standar yang datang dari meja dan menggunakannya pada monitor sangat salah di banyak tingkat dari tempat pertama. Dan sekarang kita harus mengakui bahwa mereka, OpenGL dan Industri, salah. Mereka hanya menggunakan apa yang mereka pikir akan membuat mereka nyaman tetapi mereka salah dan Sistem Koordinasi Tangan Kanan hanyalah warisan sampah yang harus dibuang secepat mungkin

Thaina
sumber
2
-1 untuk ketidaktahuan. Konvensi kanan berasal dari fisika dan matematika, khususnya operasi lintas produk vektor, yang mendasar bagi teori medan elektromagnetik dan mekanika. Komputasi mengadopsinya karena penggunaan asli komputer adalah untuk menghitung angka.
John R. Strohm
Haruskah -1 karena ketidaktahuan Anda. Seperti yang saya katakan "desk coordinate" fisika dan matematika di masa lalu selalu bekerja di meja, bukan monitor, jadi saya menyebutnya "desk coordinate" karena Anda menghitung fisika dan matematika di meja horizontal
Thaina