3D Modellerin Koordinat Dönüşümü Hakkında
madde
Her şeyden önce
3B görüntüleri genellikle TV ekranlarında ve oyunlardaki ekranlarda görebilirsiniz, ancak ekranda hareket eden karakterler ve binalar gibi 3B uzayda var olan nesneleri 2B ekranda nasıl görüntülersiniz?
2D oyunlarda, koordinat değerleri olarak yalnızca "X ve Y" nin iki boyutlu öğeleri vardır ve ekran da 2D'dir, bu nedenle X ve Y'nin koordinat konumunu belirterek bir nesne çizerseniz, hangi konumda nasıl çizileceğini sezgisel olarak anlayacaksınız.
Ancak, 3D'de bu o kadar kolay değil. Adından da anlaşılacağı gibi, 3D "3 boyutludur" ve üç koordinat bilgisine sahiptir: "X, Y ve Z". Koordinatlar 2D olan ekrandan farklı olduğu için cismi olduğu gibi çizmek mümkün değildir.
O zaman yapılması gereken, "üç boyutlu bilgiyi iki boyutlu bilgiye dönüştürmek"tir. Bu genellikle "koordinat dönüşümü" olarak adlandırılır. Bu koordinat dönüşümünün 3D programlama için gerekli olduğunu unutmayın.
3B'yi 2B'ye dönüştürmek için çeşitli koordinat dönüşümü türleri vardır, ancak programcıların ele aldığı üç ana koordinat dönüşümü türü vardır: "dünya dönüşümü", "görünüm dönüşümü" ve "projeksiyon dönüşümü". Burada koordinat dönüşümü ile ilgili her şeyi açıklayacağız.
Solak ve sağ elini kullanan koordinat sistemleri
3B'de, aşağıdaki şekilde gösterildiği gibi her koordinat için farklı yönelimlere sahip "solak koordinat sistemi" ve "sağ koordinat sistemi" olmak üzere iki koordinat sistemi vardır.
Direct3D öncelikle solak koordinat sistemi kullandı, ancak sağ elini kullanan koordinat sistemlerini hesaplamak için de işlevler var. Ancak, XNA yalnızca sağ elini kullanan koordinat sistemleri için hesaplama yöntemleri sağlar. Bu, diğer uygulamaların genellikle sağ elini kullanan koordinat sistemlerini kullanması gerçeğiyle uyumlu görünmektedir.
Bu sitedeki tüm XNA ipuçları sağ elini kullanan koordinat sistemini kullanır.
Yerel Koordinat Sistemi (Model Koordinat Sistemi)
Her model, orijin merkezli bir koordinat sistemine sahiptir. Modelleme yazılımı ile bir model oluştururken, onu orijin merkez olarak oluşturmayı hayal ederseniz anlamanın daha kolay olduğunu düşünüyorum.
Dünya Koordinat Sistemi
Dünya koordinat sistemi, modeli herhangi bir yere yerleştirmenize olanak tanır. Bu dünya dönüşümünde hiçbir şey yapmazsanız, model yerel koordinatlarla aynı şekilde orijine yerleştirilecektir. Yerleştirme sadece orijinden hareket etmek değil, aynı zamanda döndürmek ve ölçeklendirmektir.
Koordinat Sistemini Görüntüle
Modeli dünya koordinatlarına yerleştirdikten sonra, nereye baktığınız ve 3B uzayda nereye baktığınız hakkında bilgiye ihtiyacınız vardır. Buna "görünüm dönüşümleri" diyoruz. Görünüm dönüşümleri genellikle kameralar olarak temsil edilir.
Bu dönüşüm için gereken parametreler "kamera konumu", "kamera ilgi noktası" ve "kamera yukarı yönü"dür. Kameranın yönü bu üç parametre tarafından belirlenir. Aşağıdaki şekil, kamerayı üçüncü taraf bir bakış açısıyla göstermektedir.
Aşağıdaki figür aslında yukarıdaki şekilde gösterilen düzenleme ile kameranın bakış açısından görülüyor (bu noktada koordinatları henüz ekrana dönüştürmedik, bu yüzden sadece bir görüntü).
Bir önceki açıklamada, kameranın konumlandırıldığı ve koordinatların dönüştürüldüğü görülüyor, ancak gerçek hesaplamada, dünya koordinatları kameranın konumuna ve yönüne göre dönüştürülüyor. Bu nedenle, başlangıç noktası, aşağıdaki şekilde gösterildiği gibi kameranın konumudur.
Projektif koordinat sistemi
3B alanı hangi konumdan görüntüleyeceğinize karar verdikten sonra, bir sonraki adım "uzaktaki küçük nesnelerin" ve "yakındaki büyük nesnelerin" görüntülenmesini işlemektir. Buna projektif dönüşüm denir. Projeksiyon dönüşümünün "perspektif projeksiyonu" ve "ortografik projeksiyon" olmak üzere iki yöntemi vardır, ancak yaygın olarak kullanılan "perspektif projeksiyonu" görüntüsü aşağıdaki gibidir.
Perspektif projeksiyonu şu parametreleri kullanır: Görüntüleme Açısı, En Boy Oranı, İleri Klip Konumu ve Arka Klip Konumu. Yukarıdaki şekilde "frustum" olarak etiketlenen alan nihayet ekranda görünecektir.
"Görüş Açısı", kameradan görülebilen görüş aralığını belirtir. Açı azaltıldığında yakınlaştırılır, artırıldığında uzaklaştırılır. Görüş açısı, frustumun dikey değeri olacaktır.
En Boy Oranı, yatay görüş açısını belirlemek için kullanılırken, görüş açısı dikey bir açıdır. Yatay açı genellikle "görüş açısı × en boy oranı" ile belirlenir ve en boy oranı temel olarak görüntülemeye çalıştığınız ekranın "genişlik ÷ yüksekliğinin" değeridir. Bu değeri değiştirirseniz, görüntülenen 3D nesne yatay veya dikey olarak uzayıyor gibi görünür.
İleri Klip Konumu ve Arka Klip Konumu, nesnenin ön veya arka aralıkta görüntülenip görüntülenmediğini belirlemek için belirtilir. Bilgisayarın doğası gereği sonsuza kadar görüntüleme yapmak mümkün olmadığı için bir sınır belirleyeceğiz. Bu değer aynı zamanda Z tamponunun doğruluğunu da etkiler, bu nedenle görüntülenmesi gerekmeyen aralığın ötesindeki çizim alanına dahil edilmesi önerilmez.
Perspektif dönüştürülen nesne, aşağıdaki gibi bir boşluğa dönüştürülür. Kameraya yakın olan nesneler yakınlaştırılır ve uzakta olan nesneler küçültülür.
Bu, aşağıda anlaşılması kolay bir şemada gösterilmiştir.
Aslında kameranın bakış açısından bakarsanız, aşağıdaki gibi görünüyor.
Projektif dönüşümün başka bir yöntemi, aşağıdaki gibi görünür bir alanı yansıtan ortografik projeksiyondur. Genişlik ve yükseklik derinlikten bağımsız olarak sabit olduğundan, nesnenin boyutu derinlikle birlikte değişmez.
Ekran Koordinat Sistemi
Projeksiyon dönüşümünden sonra, gerçek ekranın koordinatlarına dönüştürülür. Bir ekran olmasına rağmen, ekranın konumu ve aralığı, cihazda ayarlanan görüntü alanı ayarlarına bağlı olarak değişir. Bununla birlikte, oyunlar söz konusu olduğunda, pencerenin istemci koordinatları genellikle olduğu gibi görüntü alanıdır, bu yüzden çok fazla endişelenmenize gerek olduğunu düşünmüyorum.
Ekranın koordinatları (0, 0) projeksiyon koordinatlarından (-1, 1, z) dönüştürülür. Benzer şekilde, ekran koordinatları (genişlik, yükseklik) projeksiyon koordinatlarından (1, -1 ,z) dönüştürülür.