Direct3D 9'da Higher-Order Temel Öğelerini Kullanma

Bu bölümde, uygulamanızda daha yüksek sıralı temel değerlerin nasıl kullanılacağı gösterilmektedir.

Higher-Order Temel Desteği Belirleme

D3DCAPS9 yapısının DevCaps üyesi, daha yüksek sıralı temel öğeler içeren işlemler için destek düzeyini belirlemek üzere sorgulanabilir. Aşağıdaki tabloda, Direct3D 9'daki yüksek sıralı temel öğelerle ilgili cihaz özellikleri listelenir.

Cihaz özelliği Açıklama
D3DDEVCAPS_NPATCHES Cihaz N yamalarını destekler ve Eğri PN Üçgenleri (özel bir kübik Bézier üçgeni türü) temel alır.
D3DDEVCAPS_QUINTICRTPATCHES Cihaz, beşinci dereceden Bezier eğrilerini ve B-splinelerini destekler.
D3DDEVCAPS_RTPATCHES Cihaz dikdörtgen ve üçgen yamaları (RT yamaları) destekler.
D3DDEVCAPS_RTPATCHHANDLEZERO RT düzeltme ekleri, işaretçi sıfır kullanılarak verimli bir şekilde çizilebilir.

 

Tutamacı sıfır olan bir yamanın çizilebileceği anlamına gelmediğini D3DDEVCAPS_RTPATCHHANDLEZERO'nin belirtmediğini unutmayın. Bu cihaz özelliği ayarlanmış olsun veya olmasın, bir "handle zero patch" her zaman çizilebilir. Bu özellik ayarlandığında, donanım mimarisi herhangi bir bilginin önbelleğe alınmasını gerektirmez ve önbelleğe alınmamış yamaların (sıfır tutamak) önbelleğe alınmış olanlar kadar verimli bir şekilde çizilmesi gerekir.

Yama Düzeltmeleri

Direct3D 9, iki tür yüksek sıralı temel öğeyi veya düzeltme ekini destekler. Bunlar N-Patches ve Rect/Tri yamaları olarak adlandırılır. N-patches, nSegments değeri 1,0'dan büyük olan IDirect3DDevice9::SetNPatchMode( nSegments ) çağrısı aracılığıyla etkinleştirilerek herhangi bir üçgen işleme çağrısı kullanılarak işlenebilir. Rect/Tri yamaları aşağıdaki açık giriş noktaları kullanılarak çizilmelidir.

Yamalar çizmek için aşağıdaki yöntemleri kullanabilirsiniz.

IDirect3DDevice9::DrawRectPatch, pRectPatchInfo parametresi tarafından belirtilen dikdörtgen bir yüksek dereceli yama çizer, şu anda ayarlanmış olan akışları kullanarak. Handle parametresi, yamayı bir tanıtıcıyla ilişkilendirmek için kullanılır, böylece yama bir sonraki çizildiğinde pRectPatchInfo'yu yeniden belirtmeye gerek kalmaz. Bu, ileri fark katsayılarını veya diğer bilgileri önceden hesaplayıp önbelleğe almanızı sağlar; bu da, aynı tanıtıcıyı kullanarak yapılan IDirect3DDevice9::DrawRectPatch sonraki çağrıların verimli bir şekilde çalışmasını sağlar.

Statik düzeltme ekleri için bir uygulamanın köşe gölgelendiricisini ve uygun akışları ayarlaması, pRectPatchInfo parametresinde düzeltme eki bilgileri sağlaması ve Direct3D'nin bilgileri yakalayıp önbelleğe alabilmesi için bir tanıtıcı belirtmesi amaçlanmıştır. Uygulama daha sonra IDirect3DDevice9::D rawRectPatch daha sonra, düzeltme ekini verimli bir şekilde çizmek için null olarak ayarlanmış pRectPatchInfo ile çağırabilir. Önbelleğe alınmış bir yama çizilirken, mevcut ayarlanmış akışlar yoksayılır. Ancak, pNumSegs için yeni değerler belirterek önbelleğe alınmış pNumSegs'i geçersiz kılmak mümkündür. Ayrıca, önbelleğe alınmış bir yama işlenirken, yakalandığı sırada ayarlanan köşe gölgelendiricisinin aynısının ayarlanması gerekir.

Dinamik düzeltme ekleri için düzeltme eki verileri düzeltme ekinin her işlemesi için değişir, bu nedenle bilgileri önbelleğe almak verimli değildir. Uygulama, Tanıtıcı ayarını 0 olarak ayarlayarak bunu Direct3D'ye iletebilir. Bu durumda, Direct3D şu anda ayarlanmış akışları ve pNumSegs değerlerini kullanarak düzeltme ekini çizer ve hiçbir bilgiyi önbelleğe almaz. Aynı anda Tanıtıcı'yı 0 ve pPatch'i NULLolarak ayarlamak geçerli değildir.

Aynı tanıtıcı için pRectPatchInfo'yu yeniden belirterek, uygulama daha önce önbelleğe alınmış bilgilerin üzerine yazılabilir.

IDirect3DDevice9::DrawTriPatch, IDirect3DDevice9::DrawRectPatch benzerdir, ancak üçgen biçimli bir yüksek mertebe yaması çizer.

Normaller ve Doku Koordinatları Oluşturma

Esnek köşe biçimi (FVF) gölgelendiricisi kullanıyorsanız, normallerin ve doku koordinatlarının otomatik olarak oluşturulması mümkün değildir.

Normaller için bunları doğrudan sağlayabilir veya Direct3D'nin sizin için hesaplamasını sağlayabilirsiniz.

Dikdörtgen yamalar için oluşturulan koordinatlar, aşağıdaki çizimlerde gösterildiği gibi eğri tabanlı koordinatlardır.

orijinal doku ve spline tabanlı koordinatlarla dokunun illustrasyonu

Üçgen yamalar için oluşturulan koordinatlar, aşağıdaki çizimlerde gösterildiği gibi, barycentric spline tabanlı koordinatlardır.

özgün dokunun ve barycentrik spline tabanlı koordinatlara sahip dokunun illustrasyonu

Bir uygulamanın oluşturulan doku koordinatlarının aralığını değiştirmesi gerekiyorsa, bu işlem doku dönüşümleri kullanılarak yapılabilir.

Higher-Order Temel Öğeler