Aracılığıyla paylaş


Gama Denetimleri (Direct3D 9)

Gama denetimleri, sistemin yüzeyin içeriğini, yüzeyin içeriğini etkilemeden nasıl görüntüleyeceğini değiştirmenize olanak sağlar. Bu denetimleri, Direct3D'nin bir yüzeyden ayrılırken ve ekranda işlenmeden önce verilere uyguladığı çok basit filtreler olarak düşünün.

Gama denetimleri, bir takas zincirinin özelliğidir. Gama denetimleri, bir yüzeyin kırmızı, yeşil ve mavi düzeylerinin sistemin görüntülediği gerçek düzeylere nasıl eşlendiğini dinamik olarak değiştirmeyi mümkün hale getirir. Gama düzeylerini ayarlayarak, etkiyi elde etmek için yeni görüntüleri çerçeve arabelleğine kopyalamadan kullanıcının ekranının renkleri yanıp sönmesi (kullanıcının karakteri çekildiğinde kırmızı, karakter yeni bir öğe aldığında yeşil vb.) neden olabilirsiniz. Alternatif olarak, arka arabellekteki görüntülere renk sapmaları uygulamak için renk düzeylerini ayarlayabilirsiniz.

Direct3D 9, cihazın özelliği olarak bir takas zincirine sahip olduğundan her cihaz için her zaman en az bir takas zinciri (örtük takas zinciri) vardır. Gama rampası takas zincirinin bir özelliği olduğundan, gama rampası takas zinciri pencerelendiğinde uygulanabilir. Gama rampası hemen devreye girer. Dikey eşitleme işlemi beklenmeyiz.

SetGammaRamp ve GetGammaRamp yöntemleri, piksellerin kırmızı, yeşil ve mavi renk bileşenlerini ekran için dijitalden analog dönüştürücüye (DAC) gönderilmeden önce yüzeyden etkileyen rampa düzeylerini işlemenize olanak sağlar.

Gama Rampası Düzeyleri

Direct3D'de gama rampası terimi, çerçeve arabelleğindeki tüm pikseller için belirli bir renk bileşeninin düzeyini (kırmızı, yeşil, mavi) görüntü için DAC tarafından alınan yeni düzeylerle eşleyen bir değer kümesini açıklar. Yeniden eşleme, her renk bileşeni için bir tane olan üç arama tablosuyla gerçekleştirilir.

Şöyle çalışır: Direct3D, çerçeve arabelleğinden bir piksel alır ve tek tek kırmızı, yeşil ve mavi renk bileşenlerini değerlendirir. Her bileşen 0 ile 65535 arasındaki bir değerle temsil edilir. Direct3D özgün değeri alır ve her öğenin özgün dizinin yerini alan bir değer içerdiği 256 öğeli bir diziyi (rampa) dizine almak için kullanır. Direct3D, çerçeve arabelleğindeki her pikselin her renk bileşeni için bu arama ve değiştirme işlemini gerçekleştirerek tüm ekran piksellerinin son renklerini değiştirir.

Aşağıdaki iki grafikte gösterildiği gibi rampa değerlerini grafik haline getirerek görselleştirmek kullanışlıdır. Sol grafikte renkleri hiç değiştirmeyen bir rampa gösterilir. Doğru grafik, uygulandığı renk bileşenine negatif sapma uygulayan bir rampa gösterir.

Gama rampası değerlerinin graflarını

Soldaki grafiğin dizi öğeleri, dizin 0 öğesinde 0 ve dizin 255'te 65535 ile aynı değerleri içerir. Bu tür rampalar, görüntülenmeden önce giriş değerlerini değiştirmediğinden varsayılan değerdir. Doğru grafik daha fazla varyasyon sağlar; rampası, ilk öğede 0 ile son öğede 32768 arasında değişen değerler içerir ve değerler arasında tekdüzen olarak değişir. Bunun etkisi, bu rampayı kullanan renk bileşeninin ekranda kapalı görünmesidir. Doğrusal grafikleri kullanmakla sınırlı değildir; gerekirse uygulamanız rastgele eşleme atayabilir. Hatta bir renk bileşenini ekrandan tamamen kaldırmak için girişleri tüm sıfırlara ayarlayabilirsiniz.

Gama Rampası Düzeylerini Ayarlama ve Alma

Gama rampası düzeyleri, Direct3D'nin çerçeve arabelleği renk bileşenlerini görüntülenecek yeni düzeylerle eşlemek için etkili bir şekilde kullandığı arama tablolarıdır. SetGammaRamp çağırarak ve GetGammaRampyöntemlerinibirincil yüzey için rampa düzeylerini ayarlayabilir ve alabilirsiniz. SetGammaRamp iki parametre kabul eder ve GetGammaRamp bir parametre kabul eder. SetGammaRampiçin ilk parametre D3DSGR_CALIBRATE veya D3DSGR_NO_CALIBRATION. İkinci parametre olan pRamp, D3DGAMMARAMP yapısının işaretçisidir. D3DGAMMARAMP yapısı, her biri kırmızı, yeşil ve mavi gama rampalarını içeren bir dizi olmak üzere üç adet 256 öğeli WORD dizisini içerir. GetGammaRamp, geçerli gama rampası ile doldurulacak bir D3DGAMMARAMP türüne işaretçi alan bir parametreye sahiptir.

Yeni gama düzeylerini ayarlarken calibrator'ı çağırmak için setGammaRampilk parametresi için D3DSGR_CALIBRATE değerini ekleyebilirsiniz. Gama rampalarının ayarlanması bazı işlem yüklerine neden olur ve sık kullanılmamalıdır. Kalibre edilmiş gama rampası ayarlamak, görüntü bağdaştırıcısından ve monitörden bağımsız olarak kullanıcı için tutarlı ve mutlak bir gama değeri sağlar.

Tüm sistemler gama kalibrasyonu desteklemez. Gama kalibrasyonunun desteklenip desteklenmediğini belirlemek için getdeviceCapsçağırın ve yöntem döndükten sonra ilişkili D3DCAPS9 yapısının Caps2 üyesini inceleyin. D3DCAPS2_CANCALIBRATEGAMMA yetenek bayrağı varsa gama kalibrasyonu desteklenir.

Yeni rampa düzeyleri ayarlarken, dizilerde ayarladığınız düzeylerin yalnızca uygulamanız tam ekran, özel kullanım modundayken kullanıldığını unutmayın. Uygulamanız normal moda geçtiğinde rampa düzeyleri ayrılır ve uygulama tam ekran modunu yeniden devreye alır.

Cihaz değiştirme zincirinin geçerli sunu modundaki gama rampalarını desteklemiyorsa (tam ekran veya pencereli), hata değeri döndürülmüyor. Uygulamalar D3DCAPS9 türünün Caps2 üyesindeki D3DCAPS2_FULLSCREENGAMMA ve D3DCAPS2_CANCALIBRATEGAMMA özellik bitlerini denetleyerek cihazın özelliklerini ve bir calibrator'ın yüklü olup olmadığını belirleyebilir.

Direct3D Surfaces