2D sprite oyunları için spriteların X ve Y ekseninde hareket ettiğini anlayabilirim. Ancak, 3D oyunlar için, oyun motorları 3B ortamın düz 2B bilgisayar monitörüne nasıl dönüştürüleceğini nasıl hesaplar?
Math.PI
, çoğusu.
2D sprite oyunları için spriteların X ve Y ekseninde hareket ettiğini anlayabilirim. Ancak, 3D oyunlar için, oyun motorları 3B ortamın düz 2B bilgisayar monitörüne nasıl dönüştürüleceğini nasıl hesaplar?
Math.PI
, çoğusu.
Yanıtlar:
3D sprite, X / Y düzleminde derinlik, ölçeklendirme boyutu ve hareketleri depolayan yeni bir Z ekseni alır. Daha uzaktaki bir hareketli grafiğin Z değeri daha büyüktür. Şimdi hareketli grafiğin boyutunu ve X / Y ekseni hareketlerini Z eksenine bölün. Diğerlerinin de belirttiği gibi, bu bir 3D perspektif projeksiyonudur . İşte bulabildiğim en iyi örnek:
Bu kavramsal olarak mantıklıdır çünkü daha uzaktaki şeyler daha küçük görünür. Görünen hareketleri de daha küçük görünüyor.
Ek olarak, uzak nesnelerin üzerine yakın nesnelerin çizilmesi gerekir. Yine, bu kavramsal olarak mantıklıdır çünkü yakın nesneler arkalarındaki nesnelerin görüşünü kapatır.
Bu teknikler hareketli grafik düzeyinde uygulanabilir. Bununla birlikte, en gerçekçi projeksiyon için her hareketli grafiğin bir 3D modeli vardır ve piksel düzeyinde oluşturulur.
Dünyamızın 2D resimlerini kamerada nasıl yakalayabileceğinize benzer. 3D ortamı X, Y ve Z koordinatları olarak tanımlanır, ancak sonuçta bunu yalnızca X ve Y eksenli bir 2D ekrana eşlemeniz gerekir. Bu, her 3B noktanın bir 2B görünüm düzlemine yansıtıldığı projeksiyon ile yapılır .
Basitçe söylemek gerekirse, görüntü düzleminden geçerek 3B alanda sanal kameradan her 3B noktasına giden projeksiyon çizgilerini hayal edebilirsiniz. Bir izdüşüm çizgisinin 2B düzlemle kesiştiği nokta 3B noktanın izdüşümüdür. Ortografik projeksiyonda bu projeksiyon çizgilerinin hepsi paraleldir; nesne ve kamera arasındaki mesafe yansıtılan şekil için herhangi bir fark yaratmaz. Bu tür projeksiyon gerçekçi değildir, ancak 3D motor kullanarak 2D grafikler çizmek gibi belirli durumlarda yararlıdır (örneğin, HUD). Diğer projeksiyon türü ise, bu çizgilerin daha uzaktaki nesnelerin daha küçük görünmesini ve daha gerçekçi sonuçlar vermesini sağlayan birleşik projeksiyondur. Bu sayfada, süreci görselleştirmenize yardımcı olabilecek bazı şekiller vardır.
Yansıtma, grafik ardışık düzenine giren birkaç dönüştürme nesnesinden biridir ve genellikle bir yansıtma matrisi kullanılarak yapılır . Yansıtma Z koordinatının atılmasını gerektirse de, gerçekte dönüştürülmüş bir Z değerinin hala ekran derinliğinin bir ölçüsü kullanıldığını, böylece hangi nesnelerin görünür olduğunu ve hangilerinin diğer nesneler tarafından tıkandığını söyleyebileceğimizi unutmayın. Bu z-tamponlama olarak bilinir .
Her şey projeksiyonla , üstün boyuttaki başka bir alandan bir boşluk tanımlamanızı sağlayan geometrik bir işlemdir (temel olarak, sizin durumunuzda, bir 3D ortamından bir 2D görüntü tanımlıyorsunuz).
Basitçe söylemek gerekirse, 3D render motorları bir görüntü üretir (3D sahne ve projeksiyon verilir):
Ortaya çıkan görüntünün her pikseli için
Tabii ki bu basit bir model, duman gibi özel efektlerin yansıtıcı / kırıcı / yarı saydam nesnelerinden bahsetmiyorum ...
Matris . Ya da daha çok matris matematiği.
Yeni başlayanlar için korkutucu şeyler. Uzayda bir grup 3D koordinatın ekrandaki 2D koordinatlara dönüştürülmesiyle ilgili üç adet 4x4 matris vardır (ekrana derinlik Z olarak dahil).
3D matrisler, 4x4 ızgarada düzenlenmiş 16 kayan nokta değeri kümesidir. Algoritmalar, gerekli değerleri oluşturmak için kullanılır ve daha sonra matris-vektör çarpımı kullanılarak, bu sayılar 3 boyutlu bir vektörü (X, Y, Z) dönüştürür.
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
Bu kimlik matrisidir. Aslında bir vektörün koordinatlarına hiçbir şey yapmaz .
Birincisi dünya veya model matrisi. Bu matris, köken (0, 0, 0) etrafında modellenen bireysel bir modeldeki (bir sandık gibi) köşeleri alır ve bunları dünya tepe koordinatlarına dönüştürür. Bu, nesnenin ölçeklendirilmesini, kaynağının etrafında döndürülmesini ve son olarak sahnede bulunduğu yere çevrilmesini içerebilir.
İkinci matris görünüm matrisidir. Bu, dünya koordinatlarını alır ve onları görüş bağlamında olacak şekilde dönüştürür. Bir kamera konsepti tipik olarak bu matrisi üretmek için kullanılır.
Kamera genellikle bir konum vektörü, bir yön veya hedef vektör ve bir yukarı vektör içerir. Bu yukarı vektör, kameranın 'döndürmesini' açıklar.
Bu vektörler , matrise bakış denilen şeyi üretmek için kullanılır .
Bunun etkisi dünya matrisine benzerdir , çünkü aslında dünyayı kameranın etrafına çevirir ve kamerayı "konumlandırmak" için çevirir .
X ekseni boyunca 10 birim olan bir kamera, dünya koordinatlarını diğer yönde çevirir.
Bulmacanın son parçası projeksiyon matrisidir. Kamera benzeri bir perspektif projeksiyonunda, matris neredeyse ekran koordinatlarını dönüştürerek x derecelik bir görüş alanına sahip bir perspektif yanılsaması verir.
Ekranın köşeleri açısından (640x480 oyun için) düşünüyorsanız, projeksiyon ekranın 2B koordinatları içinde Z ekseni boyunca koordinatları bu şekilde "hizalar". Ortografik projeksiyon için, Z ekseni boyunca ekrana ölçeklendirme yapılmaz. Perspektif için, nesne ne kadar uzaklaşırsa, ekranın boyutlarına göre o kadar küçülür.