Aracılığıyla paylaş


Yer Değiştirme Haritalaması (Direct3D 9)

Yer değiştirme haritaları, doku haritalarına benzer, ancak köşe motoru tarafından erişilir.

Blok Diyagramı

Aşağıdaki diyagramda gösterildiği gibi köşe kanalının erken kısmında ek bir örnekleyici aşaması bulunur. Bu aşama, köşe yer değiştirme verilerini sağlamak için yer değiştirme haritasını örnekleyebilir.

Tepe borusunda örnekleme aşamasının diyagramı

Yer değiştirme eşlemesi örnekleyici durumu, yeni aşama numarası olan 256 aşama numarası kullanılarak SetSamplerState ayarlanabilir. Yer değiştirme haritası dokusu, setTexturetarafından ayarlanır.

Harita önceden örneklenebilir veya olmayabilir; başka bir deyişle, yer değiştirme değerlerini filtreleme olmadan arama yapmayı sağlayan bir şekilde sıralanabilir.

  • Yer değiştirme haritaları, doku haritalarına benzer, ancak tepe noktası motoru tarafından erişilir.
  • Köşe borusunun erken kısmında, bir yer değiştirme haritasını örnekleyebilen ek bir örnekleyici aşaması bulunur. Bu aşamaya her zamanki SetSamplerState API'sine erişilir, ancak aşama numarası D3DDMAPSAMPLER = 256'dır.
  • Yer değiştirme haritası örnekleyici durumu, SetSamplerState(D3DDMAPSAMPLER, ...) API'si tarafından ayarlanabilir.
  • Yer değiştirme haritası dokusu SetTexture(D3DDMAPSAMPLER, doku) API'siyle ayarlanır.
  • Haritanın önceden örneklenmesi mümkün olabilir veya olmayabilir. Başka bir deyişle, filtreleme olmadan yer değiştirme değerlerinin aramasını sağlayan belirli bir şekilde sıralanabilir.
  • Bildirim yapısındaki değişiklikler, doku eşlemini aramak için kullanılan doku koordinatının belirtimini sağlar. Örneğin, Stream0, Offset, FLOAT2, LOOKUP, Displacement_value. Bu, tessellator'a, belirli bir uzaklıkta stream0'da yer alan 2B kayan nokta vektörünü doku koordinatı olarak kullanarak yer değiştirme haritasını aramasını ve buna Displacement_value kullanım semantiğini ilişkilendirmesini söyler. Köşe gölgelendiricisi bildirimi, doku0 semantiğinin v0 giriş yazmacı ile ilişkilendirileceğini belirten {dcl_texture0, v0} benzeri bir satır içerir. Aranan yer değiştirme değeri giriş yazmaç v0'a kopyalanır.
  • Doku haritası önceden örneklendiğinde, özel bir yer değiştirme eşleme türü vardır. Oluşturulan köşelerin sıralı dizini, doku eşleminin doku koordinatı olarak kullanılır. Örneğin, 0,0,(D3DDECLTYPE)0,D3DDECLMETHOD_LOOKUPPRESAMPLED, Kullanım, UsageIndex.
  • Aramanın çıktısı 4 kayan değerdir.
  • Yer değiştirme haritalama yalnızca N-patch'lerle desteklenir.
  • Sürücülerin yer değiştirme haritalarını işlemedikleri durumda SetTextureStageState içindeki D3DDMAPSAMPLER'ı yoksaymaları gerekir.
  • D3DTEXF_ANISOTROPIC filtre modu desteklenmez.
  • Yer değiştirme haritası örnekleyicisindeki D3DSAMP_MIPFILTER D3DTEXF_NONE olmadığında, detay seviyesi şu şekilde hesaplanır (D3DRS_ENABLEADAPTIVETESSELLATION FALSEolsa bile uyarlamalı mozaikleme durumunun kullanıldığını unutmayın): Tmax = kaplama durumu D3DRS_MAXTESSELLATIONLEVEL
  • Köşe Vi: (Xi, Yi, Zi) için örnekleme düzeyi Te’yi, "Uyarlanabilir örnekleme" bölümünde açıklandığı gibi hesapla. Ayrıntı düzeyi L = log2(Tmax) - log2 (Te).
  • Doku filtreleme ve örnekleme işlemleri, piksel işlem hattıyla aynı kurallara uyar (detay seviyesi (LOD) sapma uygulanır, vb.).
  • Tüm biçimler yer değiştirme eşlemeleri olarak kullanılamaz, yalnızca D3DUSAGE_DMAP destekleyenler kullanılabilir. Uygulama bunu CheckDeviceFormat CheckDeviceFormatile sorgulayabilir.
  • D3DUSAGE_DMAP, sürücüye bu dokunun yer değiştirme haritası olarak kullanılacağını bildirmek için CreateTexture fonksiyonunda belirtilmelidir.
  • D3DUSAGE_DMAP yalnızca dokularla kullanılabilir. Küp haritaları veya hacimlerle kullanılamaz.
  • D3DUSAGE_DMAP ile oluşturulan dokular ve işleme hedefleri normal örnekleyici aşamalarında ve işleme hedefleri olarak ayarlanabilir.
  • Doku koordinatları için sarma modunu ayarlamaya yönelik işleme durumları, yer değiştirme eşlemesinde yoksayılır. Genel olarak, tessellator motoru için sarma modları yoktur.
  • Yer değiştirme eşlemesi örnekleyicisi, piksel doku örnekleyicilerinin davranışıyla aynıdır. Dörtten az kanala (R32f gibi) sahip bir doku aranırsa, arama değerleri hedef yazmacın uygun kanallarına (_sample semantik ile etiketlenmiş köşe gölgelendiricisi giriş yazmacı) gider ve diğer kanallar varsayılan olarak (1, 1, 1) olur. D3DFMT_L8 arandığında R, G, B kanallarına yayınlanır ve A varsayılan olarak 1 olur. Başvuru rasterleştiricisi tam uygulama ayrıntılarına sahiptir.

Önceden Örneklenmiş Yer Değiştirme Eşlemesi

  • Yeni örnekleyici durumu kullanıma sunulmuştur: D3DSAMP_DMAPOFFSET (DWORD) - önceden örneklenmiş yer değiştirme haritasında ofset (köşe biriminde).
  • Yeni bildirim yöntemi kullanıma sunulmuştur: D3DDECLMETHOD_LOOKUPPRESAMPLED.
  • Adaptif tessellation kapalı olmalıdır.
  • Doku filtresi ayarları yoksayılır. Nokta örneklemesi yapılır. Mip doku filtresinin D3DTEXF_NONE olduğu varsayılır. Diğer tüm doku filtresi modlarının D3DTEXF_POINT olduğu varsayılır.
  • Doku koordinatları şöyle hesaplanır: U = (Index % TextureWidthInPixeles) / (float)(TextureWidthInPixeles) V = (Index / TextureWidthInPixeles) / (float)(TextureHeightInPixeles) burada Dizin, oluşturulan köşelerin sıralı dizinidir ve TSS[D3DSAMP_DMAPOFFSET]. Sıralı dizin, her ilkel öğe başlangıcında sıfır olarak ayarlanır ve köşe oluşturulduktan sonra artırılır.

Bunlar, yer değiştirme eşlemesini destekleyen API değişiklikleridir.

  • Tek bir kanal biçimi eklendi, D3DFMT_L16.
  • Yeni bir kullanım bayrağı: D3DUSAGE_DMAP.
  • D3DDMAPSAMPLER, yer değiştirme haritası dokusunu ayarlamak için kullanılan özel bir doku aşamasıdır.
  • Yeni donanım kapakları eklendi, D3DDEVCAPS2_DMAPNPATCH ve D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH. bkz. D3DDEVCAPS2.

Doru İşlem Hattı