DirectX neden solak bir koordinat sistemi kullanıyor?


52

Stack Overflow'a göndermeyi düşündüm, ancak soru, Microsoft'un bu konudaki seçimi için makul bir teknik açıklama yapamayacağımı düşündüğüm için çok fazla öznel olduğumu vurguladı. Ancak bu soru beni çok uzun zamandır şaşırttı ve sorun projelerimden birinde ortaya çıkmaya devam ediyor ve bunu açıklamak için hiçbir zaman bir girişim görmedim:

OpenGL , dünya koordinat sisteminin + Z kısmının izleyiciye uzandığı, sağ elini kullanan bir koordinat sistemi kullanır.

DirectX uzanır dünyanın + Z parçası koordinat solak sistemi kullanır içine seyirciden uzaklaşıyor, ekrana.

Hiçbir zaman Glide API'sini kullanmadım , bu yüzden nasıl çalıştığını bilmiyorum, ama ne toplayabildiğimden, aynı zamanda bir solak sistem kullanıyor.

Bunun teknik bir nedeni var mı? Olmazsa, bir koordinat sisteminin belirli bir seçiciliğine göre kavramsal bir avantaj var mı? Neden biri birini diğerinden seçsin?


5
Bu, Arapça ve İbranice'nin neden sağdan sola yazıldığını sorar gibi görünüyor, diğer tüm diller de soldan sağa.
Gabe

17
Sadece matematiğin sağlam bir temelini paylaşan grafik API'ler arasında neden böyle bir tutarsızlık olduğunu anlamaya çalışıyorum. Semitik alfabelerin yönü kesinlikle değişmez kurallarla belirlenmemiştir.
greyfade

3
Bu soruya neden .NET programcıları kiralamıyoruz (2011-03-25) yazılmıştır.
Peter Mortensen

2
Ne OpenGL ne de Direct3D tamamen sağ veya solak değildir. Daha sonra ekran boşluğu sağ elle kullanıldığında eski klip klip alanında sola değişir, yani D3D'nin ekran alanında + Z tarafından bakıldığında X'den Y'ye dönüş saatin tersi yönündedir. AND her iki sistem de, geliştiricilerin her iki kiralelliğe sahip alanları kullanmasına izin verir.
legends2k

1
@PeterMortensen. NET'in tüm hater'lerinin ne olduğunu bile bilmemeleri oldukça komik. Muhtemelen atıfta bulundukları şey ASP.NET Webforms, çerçevedir. .NET, temel sınıf kütüphanesi ve CLR olarak tanımlanabilir.
Muffin Man

Yanıtlar:


64

Bunun eski bir gönderi olduğunu biliyorum, ancak bu gönderiye başvuruda bulunduğunu ve seçilen yanıtlayıcının tonunu beğenmediğini gördüm.

Bu yüzden biraz araştırma yaptım!

  1. DirectX eski . İlk olarak 1995 yılında, dünyanın Nvidia ve ATI , DirectX ve OpenGL'den daha fazlasına sahip olduğu piyasaya sürüldü . Bu 15 yıldan fazla millet.
  2. 3dfx Interactive'in Glide (gün içinde DirectX'in rakiplerinden biri. OpenGL o zamanlar oyun oynamak istemedi) solak bir koordinat sistemi kullandı.
  3. POV-Ray ve RenderMan (Pixar'ın oluşturma yazılımı), aynı zamanda solak bir koordinat sistemi kullanır.
  4. DirectX 9+, her iki koordinat sistemiyle de çalışabilir.
  5. Hem WPF hem de XNA (sahneler altında DirectX ile çalışan) sağ elini kullanan bir koordinat sistemi kullanır.

Bundan birkaç şey hakkında spekülasyon yapabilirim:

  • Endüstri standartları, insanlar kadar standart değildir.
  • Direct3D , herkesin işleri kendi yoluna yaptığı bir zamanda yapıldı ve geliştiriciler muhtemelen daha iyisini bilmiyordu.
  • Solaklık isteğe bağlıdır, ancak DirectX dünyasında gelenekseldir.
  • Kurallar zorla öldüğü için herkes DirectX'in yalnızca solakla çalışabileceğini düşünüyor.
  • Microsoft sonunda öğrendi ve oluşturdukları yeni API'lerde standardı takip etti.

Bu nedenle benim sonucum şöyle olacaktır:

Seçim yapmak zorunda kaldıklarında, standardın farkında değillerdi, 'diğer' sistemini seçtiler ve diğerleri de sadece gezintiye çıktılar. Gölgeli bir iş yok, sadece talihsiz bir tasarım kararı, çünkü geriye dönük uyumluluk Microsoft'un oyununun adı.


11
DirectX, 3B bilgisayar grafiğine kıyasla kundaklanan giysilere sahip bir bebektir ve birden fazla 3B koordinat sistemini yönetmesi ve aralarında dönüşüm yapması gereken bilgisayar programlarına kıyasla nispeten gençtir. İlk defa grafik dersine girdiğim 1970'lerin ortasıydı ve o zamandan beri eğitmen (Frank Crow) sağ elli koordinat sistemlerini kullanmaya zorluyordu. 1983 yılında, grafiksiz bir iş üzerinde çalışıyordum, ancak dönüşümleri koordine eden bir koordinasyon vardı ve zorunlu bir sağ kural, İLK proje faturasıydı. (Ve ben bunu yapmadım!)
John R. Strohm

7
Yaşın bununla bir ilgisi olduğundan emin değilim. Fiziksel bilimlerin çoğu sağ elini kullanan bir koordinat sistemi kullanmıyordu ve bilgisayarlarda bulunduğundan çok daha uzun yıllar oldu mu? Bunun Glide ve ardından DX tarafından izlenenlerden daha eski bir kongre olduğunu söyleyebilirim.
Thomas Owens

3
Sadece bir standardın akademisyenler tarafından kullanılması, endüstriyel / diğer uygulamalarda aynı olacağı anlamına gelmez. Ne de olsa insanlar kendi alanlarında kullanılanları takip ediyorlar. Aksi halde, grafik sistemleri kökenlerini ekranın sol üst köşesinde değil, sol alt köşesinde oluşturur. Ayrıca, yaşla ilgili nokta, DX'in “masaüstünde 3B oluşturma” olayının hala yeni olduğu ve “standartlar” ve “en iyi uygulamalar” ın henüz tamamen çözülmemiş olduğu zamanlarda doğmuş olmasıdır.
Kyte

1
a) Yani, benim önerim, kendi öneriniz hiçbir şekilde alıntı yapmayan bir şirket yanlışlığı suçlaması olduğunda, kendi kişisel spekülasyonum, "batıl inançlı" ve "gerçeklerle örtüsüz" olarak adlandırdığım basit bir listedir. ne olursa olsun destek? b) Cevabımı beğenmezseniz, her zaman kendinizinkini verebilirsiniz. Bu cevabı verdiğimde, kabul edilen cevap zaten bir yaşındaydı. Katkıda bulunacağınız bir şey olduğunu düşünüyorsanız daha fazla bilgi eklemekte özgürsünüz. c) Piyasadaki yeriniz titrek olduğunda tekel oluşturmak zordur. Bu, modern çokuluslu MS değildir.
Kyte

2
@Kyte 3Dfx, sizi donanımlarına kilitlemek için belirli bir nedenden dolayı özel API'lere sahipti. Son kullanıcıları donanımlarını almaya zorladılar çünkü geliştiricilere sadece 3Dfx ile çalışan oyunları yazmak için "rüşvet" verildi. Microsoft, sizi API'larına kilitlemek istedi, bu sayede geliştiriciler yalnızca Windows için oyun yazabildi, bu da sonunda 3Dfx'i öldürdü. Sade ve basit iş kararları, yanlış davranış değil. Bu hala bugün devam ediyor. Nvida sizi CUDA ile kartlarına kilitlemenizi istiyor, AMD ise OpenCL, 2012'yi aynı davranış nedeni ile kullanmak istiyor. Bu tarih, o zamanlar endüstrideydim.

37

Kimsenin bir şeyden bahsetmediğine şaşırdım: OpenGL de solak koordinat sisteminde çalışıyor. En azından, gölgelendiricilerle çalışırken ve varsayılan derinlik aralığını kullanırken de geçerlidir.

Sabit işlevli boru hattını attığınızda, doğrudan "klip alanı" ile ilgilenirsiniz. OpenGL Spesifikasyonu, klibi boşluğu 4D homojen bir koordinat sistemi olarak tanımlar. Dönüşümleri normalize cihaz koordinatları ve pencere alanına kadar takip ederken, bunu bulursunuz.

Pencere alanı, bir pencerenin piksel alanındadır. Kökeni sol alt köşede, + Y yukarı ve + X sağa gidiyor. Bu sağ elini kullanan bir koordinat sistemine çok benziyor. Peki ya Z?

Varsayılan derinlik aralığı (glDepthRange) 0'a yakın Z değeri ve çok daha Z'nin değerini ayarlar biri . Yani + Z izleyiciden uzaklaşıyor .

Bu solak bir koordinat sistemi. Evet, derinlik testini GL_LESS'ten GL_GREATER olarak değiştirebilir ve glDepthRange'ı [0, 1] ila [1, 0] arasında değiştirebilirsiniz. Ancak OpenGL'nin varsayılan durumu solak bir koordinat sisteminde çalışmaktır. Ve klips alanından pencere alanına ulaşmak için gerekli dönüşümlerin hiçbiri Z'yi olumsuz etkilemez. Böylece klips alanı, tepe (veya geometri) gölgelendiricisinin çıktısı, solak alandır (tür. 4D homojen bir alandır, yani elini sıkmak zor).

Sabit işlevli boru hattında, standart projeksiyon matrislerinin (glOrtho, glFrustum ve benzerleri tarafından üretilen) hepsi sağ elli bir alandan solak birine dönüşür . Z'nin anlamını çeviriyorlar; Sadece ürettikleri matrisleri kontrol et. Göz boşluğunda, + Z izleyiciye doğru hareket eder; projeksiyon sonrası uzayda, uzaklaşır.

Microsoft'un (ve GLide'nin) projeksiyon matrislerinde olumsuzlama yapmaktan rahatsız olmadığından şüpheleniyorum.


4
Gerçekten ilginç. İtiraf edeyim, hiç yakından bakmadım. Benim sorum özellikle dünya ile ilgili olsa da, cevabınız düşünce için bana yiyecek veriyor.
greyfade

Derinlik aralığının veya derinlik testinin değiştirilmesinin sağ elle yapıldığını, ancak her ikisini de iptal edilen birbirlerini kullanarak, bana solak bir sistem sağladığını buldum.
hultqvist

1
İlgi çekici. Görüntü derinliği dönüşümüne bakın: z_wiewport = z_clip * (en yakın) / 2 + (+ en yakın) / 2. Bu, klibin uzamasının -1'inin yakın ve +1'inin kadarıyla eşlenmesini sağlar. Bu nedenle, klibi boşluğun kendisi, daha sonra görüntüleme çerçevesine eşleme biçimini yine de tersine çevirebilseniz bile, LEFT elle ele alınabilir.
İstanköy

1
@NicolBolas: Ekran alanı sağ elle kullanıldığından Direct3D'nin bile tamamen sol olmadığını fark ettiniz mi? X, soldan sağa, Y, yukarıdan aşağıya ve Z, izleyiciden uzakta, yani, X'den Y'ye, Z eksenine zıt yönden bakıldığında saatin tersi yönde bir dönüşdür.
legends2k

1
@bobobobo " GluLookAt tarafından oluşturulan görünüm matrisinin el seçimlerini de değiştirebileceğini not ettim" - Hayır, değil. Bu, ileri vektörün nasıl hesaplandığını, ancak bu matris, yine de, sağ elini uzayda sıradan bir rijit cisim değiştirmesidir (ve aslında + z aslında sağ elini uzayda "geri" dir ). İleri vektörü olumsuzlamak, koordinat alanının doğruluğunu değiştirmeyle ilgili değildir.
Chris, Monica’yı

11

Saf tarih. Eski günlerde mağara grafik programcıları, monitörü (teletype? Stonetype?) İki boyutlu grafik kağıdı olarak görüyorlardı. Matematikte ve mühendislikte, veri noktalarını grafik kağıdına çizmek için kullanılan olağan kurallar: x = right, y = up. Sonra bir gün, silikon çarkın icadından yaklaşık bir hafta sonra, biri 3D grafikler düşündü. Bu fikrin mum ampulü başının üstünde yanıp söndüğünde, ne olursa olsun, izleyiciden uzağa Z = eklemeyi seçtiler. (Ah, sağ elim sadece bunu hayal ediyor.)

Bir gün onların soyundan gelenlerin mühendisler, bilim adamları, güzel sanatçılar, ticari sanatçılar, animatörler, ürün tasarımcıları vb. Olacağı ve 3D grafikleri faydalı bulacağı konusunda hiçbir fikirleri yoktu. Bütün bu güzel modern insanlar birbirleriyle ve daha yerleşik matematik metinleri ve fizik sözleşmeleriyle tutarlı olmak için sağ elini kullanan koordinat sistemlerini kullanıyor.

3D koordinat sistemini ekran yüzeyine yerleştirmek aptalca. Önemli olan model - bir evi, sandalyeyi, fazla kilolu yeşil ogre veya galaksiyi tanımlayan üçgenler ve çokgenler ve düzlemler. Günümüzde hepimiz sağ el XYZ sistemlerinde bir şeyler tasarlıyor ve modelliyoruz ve bunu nasıl işleneceğini düşünmeden önce bile, modelin dünyası açısından yapıyoruz. Kamera bir noktaya eklenmiş, muhtemelen çılgın yollarla uçmak için yapılmış ve modeli bağırsaklarının içinde koordine edilmiş sistem dönüşümleriyle titremesi gereken piksellere dönüştüren görünmez bir altyapı.

Karmaşa eklemek için bazı grafik kütüphaneleri, CRT'lerin görüntüyü üstten alta taradıklarını ve Y = aşağıya aldıklarını kabul eder. Bu, bugün bile tüm pencere sistemleri ve pencereler yöneticilerinde kullanılmaktadır - X11, fvwm, gtk +, Win31 API, vb. Clutter, Beryl, vb. Gibi yeni fanglı 3D GUI sistemlerinin Z ile olan ilgisi, 3D grafik modellemesinden ayrı bir konudur. Bu ihtiyaç sadece uygulama programcıları ve GUI tasarımcıları ile ilgilidir.


1
Hepsi çok ilginç ve SGI'nin GL'sinin ardındaki mantığı kesinlikle açıklıyor. ... Ama bu DirectX'in solak olduğunu nasıl açıklar?
greyfade

Birkaç 2B ve 3B sistemin hepsi sözleşmelerini ortak bir tarihe dayandırmıştır.
DarenW

10

Her ikisi de esasen eşdeğerdir, çünkü biri kolayca diğerine dönüşebilir . Solak sistem için bulabildiğim tek avantaj şudur: nesneler gözlemciden uzaklaştıkça, herhangi bir yönde (x, y veya z), mesafe daha yüksek bir değerdir. Ancak Microsoft'un birini diğerinden seçmesinin nedeni budur, hiçbir fikrim yok.

POV-Ray ayrıca solak bir koridor sistemi kullanır.


5
Evet, bir çok grafik yenisinin, ekranın derinliklerinde daha doğal bir şekilde z yarattığını düşünüyorum. Fakat aynı zamanda x'in yukarı ve yukarı doğru, “grafik eksenleri” tarzı artmasını istiyorlar. Bu onlara solak bir koordinat sistemi kazandırır. Ancak daha sonra daha karmaşık şeyler yapmaya çalıştıklarında, sağ el bilimi / matematik / mühendislik dünyasıyla adım adım olduklarını fark ederler.
timdays

6
@Timday, yenilere gizli 3 boyutlu grafiğin el sıkışmamasını öğretmelisiniz. Sağ elinizi baş parmağınız, işaret parmağınız ve orta parmağınız uzatılmış, hepsi birbirine dik açılı olacak şekilde tutun. Başparmak X, işaret parmağı Y, orta parmak Z'dir. Şimdi, istediğiniz koordinatlara uyum sağlamak için elinizi hareket ettirin ve hareketin dönüşümleri nasıl etkileyeceğini hemen anlayın.
John R. Strohm

3
@John: Hey, tahmin et ne oldu, fizikçiler de aynı gizli el sıkışmalarına sahip!
timdays

1
@John Sağ elini kullanan bir sistemin avantajlarına tamamen katılıyorum, ancak el sıkışma kuralınızın (herkesin okulda öğrenmesi gereken) sol el sistemi için de sol el ile kullanılabileceğini biliyorsunuz.
Chris, Monica

@HristianRau, hangi eli kullandığınızı, ne tür bir koordinat sistemini tanımlamaya çalıştığınıza, sağa ya da sola bağlı olarak bağlıdır.
John R. Strohm

10

Kurşun geliştirici DirectX (ve Direct3D) Alex St John geçenlerde bu yorumladı. Direct3D'nin tarihiyle ilgili bir makalesinde şunları yazdı:

Ben [...] Direct3D API'si için bir seçicilik seçmem istendi. Kişisel tercihin dışında, sol elini kullanan bir koordinat sistemi seçtim . [...] keyfi bir seçimdi.

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


Bu, yalnızca dünyanın geri kalanının ne yaptığı hakkında hiçbir fikriniz yoksa, dünyanın geri kalanının grafikler için sağ taraftaki koordinat sistemlerinde standartlaştırdığı konusunda keyfi bir seçimdir.
John R. Strohm

1
@ JohnR.Strohm - Bağlantılı makaleyi bile okudunuz mu?
Maximus Minimus

Link-rot o sayfayı yemiş. İşte en yeni çalışma anlık görüntüsü: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough

5

Anlaşılması gereken, BÜYÜK miktarda programcı zamanının, solak ve sağ taraftaki koordinat sistemleri arasında dönüşüm yaparak boşa harcanması ve herhangi bir anda hangi sistemin gerekli olduğunu hatırlatarak daha fazla programcı zamanının boşa harcanmasıdır.

Bunların hepsi, sağ elini kullanan koordinat sistemleri endüstri standardı olduğunda ortadan kalktı.

Ortak kullanımda zaten yeterli koordinat sistemi var, bir el sıkıntısı sorusu getirerek sayıyı iki katına çıkarmadan. Bkz. Minkler & Minkler, "Havacılık ve Uzay Koordinat Sistemleri ve Dönüşümleri" . Havacılık koordinatındaysanız, örneğin uçuş simülasyonu yapıyorsanız, o kitabı İHTİYACINIZ VAR .

Tahminime göre Microsoft, endüstri standartları hakkında hiçbir şey bilmeyen, bir endüstri standardı olduğunun farkında olmadığını ve önemli olmadığını düşündüğü DirectX projesinde HERKESİNE sahip olmadığını söyledi.

Sağ elini kullanan sistemleri bilmeleri diğer bir olasılık, endüstri standardıydı ve kasıtlı olarak DirectX'i sola çevirdiler, böylece insanların OpenGL'i kullanmaları için DirectX'i kullanan kodu dönüştürmelerini HARD yapmak için HARD yapmıyorlardı. Bunun gerçekten böyle olduğunu keşfedebilseydim, Redmond'da bir balta katili olarak yeni ve muhtemelen kısa ömürlü bir kariyere başlamayı gerekli bulurdum.


Sorumu Microsoft’a sayar gibi gelmek istemedim, bu yüzden akıllarında olan OpenGL’le uyumsuzluk ihtimalinden bahsetmek istemedim.
greyfade

3
@greyfade: Tamam, o zaman bu şekilde koyalım. Solak koordinatları sağ elini koordine etmek için tercih etmenin teknik bir nedeni yoktur veya bunun tersi de geçerlidir. Bununla birlikte, günümüzde, sağ elini kullanan koordinatları tercih etmek ve solaklı koordinatları kullanarak herhangi bir şeyi uygulama ipuçlarını bile fısıldayan herkesin bir demiryolu üzerinde katran, geçiş yapmak ve şehirden ayrılmak için çok iyi nedenleri var. Bu daha basit yapar mı?
John R. Strohm

Bunun üzerinde herhangi bir miktarda doğru öfke toplayabileceğimi bilmiyorum. PostScript ile düzenli olarak işimin bir parçası olarak çalışıyorum (burada koordinatlar sol alt köşe olarak [0, 0] ile başlıyor ve sağ üstte maksimuma çıkıyor), bu nedenle koordinat dönüşümü buradaki yaşamın bir gerçeği.
Inaimathi

2
Demek bu% 100 spekülasyon mu? Neden cevap olarak işaretlendi?
Faktör Mystic

3
Beni dövdü, sadece anlamsız bir öfke ve ironik bir şekilde, solak koordinat sistemi gibi, birçok kişi bir nedenden ötürü onunla birlikte gitti.
Hızlı Joe Smith

5

Sağ ya da solak olma avantajı olmadığını düşünenler için kesinlikle yanılıyorsunuz. Kartezyen koordinat sistemlerinin sağ elini kullanması vektör çapraz ürün tanımından gelir. XYZ baz vektörleri için u, vve w, w = u X v.

Bu tanım vektör matematiği, vektör matematiği ve çok fazla fiziğin temelini oluşturur. Elektromanyetik etkileşimleri simüle etmeye çalıştığınızı varsayalım. Manyetik alan vektörünüz Mve o alanda hızla hareket eden yüklü bir parçacık var v. Yük hangi yoldan hızlandırır? Kolay - yönünde M X v. Bazı salaklar dışında, görüntüleme sisteminizi sola çevirmenin eğlenceli olacağını düşündü, bu yüzden yönünde ivme kazanıyor -M X v.

Temel olarak, iki vektör miktarı arasındaki herhangi bir fiziksel etkileşim sağ taraf olarak tanımlanır ve bu etkileşimi simüle etmek istediğinizde, grafik sisteminizin sağ tarafa taşınmasını umarsınız ya da negatif işaretlerin etrafında taşınmak için hatırlamanız gerekir. bütün matematiğin.


Elektromanyetik, çapraz ürünün ortaya çıktığı tek yer değil. Aynı zamanda aerodinamik ve orbital mekaniğinde de ortaya çıkıyor. Uçuş simülasyonunun bununla ilgilenmesi gerekiyor ve fizik sistemleri koordine ediyor ve grafik koordinat sistemleri çarpışıyor. Yukarıdaki cevabımda belirtilen Minkler ve Minkler'e bakın.
John R. Strohm

@ Tom: Bunun doğru olup olmadığından emin değilim; (1, 0, 0), (0, 1, 0) ve (0, 0, 1) diyen 3 vektör al, ixj gerçekleştirilirken, çapraz ürün için formül iyi tanımlandığından ve sayılar olmadığından kiralite / ellilik; sadece üç vektörü bazı ellerde yorumlayan insandır, o zaman bile onu her iki el ile de yorumlamayı seçebiliriz ve yine de tutarlı olacaktır, yani solak bir ixj = k sağ el ixj iken uzakta olacak k doğru olacak. Dikkat et, ben de sağ elini kullanan bir adamım ama yine de gerçek bu.
legends2k

@ legends2k: Evet, sanırım bu doğru, numaralarınızın hiç bir şey ifade etmesini istemediğiniz sürece. Sayılarınızın fiziksel bir etkileşimi temsil etmesini istediğinizde veya bir görüntüleme sistemindeki koordinasyonları veya aslında herhangi bir şeyi temsil etmesini istediğiniz anda çok önemlidir.
Tom

@ Tom Bu sayıya anlam vermemiz gerektiği konusunda haklısın. Bu gerçekten önemli. Ancak bu, sol elin sağ elin üzerinde olduğunu söyleme sebebi değildir. 0,0,1İlerlemek için bir anlam verebilirim ve bu sol eldir, bu yüzden 1,0,0 X 0,1,0yapmak 0,0,1sol eldir
Thaina

@Tom Aslında, solak bir koordinat sisteminde Fizik yaparken, formül hala geçerli M X volmakla birlikte, manyetik alanın Mters yöne işaret ettiği düşünülür, çünkü bir yalancıdır. Her iki sistemde de aynı denklemleri kullanabilirsiniz: Değişen tek şey, sözde yalancıların ne şekilde "işaret ettiği" yorumudur. Hızlanma gibi uygun vektörler her iki koordinat sisteminde de aynı şekilde çalışır. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin

5

Direct3D'nin erken solak olmasına verilen asıl cevap, bazılarınızın tahmin ettiğinden çok daha az acı verici. DirectX, 1995’te Microsoft RenderMorphics’i geri aldığında başladı.

O zaman RenderMorphics ofislerinde kullanılan standart grafik metni, Newmann ve Sproul tarafından solak koordinatlar kullanılarak her şeyi yapan "İnteraktif Bilgisayar Grafikleri Prensipleri" idi. Üniversitede kullandığımla aynı kitap. D3D koduna bakarak, bunları kitaptaki denklemlerle eşleşen değişken adlarını kullanarak bile görebilirsiniz.

Microsoft komploları değil. Microsoft resme gelmeden önce karar verildi.


Buraya şehir efsanesi gibi göründüğü bir yorum ile aynı fikirdeyim , ancak kişisel bakış açınızı görmek çok güzel.
Josiah Yoder

3

Ne de sonuçta diğerinden daha iyi değil - 3D koordinatları 2B bir yüzeye eşliyorsunuz, bu nedenle üçüncü boyut (aslında 3B'i yapan) keyfi olarak seçilebiliyor, izleyiciye veya ekrana bakıyor olabilir. Zaten bir 4x4 matrisine bir şeyler koyacaksınız, yani birini seçmek için teknik bir neden yok. İşlevsel olarak şu iddia edilebilir:

  • X ekseninin soldan sağa doğru hareket etmesi için hesaplamalarda ve diğer alanlarda oldukça geniş bir fikir birliği var (havacılıkta göze çarpan bir istisna).
  • Matematikte, Y ekseni işaret eder. (Ayrıca, Kabarcıkların Gittiği Yer Yukarı da).
  • Bilgisayar ekranlarında, Y ekseni işaret eder (çünkü bu, CRT ekranlarının çalışma şeklidir ve ayrıca çoğu insan betiğinin satırları düzenlediği sıradır).
  • X / Y düzlemindeki bir yüzeyin "görünür" tarafına baktığınızda, normal izleyiciye işaret etmelidir (örneğin, uydu görüntülerine bakarken; "deniz seviyesinden yüksekliği", uyduya değil Dünyanın merkezi). X / Y düzlemi için normal Z ekseni vektörü olduğu için, Z ekseninin de izleyiciye işaret etmesi gerekir.
  • Bilgisayar ekranındaki 3B görüntülere baktığınızda, izleyiciden daha uzakta olan noktalar daha büyük bir Z bileşenine sahip olmalıdır. Bu nedenle, Z ekseni ekrana işaret etmelidir.

Sonuç : X ekseni için bir fikir birliği vardır, ancak diğer ikisi için, iki sağ elle ve iki sol elle yapılandırma için her iki yön de tartışılabilir ve hepsi mantıklıdır.


3

İlginç gerçek.

Direct3D - aslında (değil DirectX da girdi, ses, vb kapsar) gelmez solak koordine sistemi var.

Hem RH hem de LH sistemlerini destekleme becerisine sahiptir. SDK belgelerine bakarsanız, D3DXMatrixPerspectiveFovLH ve D3DXMatrixPerspectiveFovRH gibi işlevleri görürsünüz. Her ikisi de iş ve her ikisi de, seçtiğiniz koordinasyon sisteminizle başarıyla kullanılabilecek bir projeksiyon matrisi oluşturur. Cehennem, isterseniz Direct3D'de sütun ana bile kullanabilirsiniz; bu sadece bir yazılım matris kütüphanesidir ve kullanmanız gerekmez. Öte yandan, OpenGL ile kullanmak istiyorsanız, OpenGL ile de mükemmel bir şekilde çalıştığını görürsünüz (belki de matris kütüphanesinin Direct3D'nin kendisinden bağımsızlığının kesin kanıtıdır).

Bu nedenle, programınızda bir RH sistemi kullanmak istiyorsanız, sadece işlevin -RH sürümünü kullanın. Bir LH sistemi kullanmak istiyorsanız, -LH sürümünü kullanın. Direct3D umrunda değil. Aynı şekilde, OpenGL'de bir LH sistemi kullanmak istiyorsanız - sadece bir LH projeksiyon matrisi olan glLoadMatrix. Bunların hiçbiri önemli değil ve bazen olduğunu düşündüğünüz büyük meselenin yakınında değil.


0

Her iki taraf için de teknik bir avantaj yoktur, tamamen keyfidir. Her ikisi de tutarlı olduğunuz sürece gayet iyi çalışıyor.

Tutarlılığın avantajları nedeniyle, ideal olarak kişi sadece "diğer herkesin kullandığı şeyi" kullanmalı - ancak çoğu durumda oldukça zor, çünkü pratikte ezici bir şekilde "tercih edilen" kongre de yok: her iki taraf da yaygın olarak kullanılıyor. En iyi ihtimalle, belirli topluluklarda bazı tutarlılıklar var (örneğin OpenGL).

Bu yüzden bence bu sorunun temel cevabı şudur: Seçtikleri şeyi seçtiler, çünkü doğru hissettiler (şüphesiz ki bu teslimiyetle ilgili önceki deneyimleri vardı) ve yapmamaları için çok az sebep vardı.

Sonunda çok az fark yaratır - varlıkları / kodları diğer sistemlerle / topluluklarla ciddi şekilde değiş tokuş etmek isteyen herhangi bir kişi, yine de el sıkıntısı dönüşümüyle uğraşmak için hazırlıklı olmak zorunda kalır, çünkü 3D grafiklerdeki yaşamın bir gerçeğidir.


0

Buradaki önceki cevabımın tamamlayıcısı olarak. 1990'lı yılların eski bir OpenGL özelliklerinden:

OpenGL, koordinat sistemlerinden herhangi birinde sola veya sağ elini zorlamaz.

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

Öyleyse, ne D3D ne de OpenGL herhangi bir el koyulma zorunluluğu olmadığı için asıl soru şudur: insanlar bunu neden önemli bir şey olarak görüyorlar?


1
neden ayrı bir cevapla gönderdin? Demek istediğim eklemek için önceki cevabınızı düzenleyebilirsiniz , değil mi?
gnat

-1

Söylemekten nefret ediyorum ama bir dizi koordinatın eli aslında özneldir - şeylere baktığınızı hayal ettiğinize bağlıdır. OpenGL küp harita özelliklerinden bir örnek: Küpün içine baktığınızı düşünürseniz, dışarıdan bakmayı düşünürseniz, koordinat sistemi solaktır. Bu basit gerçek sonsuz kedere neden olur, çünkü sayısal olarak doğru bir cevap almak için tüm varsayımlarınızın tutarlı olması gerekir, yerel olarak hangi varsayımı yaptığınız önemli olmasa da.

OpenGL teknik özellikleri resmen “tarafsızlık” şeklindedir ve bu sorunun önüne geçmek için büyük çaba sarf eder - yani programlayıcıya koymak. Bununla birlikte, göz koordinatları ve klip koordinatları arasında bir "el değişikliği" vardır: baktığımız model ve göz alanında, aradığımız klip ve cihaz alanında. Ben her zaman bunun sonuçları ile mücadele ediyorum, şüphesiz rastlantısal komplikasyon.

Çapraz ürün dostumuzdur, çünkü bir çift vektörden kesinlikle sağ veya sol elini 3D koordinat sistemi oluşturmanıza olanak tanır. Ama hangi el, hangisine "X" dediğine bağlı.


3
Çapraz ürün değişmezdir. A x B == - B x A. Bu şekilde, bir sıralı olmayan birinci vektör ve bu sırayla yazılmış ikinci bir vektör almak ve birinci ve ikinci vektörleri içeren düzleme normal bir üçüncü vektör üretmek için bir çapraz ürün tanımlanır. ve vektörler sırayla numaralandırıldığında (birinci, ikinci, sonuç) sağ elini kullanan bir koordinat sistemi oluşturmak için uygun bir yön. Bunu saptırmayı seçerseniz, çekinmeyin, ancak UYARI: Etrafımda yaparsanız, şehir dışına seyahat ederken poponuzdaki katran, tüy ve kıymıkların tadını çıkarmanız daha iyi olur.
John R. Strohm

Oldukça doğru, John; ama yine de, böyle bir sapkınlığın mümkün olduğu gerçeğiyle yüzleşmelisiniz, yani "mutlak sağ teslimlik" diye bir şey yoktur, bu, işaretleri doğru bir şekilde yapmanın hala size ve bana bağlı olduğu anlamına gelir.
Thomas Sharpless,

-3

Endüstri standardının her şeyden yanlış olduğunu söyleyebilirim.

Endüstri koordinat standardı aslında masa koordinatından geldi, insanlar masadaki her şeyi yatay düzlemde çiziyorlardı. X sola / sağa ve Y ön / arkaya, yani Z'yi yukarı doğru çeviriyor ve Sağ-El Koordinat Sistemi doğdu

Fakat biliyorsunuz ki şimdi monitör ekranı ile kullanıyoruz. Dikey düzlem. X hala sol / sağ, ancak Y, yukarı ve aşağı yerine

Öyleyse, Sağ-El Koordinat Sistemi neye sebep olur? + Z'nin geriye ve -Z'nin öne çıkmasına neden oluyor Bu da ne? Yukarı + ve Aşağı - Sağ + ve Sol - - AMA İleri - ve Geri + ?? O kadar aptalca ki bu oyunu 3D dünyasında çalıştırıyorsak, ama ilerlemek için eksi z'ye ihtiyacımız var. Bu yüzden oyun programcısı DirectX'i en çok takdir ediyor

Masadan gelen bir standarda sahip olmak ve onu monitörde kullanmak, her şeyden önce birçok seviyede yanlıştır. Şimdi de şunu kabul etmeliyiz ki, onların OpenGL ve Endüstri yanlış olduğunu. Sadece onları rahatlatacaklarını düşündükleri şeyleri kullanıyorlar ancak yanılıyorlar ve Sağ-El Koordinat Sistemi mümkün olduğunca çabuk atılması gereken önemsiz bir miras.


2
Cehalet için -1. Sağ kongre, fizik ve matematikten, özellikle elektromanyetik alan teorisi ve mekanik için temel olan vektör çapraz ürün işlemidir. Bilgisayar kullanmak benimsendi çünkü bilgisayarların asıl kullanımı sayıları azaltmaktı.
John R. Strohm

Sizin cehaletiniz için -1 olmalıdır. Dediğim gibi eski zamanda fizik ve matematik her zaman izlemek, masa üzerinde çalışmıyor "masa koordinat", bu yüzden yatay masa üzerinde fizik ve matematik hesaplamak çünkü "masa koordinat" olarak adlandırılan
Thaina
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.