2012-05-16 116 views
0

我有一個3D紋理映射的問題。如果我有幾個2D紋理,並且我想用這些2D紋理構建3D紋理。我能做些什麼來將所有這些數據放在一起?函數glTexImage3D以一個參數const GLvoid * texels結束,這會導致紋理的數據。但是現在我有32個2D紋理,並且想要獲得3D紋理。怎麼做?如何在opengl和cg着色器中使用3d紋理?

第二個問題是關於圖像空間濾波方法。有沒有人知道它是什麼?我應該使用這種方法來確定紋理座標。

回答

0

但現在我有32個2D紋理,想要獲得3D紋理。怎麼做?

在程序中的某個位置上傳紋理。從你的問題,我認爲你已經使用glTexImage2D上傳它們。在紋理對象之間傳輸紋理數據非常困難,麻煩並且不夠穩健,因此要求如何將2D紋理結合到3D紋理中是有點過時的。

但是,你可以做得非常好,從一個接一個上傳到3D投票膠片塊的二維數據切片構建3D紋理。只需撥打glTexSubImage3D即可將每次通話都替換爲glTexImage2D。在上傳任何數據之前,您可以使用調用glTexImage3D和NULL指針作爲數據參數來初始化紋理(如果您使用的是OpenGL-4,也可以使用glTexStorage3D)。

1

你真的需要3D紋理嗎?也許更好的方法是有紋理陣列?

這裏是一個很好的信息:http://www.opengl.org/wiki/Array_Texture

它比3D紋理簡單一些使用我的想法。它們對於級聯陰影映射中的實例非常有用,其中每個級聯轉到紋理陣列中的不同元素。