Aracılığıyla paylaş


Opak ve 1 Bit Alfa Dokuları (Direct3D 9)

Doku biçimi DXT1, opak veya tek bir saydam renge sahip dokular içindir.

Her opak veya 1 bit alfa bloğu için iki 16 bit değer (RGB 5:6:5 biçimi) ve piksel başına 2 bit içeren 4x4 bit eşlem depolanır. Bu, 16 ifade için toplam 64 bit veya ifade başına dört bittir. Blok bit eşleminde, ikisi kodlanmış verilerde depolanan dört renk arasında seçim yapmak için ifade başına 2 bit vardır. Diğer iki renk, bu depolanan renklerden doğrusal ilişkilendirme ile türetilir. Bu düzen aşağıdaki diyagramda gösterilmiştir.

Bit eşlem düzenidiyagramı

1 bit alfa biçimi, blokta depolanan iki 16 bit renk değeri karşılaştırılarak opak biçimden ayırt edilir. bunlar işaretsiz tamsayılar olarak kabul edilir. İlk renk ikinciden büyükse, yalnızca opak ifadelerin tanımlandığı anlamına gelir. Bu, ifadeleri temsil etmek için dört renk kullanıldığı anlamına gelir. Dört renkli kodlamada iki türetilmiş renk vardır ve dört renk de RGB renk alanında eşit şekilde dağıtılır. Bu biçim RGB 5:6:5 biçimine benzer. Aksi takdirde, 1 bit alfa saydamlığı için üç renk kullanılır ve dördüncüsü saydam ifadeleri temsil etmek için ayrılır.

Üç renkli kodlamada, türetilmiş bir renk vardır ve dördüncü 2 bit kod saydam bir ifadeyi (alfa bilgileri) belirtmek için ayrılmıştır. Bu biçim RGBA 5:5:5:1 ile benzerdir ve alfa maskesini kodlamak için son bit kullanılır.

Aşağıdaki kod örneği, üç veya dört renkli kodlamanın seçili olup olmadığına karar verme algoritmasını gösterir:

if (color_0 > color_1) 
{
    // Four-color block: derive the other two colors.    
    // 00 = color_0, 01 = color_1, 10 = color_2, 11 = color_3
    // These 2-bit codes correspond to the 2-bit fields 
    // stored in the 64-bit block.
    color_2 = (2 * color_0 + color_1 + 1) / 3;
    color_3 = (color_0 + 2 * color_1 + 1) / 3;
}    
else
{ 
    // Three-color block: derive the other color.
    // 00 = color_0,  01 = color_1,  10 = color_2,  
    // 11 = transparent.
    // These 2-bit codes correspond to the 2-bit fields 
    // stored in the 64-bit block. 
    color_2 = (color_0 + color_1) / 2;    
    color_3 = transparent;    

}

Karıştırmadan önce saydamlık pikselinin RGBA bileşenlerini sıfır olarak ayarlamanız önerilir.

Aşağıdaki tablolarda 8 baytlık bloğun bellek düzeni gösterilmektedir. İlk dizinin y koordinatını, ikinci dizinin ise x koordinatını ifade ettiğini varsayılır. Örneğin, Texel[1][2] (x,y) = (2,1) konumundaki doku haritası pikselini ifade eder.

Bu tablo, 8 baytlık (64 bit) bloğun bellek düzenini içerir.

Word adresi 16 bit sözcük
0 Color_0
1 Color_1
2 Bit Eşlem Word_0
3 Bit Eşlem Word_1

 

Color_0 ve Color_1, iki uç noktadaki renkler aşağıdaki gibi düzenlenmiştir:

Bit Renk
4:0 (LSB*) Mavi renk bileşeni
10:5 Yeşil renk bileşeni
15:11 Kırmızı renk bileşeni

 

*en az önemli bit

Bit eşlem Word_0 aşağıdaki gibi düzenlenir:

Bit Texel
1:0 (LSB) Texel[0][0]
3:2 Texel[0][1]
5:4 Texel[0][2]
7:6 Texel[0][3]
9:8 Texel[1][0]
11:10 Texel[1][1]
13:12 Texel[1][2]
15:14 (MSB*) Texel[1][3]

 

*en önemli bit (MSB)

Bit eşlem Word_1 aşağıdaki gibi düzenlenir:

Bit Texel
1:0 (LSB) Texel[2][0]
3:2 Texel[2][1]
5:4 Texel[2][2]
7:6 Texel[2][3]
9:8 Texel[3][0]
11:10 Texel[3][1]
13:12 Texel[3][2]
15:14 (MSB) Texel[3][3]

 

Opak Renk Kodlama örneği

Opak kodlama örneği olarak, kırmızı ve siyah renklerin uçlarda olduğunu varsayalım. Kırmızı color_0 ve siyah color_1. Aralarında tekdüzen olarak dağıtılmış gradyanı oluşturan dört ilişkilendirilmiş renk vardır. 4x4 bit eşlem değerlerini belirlemek için aşağıdaki hesaplamalar kullanılır:

00 ? color_0
01 ? color_1
10 ? 2/3 color_0 + 1/3 color_1
11 ? 1/3 color_0 + 2/3 color_1

Bit eşlem daha sonra aşağıdaki diyagrama benzer.

Genişletilmiş bit eşlem düzenini gösteren Diyagramı.

Bu, aşağıdaki resimli renk serisine benzer.

Not

Bir görüntüde, sol üst kısımda piksel (0,0) görüntülenir.

 

Opak kodlanmış gradyançizimi

1 Bit Alfa Kodlama örneği

İşaretsiz 16 bit tamsayı (color_0) işaretsiz 16 bit tamsayıdan küçükse bu biçim seçilir color_1. Bu biçimin kullanılabileceğini gösteren örnek, mavi bir gökyüzüne karşı gösterilen ağaç üzerindeki yapraklardır. Bazı texel'ler saydam olarak işaretlenebilirken, yapraklar için hala üç yeşil ton mevcuttur. İki renk uçları düzeltir ve üçüncüsü de ilişkilendirilmiş bir renktir.

Aşağıdaki çizimde bu tür bir resim örneği verilmiştir.

1 bit alfa kodlamaçizimi

Görüntünün beyaz olarak gösterildiği yerde, texel saydam olarak kodlanır. Ayrıca saydam texel'lerin RGBA bileşenlerinin karıştırmadan önce sıfır olarak ayarlanması gerektiğini unutmayın.

Renkler ve saydamlık için bit eşlem kodlaması aşağıdaki hesaplamalar kullanılarak belirlenir.

00 ? color_0
01 ? color_1
10 ? 1/2 color_0 + 1/2 color_1
11   ?   Transparent

Bit eşlem daha sonra aşağıdaki diyagrama benzer.

Genişletilmiş bit eşlem düzenidiyagramı

sıkıştırılmış doku kaynaklarını