X, Y, Z koordinat standartları?


12

Her türlü oyunun 3D geliştirilmesinde oldukça yeniyim. Öğreticileri ve örnekleri okurken, X / Y / Z koordinatlarının ilk tahminimden biraz geriye doğru göründüğünü görüyorum.

Bir kişi bir tarlanın etrafında yürüyor olsaydı, X / Y pozisyonunun değişeceğini ve bir tepeden aşağı veya yukarı zıplayacağını veya Z pozisyonunun değişeceğini hayal etmiştim. Benim varsayımlarım yanlış gibi görünüyor çünkü tarlada yürümek X / Z'yi değiştiriyor ve bir tepeye atlamak veya yukarı / aşağı gitmek Y'yi değiştiriyor gibi görünüyor.

1) Gözlemlerim doğru mu? 3D benim için yeni ve ben doğru bir şey düşünmüyor olabilirim.

2) Yatay hareketin ardındaki mantık X / Z ve dikey hareket Y'dir?

3) X / Y'yi yatay hareket olarak ve Z'yi XNA Çerçevesinde dikey hareket olarak kullanmak benim için yanlış olur mu?


Sol / Sağ El Koordinat Sistemleri. DirectX sol el, OpenGL'deki varsayılan sağ el.
Jonathan Connell

Yanıtlar:


19

Varsayımlarınız yanlış değil: her motor bu koordinatları farklı şekilde ele alır. Genel olarak X, neredeyse her zaman Doğu-Batı eksenidir, ancak Y veya Z'nin Rakım ekseni olup olmadığı değişir. Anladığım kadarıyla Quake 3, Source Engine ve Torque engine'in hepsinde Z var. 3DS Max modelleme aracı da öyle. Bu nadir değil.

Kabaca azalan önem sırasına göre sıralanan bir koordinat sistemine sahip olmak mantıklıdır, böylece bir temsili daha az boyuta yaslamak daha kolay anlaşılır. Örneğin, oyununuz 2B yükseklik haritasına ayarlanmışsa, Z'nin 'yukarı' olması mantıklıdır, çünkü 3B dünya haritasındaki X ve Y koordinatlarınız doğrudan yükseklik haritasındaki X ve Y koordinatlarına ayarlanır. Öte yandan, öncelikle oluşturma açısından düşünürseniz (ve birçok oyun motoru geliştiricisi yaparsanız), ekran koordinatları olan X ve Y'ye alışkınsınız, bu nedenle 3. ekseni eklemek doğal olarak ekranın içine veya dışına gider.

Sizin için en kolay olanı kullanın, ancak herhangi bir seçeneğin keyfi olduğunu ve bunlar arasında dönüştürmeniz ve bir programda birden fazla koordinat sistemi kullanmanız gerekebileceğini unutmayın.


Aslında diğer iki yanıtı daha çok sevdim, ancak bu kabul edilen cevap olduğu için, Y'nin dikey ve Z'nin ekrana geldiğine işaret eden bir not, çoğu 3D donanım API'sının çalışması için ayarlanmış yol (DirectX ve OpenGL) . Kendi sisteminizi istiyorsanız, bunun farkında olun, çünkü bazı çeviriler gerekebilir. (Yanlış ama tutarlı bir şekilde kullanılan bir şey genellikle istendiği gibi çalışabilir, bu nedenle 'olabilir' :))
James

1
Teknik olarak OpenGL, Z'yi varsayılan olarak ekrandan çıkıyor, yönü eklediğinizde, hem DirectX hem de DirectX'in görüntüleme yönüne paralel Z olmasına rağmen, bunlar hala uyumsuz! 3D ile çalışırken rotasyonlar, çeviriler ve ölçekleme yoluyla bir koordinat sisteminden diğerine geçme konusunda yetkin olmanız gerekir - gerçekten de, modeller dünyada bu şekilde ortaya çıkar - bu yüzden bir standart.
Kylotan

Sadece o zaman milyonlarca üçgenle uğraşırken, belki de donanımın koordinat sistemi ile savaşmak için daha az yapmanız gerekir; belki de daha iyi;) Günün sonunda, stres seviyelerine rağmen oyun yapmak eğlencelidir .. )
James

Ekrana girip çıkarken veya rakım olarak "Z" kavramı biraz yanıltıcıdır. Dönüşümleri kavramsallaştırmak daha kolay olabilir. Sonunda 2B pencere alanına dönüştürülen ancak derinlik değeri olan 3B / 4D tepe koordinatlarını gönderiyoruz. Bir API'nin X, Y veya Z'nin 3D koordinatlarını doğal olarak "derinlik" ile eşleme fikri gerçekten doğru değildir - koordinatların anlamını değiştiren herhangi bir dönüşümle karşılaşabilirsiniz. Bu dönüşümün sonunda, hala 2D pencere alanı koordinatları ve bir derinlik değeri elde edersiniz.
PatrickB

1
Gerçi geri kalanlara katılmadığımızdan tam olarak emin değilim: elbette x, y, derinliğe yansıtabildiğiniz sürece istediğiniz herhangi bir koordinat alanını kullanabilirsiniz, ancak bu soru öncelikle belirli sözleşmelerin neden var olduğu ile ilgilidir. Koordinat sistemleri için ve sözleşmeler kaçınılmaz olarak gerçek dünya kavramlarıyla bağlantılıdır.
Kylotan

6

Önünüzde bir grafik bulunan bir kağıda baktığınızı düşünün, eksenler genellikle altta X, dikeyde Y olarak etiketlenir; bu Z'yi zemin boyunca dış eksen olarak bırakır.

Bu sadece bir kongre, ama Z'de sahnenin derinliği olduğunu düşündüğümüz grafiklerde çok kullanılıyor.

CAD gibi diğer alanlarda sürümünüz daha yaygın olacaktır.


4

Fikir, x ve y eksenlerinin aynı kalmasıdır - y ekranda 'yukarı' ve x karşıttır.

z - üçüncü boyut, ekrana geri yansır (burada özlük konularını göz ardı ederek). 3 boyutta bu biraz garipleşir, ancak ekran alanına bir şeyler yerleştirmek daha mantıklıdır.

3) İsterseniz yapabilirsiniz, ancak ağrılı ve tıknaz olurdu. Sadece Z projelerine monitöre / monitörün dışına alışmanızı tavsiye ederim.


1

1) Evet gözlemleriniz doğru.

2) Standart küresel XYZ koordinat sistemi, bir birinci şahıs nişancı açısından düşündüğünüzde, sahnede boş bir (kimlik) dönüşüm matrisi ile bir karakterin gözlerine bakarken mantıklıdır. Bir kağıt üzerine bir koordinat sistemi çizdiğinizde olduğu gibi, X sağa ve Y yukarı gösterir. Sağ el kuralına göre (x-> başparmak, y-> işaret parmağı, z-> orta parmak), Z size doğru işaret eder.

3) Yanlış olmazdı, ama standartlardan sapma olurdu. Şu anda düşünebileceğim üç sorun var: (a) Bir gün standart koordinat çerçevesini kullanan bir fizik kütüphanesi kullanmak istediğinizi varsayalım. Standardı takip etmediyseniz, şimdi sizi dünyanızdan fizik dünyasına götüren dönüşümü düşünmelisiniz. Bir hatayı düzeltmek istediğinizde can sıkıcı olabilir. (b) Biriyle kod paylaşmak veya gelişime yardımcı olması için birini getirmek istediğinizde, sözleşmenize alışmaları gerekir. (c) Standart 3D modelleri kullanırken, yanlara bakmalarını önlemek için her zaman üstlerinde bir dönüşüm olması gerekir.

Şimdi soru 2'ye eklemek için, X, Y ve Z'yi sadece üç harf olarak değil, sağ, yukarı ve geri olarak düşünmek çok yararlıdır. Sahnedeki her karakterin kendilerine bağlı bir yerel koordinat sistemi vardır ve kendi yerel koordinat çerçevelerinde X her zaman haklıdır, Y yukarı ve Z geriye doğrudur. Bunu yaptıktan sonra, artık yazdırdığınız vektörleri anlayabilir veya algoritmalarınızı anlamlı bir şekilde yazabilirsiniz. Diyelim ki iki A ve B karakteriniz var ve bunlardan biri diğerine bakacaksa bir şeyler yapmak istiyorsunuz. B'nin konumunu A koordinat çerçevesinde (Ta ^ -1 * p_b) bulabilir, aldığınız vektöre bakabilir ve Z (geriye doğru) negatif ve X (sağ) ve Y (yukarı) küçük olup olmadığını görebilirsiniz. size, A'ya göre B doğru ve yukarı doğru ne kadar olduğunu söyler.

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.