2012-04-12 25 views
1

在OpenGL中,創建3D紋理之後,我們總是需要繪製代理幾何體(如GL_QUADS)以包含3D紋理,並在此函數中設置紋理座標:glTexCoord3f。然而,當我在CUDA中使用3D紋理時,我從來沒有找到像glTexCoord3f這樣的函數來指出紋理座標。實際上,我們只是使用CUDA數組,然後將數組綁定到紋理。之後,我們可以使用紋理獲取函數tex3D來獲取值。在CUDA中使用3D紋理時,爲什麼我們不需要設置紋理座標?

因此,我很困惑,即使我們從未設置紋理座標之前,tex3D函數如何正確運行?

感謝您的回答。

回答

2

紋理座標是獲取函數的輸入參數。

更詳細地說,在OpenGL中,當您調用glTexCoord3f()時,它指定了下一個發出頂點的紋理座標。渲染多邊形每個像素處的紋理座標都是從多邊形頂點處指定的紋理座標(通常是三角形)內插而來的。

在CUDA中,沒有多邊形或座標插值的概念。相反,每個線程負責計算(或加載)其紋理座標,併爲每次獲取明確指定它們。這是tex3D()進來的地方。

請注意,如果您使用GLSL像素着色器遮蔽OpenGL中的多邊形,則實際上會做一些與CUDA非常相似的事情 - 您明確調用紋理獲取函數並傳遞座標。這些座標可以任意計算。區別在於您可以選擇使用在每個像素處插值的輸入座標。 (你可以把每個像素看作是一個線程!)