2010-10-11 81 views
2

我目前正在研究某種虛擬紋理實現。 mipmap級別用作詳細級別的控制結構。 (虛擬紋理中的每個紋理元素都與「真實」紋理中的數據塊有關)。是否可以使用自定義mipmap大小?

數據以幾個細節級別存在,導致虛擬紋理中的塊數不同。

例子:

level  size of data  number of blocks 
0   60     4 
1   30     2 
2   15     1 

我的想法是要求glTexImage每一個細節層次的虛擬組織,製作出不同的紋理貼圖的水平。

問題是,雖然創建或更新/加載時沒有錯誤,但我無法從紋理中獲取任何數據。只創建基本級別並調用glGenerateMipmap可以正常工作,但會導致某些基本大小的大小錯誤。 (在技術上他們是正確的,但不是在我的情況)

我讀的地方,mipmap級別的大小必須是由兩個(或兩個和地板)除法。

的問題:

  • 是否有可能加載 '自定義' 紋理貼圖的水平?
  • 是否有任何限制mipmap級別的大小?
+0

我不確定我是否明確了自己的觀點......但目前我無法找到更好的詞來形容我的問題。我希望你能理解我;)並請詢問是否需要更多信息。 – fho 2010-10-11 12:24:00

回答

5

您可以加載自定義mipmap級別,但無法選擇其大小。 OpenGL指定了它所期望的級別的MipMap大小,並且不允許偏離它。

以寬度爲例,mipmap級別i所需的寬度爲max(1, floor(w_b/2^i)),其中w_b爲第一個mip級別(基礎)的寬度。其他維度(GL規範2.1,第3.8.8節,段映射)也是如此。

+0

我只是(重新)閱讀ARB_texture_non_power_of_two的規範。它指出:「請注意,此擴展與支持其他[舍入]規則兼容,因爲它只是放鬆了mipmap的錯誤和完整性條件。」 基於這一點,我會說繞到任何一方應該是可能的。 – fho 2010-10-11 13:56:47

+0

@弗洛裏安,你讀的只是說,擴展是專門寫入,不阻止進一步擴展。但是之前的整個頁面解釋了爲什麼_floor_被選中(請閱讀該問題的第一段)。規範部分(而不是問題列表)僅將樓層列爲公式。 – Bahbar 2010-10-11 14:10:18

+0

好的...比我必須重做一些東西... *嘆* – fho 2010-10-11 14:33:35

0

確保您將mipmap級別一直加載到1x1。見here

+0

剛剛嘗試過......但它仍然給我空白屏幕。 (13,16,8),(6,8,4),(3,4,2),(1,2,1),(1),(1),(2),(3) ,1,1) me生成的Mipmap大小: (26,32,16),(13,16,8),(7,8,4),(4,4,2),(2,2, 1),(1,1,1) 請注意,在某些情況下我必須進行四捨五入。這是因爲原始數據。 – fho 2010-10-11 13:15:13

+0

原始數據集:406,512,256; 203,256,128; 101,128,64; 50,64,32; 25,32,16; 12,16,8; 6,8,4; 3,4,2; 1,2,1 ; 1,1,1 這些是正確的分水嶺和地板大小。但除以塊大小會產生一些隨機舍入:/ – fho 2010-10-11 13:20:57

相關問題