DDS相關文章摘錄

2022-07-31 16:36:12 字數 1721 閱讀 7084

記錄些有關看到的dds的資料

*摘自雲風部落格的

這兩天在寫 dds 格式的解碼程式。dds 是微軟為 directx 開發的一種格式,msdn 上可以查到其檔案格式說明:dds file reference 。

其中的 dxt 壓縮格式,現在已經為絕大多數 3d 顯示卡硬體所支援。(它使用了由 s3 公司所發明的一種有損圖象壓縮演算法。btw, 在我的那本書中,p232 有所提及)。dxt 格式 也叫作 s3tc ,現在可以被流行看圖軟體直接顯示的圖象格式中,只有 .dds 檔案支援這種壓縮。為了開發方便,我們的引擎也就支援了 .dds 檔案的載入。

一起做引擎的同事希望即使在硬體不支援的時候,我們也能正常載入並使用貼圖,所以便有了對 dxt 軟解碼的需求。

好在以前研究過一些,寫起來也不麻煩。

dxt1 支援 1 bit 的 alpha 通道。這個其實是可選的。每個 4x4 的塊可以根據需要有或沒有這個透明通道。不需要 alpha 通道時,每個塊可以有四種顏色(其中兩個是插值得到的);需要 alpha 通道時,則只能有三種顏色,11 被保留用來描述透明的點。區分是否用通道,要根據每個塊開始的兩個高彩顏色值:color_0color_1。如果 color_0 在數值上(當作無符號短整型)大於color_1則沒有通道。

對於軟解碼程式,更需要知道這一資訊。因為帶通道時,我們需要把資料解碼成 rgba5551 的格式;而不帶通道時,則需要解碼成 rgb565 格式。

一開始我以為需要掃瞄整個資料段,檢查是否至少有乙個塊的color_0小於等於color_1。實際看了幾個用工具生成的 dds 檔案才發現自己錯了。nvidia 的 dxt tools 壓縮 dxt1 時,需要手動指明是否需要 1 bit 的通道。如果你指定不帶通道,那麼每個 4x4 資料塊頭上的兩個調色盤顏色值的大小次序是無關的(這樣做,由於插值方案的差異,有可能得到更好一點的圖象質量)。也就是說,只有壓縮的人知道上是否有通道,而檔案頭上並無記錄。

dxt3 就是在 dxt1 的基礎上,增加了 4bit 的 alpha 通道,每個 4x4 塊多用了 64bit 來儲存這些 alpha 通道資訊。(資料儲存時,在每個資料塊中,alpha 通道資訊放在顏色資訊的前面)

dxt5 對 alpha 通道的儲存作了改進,有點意思,值得一提 :d 。它依舊用 64bit 儲存 16 個 alpha 資訊。前面 2 個位元組(16bit)儲存了當前塊的最大 alpha 值和最小 alpha 值。接下來的 48 bit ,每個畫素占用 3bit 空間,剛好描述 4x4 個畫素。

alpha_0大於alpha_1時,我們後面的 3bit 可以表示 8 級的插值;反之則保留 110 和 111 分別表示 alpha 為 0 和 255 的情況,中間可以有 6 級過度的插值。

關於 dxt3 和 dxt5 的壓縮演算法,在 msdn 上也可以找到詳細的文章:textures with alpha channels

b = color[index & 0x03].b; g = color[index & 0x03].g; r = color[index & 0x03].r; if (fmt_s3tc_dxt1 == fmtsrc)

判斷alpha通道是否存在的依據

*摘自外文的鏈結

至於 dxt2 和 dxt4 實際用的不多,從資料壓縮演算法上來講,它們完全等同於 dxt3 和 dxt5 。區別只在於顏色資料是否經過 alpha 預乘。

DDS格式介紹及相關工具

dds是directdraw su ce的縮寫,它是directx紋理壓縮 directx texture compression,簡稱dxtc 的產物。dxtc減少了紋理記憶體消耗的50 甚至更多,有3種dxtc的格式可供使用,分別是dxt1,dxt3和dxt5。dxt1 壓縮比例 1 8 壓縮比...

WinRar相關文章

類別 伺服器 軟體 瀏覽 1186 2007 4 3 10 37 00 rem 解釋 rar檔案 壓縮 包括子資料夾 採用儲存壓縮模式 排除 bak檔案 排除 rar檔案 對所有的回答選擇是 到yyy.rar裡 滿足什麼條件 多個條件用空格隔開 還有乙個比較xx的例子 把在肉機上所有聊天記錄打包 c...

wifidog openwrt相關文章

1,2,openwrt下實現portal認證 web認證 3,wiki 4,openwrt使用wifidog實現強制認證的wifi熱點 5,wifidog english 6,hotspot builder utility安裝指南 7,openwrt wifidog wiwiz 安裝 8,openw...