Kübik Ortam Eşlemesi (Direct3D 9)
Küp eşlemeleri olarak da adlandırılan kübik ortam haritaları, nesnenin çevresindeki sahneyi temsil eden görüntü verilerini içeren dokulardır, sanki nesne küp ortasındaymış gibi. Kübik ortam haritasının her yüzü yatay ve dikey olarak 90 derecelik bir görünüm alanını kapsar ve küp haritası başına altı yüz vardır. Yüzlerin yönü aşağıdaki çizimde gösterilmiştir.
Küpün her yüzü, dünya uzayında x/y, y/z veya x/z düzlemine dik olarak yönlendirilir. Aşağıdaki çizimde her düzlemin bir yüze nasıl karşılık olduğu gösterilmektedir.
çizimi
Kübik ortam haritaları bir dizi doku nesnesi olarak uygulanır. Uygulamalar, çevresel küre eşlemesi için statik görüntüler kullanabilir veya dinamik çevresel eşleme yapmak için küp haritasının yüzeylerine işleyebilir. Bu teknik, küp eşleme yüzeylerinin D3DUSAGE_RENDERTARGET bayrak kümesiyle oluşturulmuş geçerli işleme hedefi yüzeyleri olmasını gerektirir.
Küp haritasının yüzlerinin çevresindeki sahnenin son derece ayrıntılı görüntülemelerini içermesi gerekmez. Çoğu durumda, ortam haritaları eğri yüzeylere uygulanır. Çoğu uygulama tarafından kullanılan eğrilik miktarı göz önüne alındığında, oluşan yansıtıcı bozulma, bellek ve işleme yükü açısından çevre haritasındaki aşırı ayrıntıları israf haline getirir.
Mipmapped Kübik Çevre Haritaları
Küp haritalarına mipmap yapılabilir. Mip haritalı bir küp haritası oluşturmak için, CreateCubeTextureyöntemininLevels parametresini istediğiniz seviye sayısına ayarlayın. Aşağıdaki diyagramda gösterildiği gibi bu yüzeylerin topografisini hayal edebilirsiniz.
Mip haritalı kübik ortam haritaları oluşturan uygulamalar, "GetCubeMapSurface" yöntemini çağırarak her yüze erişebilir. Ortam Haritası Yüzeylerini Oluşturma (Direct3D 9)konusunda açıklandığı gibi, D3DCUBEMAP_FACES numaralandırılmış türünden uygun değeri ayarlayarak başlayın. Ardından, alınacak düzeyi seçmek için GetCubeMapSurface parametresini istediğiniz mipmap düzeyine ayarlayın. 0'ın üst düzey görüntüye karşılık geldiğini unutmayın.
Kübik Ortam Haritaları için Doku Koordinatları
Kübik ortam haritasının dizinini oluşturan doku koordinatları, standart dokular uygulandığında kullanılan basit u, v stili koordinatları değildir. Aslında, kübik ortam haritaları doku koordinatlarını hiç kullanmaz. Doku koordinatları kümesi yerine, kübik ortam haritaları bir 3B vektör gerektirir. Uygun bir köşe biçimini belirtirken dikkatli olmalısınız. Sisteme uygulamanızın kaç doku koordinatı kümesi kullandığını söylemenin yanı sıra, her kümede kaç öğe olduğu hakkında bilgi sağlamanız gerekir. Direct3D, bu amaçla D3DFVF_TEXCOORDSIZEN makro kümesini sunar. Bu makrolar, boyutun açıklandığı doku koordinat kümesinin dizinini tanımlayan tek bir parametreyi kabul eder. 3B vektör söz konusu olduğunda, D3DFVF_TEXCOORDSIZE3 makro tarafından oluşturulan bit desenini eklersiniz. Aşağıdaki kod örneğinde bu makronun nasıl kullanıldığı gösterilmektedir.
// Create a flexible vertex format descriptor for a vertex that contains
// a position, normal, and one set of 3D texture coordinates.
DWORD dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0);
Yayma ışık eşlemesi gibi bazı durumlarda, vektör için normal kamera alanı köşesini kullanırsınız. Belirli ortam eşlemesi gibi diğer durumlarda yansıma vektörü kullanırsınız. Dönüştürülmüş köşe normalleri yaygın olarak anlaşıldığı için buradaki bilgiler bir yansıma vektörünü hesaplamaya odaklanır.
Bir yansıma vektörünün kendi kendinize hesaplandırılması için her köşenin konumunun ve bakış açısından bu köşeye kadar olan vektörlerin anlaşılması gerekir. Direct3D, geometrinizin yansıma vektörlerini otomatik olarak hesaplayabilir. Ortam haritası için doku koordinatları eklemeniz gerekmeyen bu özelliğin kullanılması bellekten tasarruf sağlar. Ayrıca bant genişliğini azaltır ve T&L HAL Cihazı söz konusu olduğunda, uygulamanızın kendi başına gerçekleştirebileceği hesaplamalardan önemli ölçüde daha hızlı olabilir. Bu özelliği kullanmak için, kübik ortam haritasını içeren doku aşamasında, D3DTSS_TEXCOORDINDEX doku aşama durumunu D3DTEXTURESTAGESTATETYPE D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR üyesinin ve doku koordinat kümesinin dizininin bir bileşimine ayarlayın. Dağıtık ışık eşlemesi gibi bazı senaryolarda, D3DTEXTURESTAGESTATETYPEüyesi D3DTSS_TCI_CAMERASPACENORMAL'ı kullanabilirsiniz. Bu, sistemin doku için adresleme vektörü olarak dönüştürülmüş, kamera-uzayı tepe noktası normali kullanmasına neden olur. Dizin yalnızca doku için sarmalama modunu belirlemek için sistem tarafından kullanılır.
Aşağıdaki kod örneğinde bu değerin nasıl kullanıldığı gösterilmektedir.
// The m_d3dDevice variable is a valid pointer
// to an IDirect3DDevice9 interface.
// Automatically generate texture coordinates for stage 2.
// This assumes that stage 2 is assigned a cube map.
// Use the wrap mode from the texture coordinate set at index 1.
m_d3dDevice->SetTextureStageState( 2, D3DTSS_TEXCOORDINDEX,
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR | 1);
Otomatik doku koordinatı oluşturmayı etkinleştirdiğinizde, sistem her köşe için yansıma vektörünü hesaplamak için iki formülden birini kullanır. D3DRS_LOCALVIEWER işleme durumu TRUE olarak ayarlandığında, aşağıdaki formül kullanılır.
Yansıma vektörünün
Yukarıdaki formülde R, hesaplanan yansıma vektörüdür, E normalleştirilmiş konum-göz vektörüdür ve N kamera uzayı köşesi normaldir.
D3DRS_LOCALVIEWER işleme durumu YANLIŞ olarak ayarlandığında sistem aşağıdaki formülü kullanır.
Yansıma vektörünün
Bu formüldeki R ve N öğeleri önceki formülle aynıdır. NZ öğesi, köşe normalinin dünya-uzayı z'sidir ve I, sonsuz uzaklıkta bir bakış açısının (0,0,1) vektörüdür. Sistem, küp haritasının uygun yüzünü seçmek ve çözümlemek için her iki formülden birinin yansıma vektörünü kullanır.
Not
Çoğu durumda, uygulamalar köşe normallerinin otomatik normalleştirilmesini etkinleştirmelidir. Bunu yapmak için D3DRS_NORMALIZENORMALS TRUEolarak ayarlayın. Bu işleme durumunu etkinleştirmezseniz, ortam eşlemesinin görünümü beklediğinizden büyük ölçüde farklı olacaktır.
Aşağıdaki konu başlığında ek bilgiler yer alır.
İlgili konular